From 5f3cbf1edd60e8bfd8f2866b50fc658939141bde Mon Sep 17 00:00:00 2001
From: Vincent Massaro
Date: Mon, 23 Sep 2024 22:17:30 -0400
Subject: [PATCH 01/26] feat: update semantic-release to ^24
---
package-lock.json | 1004 ++++++++++++++++++---------------------------
package.json | 7 +-
2 files changed, 405 insertions(+), 606 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 40a6a2cc7..fb07efac8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
},
"devDependencies": {
"@yalesites-org/eslint-config-and-other-formatting": "^1.5.4",
- "semantic-release": "^23.0.8"
+ "semantic-release": "^24.1.1"
}
},
"node_modules/@babel/code-frame": {
@@ -802,15 +802,24 @@
"node": ">=12"
}
},
+ "node_modules/@sec-ant/readable-stream": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+ "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@semantic-release/commit-analyzer": {
- "version": "12.0.0",
- "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-12.0.0.tgz",
- "integrity": "sha512-qG+md5gdes+xa8zP7lIo1fWE17zRdO8yMCaxh9lyL65TQleoSv8WHHOqRURfghTytUh+NpkSyBprQ5hrkxOKVQ==",
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.0.tgz",
+ "integrity": "sha512-KtXWczvTAB1ZFZ6B4O+w8HkfYm/OgQb1dUGNFZtDgQ0csggrmkq8sTxhd+lwGF8kMb59/RnG9o4Tn7M/I8dQ9Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "conventional-changelog-angular": "^7.0.0",
- "conventional-commits-filter": "^4.0.0",
- "conventional-commits-parser": "^5.0.0",
+ "conventional-changelog-angular": "^8.0.0",
+ "conventional-changelog-writer": "^8.0.0",
+ "conventional-commits-filter": "^5.0.0",
+ "conventional-commits-parser": "^6.0.0",
"debug": "^4.0.0",
"import-from-esm": "^1.0.3",
"lodash-es": "^4.17.21",
@@ -824,75 +833,42 @@
}
},
"node_modules/@semantic-release/commit-analyzer/node_modules/conventional-changelog-angular": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz",
- "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz",
+ "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"compare-func": "^2.0.0"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-parser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz",
- "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz",
+ "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-text-path": "^2.0.0",
- "JSONStream": "^1.3.5",
- "meow": "^12.0.1",
- "split2": "^4.0.0"
+ "meow": "^13.0.0"
},
"bin": {
- "conventional-commits-parser": "cli.mjs"
+ "conventional-commits-parser": "dist/cli/index.js"
},
"engines": {
- "node": ">=16"
- }
- },
- "node_modules/@semantic-release/commit-analyzer/node_modules/is-text-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz",
- "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==",
- "dev": true,
- "dependencies": {
- "text-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
"node_modules/@semantic-release/commit-analyzer/node_modules/meow": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
- "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
- "dev": true,
- "engines": {
- "node": ">=16.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@semantic-release/commit-analyzer/node_modules/split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "dev": true,
- "engines": {
- "node": ">= 10.x"
- }
- },
- "node_modules/@semantic-release/commit-analyzer/node_modules/text-extensions": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz",
- "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==",
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -1265,21 +1241,22 @@
}
},
"node_modules/@semantic-release/release-notes-generator": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-13.0.0.tgz",
- "integrity": "sha512-LEeZWb340keMYuREMyxrODPXJJ0JOL8D/mCl74B4LdzbxhtXV2LrPN2QBEcGJrlQhoqLO0RhxQb6masHytKw+A==",
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-14.0.1.tgz",
+ "integrity": "sha512-K0w+5220TM4HZTthE5dDpIuFrnkN1NfTGPidJFm04ULT1DEZ9WG89VNXN7F0c+6nMEpWgqmPvb7vY7JkB2jyyA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "conventional-changelog-angular": "^7.0.0",
- "conventional-changelog-writer": "^7.0.0",
- "conventional-commits-filter": "^4.0.0",
- "conventional-commits-parser": "^5.0.0",
+ "conventional-changelog-angular": "^8.0.0",
+ "conventional-changelog-writer": "^8.0.0",
+ "conventional-commits-filter": "^5.0.0",
+ "conventional-commits-parser": "^6.0.0",
"debug": "^4.0.0",
"get-stream": "^7.0.0",
"import-from-esm": "^1.0.3",
"into-stream": "^7.0.0",
"lodash-es": "^4.17.21",
- "read-pkg-up": "^11.0.0"
+ "read-package-up": "^11.0.0"
},
"engines": {
"node": ">=20.8.1"
@@ -1289,33 +1266,32 @@
}
},
"node_modules/@semantic-release/release-notes-generator/node_modules/conventional-changelog-angular": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz",
- "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz",
+ "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"compare-func": "^2.0.0"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/@semantic-release/release-notes-generator/node_modules/conventional-commits-parser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz",
- "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz",
+ "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-text-path": "^2.0.0",
- "JSONStream": "^1.3.5",
- "meow": "^12.0.1",
- "split2": "^4.0.0"
+ "meow": "^13.0.0"
},
"bin": {
- "conventional-commits-parser": "cli.mjs"
+ "conventional-commits-parser": "dist/cli/index.js"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": {
@@ -1323,6 +1299,7 @@
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz",
"integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=16"
},
@@ -1330,113 +1307,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@semantic-release/release-notes-generator/node_modules/hosted-git-info": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
- "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^10.0.1"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
- "node_modules/@semantic-release/release-notes-generator/node_modules/is-text-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz",
- "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==",
- "dev": true,
- "dependencies": {
- "text-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@semantic-release/release-notes-generator/node_modules/lru-cache": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
- "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
- },
"node_modules/@semantic-release/release-notes-generator/node_modules/meow": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
- "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
"dev": true,
- "engines": {
- "node": ">=16.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@semantic-release/release-notes-generator/node_modules/normalize-package-data": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz",
- "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==",
- "dev": true,
- "dependencies": {
- "hosted-git-info": "^7.0.0",
- "is-core-module": "^2.8.1",
- "semver": "^7.3.5",
- "validate-npm-package-license": "^3.0.4"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
- "node_modules/@semantic-release/release-notes-generator/node_modules/parse-json": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz",
- "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "index-to-position": "^0.1.2",
- "type-fest": "^4.7.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@semantic-release/release-notes-generator/node_modules/read-pkg": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
- "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
- "dev": true,
- "dependencies": {
- "@types/normalize-package-data": "^2.4.3",
- "normalize-package-data": "^6.0.0",
- "parse-json": "^8.0.0",
- "type-fest": "^4.6.0",
- "unicorn-magic": "^0.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@semantic-release/release-notes-generator/node_modules/read-pkg-up": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-11.0.0.tgz",
- "integrity": "sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==",
- "deprecated": "Renamed to read-package-up",
- "dev": true,
- "dependencies": {
- "find-up-simple": "^1.0.0",
- "read-pkg": "^9.0.0",
- "type-fest": "^4.6.0"
- },
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -1444,39 +1320,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@semantic-release/release-notes-generator/node_modules/split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "dev": true,
- "engines": {
- "node": ">= 10.x"
- }
- },
- "node_modules/@semantic-release/release-notes-generator/node_modules/text-extensions": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz",
- "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@semantic-release/release-notes-generator/node_modules/type-fest": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz",
- "integrity": "sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==",
- "dev": true,
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@sindresorhus/is": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
@@ -1815,6 +1658,13 @@
"integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==",
"inBundle": true
},
+ "node_modules/@types/semver": {
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/source-list-map": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz",
@@ -4607,57 +4457,44 @@
}
},
"node_modules/conventional-changelog-writer": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-7.0.1.tgz",
- "integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.0.0.tgz",
+ "integrity": "sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "conventional-commits-filter": "^4.0.0",
+ "@types/semver": "^7.5.5",
+ "conventional-commits-filter": "^5.0.0",
"handlebars": "^4.7.7",
- "json-stringify-safe": "^5.0.1",
- "meow": "^12.0.1",
- "semver": "^7.5.2",
- "split2": "^4.0.0"
+ "meow": "^13.0.0",
+ "semver": "^7.5.2"
},
"bin": {
- "conventional-changelog-writer": "cli.mjs"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/conventional-changelog-writer/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
+ "conventional-changelog-writer": "dist/cli/index.js"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
}
},
"node_modules/conventional-changelog-writer/node_modules/meow": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
- "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=16.10"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/conventional-changelog-writer/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -4665,28 +4502,14 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-writer/node_modules/split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "dev": true,
- "engines": {
- "node": ">= 10.x"
- }
- },
- "node_modules/conventional-changelog-writer/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/conventional-commits-filter": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz",
- "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz",
+ "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/conventional-commits-parser": {
@@ -7985,6 +7808,7 @@
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
"integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"minimist": "^1.2.5",
"neo-async": "^2.6.2",
@@ -9214,6 +9038,7 @@
"resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-1.3.4.tgz",
"integrity": "sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"debug": "^4.3.4",
"import-meta-resolve": "^4.0.0"
@@ -9236,6 +9061,7 @@
"resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
"integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==",
"dev": true,
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -9328,6 +9154,7 @@
"resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz",
"integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"from2": "^2.3.0",
"p-is-promise": "^3.0.0"
@@ -10074,12 +9901,6 @@
"dev": true,
"peer": true
},
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
- "dev": true
- },
"node_modules/json5": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
@@ -10111,13 +9932,15 @@
"dev": true,
"engines": [
"node >= 0.2.0"
- ]
+ ],
+ "peer": true
},
"node_modules/JSONStream": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
"integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"jsonparse": "^1.2.0",
"through": ">=2.2.7 <3"
@@ -14697,6 +14520,7 @@
"resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz",
"integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -14878,6 +14702,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/parse-ms": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
+ "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/parse-passwd": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
@@ -15695,6 +15532,22 @@
"node": ">=6.0.0"
}
},
+ "node_modules/pretty-ms": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz",
+ "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parse-ms": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -16627,27 +16480,28 @@
"inBundle": true
},
"node_modules/semantic-release": {
- "version": "23.0.8",
- "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-23.0.8.tgz",
- "integrity": "sha512-yZkuWcTTfh5h/DrR4Q4QvJSARJdb6wjwn/sN0qKMYEkvwaVFek8YWfrgtL8oWaRdl0fLte0Y1wWMzLbwoaII1g==",
+ "version": "24.1.1",
+ "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.1.1.tgz",
+ "integrity": "sha512-4Ax2GxD411jUe9IdhOjMLuN+6wAj+aKjvOGngByrpD/iKL+UKN/2puQglhyI4gxNyy9XzEBMzBwbqpnEwbXGEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@semantic-release/commit-analyzer": "^12.0.0",
+ "@semantic-release/commit-analyzer": "^13.0.0-beta.1",
"@semantic-release/error": "^4.0.0",
"@semantic-release/github": "^10.0.0",
"@semantic-release/npm": "^12.0.0",
- "@semantic-release/release-notes-generator": "^13.0.0",
+ "@semantic-release/release-notes-generator": "^14.0.0-beta.1",
"aggregate-error": "^5.0.0",
"cosmiconfig": "^9.0.0",
"debug": "^4.0.0",
"env-ci": "^11.0.0",
- "execa": "^8.0.0",
+ "execa": "^9.0.0",
"figures": "^6.0.0",
"find-versions": "^6.0.0",
"get-stream": "^6.0.0",
"git-log-parser": "^1.2.0",
"hook-std": "^3.0.0",
- "hosted-git-info": "^7.0.0",
+ "hosted-git-info": "^8.0.0",
"import-from-esm": "^1.3.1",
"lodash-es": "^4.17.21",
"marked": "^12.0.0",
@@ -16669,6 +16523,19 @@
"node": ">=20.8.1"
}
},
+ "node_modules/semantic-release/node_modules/@sindresorhus/merge-streams": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+ "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/semantic-release/node_modules/cosmiconfig": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
@@ -16696,35 +16563,44 @@
}
},
"node_modules/semantic-release/node_modules/execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-9.4.0.tgz",
+ "integrity": "sha512-yKHlle2YGxZE842MERVIplWwNH5VYmqqcPFgtnlU//K8gxuFFXu0pwd/CrfXTumFpeEiufsP7+opT/bPJa1yVw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
+ "@sindresorhus/merge-streams": "^4.0.0",
"cross-spawn": "^7.0.3",
- "get-stream": "^8.0.1",
- "human-signals": "^5.0.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
+ "figures": "^6.1.0",
+ "get-stream": "^9.0.0",
+ "human-signals": "^8.0.0",
+ "is-plain-obj": "^4.1.0",
+ "is-stream": "^4.0.1",
+ "npm-run-path": "^6.0.0",
+ "pretty-ms": "^9.0.0",
"signal-exit": "^4.1.0",
- "strip-final-newline": "^3.0.0"
+ "strip-final-newline": "^4.0.0",
+ "yoctocolors": "^2.0.0"
},
"engines": {
- "node": ">=16.17"
+ "node": "^18.19.0 || >=20.5.0"
},
"funding": {
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
"node_modules/semantic-release/node_modules/execa/node_modules/get-stream": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
- "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+ "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sec-ant/readable-stream": "^0.4.1",
+ "is-stream": "^4.0.1"
+ },
"engines": {
- "node": ">=16"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -16762,84 +16638,73 @@
}
},
"node_modules/semantic-release/node_modules/hosted-git-info": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
- "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.0.tgz",
+ "integrity": "sha512-4nw3vOVR+vHUOT8+U4giwe2tcGv+R3pwwRidUe67DoMBTjhrfr6rZYJVVwdkBE+Um050SG+X9tf0Jo4fOpn01w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"lru-cache": "^10.0.1"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
}
},
"node_modules/semantic-release/node_modules/human-signals": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
- "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz",
+ "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
- "node": ">=16.17.0"
+ "node": ">=18.18.0"
}
},
- "node_modules/semantic-release/node_modules/is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "node_modules/semantic-release/node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/semantic-release/node_modules/lru-cache": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
- "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
- },
- "node_modules/semantic-release/node_modules/mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "node_modules/semantic-release/node_modules/is-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+ "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/semantic-release/node_modules/npm-run-path": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
- "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "node_modules/semantic-release/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true,
- "dependencies": {
- "path-key": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "license": "ISC"
},
- "node_modules/semantic-release/node_modules/onetime": {
+ "node_modules/semantic-release/node_modules/npm-run-path": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz",
+ "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "mimic-fn": "^4.0.0"
+ "path-key": "^4.0.0",
+ "unicorn-magic": "^0.3.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -16862,6 +16727,7 @@
"resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
"integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -16886,6 +16752,7 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=14"
},
@@ -16894,12 +16761,26 @@
}
},
"node_modules/semantic-release/node_modules/strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+ "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/semantic-release/node_modules/unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -19948,10 +19829,11 @@
}
},
"node_modules/uglify-js": {
- "version": "3.17.4",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
- "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "version": "3.19.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
+ "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"optional": true,
"bin": {
"uglifyjs": "bin/uglifyjs"
@@ -20988,7 +20870,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/worker-farm": {
"version": "1.7.0",
@@ -21202,6 +21085,19 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
+ },
+ "node_modules/yoctocolors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz",
+ "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
}
},
"dependencies": {
@@ -21806,15 +21702,22 @@
"config-chain": "^1.1.11"
}
},
+ "@sec-ant/readable-stream": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+ "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+ "dev": true
+ },
"@semantic-release/commit-analyzer": {
- "version": "12.0.0",
- "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-12.0.0.tgz",
- "integrity": "sha512-qG+md5gdes+xa8zP7lIo1fWE17zRdO8yMCaxh9lyL65TQleoSv8WHHOqRURfghTytUh+NpkSyBprQ5hrkxOKVQ==",
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.0.tgz",
+ "integrity": "sha512-KtXWczvTAB1ZFZ6B4O+w8HkfYm/OgQb1dUGNFZtDgQ0csggrmkq8sTxhd+lwGF8kMb59/RnG9o4Tn7M/I8dQ9Q==",
"dev": true,
"requires": {
- "conventional-changelog-angular": "^7.0.0",
- "conventional-commits-filter": "^4.0.0",
- "conventional-commits-parser": "^5.0.0",
+ "conventional-changelog-angular": "^8.0.0",
+ "conventional-changelog-writer": "^8.0.0",
+ "conventional-commits-filter": "^5.0.0",
+ "conventional-commits-parser": "^6.0.0",
"debug": "^4.0.0",
"import-from-esm": "^1.0.3",
"lodash-es": "^4.17.21",
@@ -21822,51 +21725,27 @@
},
"dependencies": {
"conventional-changelog-angular": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz",
- "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz",
+ "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==",
"dev": true,
"requires": {
"compare-func": "^2.0.0"
}
},
"conventional-commits-parser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz",
- "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==",
- "dev": true,
- "requires": {
- "is-text-path": "^2.0.0",
- "JSONStream": "^1.3.5",
- "meow": "^12.0.1",
- "split2": "^4.0.0"
- }
- },
- "is-text-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz",
- "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz",
+ "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==",
"dev": true,
"requires": {
- "text-extensions": "^2.0.0"
+ "meow": "^13.0.0"
}
},
"meow": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
- "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
- "dev": true
- },
- "split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "dev": true
- },
- "text-extensions": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz",
- "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==",
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
"dev": true
}
}
@@ -22115,42 +21994,39 @@
}
},
"@semantic-release/release-notes-generator": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-13.0.0.tgz",
- "integrity": "sha512-LEeZWb340keMYuREMyxrODPXJJ0JOL8D/mCl74B4LdzbxhtXV2LrPN2QBEcGJrlQhoqLO0RhxQb6masHytKw+A==",
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-14.0.1.tgz",
+ "integrity": "sha512-K0w+5220TM4HZTthE5dDpIuFrnkN1NfTGPidJFm04ULT1DEZ9WG89VNXN7F0c+6nMEpWgqmPvb7vY7JkB2jyyA==",
"dev": true,
"requires": {
- "conventional-changelog-angular": "^7.0.0",
- "conventional-changelog-writer": "^7.0.0",
- "conventional-commits-filter": "^4.0.0",
- "conventional-commits-parser": "^5.0.0",
+ "conventional-changelog-angular": "^8.0.0",
+ "conventional-changelog-writer": "^8.0.0",
+ "conventional-commits-filter": "^5.0.0",
+ "conventional-commits-parser": "^6.0.0",
"debug": "^4.0.0",
"get-stream": "^7.0.0",
"import-from-esm": "^1.0.3",
"into-stream": "^7.0.0",
"lodash-es": "^4.17.21",
- "read-pkg-up": "^11.0.0"
+ "read-package-up": "^11.0.0"
},
"dependencies": {
"conventional-changelog-angular": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz",
- "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz",
+ "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==",
"dev": true,
"requires": {
"compare-func": "^2.0.0"
}
},
"conventional-commits-parser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz",
- "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz",
+ "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==",
"dev": true,
"requires": {
- "is-text-path": "^2.0.0",
- "JSONStream": "^1.3.5",
- "meow": "^12.0.1",
- "split2": "^4.0.0"
+ "meow": "^13.0.0"
}
},
"get-stream": {
@@ -22159,99 +22035,10 @@
"integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==",
"dev": true
},
- "hosted-git-info": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
- "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
- "dev": true,
- "requires": {
- "lru-cache": "^10.0.1"
- }
- },
- "is-text-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz",
- "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==",
- "dev": true,
- "requires": {
- "text-extensions": "^2.0.0"
- }
- },
- "lru-cache": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
- "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
- "dev": true
- },
"meow": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
- "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
- "dev": true
- },
- "normalize-package-data": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz",
- "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^7.0.0",
- "is-core-module": "^2.8.1",
- "semver": "^7.3.5",
- "validate-npm-package-license": "^3.0.4"
- }
- },
- "parse-json": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz",
- "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.22.13",
- "index-to-position": "^0.1.2",
- "type-fest": "^4.7.1"
- }
- },
- "read-pkg": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
- "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
- "dev": true,
- "requires": {
- "@types/normalize-package-data": "^2.4.3",
- "normalize-package-data": "^6.0.0",
- "parse-json": "^8.0.0",
- "type-fest": "^4.6.0",
- "unicorn-magic": "^0.1.0"
- }
- },
- "read-pkg-up": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-11.0.0.tgz",
- "integrity": "sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==",
- "dev": true,
- "requires": {
- "find-up-simple": "^1.0.0",
- "read-pkg": "^9.0.0",
- "type-fest": "^4.6.0"
- }
- },
- "split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "dev": true
- },
- "text-extensions": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz",
- "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==",
- "dev": true
- },
- "type-fest": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz",
- "integrity": "sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==",
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
"dev": true
}
}
@@ -22520,6 +22307,12 @@
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz",
"integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw=="
},
+ "@types/semver": {
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+ "dev": true
+ },
"@types/source-list-map": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz",
@@ -24579,61 +24372,36 @@
}
},
"conventional-changelog-writer": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-7.0.1.tgz",
- "integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.0.0.tgz",
+ "integrity": "sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==",
"dev": true,
"requires": {
- "conventional-commits-filter": "^4.0.0",
+ "@types/semver": "^7.5.5",
+ "conventional-commits-filter": "^5.0.0",
"handlebars": "^4.7.7",
- "json-stringify-safe": "^5.0.1",
- "meow": "^12.0.1",
- "semver": "^7.5.2",
- "split2": "^4.0.0"
+ "meow": "^13.0.0",
+ "semver": "^7.5.2"
},
"dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
"meow": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
- "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
"dev": true
},
"semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "dev": true
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
},
"conventional-commits-filter": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz",
- "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz",
+ "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==",
"dev": true
},
"conventional-commits-parser": {
@@ -28450,12 +28218,6 @@
"dev": true,
"peer": true
},
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
- "dev": true
- },
"json5": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
@@ -28478,13 +28240,15 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
"integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"JSONStream": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
"integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
"dev": true,
+ "peer": true,
"requires": {
"jsonparse": "^1.2.0",
"through": ">=2.2.7 <3"
@@ -31780,6 +31544,12 @@
"lines-and-columns": "^1.1.6"
}
},
+ "parse-ms": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
+ "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+ "dev": true
+ },
"parse-passwd": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
@@ -32361,6 +32131,15 @@
"fast-diff": "^1.1.2"
}
},
+ "pretty-ms": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz",
+ "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==",
+ "dev": true,
+ "requires": {
+ "parse-ms": "^4.0.0"
+ }
+ },
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -33027,27 +32806,27 @@
}
},
"semantic-release": {
- "version": "23.0.8",
- "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-23.0.8.tgz",
- "integrity": "sha512-yZkuWcTTfh5h/DrR4Q4QvJSARJdb6wjwn/sN0qKMYEkvwaVFek8YWfrgtL8oWaRdl0fLte0Y1wWMzLbwoaII1g==",
+ "version": "24.1.1",
+ "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.1.1.tgz",
+ "integrity": "sha512-4Ax2GxD411jUe9IdhOjMLuN+6wAj+aKjvOGngByrpD/iKL+UKN/2puQglhyI4gxNyy9XzEBMzBwbqpnEwbXGEg==",
"dev": true,
"requires": {
- "@semantic-release/commit-analyzer": "^12.0.0",
+ "@semantic-release/commit-analyzer": "^13.0.0-beta.1",
"@semantic-release/error": "^4.0.0",
"@semantic-release/github": "^10.0.0",
"@semantic-release/npm": "^12.0.0",
- "@semantic-release/release-notes-generator": "^13.0.0",
+ "@semantic-release/release-notes-generator": "^14.0.0-beta.1",
"aggregate-error": "^5.0.0",
"cosmiconfig": "^9.0.0",
"debug": "^4.0.0",
"env-ci": "^11.0.0",
- "execa": "^8.0.0",
+ "execa": "^9.0.0",
"figures": "^6.0.0",
"find-versions": "^6.0.0",
"get-stream": "^6.0.0",
"git-log-parser": "^1.2.0",
"hook-std": "^3.0.0",
- "hosted-git-info": "^7.0.0",
+ "hosted-git-info": "^8.0.0",
"import-from-esm": "^1.3.1",
"lodash-es": "^4.17.21",
"marked": "^12.0.0",
@@ -33063,6 +32842,12 @@
"yargs": "^17.5.1"
},
"dependencies": {
+ "@sindresorhus/merge-streams": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+ "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+ "dev": true
+ },
"cosmiconfig": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
@@ -33076,27 +32861,34 @@
}
},
"execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-9.4.0.tgz",
+ "integrity": "sha512-yKHlle2YGxZE842MERVIplWwNH5VYmqqcPFgtnlU//K8gxuFFXu0pwd/CrfXTumFpeEiufsP7+opT/bPJa1yVw==",
"dev": true,
"requires": {
+ "@sindresorhus/merge-streams": "^4.0.0",
"cross-spawn": "^7.0.3",
- "get-stream": "^8.0.1",
- "human-signals": "^5.0.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
+ "figures": "^6.1.0",
+ "get-stream": "^9.0.0",
+ "human-signals": "^8.0.0",
+ "is-plain-obj": "^4.1.0",
+ "is-stream": "^4.0.1",
+ "npm-run-path": "^6.0.0",
+ "pretty-ms": "^9.0.0",
"signal-exit": "^4.1.0",
- "strip-final-newline": "^3.0.0"
+ "strip-final-newline": "^4.0.0",
+ "yoctocolors": "^2.0.0"
},
"dependencies": {
"get-stream": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
- "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
- "dev": true
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+ "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+ "dev": true,
+ "requires": {
+ "@sec-ant/readable-stream": "^0.4.1",
+ "is-stream": "^4.0.1"
+ }
}
}
},
@@ -33120,54 +32912,46 @@
}
},
"hosted-git-info": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
- "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.0.tgz",
+ "integrity": "sha512-4nw3vOVR+vHUOT8+U4giwe2tcGv+R3pwwRidUe67DoMBTjhrfr6rZYJVVwdkBE+Um050SG+X9tf0Jo4fOpn01w==",
"dev": true,
"requires": {
"lru-cache": "^10.0.1"
}
},
"human-signals": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
- "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz",
+ "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==",
"dev": true
},
- "is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
"dev": true
},
- "lru-cache": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
- "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+ "is-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+ "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
"dev": true
},
- "mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
"npm-run-path": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
- "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
- "dev": true,
- "requires": {
- "path-key": "^4.0.0"
- }
- },
- "onetime": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz",
+ "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
"dev": true,
"requires": {
- "mimic-fn": "^4.0.0"
+ "path-key": "^4.0.0",
+ "unicorn-magic": "^0.3.0"
}
},
"p-reduce": {
@@ -33195,9 +32979,15 @@
"dev": true
},
"strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+ "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
+ "dev": true
+ },
+ "unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
"dev": true
}
}
@@ -35397,9 +35187,9 @@
"peer": true
},
"uglify-js": {
- "version": "3.17.4",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
- "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "version": "3.19.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
+ "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
"dev": true,
"optional": true
},
@@ -36339,6 +36129,12 @@
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
"peer": true
+ },
+ "yoctocolors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz",
+ "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==",
+ "dev": true
}
}
}
diff --git a/package.json b/package.json
index 0b3317025..747d6713b 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
},
"devDependencies": {
"@yalesites-org/eslint-config-and-other-formatting": "^1.5.4",
- "semantic-release": "^23.0.8"
+ "semantic-release": "^24.1.1"
},
"lint-staged": {
"components/**/*.{js,scss,php}": [
@@ -32,5 +32,8 @@
},
"dependencies": {
"@yalesites-org/component-library-twig": "^1.44.0"
- }
+ },
+ "bundleDependencies": [
+ "@yalesites-org/component-library-twig"
+ ]
}
From 07db901872fdb305441affd2e24a2b84a0017718 Mon Sep 17 00:00:00 2001
From: Vincent Massaro
Date: Tue, 5 Nov 2024 12:09:13 -0500
Subject: [PATCH 02/26] chore: update to latest semantic-release
---
package-lock.json | 205 +++++++++++++++++++++++++++-------------------
1 file changed, 119 insertions(+), 86 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index fb07efac8..9646ef41a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -622,6 +622,7 @@
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz",
"integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 18"
}
@@ -631,6 +632,7 @@
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz",
"integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@octokit/auth-token": "^5.0.0",
"@octokit/graphql": "^8.0.0",
@@ -649,6 +651,7 @@
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz",
"integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@octokit/types": "^13.0.0",
"universal-user-agent": "^7.0.2"
@@ -662,6 +665,7 @@
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz",
"integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@octokit/request": "^9.0.0",
"@octokit/types": "^13.0.0",
@@ -675,15 +679,17 @@
"version": "22.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
"integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@octokit/plugin-paginate-rest": {
- "version": "11.3.0",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.0.tgz",
- "integrity": "sha512-n4znWfRinnUQF6TPyxs7EctSAA3yVSP4qlJP2YgI3g9d4Ae2n5F3XDOjbUluKRxPU3rfsgpOboI4O4VtPc6Ilg==",
+ "version": "11.3.5",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.5.tgz",
+ "integrity": "sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@octokit/types": "^13.5.0"
+ "@octokit/types": "^13.6.0"
},
"engines": {
"node": ">= 18"
@@ -693,10 +699,11 @@
}
},
"node_modules/@octokit/plugin-retry": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.1.1.tgz",
- "integrity": "sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.1.2.tgz",
+ "integrity": "sha512-XOWnPpH2kJ5VTwozsxGurw+svB2e61aWlmk5EVIYZPwFK5F9h4cyPyj9CIKRyMXMHSwpIsI3mPOdpMmrRhe7UQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@octokit/request-error": "^6.0.0",
"@octokit/types": "^13.0.0",
@@ -710,10 +717,11 @@
}
},
"node_modules/@octokit/plugin-throttling": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.3.0.tgz",
- "integrity": "sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w==",
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.3.2.tgz",
+ "integrity": "sha512-FqpvcTpIWFpMMwIeSoypoJXysSAQ3R+ALJhXXSG1HTP3YZOIeLmcNcimKaXxTcws+Sh6yoRl13SJ5r8sXc1Fhw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@octokit/types": "^13.0.0",
"bottleneck": "^2.15.3"
@@ -726,10 +734,11 @@
}
},
"node_modules/@octokit/request": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.1.tgz",
- "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==",
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.3.tgz",
+ "integrity": "sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@octokit/endpoint": "^10.0.0",
"@octokit/request-error": "^6.0.1",
@@ -741,10 +750,11 @@
}
},
"node_modules/@octokit/request-error": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.1.tgz",
- "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==",
+ "version": "6.1.5",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.5.tgz",
+ "integrity": "sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@octokit/types": "^13.0.0"
},
@@ -753,10 +763,11 @@
}
},
"node_modules/@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
+ "version": "13.6.1",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.1.tgz",
+ "integrity": "sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^22.2.0"
}
@@ -884,10 +895,11 @@
}
},
"node_modules/@semantic-release/github": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.0.3.tgz",
- "integrity": "sha512-nSJQboKrG4xBn7hHpRMrK8lt5DgqJg50ZMz9UbrsfTxuRk55XVoQEadbGZ2L9M0xZAC6hkuwkDhQJKqfPU35Fw==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-11.0.0.tgz",
+ "integrity": "sha512-Uon6G6gJD8U1JNvPm7X0j46yxNRJ8Ui6SgK4Zw5Ktu8RgjEft3BGn+l/RX1TTzhhO3/uUcKuqM+/9/ETFxWS/Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@octokit/core": "^6.0.0",
"@octokit/plugin-paginate-rest": "^11.0.0",
@@ -910,7 +922,7 @@
"node": ">=20.8.1"
},
"peerDependencies": {
- "semantic-release": ">=20.1.0"
+ "semantic-release": ">=24.1.0"
}
},
"node_modules/@semantic-release/github/node_modules/dir-glob": {
@@ -918,6 +930,7 @@
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-type": "^4.0.0"
},
@@ -926,10 +939,11 @@
}
},
"node_modules/@semantic-release/github/node_modules/globby": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz",
- "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==",
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz",
+ "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@sindresorhus/merge-streams": "^2.1.0",
"fast-glob": "^3.3.2",
@@ -950,6 +964,7 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
"integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -962,6 +977,7 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
"integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14.16"
},
@@ -1337,6 +1353,7 @@
"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
"integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -2036,6 +2053,7 @@
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
"integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"debug": "^4.3.4"
},
@@ -2649,7 +2667,8 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
"integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
- "dev": true
+ "dev": true,
+ "license": "Apache-2.0"
},
"node_modules/bem-twig-extension": {
"version": "0.1.1",
@@ -3308,7 +3327,8 @@
"version": "2.19.5",
"resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
"integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/brace-expansion": {
"version": "1.1.11",
@@ -8201,6 +8221,7 @@
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
"integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"agent-base": "^7.1.0",
"debug": "^4.3.4"
@@ -8216,10 +8237,11 @@
"inBundle": true
},
"node_modules/https-proxy-agent": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
- "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"agent-base": "^7.0.2",
"debug": "4"
@@ -9783,10 +9805,11 @@
}
},
"node_modules/issue-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.0.tgz",
- "integrity": "sha512-jgAw78HO3gs9UrKqJNQvfDj9Ouy8Mhu40fbEJ8yXff4MW8+/Fcn9iFjyWUQ6SKbX8ipPk3X5A3AyfYHRu6uVLw==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz",
+ "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lodash.capitalize": "^4.2.1",
"lodash.escaperegexp": "^4.1.2",
@@ -10288,25 +10311,29 @@
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz",
"integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.escaperegexp": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
"integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.map": {
"version": "4.6.0",
@@ -10332,7 +10359,8 @@
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
"integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/log-update": {
"version": "4.0.0",
@@ -11003,13 +11031,14 @@
"inBundle": true
},
"node_modules/mime": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.3.tgz",
- "integrity": "sha512-KgUb15Oorc0NEKPbvfa0wRU+PItIEZmiv+pyAO2i0oTIVTJhlzMclU7w4RXWQrSOVH5ax/p/CkIO7KI4OyFJTQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz",
+ "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==",
"dev": true,
"funding": [
"https://github.com/sponsors/broofa"
],
+ "license": "MIT",
"bin": {
"mime": "bin/cli.js"
},
@@ -14484,6 +14513,7 @@
"resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz",
"integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-map": "^7.0.1"
},
@@ -14499,6 +14529,7 @@
"resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz",
"integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -16480,15 +16511,15 @@
"inBundle": true
},
"node_modules/semantic-release": {
- "version": "24.1.1",
- "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.1.1.tgz",
- "integrity": "sha512-4Ax2GxD411jUe9IdhOjMLuN+6wAj+aKjvOGngByrpD/iKL+UKN/2puQglhyI4gxNyy9XzEBMzBwbqpnEwbXGEg==",
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.0.tgz",
+ "integrity": "sha512-fQfn6e/aYToRtVJYKqneFM1Rg3KP2gh3wSWtpYsLlz6uaPKlISrTzvYAFn+mYWo07F0X1Cz5ucU89AVE8X1mbg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@semantic-release/commit-analyzer": "^13.0.0-beta.1",
"@semantic-release/error": "^4.0.0",
- "@semantic-release/github": "^10.0.0",
+ "@semantic-release/github": "^11.0.0",
"@semantic-release/npm": "^12.0.0",
"@semantic-release/release-notes-generator": "^14.0.0-beta.1",
"aggregate-error": "^5.0.0",
@@ -19964,7 +19995,8 @@
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz",
"integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/universalify": {
"version": "2.0.1",
@@ -20095,6 +20127,7 @@
"resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz",
"integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
@@ -21609,18 +21642,18 @@
"dev": true
},
"@octokit/plugin-paginate-rest": {
- "version": "11.3.0",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.0.tgz",
- "integrity": "sha512-n4znWfRinnUQF6TPyxs7EctSAA3yVSP4qlJP2YgI3g9d4Ae2n5F3XDOjbUluKRxPU3rfsgpOboI4O4VtPc6Ilg==",
+ "version": "11.3.5",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.5.tgz",
+ "integrity": "sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==",
"dev": true,
"requires": {
- "@octokit/types": "^13.5.0"
+ "@octokit/types": "^13.6.0"
}
},
"@octokit/plugin-retry": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.1.1.tgz",
- "integrity": "sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.1.2.tgz",
+ "integrity": "sha512-XOWnPpH2kJ5VTwozsxGurw+svB2e61aWlmk5EVIYZPwFK5F9h4cyPyj9CIKRyMXMHSwpIsI3mPOdpMmrRhe7UQ==",
"dev": true,
"requires": {
"@octokit/request-error": "^6.0.0",
@@ -21629,9 +21662,9 @@
}
},
"@octokit/plugin-throttling": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.3.0.tgz",
- "integrity": "sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w==",
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.3.2.tgz",
+ "integrity": "sha512-FqpvcTpIWFpMMwIeSoypoJXysSAQ3R+ALJhXXSG1HTP3YZOIeLmcNcimKaXxTcws+Sh6yoRl13SJ5r8sXc1Fhw==",
"dev": true,
"requires": {
"@octokit/types": "^13.0.0",
@@ -21639,9 +21672,9 @@
}
},
"@octokit/request": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.1.tgz",
- "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==",
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.3.tgz",
+ "integrity": "sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==",
"dev": true,
"requires": {
"@octokit/endpoint": "^10.0.0",
@@ -21651,18 +21684,18 @@
}
},
"@octokit/request-error": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.1.tgz",
- "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==",
+ "version": "6.1.5",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.5.tgz",
+ "integrity": "sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==",
"dev": true,
"requires": {
"@octokit/types": "^13.0.0"
}
},
"@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
+ "version": "13.6.1",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.1.tgz",
+ "integrity": "sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==",
"dev": true,
"requires": {
"@octokit/openapi-types": "^22.2.0"
@@ -21757,9 +21790,9 @@
"dev": true
},
"@semantic-release/github": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.0.3.tgz",
- "integrity": "sha512-nSJQboKrG4xBn7hHpRMrK8lt5DgqJg50ZMz9UbrsfTxuRk55XVoQEadbGZ2L9M0xZAC6hkuwkDhQJKqfPU35Fw==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-11.0.0.tgz",
+ "integrity": "sha512-Uon6G6gJD8U1JNvPm7X0j46yxNRJ8Ui6SgK4Zw5Ktu8RgjEft3BGn+l/RX1TTzhhO3/uUcKuqM+/9/ETFxWS/Q==",
"dev": true,
"requires": {
"@octokit/core": "^6.0.0",
@@ -21790,9 +21823,9 @@
}
},
"globby": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz",
- "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==",
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz",
+ "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==",
"dev": true,
"requires": {
"@sindresorhus/merge-streams": "^2.1.0",
@@ -27072,9 +27105,9 @@
"integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg=="
},
"https-proxy-agent": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
- "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"requires": {
"agent-base": "^7.0.2",
@@ -28126,9 +28159,9 @@
}
},
"issue-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.0.tgz",
- "integrity": "sha512-jgAw78HO3gs9UrKqJNQvfDj9Ouy8Mhu40fbEJ8yXff4MW8+/Fcn9iFjyWUQ6SKbX8ipPk3X5A3AyfYHRu6uVLw==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz",
+ "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==",
"dev": true,
"requires": {
"lodash.capitalize": "^4.2.1",
@@ -29025,9 +29058,9 @@
}
},
"mime": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.3.tgz",
- "integrity": "sha512-KgUb15Oorc0NEKPbvfa0wRU+PItIEZmiv+pyAO2i0oTIVTJhlzMclU7w4RXWQrSOVH5ax/p/CkIO7KI4OyFJTQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz",
+ "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==",
"dev": true
},
"mime-db": {
@@ -32806,14 +32839,14 @@
}
},
"semantic-release": {
- "version": "24.1.1",
- "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.1.1.tgz",
- "integrity": "sha512-4Ax2GxD411jUe9IdhOjMLuN+6wAj+aKjvOGngByrpD/iKL+UKN/2puQglhyI4gxNyy9XzEBMzBwbqpnEwbXGEg==",
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.0.tgz",
+ "integrity": "sha512-fQfn6e/aYToRtVJYKqneFM1Rg3KP2gh3wSWtpYsLlz6uaPKlISrTzvYAFn+mYWo07F0X1Cz5ucU89AVE8X1mbg==",
"dev": true,
"requires": {
"@semantic-release/commit-analyzer": "^13.0.0-beta.1",
"@semantic-release/error": "^4.0.0",
- "@semantic-release/github": "^10.0.0",
+ "@semantic-release/github": "^11.0.0",
"@semantic-release/npm": "^12.0.0",
"@semantic-release/release-notes-generator": "^14.0.0-beta.1",
"aggregate-error": "^5.0.0",
From dee0c7914e22206ffaed07e6c6492c2025eb55fb Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Fri, 21 Jun 2024 18:45:01 +0000
Subject: [PATCH 03/26] build: commit compiled component library
---
.../component-library-twig/README.md | 129 +
.../breakpoints/breakpoints.stories.js | 11 +
.../00-tokens/breakpoints/breakpoints.twig | 34 +
.../00-tokens/colors/_color-basic-themes.scss | 16 +
.../colors/_color-component-themes.scss | 17 +
.../colors/_color-global-themes.scss | 14 +
.../00-tokens/colors/cl-colors.scss | 64 +
.../00-tokens/colors/color-basic-themes.twig | 33 +
.../color-component-theme-pairings.twig | 144 +
.../colors/color-global-theme-pairings.twig | 146 +
.../00-tokens/colors/color-global-themes.js | 14 +
.../00-tokens/colors/color-global-themes.twig | 43 +
.../00-tokens/colors/colors.stories.js | 403 +
.../components/00-tokens/colors/colors.twig | 31 +
.../00-tokens/effects/_effects.scss | 148 +
.../components/00-tokens/effects/borders.twig | 17 +
.../00-tokens/effects/cl-effects.scss | 63 +
.../00-tokens/effects/effects.stories.js | 32 +
.../components/00-tokens/effects/radii.twig | 22 +
.../components/00-tokens/effects/shadows.twig | 30 +
.../00-tokens/effects/yds-animate.js | 51 +
.../components/00-tokens/functions/_map.scss | 19 +
.../components/00-tokens/layout/_layout.scss | 138 +
.../00-tokens/layout/cl-layout.scss | 3 +
.../components/00-tokens/layout/yds-layout.js | 40 +
.../00-tokens/spacing/spacing.stories.js | 14 +
.../components/00-tokens/spacing/spacing.twig | 22 +
.../components/00-tokens/tokens.scss | 9 +
.../00-tokens/typography/_typography.scss | 162 +
.../00-tokens/typography/body-styles.twig | 19 +
.../00-tokens/typography/cl-typography.scss | 13 +
.../00-tokens/typography/heading-styles.twig | 25 +
.../00-tokens/typography/type-faces.twig | 15 +
.../00-tokens/typography/type-faces.yml | 34 +
.../00-tokens/typography/type-scale.twig | 14 +
.../typography/typography.stories.js | 30 +
.../00-tokens/utility/_utility.scss | 37 +
.../components/01-atoms/atoms.scss | 18 +
.../controls/base/yds-control-icon.twig | 30 +
.../01-atoms/controls/base/yds-control.twig | 37 +
.../01-atoms/controls/button/_yds-button.scss | 16 +
.../01-atoms/controls/control.stories.js | 407 +
.../controls/cta/_yds-cta-examples.twig | 5 +
.../01-atoms/controls/cta/_yds-cta.scss | 353 +
.../01-atoms/controls/cta/yds-cta.twig | 40 +
.../_yds-text-copy-button.scss | 51 +
.../text-copy-button/yds-text-copy-button.js | 35 +
.../yds-text-copy-button.twig | 33 +
.../controls/text-link/_yds-text-link.scss | 290 +
.../controls/text-link/yds-text-link.js | 49 +
.../controls/text-link/yds-text-link.twig | 59 +
.../01-atoms/date-time/_yds-date-time.scss | 6 +
.../01-atoms/date-time/yds-date-time.twig | 87 +
.../01-atoms/divider/_yds-divider.scss | 43 +
.../01-atoms/divider/cl-dividers.scss | 4 +
.../01-atoms/divider/divider.stories.js | 87 +
.../01-atoms/divider/yds-divider.twig | 40 +
.../components/01-atoms/forms/_input.twig | 13 +
.../components/01-atoms/forms/_textarea.twig | 24 +
.../components/01-atoms/forms/_yds-form.scss | 66 +
.../forms/checkbox/_yds-checkbox-item.twig | 5 +
.../forms/checkbox/_yds-checkbox.scss | 8 +
.../01-atoms/forms/checkbox/checkbox.yml | 6 +
.../01-atoms/forms/checkbox/yds-checkbox.twig | 15 +
.../01-atoms/forms/contact-form-example.twig | 21 +
.../01-atoms/forms/forms.stories.js | 26 +
.../01-atoms/forms/radio/_yds-radio-item.twig | 5 +
.../01-atoms/forms/radio/_yds-radio.scss | 8 +
.../components/01-atoms/forms/radio/radio.yml | 6 +
.../01-atoms/forms/radio/yds-radio.twig | 15 +
.../forms/select/_yds-select-item.twig | 1 +
.../01-atoms/forms/select/_yds-select.scss | 89 +
.../01-atoms/forms/select/select.yml | 6 +
.../01-atoms/forms/select/yds-select.twig | 18 +
.../forms/textfields/_yds-textfields.scss | 113 +
.../forms/textfields/yds-textfields.twig | 34 +
.../images/fa-icons/_yds-fa-icon.twig | 43 +
.../images/fa-icons/_yds-fa-icons.scss | 14 +
.../01-atoms/images/fa-icons/fa-icons.yml | 9 +
.../images/fa-icons/yds-fa-icons.twig | 11 +
.../01-atoms/images/icons/_yds-icon.twig | 40 +
.../01-atoms/images/icons/_yds-icons.scss | 3 +
.../01-atoms/images/icons/cl-icons.scss | 23 +
.../01-atoms/images/icons/yds-icons.twig | 10 +
.../01-atoms/images/image/_image.twig | 14 +
.../01-atoms/images/image/_picture.twig | 13 +
.../images/image/_responsive-image.twig | 32 +
.../01-atoms/images/image/_yds-image.scss | 47 +
.../01-atoms/images/image/cl-image.scss | 18 +
.../01-atoms/images/image/figure.yml | 5 +
.../01-atoms/images/image/image.yml | 37 +
.../01-atoms/images/image/yds-image.twig | 27 +
.../01-atoms/images/images.stories.js | 55 +
.../01-atoms/lists/_yds-list-item.twig | 35 +
.../components/01-atoms/lists/_yds-list.scss | 35 +
.../components/01-atoms/lists/list.stories.js | 19 +
.../components/01-atoms/lists/list.yml | 10 +
.../components/01-atoms/lists/yds-list.twig | 27 +
.../components/01-atoms/tables/_table.scss | 59 +
.../01-atoms/tables/example-tables.twig | 121 +
.../01-atoms/tables/table.stories.js | 9 +
.../typography/headings/_yds-headings.scss | 64 +
.../typography/headings/yds-heading.twig | 35 +
.../01-atoms/typography/text/_yds-text.scss | 116 +
.../01-atoms/typography/text/yds-text.js | 78 +
.../01-atoms/typography/text/yds-text.twig | 19 +
.../video-background.stories.js | 12 +
.../video-background/video-background.yml | 1 +
.../video-background/yds-video-background.js | 58 +
.../yds-video-background.scss | 156 +
.../yds-video-background.twig | 39 +
.../videos/video-embed/_yds-video-embed.scss | 31 +
.../videos/video-embed/video-embed.stories.js | 10 +
.../videos/video-embed/video-embed.yml | 1 +
.../videos/video-embed/yds-video-embed.twig | 18 +
.../accordion/_yds-accordion-item.twig | 48 +
.../accordion/_yds-accordion.scss | 125 +
.../accordion/accordion.stories.js | 66 +
.../02-molecules/accordion/accordion.yml | 3 +
.../02-molecules/accordion/yds-accordion.js | 233 +
.../02-molecules/accordion/yds-accordion.twig | 76 +
.../02-molecules/alert/_yds-alert.scss | 181 +
.../02-molecules/alert/alert.stories.js | 115 +
.../components/02-molecules/alert/alert.yml | 4 +
.../02-molecules/alert/yds-alert.js | 119 +
.../02-molecules/alert/yds-alert.twig | 87 +
.../banner/action/_yds-action-banner.scss | 352 +
.../banner/action/yds-action-banner.twig | 100 +
.../02-molecules/banner/banner.stories.js | 128 +
.../components/02-molecules/banner/banner.yml | 6 +
.../02-molecules/banner/grand-hero.yml | 6 +
.../banner/grand-hero/_yds-grand-hero.scss | 279 +
.../banner/grand-hero/yds-grand-hero.twig | 105 +
.../02-molecules/callout/_yds-callout.scss | 205 +
.../02-molecules/callout/_yds-callout.twig | 40 +
.../02-molecules/callout/callout.stories.js | 94 +
.../02-molecules/callout/callout.yml | 5 +
.../02-molecules/callout/yds-callout.twig | 46 +
.../cards/custom-card/_yds-custom-card.scss | 176 +
.../cards/custom-card/custom-card.stories.js | 59 +
.../cards/custom-card/custom-card.yml | 3 +
.../cards/custom-card/yds-custom-card.js | 36 +
.../cards/custom-card/yds-custom-card.twig | 45 +
.../_yds-directory-listing-card.scss | 153 +
.../directory-listing-card.stories.js | 82 +
.../yds-directory-listing-card.twig | 71 +
.../yds-directory-listing-card.yml | 7 +
.../reference-card/_yds-reference-card.scss | 408 +
.../event/_yds-event-format.twig | 5 +
.../examples/_card--examples.twig | 78 +
.../reference-card/examples/event-card.yml | 5 +
.../reference-card/examples/post-card.yml | 4 +
.../reference-card/examples/profile-card.yml | 4 +
.../reference-card/reference-card.stories.js | 137 +
.../reference-card/yds-reference-card.js | 36 +
.../reference-card/yds-reference-card.twig | 62 +
.../_yds-content-spotlight-portrait.scss | 220 +
.../content-spotlight-portrait.stories.js | 95 +
.../content-spotlight-portrait.yml | 6 +
.../content-spotlights.js | 35 +
.../yds-content-spotlight-portrait.twig | 79 +
.../02-molecules/embed/_yds-embed.scss | 41 +
.../02-molecules/embed/embed.stories.js | 83 +
.../02-molecules/embed/yds-embed.twig | 31 +
.../_yds-facts-and-figures.scss | 152 +
.../facts-and-figures.stories.js | 102 +
.../facts-and-figures/facts-and-figures.yml | 2 +
.../yds-facts-and-figures.twig | 50 +
.../image/_yds-content-image.scss | 12 +
.../02-molecules/image/image.stories.js | 30 +
.../02-molecules/image/yds-content-image.twig | 38 +
.../link-grid/_yds-link-grid--links.twig | 10 +
.../link-grid/_yds-link-grid.scss | 121 +
.../link-grid/link-grid.stories.js | 28 +
.../02-molecules/link-grid/link-grid.yml | 41 +
.../02-molecules/link-grid/yds-link-grid.twig | 69 +
.../link-group/_yds-link-group--links.twig | 10 +
.../link-group/_yds-link-group.scss | 120 +
.../link-group/link-group.stories.js | 23 +
.../02-molecules/link-group/link-group.yml | 20 +
.../link-group/yds-link-group.twig | 63 +
.../link-skip/_yds-link-skip.scss | 22 +
.../link-skip/link-skip.stories.js | 15 +
.../02-molecules/link-skip/link-skip.yml | 2 +
.../02-molecules/link-skip/yds-link-skip.twig | 17 +
.../02-molecules/menu/_yds-menu-item.twig | 127 +
.../02-molecules/menu/_yds-menu-list.twig | 25 +
.../02-molecules/menu/_yds-menu.scss | 22 +
.../menu/menu-toggle/_yds-menu-toggle.scss | 75 +
.../menu/menu-toggle/yds-menu-toggle.js | 103 +
.../menu/menu-toggle/yds-menu-toggle.twig | 17 +
.../02-molecules/menu/yds-menu.twig | 60 +
.../meta/basic-meta/_yds-basic-meta.scss | 30 +
.../meta/basic-meta/yds-basic-meta.twig | 4 +
.../meta/event-meta/_yds-event-meta.scss | 47 +
.../meta/event-meta/yds-event-meta.twig | 118 +
.../02-molecules/meta/meta.stories.js | 131 +
.../meta/profile-meta/_yds-profile-meta.scss | 199 +
.../meta/profile-meta/yds-profile-meta.twig | 68 +
.../components/02-molecules/molecules.scss | 33 +
.../page-title/_yds-page-title.scss | 24 +
.../02-molecules/page-title/page-title.js | 12 +
.../page-title/page-title.stories.js | 36 +
.../page-title/yds-page-title.twig | 38 +
.../02-molecules/pager/_yds-pager.scss | 96 +
.../components/02-molecules/pager/cl-pager.js | 29 +
.../pager/pager-first-and-last.yml | 28 +
.../02-molecules/pager/pager-first.yml | 20 +
.../02-molecules/pager/pager-last.yml | 24 +
.../02-molecules/pager/pager.stories.js | 23 +
.../components/02-molecules/pager/pager.yml | 18 +
.../02-molecules/pager/yds-pager.twig | 79 +
.../pull-quote/_yds-pull-quote.scss | 180 +
.../pull-quote/pull-quote.stories.js | 60 +
.../02-molecules/pull-quote/pull-quote.yml | 2 +
.../pull-quote/yds-pull-quote.twig | 40 +
.../quick-links/_yds-quick-links--links.twig | 10 +
.../quick-links/_yds-quick-links.scss | 232 +
.../quick-links/quick-links.stories.js | 42 +
.../02-molecules/quick-links/quick-links.yml | 15 +
.../quick-links/yds-quick-links.twig | 68 +
.../quote-callout/_yds-quote-callout.scss | 298 +
.../quote-callout/quote-callout.stories.js | 101 +
.../quote-callout/quote-callout.yml | 2 +
.../quote-callout/yds-quote-callout.twig | 53 +
.../search-result/_yds-search-result.scss | 52 +
.../search-result/breadcrumbs.yml | 10 +
.../search-result/search-result.yml | 3 +
.../yds-search-result.stories.js | 39 +
.../search-result/yds-search-result.twig | 42 +
.../_yds-social-link__content.twig | 17 +
.../social-links/_yds-social-links.scss | 49 +
.../social-links/social-links.stories.js | 12 +
.../social-links/social-links.yml | 19 +
.../social-links/yds-social-links.twig | 24 +
.../02-molecules/tabs/_yds-tab-content.twig | 22 +
.../02-molecules/tabs/_yds-tab-label.twig | 16 +
.../02-molecules/tabs/_yds-tabs.scss | 226 +
.../02-molecules/tabs/tabs.stories.js | 15 +
.../components/02-molecules/tabs/tabs.yml | 49 +
.../components/02-molecules/tabs/yds-tabs.js | 307 +
.../02-molecules/tabs/yds-tabs.twig | 76 +
.../text-with-image/_yds-text-with-image.scss | 207 +
.../text-with-image.stories.js | 97 +
.../text-with-image/text-with-image.yml | 6 +
.../text-with-image/yds-text-with-image.twig | 79 +
.../02-molecules/text/_yds-text-field.scss | 24 +
.../02-molecules/text/text-field.yml | 34 +
.../02-molecules/text/typography.stories.js | 29 +
.../02-molecules/text/yds-text-field.twig | 23 +
.../tile-item/_yds-tile-item.scss | 210 +
.../tile-item/tile-item.stories.js | 125 +
.../02-molecules/tile-item/tile-item.yml | 2 +
.../02-molecules/tile-item/yds-tile-item.twig | 71 +
.../02-molecules/video/_yds-video.scss | 31 +
.../02-molecules/video/video.stories.js | 34 +
.../components/02-molecules/video/video.yml | 3 +
.../02-molecules/video/yds-video.twig | 49 +
.../wrapped-image/_yds-wrapped-image.scss | 122 +
.../wrapped-image/wrapped-image.stories.js | 49 +
.../wrapped-image/wrapped-image.yml | 2 +
.../wrapped-image/yds-wrapped-image.twig | 50 +
.../components/03-organisms/_grid-mixins.scss | 113 +
.../components/03-organisms/_list-mixins.scss | 23 +
.../block-wrapper/_yds-block-wrapper.scss | 15 +
.../block-wrapper/block-wrapper.stories.js | 23 +
.../block-wrapper/yds-block-wrapper.twig | 23 +
.../card-collection/_yds-card-collection.scss | 72 +
.../card-collection.stories.js | 155 +
.../card-collection/yds-card-collection.twig | 57 +
.../_yds-component-wrapper.scss | 22 +
.../component-wrapper.stories.js | 25 +
.../yds-component-wrapper.twig | 27 +
.../_yds-custom-card-collection.scss | 38 +
.../custom-card-collection.stories.js | 77 +
.../yds-custom-card-collection.twig | 42 +
.../_yds-facts-and-figures-group.scss | 212 +
.../facts-and-figures-group.stories.js | 123 +
.../facts-and-figures-group.yml | 17 +
.../yds-facts-and-figures-group.twig | 87 +
.../03-organisms/galleries/gallery.stories.js | 45 +
.../media-grid/_yds-media-grid-item.twig | 37 +
.../_yds-media-grid-modal-item--content.twig | 51 +
.../_yds-media-grid-modal-item.twig | 98 +
.../media-grid/_yds-media-grid-modal.scss | 389 +
.../galleries/media-grid/_yds-media-grid.scss | 137 +
.../galleries/media-grid/media-grid.yml | 62 +
.../media-grid/yds-media-grid-interactive.js | 417 +
.../galleries/media-grid/yds-media-grid.twig | 53 +
.../03-organisms/layout/layout.stories.js | 17 +
.../two-column/_two-column--example.twig | 9 +
.../layout/two-column/_yds-two-column.scss | 54 +
.../layout/two-column/yds-two-column.twig | 32 +
.../menu/breadcrumbs/_yds-breadcrumbs.scss | 199 +
.../menu/breadcrumbs/breadcrumbs.stories.js | 15 +
.../menu/breadcrumbs/breadcrumbs.yml | 18 +
.../menu/breadcrumbs/yds-breadcrumbs.js | 235 +
.../menu/breadcrumbs/yds-breadcrumbs.twig | 88 +
.../menu/primary-nav/_yds-primary-nav.scss | 468 +
.../menu/primary-nav/primary-nav.stories.js | 42 +
.../menu/primary-nav/primary-nav.yml | 93 +
.../menu/primary-nav/yds-primary-nav.js | 89 +
.../menu/primary-nav/yds-primary-nav.twig | 10 +
.../menu/utility-nav/_utility-nav--menu.twig | 7 +
.../menu/utility-nav/_yds-utility-nav.scss | 132 +
.../menu/utility-nav/utility-nav.stories.js | 12 +
.../menu/utility-nav/utility-nav.yml | 11 +
.../menu/utility-nav/yds-utility-nav.twig | 46 +
.../components/03-organisms/organisms.scss | 14 +
.../site-footer/_site-footer--examples.twig | 9 +
.../site-footer/_site-footer-basic.twig | 52 +
.../site-footer/_site-footer-mega.twig | 81 +
.../site-footer/_yds-site-footer.scss | 343 +
.../site-footer/site-footer.stories.js | 113 +
.../site-footer/yds-site-footer.twig | 34 +
.../site-header/_site-header--examples.twig | 9 +
.../site-header/_site-header--secondary.twig | 14 +
.../site-header/_site-header-default.twig | 13 +
.../site-header/_site-header-simple.twig | 1 +
.../site-header/_yds-site-header.scss | 519 +
.../site-header/site-header.stories.js | 160 +
.../site-header/yds-site-header.js | 47 +
.../site-header/yds-site-header.twig | 161 +
.../03-organisms/tiles/_yds-tiles.scss | 98 +
.../03-organisms/tiles/tiles.stories.js | 86 +
.../components/03-organisms/tiles/tiles.yml | 21 +
.../03-organisms/tiles/yds-tiles.twig | 49 +
.../components/04-page-layouts/_yds-base.twig | 42 +
.../04-page-layouts/cl-page-args.js | 69 +
.../04-page-layouts/page-layouts.scss | 69 +
.../04-page-layouts/page-layouts.stories.js | 43 +
.../placeholder/cl-placeholder.scss | 23 +
.../placeholder/placeholder.stories.js | 8 +
.../placeholder/yds-placeholder.twig | 17 +
.../04-page-layouts/yds-full-width.twig | 1 +
.../_intro-content-examples.twig | 57 +
.../events/_event-collection--example.twig | 47 +
.../05-page-examples/events/event-grid.twig | 32 +
.../05-page-examples/events/event-list.twig | 22 +
.../05-page-examples/events/event-page.twig | 49 +
.../05-page-examples/events/events.stories.js | 247 +
.../miscellaneous/accordion-page.twig | 64 +
.../miscellaneous-page.stories.js | 127 +
.../miscellaneous/qualtrics-embed.twig | 13 +
.../05-page-examples/post/post-article.twig | 86 +
.../05-page-examples/post/post-grid.twig | 64 +
.../05-page-examples/post/post.stories.js | 93 +
.../05-page-examples/profiles/profile.twig | 154 +
.../profiles/profiles.stories.js | 112 +
.../standard-pages/standard-page-short.twig | 11 +
.../standard-page-spotlights.twig | 150 +
.../standard-page-with-banner-left-align.twig | 226 +
.../standard-page-with-banner.twig | 211 +
.../standard-page-with-quicklinks.twig | 16 +
.../standard-page-with-sidebar.twig | 53 +
.../standard-page-with-video.twig | 46 +
.../standard-pages/standard-page.stories.js | 537 +
.../standard-pages/standard-page.twig | 89 +
.../components/_settings/_config.css | 49 +
.../components/_settings/config.js | 40 +
.../components/_settings/config.stories.js | 251 +
.../components/_settings/config.twig | 48 +
.../components/style.scss | 27 +
.../component-library-twig/dist/css.js | 1 +
.../fonts/fontawesome/css/fontawesome.css | 12940 ++++++++++++++++
.../fonts/fontawesome/css/fontawesome.min.css | 6 +
.../dist/fonts/fontawesome/css/regular.css | 19 +
.../fonts/fontawesome/css/regular.min.css | 6 +
.../dist/fonts/fontawesome/css/solid.css | 19 +
.../dist/fonts/fontawesome/css/solid.min.css | 6 +
.../fontawesome/webfonts/fa-regular-400.ttf | Bin 0 -> 989124 bytes
.../fontawesome/webfonts/fa-regular-400.woff2 | Bin 0 -> 395064 bytes
.../fontawesome/webfonts/fa-solid-900.ttf | Bin 0 -> 890704 bytes
.../fontawesome/webfonts/fa-solid-900.woff2 | Bin 0 -> 320080 bytes
.../component-library-twig/dist/icons.svg | 5 +
.../00-tokens/colors/color-global-themes.js | 1 +
.../dist/js/00-tokens/effects/yds-animate.js | 1 +
.../dist/js/00-tokens/layout/yds-layout.js | 1 +
.../text-copy-button/yds-text-copy-button.js | 1 +
.../controls/text-link/yds-text-link.js | 1 +
.../js/01-atoms/typography/text/yds-text.js | 1 +
.../video-background/yds-video-background.js | 1 +
.../02-molecules/accordion/yds-accordion.js | 1 +
.../dist/js/02-molecules/alert/yds-alert.js | 1 +
.../cards/custom-card/yds-custom-card.js | 1 +
.../reference-card/yds-reference-card.js | 1 +
.../content-spotlights.js | 1 +
.../menu/menu-toggle/yds-menu-toggle.js | 1 +
.../js/02-molecules/page-title/page-title.js | 1 +
.../dist/js/02-molecules/pager/cl-pager.js | 1 +
.../dist/js/02-molecules/tabs/yds-tabs.js | 1 +
.../media-grid/yds-media-grid-interactive.js | 1 +
.../menu/breadcrumbs/yds-breadcrumbs.js | 1 +
.../menu/primary-nav/yds-primary-nav.js | 1 +
.../site-header/yds-site-header.js | 1 +
.../dist/js/04-page-layouts/cl-page-args.js | 1 +
.../dist/js/_settings/config.js | 1 +
.../component-library-twig/dist/js/ys-link.js | 1 +
.../component-library-twig/dist/style.css | 494 +
.../component-library-twig/dist/svgSprite.js | 1 +
.../node_modules/highlight.js/CHANGES.md | 3340 ++++
.../node_modules/highlight.js/LICENSE | 29 +
.../node_modules/highlight.js/README.md | 468 +
.../node_modules/highlight.js/SECURITY.md | 19 +
.../highlight.js/SUPPORTED_LANGUAGES.md | 264 +
.../highlight.js/VERSION_10_UPGRADE.md | 58 +
.../highlight.js/VERSION_11_UPGRADE.md | 203 +
.../node_modules/highlight.js/es/common.d.ts | 3 +
.../node_modules/highlight.js/es/common.js | 4 +
.../node_modules/highlight.js/es/core.d.ts | 3 +
.../node_modules/highlight.js/es/core.js | 4 +
.../node_modules/highlight.js/es/index.js | 4 +
.../highlight.js/es/languages/1c.js | 537 +
.../highlight.js/es/languages/1c.js.js | 11 +
.../highlight.js/es/languages/abnf.js | 82 +
.../highlight.js/es/languages/abnf.js.js | 11 +
.../highlight.js/es/languages/accesslog.js | 92 +
.../highlight.js/es/languages/accesslog.js.js | 11 +
.../highlight.js/es/languages/actionscript.js | 153 +
.../es/languages/actionscript.js.js | 11 +
.../highlight.js/es/languages/ada.js | 265 +
.../highlight.js/es/languages/ada.js.js | 11 +
.../highlight.js/es/languages/angelscript.js | 178 +
.../es/languages/angelscript.js.js | 11 +
.../highlight.js/es/languages/apache.js | 101 +
.../highlight.js/es/languages/apache.js.js | 11 +
.../highlight.js/es/languages/applescript.js | 149 +
.../es/languages/applescript.js.js | 11 +
.../highlight.js/es/languages/arcade.js | 361 +
.../highlight.js/es/languages/arcade.js.js | 11 +
.../highlight.js/es/languages/arduino.js | 970 ++
.../highlight.js/es/languages/arduino.js.js | 11 +
.../highlight.js/es/languages/armasm.js | 124 +
.../highlight.js/es/languages/armasm.js.js | 11 +
.../highlight.js/es/languages/asciidoc.js | 261 +
.../highlight.js/es/languages/asciidoc.js.js | 11 +
.../highlight.js/es/languages/aspectj.js | 230 +
.../highlight.js/es/languages/aspectj.js.js | 11 +
.../highlight.js/es/languages/autohotkey.js | 75 +
.../es/languages/autohotkey.js.js | 11 +
.../highlight.js/es/languages/autoit.js | 178 +
.../highlight.js/es/languages/autoit.js.js | 11 +
.../highlight.js/es/languages/avrasm.js | 78 +
.../highlight.js/es/languages/avrasm.js.js | 11 +
.../highlight.js/es/languages/awk.js | 67 +
.../highlight.js/es/languages/awk.js.js | 11 +
.../highlight.js/es/languages/axapta.js | 188 +
.../highlight.js/es/languages/axapta.js.js | 11 +
.../highlight.js/es/languages/bash.js | 391 +
.../highlight.js/es/languages/bash.js.js | 11 +
.../highlight.js/es/languages/basic.js | 229 +
.../highlight.js/es/languages/basic.js.js | 11 +
.../highlight.js/es/languages/bnf.js | 38 +
.../highlight.js/es/languages/bnf.js.js | 11 +
.../highlight.js/es/languages/brainfuck.js | 54 +
.../highlight.js/es/languages/brainfuck.js.js | 11 +
.../highlight.js/es/languages/c.js | 318 +
.../highlight.js/es/languages/c.js.js | 11 +
.../highlight.js/es/languages/cal.js | 159 +
.../highlight.js/es/languages/cal.js.js | 11 +
.../highlight.js/es/languages/capnproto.js | 99 +
.../highlight.js/es/languages/capnproto.js.js | 11 +
.../highlight.js/es/languages/ceylon.js | 139 +
.../highlight.js/es/languages/ceylon.js.js | 11 +
.../highlight.js/es/languages/clean.js | 67 +
.../highlight.js/es/languages/clean.js.js | 11 +
.../highlight.js/es/languages/clojure-repl.js | 27 +
.../es/languages/clojure-repl.js.js | 11 +
.../highlight.js/es/languages/clojure.js | 184 +
.../highlight.js/es/languages/clojure.js.js | 11 +
.../highlight.js/es/languages/cmake.js | 63 +
.../highlight.js/es/languages/cmake.js.js | 11 +
.../highlight.js/es/languages/coffeescript.js | 366 +
.../es/languages/coffeescript.js.js | 11 +
.../highlight.js/es/languages/coq.js | 445 +
.../highlight.js/es/languages/coq.js.js | 11 +
.../highlight.js/es/languages/cos.js | 140 +
.../highlight.js/es/languages/cos.js.js | 11 +
.../highlight.js/es/languages/cpp.js | 568 +
.../highlight.js/es/languages/cpp.js.js | 11 +
.../highlight.js/es/languages/crmsh.js | 100 +
.../highlight.js/es/languages/crmsh.js.js | 11 +
.../highlight.js/es/languages/crystal.js | 311 +
.../highlight.js/es/languages/crystal.js.js | 11 +
.../highlight.js/es/languages/csharp.js | 400 +
.../highlight.js/es/languages/csharp.js.js | 11 +
.../highlight.js/es/languages/csp.js | 57 +
.../highlight.js/es/languages/csp.js.js | 11 +
.../highlight.js/es/languages/css.js | 738 +
.../highlight.js/es/languages/css.js.js | 11 +
.../highlight.js/es/languages/d.js | 271 +
.../highlight.js/es/languages/d.js.js | 11 +
.../highlight.js/es/languages/dart.js | 262 +
.../highlight.js/es/languages/dart.js.js | 11 +
.../highlight.js/es/languages/delphi.js | 230 +
.../highlight.js/es/languages/delphi.js.js | 11 +
.../highlight.js/es/languages/diff.js | 62 +
.../highlight.js/es/languages/diff.js.js | 11 +
.../highlight.js/es/languages/django.js | 75 +
.../highlight.js/es/languages/django.js.js | 11 +
.../highlight.js/es/languages/dns.js | 78 +
.../highlight.js/es/languages/dns.js.js | 11 +
.../highlight.js/es/languages/dockerfile.js | 44 +
.../es/languages/dockerfile.js.js | 11 +
.../highlight.js/es/languages/dos.js | 166 +
.../highlight.js/es/languages/dos.js.js | 11 +
.../highlight.js/es/languages/dsconfig.js | 66 +
.../highlight.js/es/languages/dsconfig.js.js | 11 +
.../highlight.js/es/languages/dts.js | 157 +
.../highlight.js/es/languages/dts.js.js | 11 +
.../highlight.js/es/languages/dust.js | 47 +
.../highlight.js/es/languages/dust.js.js | 11 +
.../highlight.js/es/languages/ebnf.js | 53 +
.../highlight.js/es/languages/ebnf.js.js | 11 +
.../highlight.js/es/languages/elixir.js | 279 +
.../highlight.js/es/languages/elixir.js.js | 11 +
.../highlight.js/es/languages/elm.js | 143 +
.../highlight.js/es/languages/elm.js.js | 11 +
.../highlight.js/es/languages/erb.js | 29 +
.../highlight.js/es/languages/erb.js.js | 11 +
.../highlight.js/es/languages/erlang-repl.js | 54 +
.../es/languages/erlang-repl.js.js | 11 +
.../highlight.js/es/languages/erlang.js | 191 +
.../highlight.js/es/languages/erlang.js.js | 11 +
.../highlight.js/es/languages/excel.js | 544 +
.../highlight.js/es/languages/excel.js.js | 11 +
.../highlight.js/es/languages/fix.js | 39 +
.../highlight.js/es/languages/fix.js.js | 11 +
.../highlight.js/es/languages/flix.js | 79 +
.../highlight.js/es/languages/flix.js.js | 11 +
.../highlight.js/es/languages/fortran.js | 573 +
.../highlight.js/es/languages/fortran.js.js | 11 +
.../highlight.js/es/languages/fsharp.js | 627 +
.../highlight.js/es/languages/fsharp.js.js | 11 +
.../highlight.js/es/languages/gams.js | 181 +
.../highlight.js/es/languages/gams.js.js | 11 +
.../highlight.js/es/languages/gauss.js | 306 +
.../highlight.js/es/languages/gauss.js.js | 11 +
.../highlight.js/es/languages/gcode.js | 80 +
.../highlight.js/es/languages/gcode.js.js | 11 +
.../highlight.js/es/languages/gherkin.js | 49 +
.../highlight.js/es/languages/gherkin.js.js | 11 +
.../highlight.js/es/languages/glsl.js | 128 +
.../highlight.js/es/languages/glsl.js.js | 11 +
.../highlight.js/es/languages/gml.js | 2816 ++++
.../highlight.js/es/languages/gml.js.js | 11 +
.../highlight.js/es/languages/go.js | 141 +
.../highlight.js/es/languages/go.js.js | 11 +
.../highlight.js/es/languages/golo.js | 80 +
.../highlight.js/es/languages/golo.js.js | 11 +
.../highlight.js/es/languages/gradle.js | 189 +
.../highlight.js/es/languages/gradle.js.js | 11 +
.../highlight.js/es/languages/graphql.js | 78 +
.../highlight.js/es/languages/graphql.js.js | 11 +
.../highlight.js/es/languages/groovy.js | 189 +
.../highlight.js/es/languages/groovy.js.js | 11 +
.../highlight.js/es/languages/haml.js | 113 +
.../highlight.js/es/languages/haml.js.js | 11 +
.../highlight.js/es/languages/handlebars.js | 258 +
.../es/languages/handlebars.js.js | 11 +
.../highlight.js/es/languages/haskell.js | 217 +
.../highlight.js/es/languages/haskell.js.js | 11 +
.../highlight.js/es/languages/haxe.js | 166 +
.../highlight.js/es/languages/haxe.js.js | 11 +
.../highlight.js/es/languages/hsp.js | 59 +
.../highlight.js/es/languages/hsp.js.js | 11 +
.../highlight.js/es/languages/http.js | 97 +
.../highlight.js/es/languages/http.js.js | 11 +
.../highlight.js/es/languages/hy.js | 137 +
.../highlight.js/es/languages/hy.js.js | 11 +
.../highlight.js/es/languages/inform7.js | 69 +
.../highlight.js/es/languages/inform7.js.js | 11 +
.../highlight.js/es/languages/ini.js | 121 +
.../highlight.js/es/languages/ini.js.js | 11 +
.../highlight.js/es/languages/irpf90.js | 107 +
.../highlight.js/es/languages/irpf90.js.js | 11 +
.../highlight.js/es/languages/isbl.js | 3205 ++++
.../highlight.js/es/languages/isbl.js.js | 11 +
.../highlight.js/es/languages/java.js | 289 +
.../highlight.js/es/languages/java.js.js | 11 +
.../highlight.js/es/languages/javascript.js | 766 +
.../es/languages/javascript.js.js | 11 +
.../highlight.js/es/languages/jboss-cli.js | 63 +
.../highlight.js/es/languages/jboss-cli.js.js | 11 +
.../highlight.js/es/languages/json.js | 53 +
.../highlight.js/es/languages/json.js.js | 11 +
.../highlight.js/es/languages/julia-repl.js | 50 +
.../es/languages/julia-repl.js.js | 11 +
.../highlight.js/es/languages/julia.js | 441 +
.../highlight.js/es/languages/julia.js.js | 11 +
.../highlight.js/es/languages/kotlin.js | 286 +
.../highlight.js/es/languages/kotlin.js.js | 11 +
.../highlight.js/es/languages/lasso.js | 170 +
.../highlight.js/es/languages/lasso.js.js | 11 +
.../highlight.js/es/languages/latex.js | 278 +
.../highlight.js/es/languages/latex.js.js | 11 +
.../highlight.js/es/languages/ldif.js | 31 +
.../highlight.js/es/languages/ldif.js.js | 11 +
.../highlight.js/es/languages/leaf.js | 97 +
.../highlight.js/es/languages/leaf.js.js | 11 +
.../highlight.js/es/languages/less.js | 839 +
.../highlight.js/es/languages/less.js.js | 11 +
.../highlight.js/es/languages/lisp.js | 139 +
.../highlight.js/es/languages/lisp.js.js | 11 +
.../es/languages/livecodeserver.js | 173 +
.../es/languages/livecodeserver.js.js | 11 +
.../highlight.js/es/languages/livescript.js | 378 +
.../es/languages/livescript.js.js | 11 +
.../highlight.js/es/languages/llvm.js | 132 +
.../highlight.js/es/languages/llvm.js.js | 11 +
.../highlight.js/es/languages/lsl.js | 76 +
.../highlight.js/es/languages/lsl.js.js | 11 +
.../highlight.js/es/languages/lua.js | 80 +
.../highlight.js/es/languages/lua.js.js | 11 +
.../highlight.js/es/languages/makefile.js | 86 +
.../highlight.js/es/languages/makefile.js.js | 11 +
.../highlight.js/es/languages/markdown.js | 241 +
.../highlight.js/es/languages/markdown.js.js | 11 +
.../highlight.js/es/languages/mathematica.js | 7359 +++++++++
.../es/languages/mathematica.js.js | 11 +
.../highlight.js/es/languages/matlab.js | 107 +
.../highlight.js/es/languages/matlab.js.js | 11 +
.../highlight.js/es/languages/maxima.js | 414 +
.../highlight.js/es/languages/maxima.js.js | 11 +
.../highlight.js/es/languages/mel.js | 235 +
.../highlight.js/es/languages/mel.js.js | 11 +
.../highlight.js/es/languages/mercury.js | 107 +
.../highlight.js/es/languages/mercury.js.js | 11 +
.../highlight.js/es/languages/mipsasm.js | 104 +
.../highlight.js/es/languages/mipsasm.js.js | 11 +
.../highlight.js/es/languages/mizar.js | 27 +
.../highlight.js/es/languages/mizar.js.js | 11 +
.../highlight.js/es/languages/mojolicious.js | 36 +
.../es/languages/mojolicious.js.js | 11 +
.../highlight.js/es/languages/monkey.js | 183 +
.../highlight.js/es/languages/monkey.js.js | 11 +
.../highlight.js/es/languages/moonscript.js | 141 +
.../es/languages/moonscript.js.js | 11 +
.../highlight.js/es/languages/n1ql.js | 364 +
.../highlight.js/es/languages/n1ql.js.js | 11 +
.../highlight.js/es/languages/nestedtext.js | 83 +
.../es/languages/nestedtext.js.js | 11 +
.../highlight.js/es/languages/nginx.js | 153 +
.../highlight.js/es/languages/nginx.js.js | 11 +
.../highlight.js/es/languages/nim.js | 185 +
.../highlight.js/es/languages/nim.js.js | 11 +
.../highlight.js/es/languages/nix.js | 94 +
.../highlight.js/es/languages/nix.js.js | 11 +
.../highlight.js/es/languages/node-repl.js | 33 +
.../highlight.js/es/languages/node-repl.js.js | 11 +
.../highlight.js/es/languages/nsis.js | 556 +
.../highlight.js/es/languages/nsis.js.js | 11 +
.../highlight.js/es/languages/objectivec.js | 253 +
.../es/languages/objectivec.js.js | 11 +
.../highlight.js/es/languages/ocaml.js | 83 +
.../highlight.js/es/languages/ocaml.js.js | 11 +
.../highlight.js/es/languages/openscad.js | 77 +
.../highlight.js/es/languages/openscad.js.js | 11 +
.../highlight.js/es/languages/oxygene.js | 86 +
.../highlight.js/es/languages/oxygene.js.js | 11 +
.../highlight.js/es/languages/parser3.js | 55 +
.../highlight.js/es/languages/parser3.js.js | 11 +
.../highlight.js/es/languages/perl.js | 471 +
.../highlight.js/es/languages/perl.js.js | 11 +
.../highlight.js/es/languages/pf.js | 60 +
.../highlight.js/es/languages/pf.js.js | 11 +
.../highlight.js/es/languages/pgsql.js | 524 +
.../highlight.js/es/languages/pgsql.js.js | 11 +
.../highlight.js/es/languages/php-template.js | 54 +
.../es/languages/php-template.js.js | 11 +
.../highlight.js/es/languages/php.js | 613 +
.../highlight.js/es/languages/php.js.js | 11 +
.../highlight.js/es/languages/plaintext.js | 19 +
.../highlight.js/es/languages/plaintext.js.js | 11 +
.../highlight.js/es/languages/pony.js | 89 +
.../highlight.js/es/languages/pony.js.js | 11 +
.../highlight.js/es/languages/powershell.js | 316 +
.../es/languages/powershell.js.js | 11 +
.../highlight.js/es/languages/processing.js | 434 +
.../es/languages/processing.js.js | 11 +
.../highlight.js/es/languages/profile.js | 43 +
.../highlight.js/es/languages/profile.js.js | 11 +
.../highlight.js/es/languages/prolog.js | 96 +
.../highlight.js/es/languages/prolog.js.js | 11 +
.../highlight.js/es/languages/properties.js | 68 +
.../es/languages/properties.js.js | 11 +
.../highlight.js/es/languages/protobuf.js | 79 +
.../highlight.js/es/languages/protobuf.js.js | 11 +
.../highlight.js/es/languages/puppet.js | 146 +
.../highlight.js/es/languages/puppet.js.js | 11 +
.../highlight.js/es/languages/purebasic.js | 99 +
.../highlight.js/es/languages/purebasic.js.js | 11 +
.../highlight.js/es/languages/python-repl.js | 32 +
.../es/languages/python-repl.js.js | 11 +
.../highlight.js/es/languages/python.js | 434 +
.../highlight.js/es/languages/python.js.js | 11 +
.../highlight.js/es/languages/q.js | 37 +
.../highlight.js/es/languages/q.js.js | 11 +
.../highlight.js/es/languages/qml.js | 189 +
.../highlight.js/es/languages/qml.js.js | 11 +
.../highlight.js/es/languages/r.js | 257 +
.../highlight.js/es/languages/r.js.js | 11 +
.../highlight.js/es/languages/reasonml.js | 142 +
.../highlight.js/es/languages/reasonml.js.js | 11 +
.../highlight.js/es/languages/rib.js | 37 +
.../highlight.js/es/languages/rib.js.js | 11 +
.../highlight.js/es/languages/roboconf.js | 82 +
.../highlight.js/es/languages/roboconf.js.js | 11 +
.../highlight.js/es/languages/routeros.js | 163 +
.../highlight.js/es/languages/routeros.js.js | 11 +
.../highlight.js/es/languages/rsl.js | 149 +
.../highlight.js/es/languages/rsl.js.js | 11 +
.../highlight.js/es/languages/ruby.js | 448 +
.../highlight.js/es/languages/ruby.js.js | 11 +
.../es/languages/ruleslanguage.js | 76 +
.../es/languages/ruleslanguage.js.js | 11 +
.../highlight.js/es/languages/rust.js | 305 +
.../highlight.js/es/languages/rust.js.js | 11 +
.../highlight.js/es/languages/sas.js | 556 +
.../highlight.js/es/languages/sas.js.js | 11 +
.../highlight.js/es/languages/scala.js | 214 +
.../highlight.js/es/languages/scala.js.js | 11 +
.../highlight.js/es/languages/scheme.js | 196 +
.../highlight.js/es/languages/scheme.js.js | 11 +
.../highlight.js/es/languages/scilab.js | 73 +
.../highlight.js/es/languages/scilab.js.js | 11 +
.../highlight.js/es/languages/scss.js | 728 +
.../highlight.js/es/languages/scss.js.js | 11 +
.../highlight.js/es/languages/shell.js | 33 +
.../highlight.js/es/languages/shell.js.js | 11 +
.../highlight.js/es/languages/smali.js | 125 +
.../highlight.js/es/languages/smali.js.js | 11 +
.../highlight.js/es/languages/smalltalk.js | 68 +
.../highlight.js/es/languages/smalltalk.js.js | 11 +
.../highlight.js/es/languages/sml.js | 75 +
.../highlight.js/es/languages/sml.js.js | 11 +
.../highlight.js/es/languages/sqf.js | 2662 ++++
.../highlight.js/es/languages/sqf.js.js | 11 +
.../highlight.js/es/languages/sql.js | 682 +
.../highlight.js/es/languages/sql.js.js | 11 +
.../highlight.js/es/languages/stan.js | 521 +
.../highlight.js/es/languages/stan.js.js | 11 +
.../highlight.js/es/languages/stata.js | 53 +
.../highlight.js/es/languages/stata.js.js | 11 +
.../highlight.js/es/languages/step21.js | 66 +
.../highlight.js/es/languages/step21.js.js | 11 +
.../highlight.js/es/languages/stylus.js | 788 +
.../highlight.js/es/languages/stylus.js.js | 11 +
.../highlight.js/es/languages/subunit.js | 43 +
.../highlight.js/es/languages/subunit.js.js | 11 +
.../highlight.js/es/languages/swift.js | 920 ++
.../highlight.js/es/languages/swift.js.js | 11 +
.../highlight.js/es/languages/taggerscript.js | 58 +
.../es/languages/taggerscript.js.js | 11 +
.../highlight.js/es/languages/tap.js | 47 +
.../highlight.js/es/languages/tap.js.js | 11 +
.../highlight.js/es/languages/tcl.js | 190 +
.../highlight.js/es/languages/tcl.js.js | 11 +
.../highlight.js/es/languages/thrift.js | 77 +
.../highlight.js/es/languages/thrift.js.js | 11 +
.../highlight.js/es/languages/tp.js | 171 +
.../highlight.js/es/languages/tp.js.js | 11 +
.../highlight.js/es/languages/twig.js | 260 +
.../highlight.js/es/languages/twig.js.js | 11 +
.../highlight.js/es/languages/typescript.js | 880 ++
.../es/languages/typescript.js.js | 11 +
.../highlight.js/es/languages/vala.js | 60 +
.../highlight.js/es/languages/vala.js.js | 11 +
.../highlight.js/es/languages/vbnet.js | 157 +
.../highlight.js/es/languages/vbnet.js.js | 11 +
.../es/languages/vbscript-html.js | 24 +
.../es/languages/vbscript-html.js.js | 11 +
.../highlight.js/es/languages/vbscript.js | 220 +
.../highlight.js/es/languages/vbscript.js.js | 11 +
.../highlight.js/es/languages/verilog.js | 549 +
.../highlight.js/es/languages/verilog.js.js | 11 +
.../highlight.js/es/languages/vhdl.js | 215 +
.../highlight.js/es/languages/vhdl.js.js | 11 +
.../highlight.js/es/languages/vim.js | 129 +
.../highlight.js/es/languages/vim.js.js | 11 +
.../highlight.js/es/languages/wasm.js | 139 +
.../highlight.js/es/languages/wasm.js.js | 11 +
.../highlight.js/es/languages/wren.js | 302 +
.../highlight.js/es/languages/wren.js.js | 11 +
.../highlight.js/es/languages/x86asm.js | 153 +
.../highlight.js/es/languages/x86asm.js.js | 11 +
.../highlight.js/es/languages/xl.js | 205 +
.../highlight.js/es/languages/xl.js.js | 11 +
.../highlight.js/es/languages/xml.js | 241 +
.../highlight.js/es/languages/xml.js.js | 11 +
.../highlight.js/es/languages/xquery.js | 360 +
.../highlight.js/es/languages/xquery.js.js | 11 +
.../highlight.js/es/languages/yaml.js | 194 +
.../highlight.js/es/languages/yaml.js.js | 11 +
.../highlight.js/es/languages/zephir.js | 128 +
.../highlight.js/es/languages/zephir.js.js | 11 +
.../node_modules/highlight.js/es/package.json | 1 +
.../highlight.js/es/utils/regex.js | 155 +
.../node_modules/highlight.js/lib/common.d.ts | 3 +
.../node_modules/highlight.js/lib/common.js | 42 +
.../node_modules/highlight.js/lib/core.d.ts | 3 +
.../node_modules/highlight.js/lib/core.js | 2597 ++++
.../node_modules/highlight.js/lib/index.js | 198 +
.../highlight.js/lib/languages/1c.js | 537 +
.../highlight.js/lib/languages/1c.js.js | 10 +
.../highlight.js/lib/languages/abnf.js | 82 +
.../highlight.js/lib/languages/abnf.js.js | 10 +
.../highlight.js/lib/languages/accesslog.js | 92 +
.../lib/languages/accesslog.js.js | 10 +
.../lib/languages/actionscript.js | 153 +
.../lib/languages/actionscript.js.js | 10 +
.../highlight.js/lib/languages/ada.js | 265 +
.../highlight.js/lib/languages/ada.js.js | 10 +
.../highlight.js/lib/languages/angelscript.js | 178 +
.../lib/languages/angelscript.js.js | 10 +
.../highlight.js/lib/languages/apache.js | 101 +
.../highlight.js/lib/languages/apache.js.js | 10 +
.../highlight.js/lib/languages/applescript.js | 149 +
.../lib/languages/applescript.js.js | 10 +
.../highlight.js/lib/languages/arcade.js | 361 +
.../highlight.js/lib/languages/arcade.js.js | 10 +
.../highlight.js/lib/languages/arduino.js | 970 ++
.../highlight.js/lib/languages/arduino.js.js | 10 +
.../highlight.js/lib/languages/armasm.js | 124 +
.../highlight.js/lib/languages/armasm.js.js | 10 +
.../highlight.js/lib/languages/asciidoc.js | 261 +
.../highlight.js/lib/languages/asciidoc.js.js | 10 +
.../highlight.js/lib/languages/aspectj.js | 230 +
.../highlight.js/lib/languages/aspectj.js.js | 10 +
.../highlight.js/lib/languages/autohotkey.js | 75 +
.../lib/languages/autohotkey.js.js | 10 +
.../highlight.js/lib/languages/autoit.js | 178 +
.../highlight.js/lib/languages/autoit.js.js | 10 +
.../highlight.js/lib/languages/avrasm.js | 78 +
.../highlight.js/lib/languages/avrasm.js.js | 10 +
.../highlight.js/lib/languages/awk.js | 67 +
.../highlight.js/lib/languages/awk.js.js | 10 +
.../highlight.js/lib/languages/axapta.js | 188 +
.../highlight.js/lib/languages/axapta.js.js | 10 +
.../highlight.js/lib/languages/bash.js | 391 +
.../highlight.js/lib/languages/bash.js.js | 10 +
.../highlight.js/lib/languages/basic.js | 229 +
.../highlight.js/lib/languages/basic.js.js | 10 +
.../highlight.js/lib/languages/bnf.js | 38 +
.../highlight.js/lib/languages/bnf.js.js | 10 +
.../highlight.js/lib/languages/brainfuck.js | 54 +
.../lib/languages/brainfuck.js.js | 10 +
.../highlight.js/lib/languages/c.js | 318 +
.../highlight.js/lib/languages/c.js.js | 10 +
.../highlight.js/lib/languages/cal.js | 159 +
.../highlight.js/lib/languages/cal.js.js | 10 +
.../highlight.js/lib/languages/capnproto.js | 99 +
.../lib/languages/capnproto.js.js | 10 +
.../highlight.js/lib/languages/ceylon.js | 139 +
.../highlight.js/lib/languages/ceylon.js.js | 10 +
.../highlight.js/lib/languages/clean.js | 67 +
.../highlight.js/lib/languages/clean.js.js | 10 +
.../lib/languages/clojure-repl.js | 27 +
.../lib/languages/clojure-repl.js.js | 10 +
.../highlight.js/lib/languages/clojure.js | 184 +
.../highlight.js/lib/languages/clojure.js.js | 10 +
.../highlight.js/lib/languages/cmake.js | 63 +
.../highlight.js/lib/languages/cmake.js.js | 10 +
.../lib/languages/coffeescript.js | 366 +
.../lib/languages/coffeescript.js.js | 10 +
.../highlight.js/lib/languages/coq.js | 445 +
.../highlight.js/lib/languages/coq.js.js | 10 +
.../highlight.js/lib/languages/cos.js | 140 +
.../highlight.js/lib/languages/cos.js.js | 10 +
.../highlight.js/lib/languages/cpp.js | 568 +
.../highlight.js/lib/languages/cpp.js.js | 10 +
.../highlight.js/lib/languages/crmsh.js | 100 +
.../highlight.js/lib/languages/crmsh.js.js | 10 +
.../highlight.js/lib/languages/crystal.js | 311 +
.../highlight.js/lib/languages/crystal.js.js | 10 +
.../highlight.js/lib/languages/csharp.js | 400 +
.../highlight.js/lib/languages/csharp.js.js | 10 +
.../highlight.js/lib/languages/csp.js | 57 +
.../highlight.js/lib/languages/csp.js.js | 10 +
.../highlight.js/lib/languages/css.js | 738 +
.../highlight.js/lib/languages/css.js.js | 10 +
.../highlight.js/lib/languages/d.js | 271 +
.../highlight.js/lib/languages/d.js.js | 10 +
.../highlight.js/lib/languages/dart.js | 262 +
.../highlight.js/lib/languages/dart.js.js | 10 +
.../highlight.js/lib/languages/delphi.js | 230 +
.../highlight.js/lib/languages/delphi.js.js | 10 +
.../highlight.js/lib/languages/diff.js | 62 +
.../highlight.js/lib/languages/diff.js.js | 10 +
.../highlight.js/lib/languages/django.js | 75 +
.../highlight.js/lib/languages/django.js.js | 10 +
.../highlight.js/lib/languages/dns.js | 78 +
.../highlight.js/lib/languages/dns.js.js | 10 +
.../highlight.js/lib/languages/dockerfile.js | 44 +
.../lib/languages/dockerfile.js.js | 10 +
.../highlight.js/lib/languages/dos.js | 166 +
.../highlight.js/lib/languages/dos.js.js | 10 +
.../highlight.js/lib/languages/dsconfig.js | 66 +
.../highlight.js/lib/languages/dsconfig.js.js | 10 +
.../highlight.js/lib/languages/dts.js | 157 +
.../highlight.js/lib/languages/dts.js.js | 10 +
.../highlight.js/lib/languages/dust.js | 47 +
.../highlight.js/lib/languages/dust.js.js | 10 +
.../highlight.js/lib/languages/ebnf.js | 53 +
.../highlight.js/lib/languages/ebnf.js.js | 10 +
.../highlight.js/lib/languages/elixir.js | 279 +
.../highlight.js/lib/languages/elixir.js.js | 10 +
.../highlight.js/lib/languages/elm.js | 143 +
.../highlight.js/lib/languages/elm.js.js | 10 +
.../highlight.js/lib/languages/erb.js | 29 +
.../highlight.js/lib/languages/erb.js.js | 10 +
.../highlight.js/lib/languages/erlang-repl.js | 54 +
.../lib/languages/erlang-repl.js.js | 10 +
.../highlight.js/lib/languages/erlang.js | 191 +
.../highlight.js/lib/languages/erlang.js.js | 10 +
.../highlight.js/lib/languages/excel.js | 544 +
.../highlight.js/lib/languages/excel.js.js | 10 +
.../highlight.js/lib/languages/fix.js | 39 +
.../highlight.js/lib/languages/fix.js.js | 10 +
.../highlight.js/lib/languages/flix.js | 79 +
.../highlight.js/lib/languages/flix.js.js | 10 +
.../highlight.js/lib/languages/fortran.js | 573 +
.../highlight.js/lib/languages/fortran.js.js | 10 +
.../highlight.js/lib/languages/fsharp.js | 627 +
.../highlight.js/lib/languages/fsharp.js.js | 10 +
.../highlight.js/lib/languages/gams.js | 181 +
.../highlight.js/lib/languages/gams.js.js | 10 +
.../highlight.js/lib/languages/gauss.js | 306 +
.../highlight.js/lib/languages/gauss.js.js | 10 +
.../highlight.js/lib/languages/gcode.js | 80 +
.../highlight.js/lib/languages/gcode.js.js | 10 +
.../highlight.js/lib/languages/gherkin.js | 49 +
.../highlight.js/lib/languages/gherkin.js.js | 10 +
.../highlight.js/lib/languages/glsl.js | 128 +
.../highlight.js/lib/languages/glsl.js.js | 10 +
.../highlight.js/lib/languages/gml.js | 2816 ++++
.../highlight.js/lib/languages/gml.js.js | 10 +
.../highlight.js/lib/languages/go.js | 141 +
.../highlight.js/lib/languages/go.js.js | 10 +
.../highlight.js/lib/languages/golo.js | 80 +
.../highlight.js/lib/languages/golo.js.js | 10 +
.../highlight.js/lib/languages/gradle.js | 189 +
.../highlight.js/lib/languages/gradle.js.js | 10 +
.../highlight.js/lib/languages/graphql.js | 78 +
.../highlight.js/lib/languages/graphql.js.js | 10 +
.../highlight.js/lib/languages/groovy.js | 189 +
.../highlight.js/lib/languages/groovy.js.js | 10 +
.../highlight.js/lib/languages/haml.js | 113 +
.../highlight.js/lib/languages/haml.js.js | 10 +
.../highlight.js/lib/languages/handlebars.js | 258 +
.../lib/languages/handlebars.js.js | 10 +
.../highlight.js/lib/languages/haskell.js | 217 +
.../highlight.js/lib/languages/haskell.js.js | 10 +
.../highlight.js/lib/languages/haxe.js | 166 +
.../highlight.js/lib/languages/haxe.js.js | 10 +
.../highlight.js/lib/languages/hsp.js | 59 +
.../highlight.js/lib/languages/hsp.js.js | 10 +
.../highlight.js/lib/languages/http.js | 97 +
.../highlight.js/lib/languages/http.js.js | 10 +
.../highlight.js/lib/languages/hy.js | 137 +
.../highlight.js/lib/languages/hy.js.js | 10 +
.../highlight.js/lib/languages/inform7.js | 69 +
.../highlight.js/lib/languages/inform7.js.js | 10 +
.../highlight.js/lib/languages/ini.js | 121 +
.../highlight.js/lib/languages/ini.js.js | 10 +
.../highlight.js/lib/languages/irpf90.js | 107 +
.../highlight.js/lib/languages/irpf90.js.js | 10 +
.../highlight.js/lib/languages/isbl.js | 3205 ++++
.../highlight.js/lib/languages/isbl.js.js | 10 +
.../highlight.js/lib/languages/java.js | 289 +
.../highlight.js/lib/languages/java.js.js | 10 +
.../highlight.js/lib/languages/javascript.js | 766 +
.../lib/languages/javascript.js.js | 10 +
.../highlight.js/lib/languages/jboss-cli.js | 63 +
.../lib/languages/jboss-cli.js.js | 10 +
.../highlight.js/lib/languages/json.js | 53 +
.../highlight.js/lib/languages/json.js.js | 10 +
.../highlight.js/lib/languages/julia-repl.js | 50 +
.../lib/languages/julia-repl.js.js | 10 +
.../highlight.js/lib/languages/julia.js | 441 +
.../highlight.js/lib/languages/julia.js.js | 10 +
.../highlight.js/lib/languages/kotlin.js | 286 +
.../highlight.js/lib/languages/kotlin.js.js | 10 +
.../highlight.js/lib/languages/lasso.js | 170 +
.../highlight.js/lib/languages/lasso.js.js | 10 +
.../highlight.js/lib/languages/latex.js | 278 +
.../highlight.js/lib/languages/latex.js.js | 10 +
.../highlight.js/lib/languages/ldif.js | 31 +
.../highlight.js/lib/languages/ldif.js.js | 10 +
.../highlight.js/lib/languages/leaf.js | 97 +
.../highlight.js/lib/languages/leaf.js.js | 10 +
.../highlight.js/lib/languages/less.js | 839 +
.../highlight.js/lib/languages/less.js.js | 10 +
.../highlight.js/lib/languages/lisp.js | 139 +
.../highlight.js/lib/languages/lisp.js.js | 10 +
.../lib/languages/livecodeserver.js | 173 +
.../lib/languages/livecodeserver.js.js | 10 +
.../highlight.js/lib/languages/livescript.js | 378 +
.../lib/languages/livescript.js.js | 10 +
.../highlight.js/lib/languages/llvm.js | 132 +
.../highlight.js/lib/languages/llvm.js.js | 10 +
.../highlight.js/lib/languages/lsl.js | 76 +
.../highlight.js/lib/languages/lsl.js.js | 10 +
.../highlight.js/lib/languages/lua.js | 80 +
.../highlight.js/lib/languages/lua.js.js | 10 +
.../highlight.js/lib/languages/makefile.js | 86 +
.../highlight.js/lib/languages/makefile.js.js | 10 +
.../highlight.js/lib/languages/markdown.js | 241 +
.../highlight.js/lib/languages/markdown.js.js | 10 +
.../highlight.js/lib/languages/mathematica.js | 7359 +++++++++
.../lib/languages/mathematica.js.js | 10 +
.../highlight.js/lib/languages/matlab.js | 107 +
.../highlight.js/lib/languages/matlab.js.js | 10 +
.../highlight.js/lib/languages/maxima.js | 414 +
.../highlight.js/lib/languages/maxima.js.js | 10 +
.../highlight.js/lib/languages/mel.js | 235 +
.../highlight.js/lib/languages/mel.js.js | 10 +
.../highlight.js/lib/languages/mercury.js | 107 +
.../highlight.js/lib/languages/mercury.js.js | 10 +
.../highlight.js/lib/languages/mipsasm.js | 104 +
.../highlight.js/lib/languages/mipsasm.js.js | 10 +
.../highlight.js/lib/languages/mizar.js | 27 +
.../highlight.js/lib/languages/mizar.js.js | 10 +
.../highlight.js/lib/languages/mojolicious.js | 36 +
.../lib/languages/mojolicious.js.js | 10 +
.../highlight.js/lib/languages/monkey.js | 183 +
.../highlight.js/lib/languages/monkey.js.js | 10 +
.../highlight.js/lib/languages/moonscript.js | 141 +
.../lib/languages/moonscript.js.js | 10 +
.../highlight.js/lib/languages/n1ql.js | 364 +
.../highlight.js/lib/languages/n1ql.js.js | 10 +
.../highlight.js/lib/languages/nestedtext.js | 83 +
.../lib/languages/nestedtext.js.js | 10 +
.../highlight.js/lib/languages/nginx.js | 153 +
.../highlight.js/lib/languages/nginx.js.js | 10 +
.../highlight.js/lib/languages/nim.js | 185 +
.../highlight.js/lib/languages/nim.js.js | 10 +
.../highlight.js/lib/languages/nix.js | 94 +
.../highlight.js/lib/languages/nix.js.js | 10 +
.../highlight.js/lib/languages/node-repl.js | 33 +
.../lib/languages/node-repl.js.js | 10 +
.../highlight.js/lib/languages/nsis.js | 556 +
.../highlight.js/lib/languages/nsis.js.js | 10 +
.../highlight.js/lib/languages/objectivec.js | 253 +
.../lib/languages/objectivec.js.js | 10 +
.../highlight.js/lib/languages/ocaml.js | 83 +
.../highlight.js/lib/languages/ocaml.js.js | 10 +
.../highlight.js/lib/languages/openscad.js | 77 +
.../highlight.js/lib/languages/openscad.js.js | 10 +
.../highlight.js/lib/languages/oxygene.js | 86 +
.../highlight.js/lib/languages/oxygene.js.js | 10 +
.../highlight.js/lib/languages/parser3.js | 55 +
.../highlight.js/lib/languages/parser3.js.js | 10 +
.../highlight.js/lib/languages/perl.js | 471 +
.../highlight.js/lib/languages/perl.js.js | 10 +
.../highlight.js/lib/languages/pf.js | 60 +
.../highlight.js/lib/languages/pf.js.js | 10 +
.../highlight.js/lib/languages/pgsql.js | 524 +
.../highlight.js/lib/languages/pgsql.js.js | 10 +
.../lib/languages/php-template.js | 54 +
.../lib/languages/php-template.js.js | 10 +
.../highlight.js/lib/languages/php.js | 613 +
.../highlight.js/lib/languages/php.js.js | 10 +
.../highlight.js/lib/languages/plaintext.js | 19 +
.../lib/languages/plaintext.js.js | 10 +
.../highlight.js/lib/languages/pony.js | 89 +
.../highlight.js/lib/languages/pony.js.js | 10 +
.../highlight.js/lib/languages/powershell.js | 316 +
.../lib/languages/powershell.js.js | 10 +
.../highlight.js/lib/languages/processing.js | 434 +
.../lib/languages/processing.js.js | 10 +
.../highlight.js/lib/languages/profile.js | 43 +
.../highlight.js/lib/languages/profile.js.js | 10 +
.../highlight.js/lib/languages/prolog.js | 96 +
.../highlight.js/lib/languages/prolog.js.js | 10 +
.../highlight.js/lib/languages/properties.js | 68 +
.../lib/languages/properties.js.js | 10 +
.../highlight.js/lib/languages/protobuf.js | 79 +
.../highlight.js/lib/languages/protobuf.js.js | 10 +
.../highlight.js/lib/languages/puppet.js | 146 +
.../highlight.js/lib/languages/puppet.js.js | 10 +
.../highlight.js/lib/languages/purebasic.js | 99 +
.../lib/languages/purebasic.js.js | 10 +
.../highlight.js/lib/languages/python-repl.js | 32 +
.../lib/languages/python-repl.js.js | 10 +
.../highlight.js/lib/languages/python.js | 434 +
.../highlight.js/lib/languages/python.js.js | 10 +
.../highlight.js/lib/languages/q.js | 37 +
.../highlight.js/lib/languages/q.js.js | 10 +
.../highlight.js/lib/languages/qml.js | 189 +
.../highlight.js/lib/languages/qml.js.js | 10 +
.../highlight.js/lib/languages/r.js | 257 +
.../highlight.js/lib/languages/r.js.js | 10 +
.../highlight.js/lib/languages/reasonml.js | 142 +
.../highlight.js/lib/languages/reasonml.js.js | 10 +
.../highlight.js/lib/languages/rib.js | 37 +
.../highlight.js/lib/languages/rib.js.js | 10 +
.../highlight.js/lib/languages/roboconf.js | 82 +
.../highlight.js/lib/languages/roboconf.js.js | 10 +
.../highlight.js/lib/languages/routeros.js | 163 +
.../highlight.js/lib/languages/routeros.js.js | 10 +
.../highlight.js/lib/languages/rsl.js | 149 +
.../highlight.js/lib/languages/rsl.js.js | 10 +
.../highlight.js/lib/languages/ruby.js | 448 +
.../highlight.js/lib/languages/ruby.js.js | 10 +
.../lib/languages/ruleslanguage.js | 76 +
.../lib/languages/ruleslanguage.js.js | 10 +
.../highlight.js/lib/languages/rust.js | 305 +
.../highlight.js/lib/languages/rust.js.js | 10 +
.../highlight.js/lib/languages/sas.js | 556 +
.../highlight.js/lib/languages/sas.js.js | 10 +
.../highlight.js/lib/languages/scala.js | 214 +
.../highlight.js/lib/languages/scala.js.js | 10 +
.../highlight.js/lib/languages/scheme.js | 196 +
.../highlight.js/lib/languages/scheme.js.js | 10 +
.../highlight.js/lib/languages/scilab.js | 73 +
.../highlight.js/lib/languages/scilab.js.js | 10 +
.../highlight.js/lib/languages/scss.js | 728 +
.../highlight.js/lib/languages/scss.js.js | 10 +
.../highlight.js/lib/languages/shell.js | 33 +
.../highlight.js/lib/languages/shell.js.js | 10 +
.../highlight.js/lib/languages/smali.js | 125 +
.../highlight.js/lib/languages/smali.js.js | 10 +
.../highlight.js/lib/languages/smalltalk.js | 68 +
.../lib/languages/smalltalk.js.js | 10 +
.../highlight.js/lib/languages/sml.js | 75 +
.../highlight.js/lib/languages/sml.js.js | 10 +
.../highlight.js/lib/languages/sqf.js | 2662 ++++
.../highlight.js/lib/languages/sqf.js.js | 10 +
.../highlight.js/lib/languages/sql.js | 682 +
.../highlight.js/lib/languages/sql.js.js | 10 +
.../highlight.js/lib/languages/stan.js | 521 +
.../highlight.js/lib/languages/stan.js.js | 10 +
.../highlight.js/lib/languages/stata.js | 53 +
.../highlight.js/lib/languages/stata.js.js | 10 +
.../highlight.js/lib/languages/step21.js | 66 +
.../highlight.js/lib/languages/step21.js.js | 10 +
.../highlight.js/lib/languages/stylus.js | 788 +
.../highlight.js/lib/languages/stylus.js.js | 10 +
.../highlight.js/lib/languages/subunit.js | 43 +
.../highlight.js/lib/languages/subunit.js.js | 10 +
.../highlight.js/lib/languages/swift.js | 920 ++
.../highlight.js/lib/languages/swift.js.js | 10 +
.../lib/languages/taggerscript.js | 58 +
.../lib/languages/taggerscript.js.js | 10 +
.../highlight.js/lib/languages/tap.js | 47 +
.../highlight.js/lib/languages/tap.js.js | 10 +
.../highlight.js/lib/languages/tcl.js | 190 +
.../highlight.js/lib/languages/tcl.js.js | 10 +
.../highlight.js/lib/languages/thrift.js | 77 +
.../highlight.js/lib/languages/thrift.js.js | 10 +
.../highlight.js/lib/languages/tp.js | 171 +
.../highlight.js/lib/languages/tp.js.js | 10 +
.../highlight.js/lib/languages/twig.js | 260 +
.../highlight.js/lib/languages/twig.js.js | 10 +
.../highlight.js/lib/languages/typescript.js | 880 ++
.../lib/languages/typescript.js.js | 10 +
.../highlight.js/lib/languages/vala.js | 60 +
.../highlight.js/lib/languages/vala.js.js | 10 +
.../highlight.js/lib/languages/vbnet.js | 157 +
.../highlight.js/lib/languages/vbnet.js.js | 10 +
.../lib/languages/vbscript-html.js | 24 +
.../lib/languages/vbscript-html.js.js | 10 +
.../highlight.js/lib/languages/vbscript.js | 220 +
.../highlight.js/lib/languages/vbscript.js.js | 10 +
.../highlight.js/lib/languages/verilog.js | 549 +
.../highlight.js/lib/languages/verilog.js.js | 10 +
.../highlight.js/lib/languages/vhdl.js | 215 +
.../highlight.js/lib/languages/vhdl.js.js | 10 +
.../highlight.js/lib/languages/vim.js | 129 +
.../highlight.js/lib/languages/vim.js.js | 10 +
.../highlight.js/lib/languages/wasm.js | 139 +
.../highlight.js/lib/languages/wasm.js.js | 10 +
.../highlight.js/lib/languages/wren.js | 302 +
.../highlight.js/lib/languages/wren.js.js | 10 +
.../highlight.js/lib/languages/x86asm.js | 153 +
.../highlight.js/lib/languages/x86asm.js.js | 10 +
.../highlight.js/lib/languages/xl.js | 205 +
.../highlight.js/lib/languages/xl.js.js | 10 +
.../highlight.js/lib/languages/xml.js | 241 +
.../highlight.js/lib/languages/xml.js.js | 10 +
.../highlight.js/lib/languages/xquery.js | 360 +
.../highlight.js/lib/languages/xquery.js.js | 10 +
.../highlight.js/lib/languages/yaml.js | 194 +
.../highlight.js/lib/languages/yaml.js.js | 10 +
.../highlight.js/lib/languages/zephir.js | 128 +
.../highlight.js/lib/languages/zephir.js.js | 10 +
.../node_modules/highlight.js/package.json | 119 +
.../highlight.js/scss/a11y-dark.scss | 94 +
.../highlight.js/scss/a11y-light.scss | 94 +
.../node_modules/highlight.js/scss/agate.scss | 127 +
.../highlight.js/scss/an-old-hope.scss | 75 +
.../highlight.js/scss/androidstudio.scss | 60 +
.../highlight.js/scss/arduino-light.scss | 78 +
.../node_modules/highlight.js/scss/arta.scss | 66 +
.../highlight.js/scss/ascetic.scss | 45 +
.../scss/atom-one-dark-reasonable.scss | 105 +
.../highlight.js/scss/atom-one-dark.scss | 90 +
.../highlight.js/scss/atom-one-light.scss | 90 +
.../highlight.js/scss/base16/3024.scss | 163 +
.../highlight.js/scss/base16/apathy.scss | 163 +
.../highlight.js/scss/base16/apprentice.scss | 163 +
.../highlight.js/scss/base16/ashes.scss | 163 +
.../scss/base16/atelier-cave-light.scss | 163 +
.../scss/base16/atelier-cave.scss | 163 +
.../scss/base16/atelier-dune-light.scss | 163 +
.../scss/base16/atelier-dune.scss | 163 +
.../scss/base16/atelier-estuary-light.scss | 163 +
.../scss/base16/atelier-estuary.scss | 163 +
.../scss/base16/atelier-forest-light.scss | 163 +
.../scss/base16/atelier-forest.scss | 163 +
.../scss/base16/atelier-heath-light.scss | 163 +
.../scss/base16/atelier-heath.scss | 163 +
.../scss/base16/atelier-lakeside-light.scss | 163 +
.../scss/base16/atelier-lakeside.scss | 163 +
.../scss/base16/atelier-plateau-light.scss | 163 +
.../scss/base16/atelier-plateau.scss | 163 +
.../scss/base16/atelier-savanna-light.scss | 163 +
.../scss/base16/atelier-savanna.scss | 163 +
.../scss/base16/atelier-seaside-light.scss | 163 +
.../scss/base16/atelier-seaside.scss | 163 +
.../base16/atelier-sulphurpool-light.scss | 163 +
.../scss/base16/atelier-sulphurpool.scss | 163 +
.../highlight.js/scss/base16/atlas.scss | 163 +
.../highlight.js/scss/base16/bespin.scss | 163 +
.../scss/base16/black-metal-bathory.scss | 163 +
.../scss/base16/black-metal-burzum.scss | 163 +
.../scss/base16/black-metal-dark-funeral.scss | 163 +
.../scss/base16/black-metal-gorgoroth.scss | 163 +
.../scss/base16/black-metal-immortal.scss | 163 +
.../scss/base16/black-metal-khold.scss | 163 +
.../scss/base16/black-metal-marduk.scss | 163 +
.../scss/base16/black-metal-mayhem.scss | 163 +
.../scss/base16/black-metal-nile.scss | 163 +
.../scss/base16/black-metal-venom.scss | 163 +
.../highlight.js/scss/base16/black-metal.scss | 163 +
.../highlight.js/scss/base16/brewer.scss | 163 +
.../highlight.js/scss/base16/bright.scss | 163 +
.../highlight.js/scss/base16/brogrammer.scss | 163 +
.../scss/base16/brush-trees-dark.scss | 163 +
.../highlight.js/scss/base16/brush-trees.scss | 163 +
.../highlight.js/scss/base16/chalk.scss | 163 +
.../highlight.js/scss/base16/circus.scss | 163 +
.../scss/base16/classic-dark.scss | 163 +
.../scss/base16/classic-light.scss | 163 +
.../highlight.js/scss/base16/codeschool.scss | 163 +
.../highlight.js/scss/base16/colors.scss | 163 +
.../highlight.js/scss/base16/cupcake.scss | 163 +
.../highlight.js/scss/base16/cupertino.scss | 163 +
.../highlight.js/scss/base16/danqing.scss | 163 +
.../highlight.js/scss/base16/darcula.scss | 163 +
.../highlight.js/scss/base16/dark-violet.scss | 163 +
.../highlight.js/scss/base16/darkmoss.scss | 163 +
.../highlight.js/scss/base16/darktooth.scss | 163 +
.../highlight.js/scss/base16/decaf.scss | 163 +
.../scss/base16/default-dark.scss | 163 +
.../scss/base16/default-light.scss | 163 +
.../highlight.js/scss/base16/dirtysea.scss | 163 +
.../highlight.js/scss/base16/dracula.scss | 163 +
.../highlight.js/scss/base16/edge-dark.scss | 163 +
.../highlight.js/scss/base16/edge-light.scss | 163 +
.../highlight.js/scss/base16/eighties.scss | 163 +
.../highlight.js/scss/base16/embers.scss | 163 +
.../scss/base16/equilibrium-dark.scss | 163 +
.../scss/base16/equilibrium-gray-dark.scss | 163 +
.../scss/base16/equilibrium-gray-light.scss | 163 +
.../scss/base16/equilibrium-light.scss | 163 +
.../highlight.js/scss/base16/espresso.scss | 163 +
.../highlight.js/scss/base16/eva-dim.scss | 163 +
.../highlight.js/scss/base16/eva.scss | 163 +
.../highlight.js/scss/base16/flat.scss | 163 +
.../highlight.js/scss/base16/framer.scss | 163 +
.../highlight.js/scss/base16/fruit-soda.scss | 163 +
.../highlight.js/scss/base16/gigavolt.scss | 163 +
.../highlight.js/scss/base16/github.scss | 163 +
.../highlight.js/scss/base16/google-dark.scss | 163 +
.../scss/base16/google-light.scss | 163 +
.../scss/base16/grayscale-dark.scss | 163 +
.../scss/base16/grayscale-light.scss | 163 +
.../scss/base16/green-screen.scss | 163 +
.../scss/base16/gruvbox-dark-hard.scss | 163 +
.../scss/base16/gruvbox-dark-medium.scss | 163 +
.../scss/base16/gruvbox-dark-pale.scss | 163 +
.../scss/base16/gruvbox-dark-soft.scss | 163 +
.../scss/base16/gruvbox-light-hard.scss | 163 +
.../scss/base16/gruvbox-light-medium.scss | 163 +
.../scss/base16/gruvbox-light-soft.scss | 163 +
.../highlight.js/scss/base16/hardcore.scss | 163 +
.../scss/base16/harmonic16-dark.scss | 163 +
.../scss/base16/harmonic16-light.scss | 163 +
.../highlight.js/scss/base16/heetch-dark.scss | 163 +
.../scss/base16/heetch-light.scss | 163 +
.../highlight.js/scss/base16/helios.scss | 163 +
.../highlight.js/scss/base16/hopscotch.scss | 163 +
.../scss/base16/horizon-dark.scss | 163 +
.../scss/base16/horizon-light.scss | 163 +
.../scss/base16/humanoid-dark.scss | 163 +
.../scss/base16/humanoid-light.scss | 163 +
.../highlight.js/scss/base16/ia-dark.scss | 163 +
.../highlight.js/scss/base16/ia-light.scss | 163 +
.../highlight.js/scss/base16/icy-dark.scss | 163 +
.../highlight.js/scss/base16/ir-black.scss | 163 +
.../highlight.js/scss/base16/isotope.scss | 163 +
.../highlight.js/scss/base16/kimber.scss | 163 +
.../highlight.js/scss/base16/london-tube.scss | 163 +
.../highlight.js/scss/base16/macintosh.scss | 163 +
.../highlight.js/scss/base16/marrakesh.scss | 163 +
.../highlight.js/scss/base16/materia.scss | 163 +
.../scss/base16/material-darker.scss | 163 +
.../scss/base16/material-lighter.scss | 163 +
.../scss/base16/material-palenight.scss | 163 +
.../scss/base16/material-vivid.scss | 163 +
.../highlight.js/scss/base16/material.scss | 163 +
.../scss/base16/mellow-purple.scss | 163 +
.../scss/base16/mexico-light.scss | 163 +
.../highlight.js/scss/base16/mocha.scss | 163 +
.../highlight.js/scss/base16/monokai.scss | 163 +
.../highlight.js/scss/base16/nebula.scss | 163 +
.../highlight.js/scss/base16/nord.scss | 163 +
.../highlight.js/scss/base16/nova.scss | 163 +
.../highlight.js/scss/base16/ocean.scss | 163 +
.../highlight.js/scss/base16/oceanicnext.scss | 163 +
.../highlight.js/scss/base16/one-light.scss | 163 +
.../highlight.js/scss/base16/onedark.scss | 163 +
.../highlight.js/scss/base16/outrun-dark.scss | 163 +
.../scss/base16/papercolor-dark.scss | 163 +
.../scss/base16/papercolor-light.scss | 163 +
.../highlight.js/scss/base16/paraiso.scss | 163 +
.../highlight.js/scss/base16/pasque.scss | 163 +
.../highlight.js/scss/base16/phd.scss | 163 +
.../highlight.js/scss/base16/pico.scss | 163 +
.../highlight.js/scss/base16/pop.scss | 163 +
.../highlight.js/scss/base16/porple.scss | 163 +
.../highlight.js/scss/base16/qualia.scss | 163 +
.../highlight.js/scss/base16/railscasts.scss | 163 +
.../highlight.js/scss/base16/rebecca.scss | 163 +
.../scss/base16/ros-pine-dawn.scss | 163 +
.../scss/base16/ros-pine-moon.scss | 163 +
.../highlight.js/scss/base16/ros-pine.scss | 163 +
.../highlight.js/scss/base16/sagelight.scss | 163 +
.../highlight.js/scss/base16/sandcastle.scss | 163 +
.../highlight.js/scss/base16/seti-ui.scss | 163 +
.../scss/base16/shapeshifter.scss | 163 +
.../highlight.js/scss/base16/silk-dark.scss | 163 +
.../highlight.js/scss/base16/silk-light.scss | 163 +
.../highlight.js/scss/base16/snazzy.scss | 163 +
.../scss/base16/solar-flare-light.scss | 163 +
.../highlight.js/scss/base16/solar-flare.scss | 163 +
.../scss/base16/solarized-dark.scss | 163 +
.../scss/base16/solarized-light.scss | 163 +
.../highlight.js/scss/base16/spacemacs.scss | 163 +
.../highlight.js/scss/base16/summercamp.scss | 163 +
.../scss/base16/summerfruit-dark.scss | 163 +
.../scss/base16/summerfruit-light.scss | 163 +
.../base16/synth-midnight-terminal-dark.scss | 163 +
.../base16/synth-midnight-terminal-light.scss | 163 +
.../highlight.js/scss/base16/tango.scss | 163 +
.../highlight.js/scss/base16/tender.scss | 163 +
.../scss/base16/tomorrow-night.scss | 163 +
.../highlight.js/scss/base16/tomorrow.scss | 163 +
.../highlight.js/scss/base16/twilight.scss | 163 +
.../scss/base16/unikitty-dark.scss | 163 +
.../scss/base16/unikitty-light.scss | 163 +
.../highlight.js/scss/base16/vulcan.scss | 163 +
.../scss/base16/windows-10-light.scss | 163 +
.../highlight.js/scss/base16/windows-10.scss | 163 +
.../scss/base16/windows-95-light.scss | 163 +
.../highlight.js/scss/base16/windows-95.scss | 163 +
.../base16/windows-high-contrast-light.scss | 163 +
.../scss/base16/windows-high-contrast.scss | 163 +
.../scss/base16/windows-nt-light.scss | 163 +
.../highlight.js/scss/base16/windows-nt.scss | 163 +
.../highlight.js/scss/base16/woodland.scss | 163 +
.../highlight.js/scss/base16/xcode-dusk.scss | 163 +
.../highlight.js/scss/base16/zenburn.scss | 163 +
.../highlight.js/scss/brown-paper.scss | 63 +
.../highlight.js/scss/codepen-embed.scss | 57 +
.../highlight.js/scss/color-brewer.scss | 66 +
.../node_modules/highlight.js/scss/dark.scss | 62 +
.../highlight.js/scss/default.scss | 117 +
.../highlight.js/scss/devibeans.scss | 90 +
.../node_modules/highlight.js/scss/docco.scss | 83 +
.../node_modules/highlight.js/scss/far.scss | 67 +
.../highlight.js/scss/felipec.scss | 94 +
.../highlight.js/scss/foundation.scss | 80 +
.../highlight.js/scss/github-dark-dimmed.scss | 117 +
.../highlight.js/scss/github-dark.scss | 118 +
.../highlight.js/scss/github.scss | 118 +
.../node_modules/highlight.js/scss/gml.scss | 72 +
.../highlight.js/scss/googlecode.scss | 79 +
.../highlight.js/scss/gradient-dark.scss | 90 +
.../highlight.js/scss/gradient-light.scss | 90 +
.../highlight.js/scss/grayscale.scss | 89 +
.../highlight.js/scss/hybrid.scss | 88 +
.../node_modules/highlight.js/scss/idea.scss | 86 +
.../highlight.js/scss/intellij-light.scss | 107 +
.../highlight.js/scss/ir-black.scss | 66 +
.../highlight.js/scss/isbl-editor-dark.scss | 94 +
.../highlight.js/scss/isbl-editor-light.scss | 93 +
.../highlight.js/scss/kimbie-dark.scss | 69 +
.../highlight.js/scss/kimbie-light.scss | 69 +
.../highlight.js/scss/lightfair.scss | 81 +
.../highlight.js/scss/lioshi.scss | 76 +
.../highlight.js/scss/magula.scss | 66 +
.../highlight.js/scss/mono-blue.scss | 56 +
.../highlight.js/scss/monokai-sublime.scss | 76 +
.../highlight.js/scss/monokai.scss | 68 +
.../highlight.js/scss/night-owl.scss | 174 +
.../highlight.js/scss/nnfx-dark.scss | 104 +
.../highlight.js/scss/nnfx-light.scss | 104 +
.../node_modules/highlight.js/scss/nord.scss | 275 +
.../highlight.js/scss/obsidian.scss | 79 +
.../highlight.js/scss/panda-syntax-dark.scss | 92 +
.../highlight.js/scss/panda-syntax-light.scss | 89 +
.../highlight.js/scss/paraiso-dark.scss | 67 +
.../highlight.js/scss/paraiso-light.scss | 67 +
.../highlight.js/scss/pojoaque.scss | 76 +
.../highlight.js/scss/purebasic.scss | 103 +
.../highlight.js/scss/qtcreator-dark.scss | 76 +
.../highlight.js/scss/qtcreator-light.scss | 74 +
.../highlight.js/scss/rainbow.scss | 77 +
.../highlight.js/scss/routeros.scss | 86 +
.../highlight.js/scss/school-book.scss | 62 +
.../highlight.js/scss/shades-of-purple.scss | 84 +
.../highlight.js/scss/srcery.scss | 89 +
.../highlight.js/scss/stackoverflow-dark.scss | 117 +
.../scss/stackoverflow-light.scss | 117 +
.../highlight.js/scss/sunburst.scss | 89 +
.../highlight.js/scss/tokyo-night-dark.scss | 114 +
.../highlight.js/scss/tokyo-night-light.scss | 114 +
.../scss/tomorrow-night-blue.scss | 69 +
.../scss/tomorrow-night-bright.scss | 68 +
.../node_modules/highlight.js/scss/vs.scss | 63 +
.../highlight.js/scss/vs2015.scss | 100 +
.../node_modules/highlight.js/scss/xcode.scss | 90 +
.../node_modules/highlight.js/scss/xt256.scss | 79 +
.../highlight.js/styles/a11y-dark.css | 94 +
.../highlight.js/styles/a11y-dark.min.css | 7 +
.../highlight.js/styles/a11y-light.css | 94 +
.../highlight.js/styles/a11y-light.min.css | 7 +
.../highlight.js/styles/agate.css | 127 +
.../highlight.js/styles/agate.min.css | 20 +
.../highlight.js/styles/an-old-hope.css | 75 +
.../highlight.js/styles/an-old-hope.min.css | 9 +
.../highlight.js/styles/androidstudio.css | 60 +
.../highlight.js/styles/androidstudio.min.css | 1 +
.../highlight.js/styles/arduino-light.css | 78 +
.../highlight.js/styles/arduino-light.min.css | 1 +
.../node_modules/highlight.js/styles/arta.css | 66 +
.../highlight.js/styles/arta.min.css | 1 +
.../highlight.js/styles/ascetic.css | 45 +
.../highlight.js/styles/ascetic.min.css | 1 +
.../styles/atom-one-dark-reasonable.css | 105 +
.../styles/atom-one-dark-reasonable.min.css | 1 +
.../highlight.js/styles/atom-one-dark.css | 90 +
.../highlight.js/styles/atom-one-dark.min.css | 1 +
.../highlight.js/styles/atom-one-light.css | 90 +
.../styles/atom-one-light.min.css | 1 +
.../highlight.js/styles/base16/3024.css | 163 +
.../highlight.js/styles/base16/3024.min.css | 7 +
.../highlight.js/styles/base16/apathy.css | 163 +
.../highlight.js/styles/base16/apathy.min.css | 7 +
.../highlight.js/styles/base16/apprentice.css | 163 +
.../styles/base16/apprentice.min.css | 7 +
.../highlight.js/styles/base16/ashes.css | 163 +
.../highlight.js/styles/base16/ashes.min.css | 7 +
.../styles/base16/atelier-cave-light.css | 163 +
.../styles/base16/atelier-cave-light.min.css | 7 +
.../styles/base16/atelier-cave.css | 163 +
.../styles/base16/atelier-cave.min.css | 7 +
.../styles/base16/atelier-dune-light.css | 163 +
.../styles/base16/atelier-dune-light.min.css | 7 +
.../styles/base16/atelier-dune.css | 163 +
.../styles/base16/atelier-dune.min.css | 7 +
.../styles/base16/atelier-estuary-light.css | 163 +
.../base16/atelier-estuary-light.min.css | 7 +
.../styles/base16/atelier-estuary.css | 163 +
.../styles/base16/atelier-estuary.min.css | 7 +
.../styles/base16/atelier-forest-light.css | 163 +
.../base16/atelier-forest-light.min.css | 7 +
.../styles/base16/atelier-forest.css | 163 +
.../styles/base16/atelier-forest.min.css | 7 +
.../styles/base16/atelier-heath-light.css | 163 +
.../styles/base16/atelier-heath-light.min.css | 7 +
.../styles/base16/atelier-heath.css | 163 +
.../styles/base16/atelier-heath.min.css | 7 +
.../styles/base16/atelier-lakeside-light.css | 163 +
.../base16/atelier-lakeside-light.min.css | 7 +
.../styles/base16/atelier-lakeside.css | 163 +
.../styles/base16/atelier-lakeside.min.css | 7 +
.../styles/base16/atelier-plateau-light.css | 163 +
.../base16/atelier-plateau-light.min.css | 7 +
.../styles/base16/atelier-plateau.css | 163 +
.../styles/base16/atelier-plateau.min.css | 7 +
.../styles/base16/atelier-savanna-light.css | 163 +
.../base16/atelier-savanna-light.min.css | 7 +
.../styles/base16/atelier-savanna.css | 163 +
.../styles/base16/atelier-savanna.min.css | 7 +
.../styles/base16/atelier-seaside-light.css | 163 +
.../base16/atelier-seaside-light.min.css | 7 +
.../styles/base16/atelier-seaside.css | 163 +
.../styles/base16/atelier-seaside.min.css | 7 +
.../base16/atelier-sulphurpool-light.css | 163 +
.../base16/atelier-sulphurpool-light.min.css | 7 +
.../styles/base16/atelier-sulphurpool.css | 163 +
.../styles/base16/atelier-sulphurpool.min.css | 7 +
.../highlight.js/styles/base16/atlas.css | 163 +
.../highlight.js/styles/base16/atlas.min.css | 7 +
.../highlight.js/styles/base16/bespin.css | 163 +
.../highlight.js/styles/base16/bespin.min.css | 7 +
.../styles/base16/black-metal-bathory.css | 163 +
.../styles/base16/black-metal-bathory.min.css | 7 +
.../styles/base16/black-metal-burzum.css | 163 +
.../styles/base16/black-metal-burzum.min.css | 7 +
.../base16/black-metal-dark-funeral.css | 163 +
.../base16/black-metal-dark-funeral.min.css | 7 +
.../styles/base16/black-metal-gorgoroth.css | 163 +
.../base16/black-metal-gorgoroth.min.css | 7 +
.../styles/base16/black-metal-immortal.css | 163 +
.../base16/black-metal-immortal.min.css | 7 +
.../styles/base16/black-metal-khold.css | 163 +
.../styles/base16/black-metal-khold.min.css | 7 +
.../styles/base16/black-metal-marduk.css | 163 +
.../styles/base16/black-metal-marduk.min.css | 7 +
.../styles/base16/black-metal-mayhem.css | 163 +
.../styles/base16/black-metal-mayhem.min.css | 7 +
.../styles/base16/black-metal-nile.css | 163 +
.../styles/base16/black-metal-nile.min.css | 7 +
.../styles/base16/black-metal-venom.css | 163 +
.../styles/base16/black-metal-venom.min.css | 7 +
.../styles/base16/black-metal.css | 163 +
.../styles/base16/black-metal.min.css | 7 +
.../highlight.js/styles/base16/brewer.css | 163 +
.../highlight.js/styles/base16/brewer.min.css | 7 +
.../highlight.js/styles/base16/bright.css | 163 +
.../highlight.js/styles/base16/bright.min.css | 7 +
.../highlight.js/styles/base16/brogrammer.css | 163 +
.../styles/base16/brogrammer.min.css | 7 +
.../styles/base16/brush-trees-dark.css | 163 +
.../styles/base16/brush-trees-dark.min.css | 7 +
.../styles/base16/brush-trees.css | 163 +
.../styles/base16/brush-trees.min.css | 7 +
.../highlight.js/styles/base16/chalk.css | 163 +
.../highlight.js/styles/base16/chalk.min.css | 7 +
.../highlight.js/styles/base16/circus.css | 163 +
.../highlight.js/styles/base16/circus.min.css | 7 +
.../styles/base16/classic-dark.css | 163 +
.../styles/base16/classic-dark.min.css | 7 +
.../styles/base16/classic-light.css | 163 +
.../styles/base16/classic-light.min.css | 7 +
.../highlight.js/styles/base16/codeschool.css | 163 +
.../styles/base16/codeschool.min.css | 7 +
.../highlight.js/styles/base16/colors.css | 163 +
.../highlight.js/styles/base16/colors.min.css | 7 +
.../highlight.js/styles/base16/cupcake.css | 163 +
.../styles/base16/cupcake.min.css | 7 +
.../highlight.js/styles/base16/cupertino.css | 163 +
.../styles/base16/cupertino.min.css | 7 +
.../highlight.js/styles/base16/danqing.css | 163 +
.../styles/base16/danqing.min.css | 7 +
.../highlight.js/styles/base16/darcula.css | 163 +
.../styles/base16/darcula.min.css | 7 +
.../styles/base16/dark-violet.css | 163 +
.../styles/base16/dark-violet.min.css | 7 +
.../highlight.js/styles/base16/darkmoss.css | 163 +
.../styles/base16/darkmoss.min.css | 7 +
.../highlight.js/styles/base16/darktooth.css | 163 +
.../styles/base16/darktooth.min.css | 7 +
.../highlight.js/styles/base16/decaf.css | 163 +
.../highlight.js/styles/base16/decaf.min.css | 7 +
.../styles/base16/default-dark.css | 163 +
.../styles/base16/default-dark.min.css | 7 +
.../styles/base16/default-light.css | 163 +
.../styles/base16/default-light.min.css | 7 +
.../highlight.js/styles/base16/dirtysea.css | 163 +
.../styles/base16/dirtysea.min.css | 7 +
.../highlight.js/styles/base16/dracula.css | 163 +
.../styles/base16/dracula.min.css | 7 +
.../highlight.js/styles/base16/edge-dark.css | 163 +
.../styles/base16/edge-dark.min.css | 7 +
.../highlight.js/styles/base16/edge-light.css | 163 +
.../styles/base16/edge-light.min.css | 7 +
.../highlight.js/styles/base16/eighties.css | 163 +
.../styles/base16/eighties.min.css | 7 +
.../highlight.js/styles/base16/embers.css | 163 +
.../highlight.js/styles/base16/embers.min.css | 7 +
.../styles/base16/equilibrium-dark.css | 163 +
.../styles/base16/equilibrium-dark.min.css | 7 +
.../styles/base16/equilibrium-gray-dark.css | 163 +
.../base16/equilibrium-gray-dark.min.css | 7 +
.../styles/base16/equilibrium-gray-light.css | 163 +
.../base16/equilibrium-gray-light.min.css | 7 +
.../styles/base16/equilibrium-light.css | 163 +
.../styles/base16/equilibrium-light.min.css | 7 +
.../highlight.js/styles/base16/espresso.css | 163 +
.../styles/base16/espresso.min.css | 7 +
.../highlight.js/styles/base16/eva-dim.css | 163 +
.../styles/base16/eva-dim.min.css | 7 +
.../highlight.js/styles/base16/eva.css | 163 +
.../highlight.js/styles/base16/eva.min.css | 7 +
.../highlight.js/styles/base16/flat.css | 163 +
.../highlight.js/styles/base16/flat.min.css | 7 +
.../highlight.js/styles/base16/framer.css | 163 +
.../highlight.js/styles/base16/framer.min.css | 7 +
.../highlight.js/styles/base16/fruit-soda.css | 163 +
.../styles/base16/fruit-soda.min.css | 7 +
.../highlight.js/styles/base16/gigavolt.css | 163 +
.../styles/base16/gigavolt.min.css | 7 +
.../highlight.js/styles/base16/github.css | 163 +
.../highlight.js/styles/base16/github.min.css | 7 +
.../styles/base16/google-dark.css | 163 +
.../styles/base16/google-dark.min.css | 7 +
.../styles/base16/google-light.css | 163 +
.../styles/base16/google-light.min.css | 7 +
.../styles/base16/grayscale-dark.css | 163 +
.../styles/base16/grayscale-dark.min.css | 7 +
.../styles/base16/grayscale-light.css | 163 +
.../styles/base16/grayscale-light.min.css | 7 +
.../styles/base16/green-screen.css | 163 +
.../styles/base16/green-screen.min.css | 7 +
.../styles/base16/gruvbox-dark-hard.css | 163 +
.../styles/base16/gruvbox-dark-hard.min.css | 7 +
.../styles/base16/gruvbox-dark-medium.css | 163 +
.../styles/base16/gruvbox-dark-medium.min.css | 7 +
.../styles/base16/gruvbox-dark-pale.css | 163 +
.../styles/base16/gruvbox-dark-pale.min.css | 7 +
.../styles/base16/gruvbox-dark-soft.css | 163 +
.../styles/base16/gruvbox-dark-soft.min.css | 7 +
.../styles/base16/gruvbox-light-hard.css | 163 +
.../styles/base16/gruvbox-light-hard.min.css | 7 +
.../styles/base16/gruvbox-light-medium.css | 163 +
.../base16/gruvbox-light-medium.min.css | 7 +
.../styles/base16/gruvbox-light-soft.css | 163 +
.../styles/base16/gruvbox-light-soft.min.css | 7 +
.../highlight.js/styles/base16/hardcore.css | 163 +
.../styles/base16/hardcore.min.css | 7 +
.../styles/base16/harmonic16-dark.css | 163 +
.../styles/base16/harmonic16-dark.min.css | 7 +
.../styles/base16/harmonic16-light.css | 163 +
.../styles/base16/harmonic16-light.min.css | 7 +
.../styles/base16/heetch-dark.css | 163 +
.../styles/base16/heetch-dark.min.css | 7 +
.../styles/base16/heetch-light.css | 163 +
.../styles/base16/heetch-light.min.css | 7 +
.../highlight.js/styles/base16/helios.css | 163 +
.../highlight.js/styles/base16/helios.min.css | 7 +
.../highlight.js/styles/base16/hopscotch.css | 163 +
.../styles/base16/hopscotch.min.css | 7 +
.../styles/base16/horizon-dark.css | 163 +
.../styles/base16/horizon-dark.min.css | 7 +
.../styles/base16/horizon-light.css | 163 +
.../styles/base16/horizon-light.min.css | 7 +
.../styles/base16/humanoid-dark.css | 163 +
.../styles/base16/humanoid-dark.min.css | 7 +
.../styles/base16/humanoid-light.css | 163 +
.../styles/base16/humanoid-light.min.css | 7 +
.../highlight.js/styles/base16/ia-dark.css | 163 +
.../styles/base16/ia-dark.min.css | 7 +
.../highlight.js/styles/base16/ia-light.css | 163 +
.../styles/base16/ia-light.min.css | 7 +
.../highlight.js/styles/base16/icy-dark.css | 163 +
.../styles/base16/icy-dark.min.css | 7 +
.../highlight.js/styles/base16/ir-black.css | 163 +
.../styles/base16/ir-black.min.css | 7 +
.../highlight.js/styles/base16/isotope.css | 163 +
.../styles/base16/isotope.min.css | 7 +
.../highlight.js/styles/base16/kimber.css | 163 +
.../highlight.js/styles/base16/kimber.min.css | 7 +
.../styles/base16/london-tube.css | 163 +
.../styles/base16/london-tube.min.css | 7 +
.../highlight.js/styles/base16/macintosh.css | 163 +
.../styles/base16/macintosh.min.css | 7 +
.../highlight.js/styles/base16/marrakesh.css | 163 +
.../styles/base16/marrakesh.min.css | 7 +
.../highlight.js/styles/base16/materia.css | 163 +
.../styles/base16/materia.min.css | 7 +
.../styles/base16/material-darker.css | 163 +
.../styles/base16/material-darker.min.css | 7 +
.../styles/base16/material-lighter.css | 163 +
.../styles/base16/material-lighter.min.css | 7 +
.../styles/base16/material-palenight.css | 163 +
.../styles/base16/material-palenight.min.css | 7 +
.../styles/base16/material-vivid.css | 163 +
.../styles/base16/material-vivid.min.css | 7 +
.../highlight.js/styles/base16/material.css | 163 +
.../styles/base16/material.min.css | 7 +
.../styles/base16/mellow-purple.css | 163 +
.../styles/base16/mellow-purple.min.css | 7 +
.../styles/base16/mexico-light.css | 163 +
.../styles/base16/mexico-light.min.css | 7 +
.../highlight.js/styles/base16/mocha.css | 163 +
.../highlight.js/styles/base16/mocha.min.css | 7 +
.../highlight.js/styles/base16/monokai.css | 163 +
.../styles/base16/monokai.min.css | 7 +
.../highlight.js/styles/base16/nebula.css | 163 +
.../highlight.js/styles/base16/nebula.min.css | 7 +
.../highlight.js/styles/base16/nord.css | 163 +
.../highlight.js/styles/base16/nord.min.css | 7 +
.../highlight.js/styles/base16/nova.css | 163 +
.../highlight.js/styles/base16/nova.min.css | 7 +
.../highlight.js/styles/base16/ocean.css | 163 +
.../highlight.js/styles/base16/ocean.min.css | 7 +
.../styles/base16/oceanicnext.css | 163 +
.../styles/base16/oceanicnext.min.css | 7 +
.../highlight.js/styles/base16/one-light.css | 163 +
.../styles/base16/one-light.min.css | 7 +
.../highlight.js/styles/base16/onedark.css | 163 +
.../styles/base16/onedark.min.css | 7 +
.../styles/base16/outrun-dark.css | 163 +
.../styles/base16/outrun-dark.min.css | 7 +
.../styles/base16/papercolor-dark.css | 163 +
.../styles/base16/papercolor-dark.min.css | 7 +
.../styles/base16/papercolor-light.css | 163 +
.../styles/base16/papercolor-light.min.css | 7 +
.../highlight.js/styles/base16/paraiso.css | 163 +
.../styles/base16/paraiso.min.css | 7 +
.../highlight.js/styles/base16/pasque.css | 163 +
.../highlight.js/styles/base16/pasque.min.css | 7 +
.../highlight.js/styles/base16/phd.css | 163 +
.../highlight.js/styles/base16/phd.min.css | 7 +
.../highlight.js/styles/base16/pico.css | 163 +
.../highlight.js/styles/base16/pico.min.css | 7 +
.../highlight.js/styles/base16/pop.css | 163 +
.../highlight.js/styles/base16/pop.min.css | 7 +
.../highlight.js/styles/base16/porple.css | 163 +
.../highlight.js/styles/base16/porple.min.css | 7 +
.../highlight.js/styles/base16/qualia.css | 163 +
.../highlight.js/styles/base16/qualia.min.css | 7 +
.../highlight.js/styles/base16/railscasts.css | 163 +
.../styles/base16/railscasts.min.css | 7 +
.../highlight.js/styles/base16/rebecca.css | 163 +
.../styles/base16/rebecca.min.css | 7 +
.../styles/base16/ros-pine-dawn.css | 163 +
.../styles/base16/ros-pine-dawn.min.css | 7 +
.../styles/base16/ros-pine-moon.css | 163 +
.../styles/base16/ros-pine-moon.min.css | 7 +
.../highlight.js/styles/base16/ros-pine.css | 163 +
.../styles/base16/ros-pine.min.css | 7 +
.../highlight.js/styles/base16/sagelight.css | 163 +
.../styles/base16/sagelight.min.css | 7 +
.../highlight.js/styles/base16/sandcastle.css | 163 +
.../styles/base16/sandcastle.min.css | 7 +
.../highlight.js/styles/base16/seti-ui.css | 163 +
.../styles/base16/seti-ui.min.css | 7 +
.../styles/base16/shapeshifter.css | 163 +
.../styles/base16/shapeshifter.min.css | 7 +
.../highlight.js/styles/base16/silk-dark.css | 163 +
.../styles/base16/silk-dark.min.css | 7 +
.../highlight.js/styles/base16/silk-light.css | 163 +
.../styles/base16/silk-light.min.css | 7 +
.../highlight.js/styles/base16/snazzy.css | 163 +
.../highlight.js/styles/base16/snazzy.min.css | 7 +
.../styles/base16/solar-flare-light.css | 163 +
.../styles/base16/solar-flare-light.min.css | 7 +
.../styles/base16/solar-flare.css | 163 +
.../styles/base16/solar-flare.min.css | 7 +
.../styles/base16/solarized-dark.css | 163 +
.../styles/base16/solarized-dark.min.css | 7 +
.../styles/base16/solarized-light.css | 163 +
.../styles/base16/solarized-light.min.css | 7 +
.../highlight.js/styles/base16/spacemacs.css | 163 +
.../styles/base16/spacemacs.min.css | 7 +
.../highlight.js/styles/base16/summercamp.css | 163 +
.../styles/base16/summercamp.min.css | 7 +
.../styles/base16/summerfruit-dark.css | 163 +
.../styles/base16/summerfruit-dark.min.css | 7 +
.../styles/base16/summerfruit-light.css | 163 +
.../styles/base16/summerfruit-light.min.css | 7 +
.../base16/synth-midnight-terminal-dark.css | 163 +
.../synth-midnight-terminal-dark.min.css | 7 +
.../base16/synth-midnight-terminal-light.css | 163 +
.../synth-midnight-terminal-light.min.css | 7 +
.../highlight.js/styles/base16/tango.css | 163 +
.../highlight.js/styles/base16/tango.min.css | 7 +
.../highlight.js/styles/base16/tender.css | 163 +
.../highlight.js/styles/base16/tender.min.css | 7 +
.../styles/base16/tomorrow-night.css | 163 +
.../styles/base16/tomorrow-night.min.css | 7 +
.../highlight.js/styles/base16/tomorrow.css | 163 +
.../styles/base16/tomorrow.min.css | 7 +
.../highlight.js/styles/base16/twilight.css | 163 +
.../styles/base16/twilight.min.css | 7 +
.../styles/base16/unikitty-dark.css | 163 +
.../styles/base16/unikitty-dark.min.css | 7 +
.../styles/base16/unikitty-light.css | 163 +
.../styles/base16/unikitty-light.min.css | 7 +
.../highlight.js/styles/base16/vulcan.css | 163 +
.../highlight.js/styles/base16/vulcan.min.css | 7 +
.../styles/base16/windows-10-light.css | 163 +
.../styles/base16/windows-10-light.min.css | 7 +
.../highlight.js/styles/base16/windows-10.css | 163 +
.../styles/base16/windows-10.min.css | 7 +
.../styles/base16/windows-95-light.css | 163 +
.../styles/base16/windows-95-light.min.css | 7 +
.../highlight.js/styles/base16/windows-95.css | 163 +
.../styles/base16/windows-95.min.css | 7 +
.../base16/windows-high-contrast-light.css | 163 +
.../windows-high-contrast-light.min.css | 7 +
.../styles/base16/windows-high-contrast.css | 163 +
.../base16/windows-high-contrast.min.css | 7 +
.../styles/base16/windows-nt-light.css | 163 +
.../styles/base16/windows-nt-light.min.css | 7 +
.../highlight.js/styles/base16/windows-nt.css | 163 +
.../styles/base16/windows-nt.min.css | 7 +
.../highlight.js/styles/base16/woodland.css | 163 +
.../styles/base16/woodland.min.css | 7 +
.../highlight.js/styles/base16/xcode-dusk.css | 163 +
.../styles/base16/xcode-dusk.min.css | 7 +
.../highlight.js/styles/base16/zenburn.css | 163 +
.../styles/base16/zenburn.min.css | 7 +
.../highlight.js/styles/brown-paper.css | 63 +
.../highlight.js/styles/brown-paper.min.css | 1 +
.../highlight.js/styles/brown-papersq.png | Bin 0 -> 18198 bytes
.../highlight.js/styles/codepen-embed.css | 57 +
.../highlight.js/styles/codepen-embed.min.css | 1 +
.../highlight.js/styles/color-brewer.css | 66 +
.../highlight.js/styles/color-brewer.min.css | 1 +
.../node_modules/highlight.js/styles/dark.css | 62 +
.../highlight.js/styles/dark.min.css | 1 +
.../highlight.js/styles/default.css | 117 +
.../highlight.js/styles/default.min.css | 9 +
.../highlight.js/styles/devibeans.css | 90 +
.../highlight.js/styles/devibeans.min.css | 7 +
.../highlight.js/styles/docco.css | 83 +
.../highlight.js/styles/docco.min.css | 1 +
.../node_modules/highlight.js/styles/far.css | 67 +
.../highlight.js/styles/far.min.css | 1 +
.../highlight.js/styles/felipec.css | 94 +
.../highlight.js/styles/felipec.min.css | 7 +
.../highlight.js/styles/foundation.css | 80 +
.../highlight.js/styles/foundation.min.css | 1 +
.../styles/github-dark-dimmed.css | 117 +
.../styles/github-dark-dimmed.min.css | 9 +
.../highlight.js/styles/github-dark.css | 118 +
.../highlight.js/styles/github-dark.min.css | 10 +
.../highlight.js/styles/github.css | 118 +
.../highlight.js/styles/github.min.css | 10 +
.../node_modules/highlight.js/styles/gml.css | 72 +
.../highlight.js/styles/gml.min.css | 1 +
.../highlight.js/styles/googlecode.css | 79 +
.../highlight.js/styles/googlecode.min.css | 1 +
.../highlight.js/styles/gradient-dark.css | 90 +
.../highlight.js/styles/gradient-dark.min.css | 1 +
.../highlight.js/styles/gradient-light.css | 90 +
.../styles/gradient-light.min.css | 1 +
.../highlight.js/styles/grayscale.css | 89 +
.../highlight.js/styles/grayscale.min.css | 1 +
.../highlight.js/styles/hybrid.css | 88 +
.../highlight.js/styles/hybrid.min.css | 1 +
.../node_modules/highlight.js/styles/idea.css | 86 +
.../highlight.js/styles/idea.min.css | 1 +
.../highlight.js/styles/intellij-light.css | 107 +
.../styles/intellij-light.min.css | 1 +
.../highlight.js/styles/ir-black.css | 66 +
.../highlight.js/styles/ir-black.min.css | 1 +
.../highlight.js/styles/isbl-editor-dark.css | 94 +
.../styles/isbl-editor-dark.min.css | 1 +
.../highlight.js/styles/isbl-editor-light.css | 93 +
.../styles/isbl-editor-light.min.css | 1 +
.../highlight.js/styles/kimbie-dark.css | 69 +
.../highlight.js/styles/kimbie-dark.min.css | 1 +
.../highlight.js/styles/kimbie-light.css | 69 +
.../highlight.js/styles/kimbie-light.min.css | 1 +
.../highlight.js/styles/lightfair.css | 81 +
.../highlight.js/styles/lightfair.min.css | 1 +
.../highlight.js/styles/lioshi.css | 76 +
.../highlight.js/styles/lioshi.min.css | 1 +
.../highlight.js/styles/magula.css | 66 +
.../highlight.js/styles/magula.min.css | 1 +
.../highlight.js/styles/mono-blue.css | 56 +
.../highlight.js/styles/mono-blue.min.css | 1 +
.../highlight.js/styles/monokai-sublime.css | 76 +
.../styles/monokai-sublime.min.css | 1 +
.../highlight.js/styles/monokai.css | 68 +
.../highlight.js/styles/monokai.min.css | 1 +
.../highlight.js/styles/night-owl.css | 174 +
.../highlight.js/styles/night-owl.min.css | 1 +
.../highlight.js/styles/nnfx-dark.css | 104 +
.../highlight.js/styles/nnfx-dark.min.css | 10 +
.../highlight.js/styles/nnfx-light.css | 104 +
.../highlight.js/styles/nnfx-light.min.css | 10 +
.../node_modules/highlight.js/styles/nord.css | 275 +
.../highlight.js/styles/nord.min.css | 1 +
.../highlight.js/styles/obsidian.css | 79 +
.../highlight.js/styles/obsidian.min.css | 1 +
.../highlight.js/styles/panda-syntax-dark.css | 92 +
.../styles/panda-syntax-dark.min.css | 1 +
.../styles/panda-syntax-light.css | 89 +
.../styles/panda-syntax-light.min.css | 1 +
.../highlight.js/styles/paraiso-dark.css | 67 +
.../highlight.js/styles/paraiso-dark.min.css | 1 +
.../highlight.js/styles/paraiso-light.css | 67 +
.../highlight.js/styles/paraiso-light.min.css | 1 +
.../highlight.js/styles/pojoaque.css | 76 +
.../highlight.js/styles/pojoaque.jpg | Bin 0 -> 1186 bytes
.../highlight.js/styles/pojoaque.min.css | 1 +
.../highlight.js/styles/purebasic.css | 103 +
.../highlight.js/styles/purebasic.min.css | 1 +
.../highlight.js/styles/qtcreator-dark.css | 76 +
.../styles/qtcreator-dark.min.css | 1 +
.../highlight.js/styles/qtcreator-light.css | 74 +
.../styles/qtcreator-light.min.css | 1 +
.../highlight.js/styles/rainbow.css | 77 +
.../highlight.js/styles/rainbow.min.css | 1 +
.../highlight.js/styles/routeros.css | 86 +
.../highlight.js/styles/routeros.min.css | 1 +
.../highlight.js/styles/school-book.css | 62 +
.../highlight.js/styles/school-book.min.css | 1 +
.../highlight.js/styles/shades-of-purple.css | 84 +
.../styles/shades-of-purple.min.css | 1 +
.../highlight.js/styles/srcery.css | 89 +
.../highlight.js/styles/srcery.min.css | 1 +
.../styles/stackoverflow-dark.css | 117 +
.../styles/stackoverflow-dark.min.css | 13 +
.../styles/stackoverflow-light.css | 117 +
.../styles/stackoverflow-light.min.css | 13 +
.../highlight.js/styles/sunburst.css | 89 +
.../highlight.js/styles/sunburst.min.css | 1 +
.../highlight.js/styles/tokyo-night-dark.css | 114 +
.../styles/tokyo-night-dark.min.css | 8 +
.../highlight.js/styles/tokyo-night-light.css | 114 +
.../styles/tokyo-night-light.min.css | 8 +
.../styles/tomorrow-night-blue.css | 69 +
.../styles/tomorrow-night-blue.min.css | 1 +
.../styles/tomorrow-night-bright.css | 68 +
.../styles/tomorrow-night-bright.min.css | 1 +
.../node_modules/highlight.js/styles/vs.css | 63 +
.../highlight.js/styles/vs.min.css | 1 +
.../highlight.js/styles/vs2015.css | 100 +
.../highlight.js/styles/vs2015.min.css | 1 +
.../highlight.js/styles/xcode.css | 90 +
.../highlight.js/styles/xcode.min.css | 1 +
.../highlight.js/styles/xt256.css | 79 +
.../highlight.js/styles/xt256.min.css | 1 +
.../highlight.js/types/index.d.ts | 272 +
.../component-library-twig/package.json | 83 +
1936 files changed, 232269 insertions(+)
create mode 100644 node_modules/@yalesites-org/component-library-twig/README.md
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/breakpoints/breakpoints.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/breakpoints/breakpoints.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-basic-themes.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-component-themes.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-global-themes.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/cl-colors.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-basic-themes.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-component-theme-pairings.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-theme-pairings.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-themes.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-themes.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/colors.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/colors.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/_effects.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/borders.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/cl-effects.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/effects.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/radii.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/shadows.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/yds-animate.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/functions/_map.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/_layout.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/cl-layout.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/yds-layout.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/spacing/spacing.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/spacing/spacing.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/tokens.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/_typography.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/body-styles.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/cl-typography.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/heading-styles.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-faces.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-faces.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-scale.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/typography.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/00-tokens/utility/_utility.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/atoms.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/base/yds-control-icon.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/base/yds-control.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/button/_yds-button.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/control.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/_yds-cta-examples.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/_yds-cta.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/yds-cta.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/_yds-text-copy-button.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/yds-text-copy-button.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/yds-text-copy-button.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/_yds-text-link.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/yds-text-link.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/yds-text-link.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/date-time/_yds-date-time.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/date-time/yds-date-time.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/_yds-divider.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/cl-dividers.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/divider.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/yds-divider.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_input.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_textarea.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_yds-form.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/_yds-checkbox-item.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/_yds-checkbox.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/checkbox.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/yds-checkbox.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/contact-form-example.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/forms.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/_yds-radio-item.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/_yds-radio.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/radio.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/yds-radio.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/_yds-select-item.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/_yds-select.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/select.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/yds-select.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/textfields/_yds-textfields.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/textfields/yds-textfields.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/_yds-fa-icon.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/_yds-fa-icons.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/fa-icons.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/yds-fa-icons.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/_yds-icon.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/_yds-icons.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/cl-icons.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/yds-icons.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_image.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_picture.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_responsive-image.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_yds-image.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/cl-image.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/figure.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/image.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/yds-image.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/images.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/_yds-list-item.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/_yds-list.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/list.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/list.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/yds-list.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/_table.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/example-tables.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/table.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/headings/_yds-headings.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/headings/yds-heading.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/_yds-text.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/yds-text.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/yds-text.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/video-background.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/video-background.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/_yds-video-embed.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/video-embed.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/video-embed.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/yds-video-embed.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/_yds-accordion-item.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/_yds-accordion.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/accordion.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/accordion.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/yds-accordion.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/yds-accordion.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/_yds-alert.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/alert.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/alert.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/yds-alert.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/yds-alert.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/action/_yds-action-banner.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/action/yds-action-banner.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/banner.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/banner.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero/_yds-grand-hero.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero/yds-grand-hero.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/_yds-callout.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/_yds-callout.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/callout.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/callout.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/yds-callout.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/_yds-custom-card.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/custom-card.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/custom-card.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/yds-custom-card.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/yds-custom-card.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/_yds-directory-listing-card.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/directory-listing-card.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/yds-directory-listing-card.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/yds-directory-listing-card.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/_yds-reference-card.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/event/_yds-event-format.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/_card--examples.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/event-card.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/post-card.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/profile-card.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/reference-card.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/yds-reference-card.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/yds-reference-card.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/_yds-content-spotlight-portrait.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlight-portrait.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlight-portrait.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlights.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/_yds-embed.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/embed.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/yds-embed.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/_yds-facts-and-figures.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/facts-and-figures.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/facts-and-figures.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/yds-facts-and-figures.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/_yds-content-image.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/image.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/yds-content-image.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/_yds-link-grid--links.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/_yds-link-grid.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/link-grid.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/link-grid.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/yds-link-grid.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/_yds-link-group--links.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/_yds-link-group.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/link-group.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/link-group.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/yds-link-group.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/_yds-link-skip.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/link-skip.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/link-skip.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/yds-link-skip.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu-item.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu-list.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/_yds-menu-toggle.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/yds-menu-toggle.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/yds-menu-toggle.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/yds-menu.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/basic-meta/_yds-basic-meta.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/basic-meta/yds-basic-meta.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/event-meta/_yds-event-meta.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/event-meta/yds-event-meta.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/meta.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/profile-meta/_yds-profile-meta.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/profile-meta/yds-profile-meta.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/molecules.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/_yds-page-title.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/page-title.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/page-title.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/yds-page-title.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/_yds-pager.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/cl-pager.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-first-and-last.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-first.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-last.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/yds-pager.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/_yds-pull-quote.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/pull-quote.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/pull-quote.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/yds-pull-quote.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/_yds-quick-links--links.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/_yds-quick-links.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/quick-links.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/quick-links.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/yds-quick-links.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/_yds-quote-callout.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/quote-callout.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/quote-callout.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/yds-quote-callout.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/_yds-search-result.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/breadcrumbs.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/search-result.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/yds-search-result.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/yds-search-result.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/_yds-social-link__content.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/_yds-social-links.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/social-links.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/social-links.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/yds-social-links.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tab-content.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tab-label.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tabs.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/tabs.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/tabs.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/yds-tabs.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/yds-tabs.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/_yds-text-with-image.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/text-with-image.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/text-with-image.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/yds-text-with-image.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/_yds-text-field.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/text-field.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/typography.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/yds-text-field.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/_yds-tile-item.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/tile-item.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/tile-item.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/yds-tile-item.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/_yds-video.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/video.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/video.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/yds-video.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/_yds-wrapped-image.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/wrapped-image.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/wrapped-image.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/yds-wrapped-image.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/_grid-mixins.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/_list-mixins.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/_yds-block-wrapper.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/block-wrapper.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/yds-block-wrapper.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/_yds-card-collection.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/card-collection.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/yds-card-collection.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/_yds-component-wrapper.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/component-wrapper.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/yds-component-wrapper.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/_yds-custom-card-collection.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/custom-card-collection.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/yds-custom-card-collection.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/_yds-facts-and-figures-group.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/facts-and-figures-group.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/facts-and-figures-group.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/yds-facts-and-figures-group.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/gallery.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-item.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal-item--content.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal-item.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/media-grid.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/yds-media-grid-interactive.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/yds-media-grid.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/layout.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/_two-column--example.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/_yds-two-column.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/yds-two-column.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/_yds-breadcrumbs.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/breadcrumbs.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/breadcrumbs.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/yds-breadcrumbs.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/yds-breadcrumbs.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/_yds-primary-nav.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/primary-nav.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/primary-nav.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/yds-primary-nav.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/yds-primary-nav.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/_utility-nav--menu.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/_yds-utility-nav.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/utility-nav.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/utility-nav.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/yds-utility-nav.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/organisms.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer--examples.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer-basic.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer-mega.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_yds-site-footer.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/site-footer.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/yds-site-footer.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header--examples.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header--secondary.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header-default.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header-simple.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_yds-site-header.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/site-header.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/yds-site-header.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/yds-site-header.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/_yds-tiles.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/tiles.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/tiles.yml
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/yds-tiles.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/_yds-base.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/cl-page-args.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/page-layouts.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/page-layouts.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/cl-placeholder.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/placeholder.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/yds-placeholder.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/yds-full-width.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/_intro-content-examples.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/_event-collection--example.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-grid.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-list.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-page.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/events.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/accordion-page.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/miscellaneous-page.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/qualtrics-embed.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post-article.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post-grid.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/profiles/profile.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/profiles/profiles.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-short.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-spotlights.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-banner-left-align.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-banner.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-quicklinks.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-sidebar.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-video.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/_settings/_config.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/_settings/config.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/_settings/config.stories.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/_settings/config.twig
create mode 100644 node_modules/@yalesites-org/component-library-twig/components/style.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/css.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/fontawesome.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/fontawesome.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/regular.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/regular.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/solid.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/solid.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/webfonts/fa-regular-400.ttf
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/webfonts/fa-regular-400.woff2
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/webfonts/fa-solid-900.ttf
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/webfonts/fa-solid-900.woff2
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/icons.svg
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/00-tokens/colors/color-global-themes.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/00-tokens/effects/yds-animate.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/00-tokens/layout/yds-layout.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/01-atoms/controls/text-copy-button/yds-text-copy-button.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/01-atoms/controls/text-link/yds-text-link.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/01-atoms/typography/text/yds-text.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/01-atoms/videos/video-background/yds-video-background.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/02-molecules/accordion/yds-accordion.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/02-molecules/alert/yds-alert.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/02-molecules/cards/custom-card/yds-custom-card.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/02-molecules/cards/reference-card/yds-reference-card.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/02-molecules/content-spotlight-portrait/content-spotlights.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/02-molecules/menu/menu-toggle/yds-menu-toggle.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/02-molecules/page-title/page-title.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/02-molecules/pager/cl-pager.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/02-molecules/tabs/yds-tabs.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/03-organisms/galleries/media-grid/yds-media-grid-interactive.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/03-organisms/menu/breadcrumbs/yds-breadcrumbs.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/03-organisms/menu/primary-nav/yds-primary-nav.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/03-organisms/site-header/yds-site-header.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/04-page-layouts/cl-page-args.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/_settings/config.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/js/ys-link.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/style.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/dist/svgSprite.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/CHANGES.md
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/LICENSE
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/README.md
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/SECURITY.md
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/SUPPORTED_LANGUAGES.md
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/VERSION_10_UPGRADE.md
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/VERSION_11_UPGRADE.md
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/common.d.ts
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/common.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/core.d.ts
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/core.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/index.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/1c.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/1c.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/abnf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/abnf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/accesslog.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/accesslog.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/actionscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/actionscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ada.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ada.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/angelscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/angelscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/apache.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/apache.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/applescript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/applescript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/arcade.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/arcade.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/arduino.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/arduino.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/armasm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/armasm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/asciidoc.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/asciidoc.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/aspectj.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/aspectj.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/autohotkey.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/autohotkey.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/autoit.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/autoit.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/avrasm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/avrasm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/awk.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/awk.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/axapta.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/axapta.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/bash.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/bash.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/basic.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/basic.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/bnf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/bnf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/brainfuck.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/brainfuck.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/c.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/c.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/cal.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/cal.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/capnproto.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/capnproto.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ceylon.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ceylon.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/clean.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/clean.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/clojure-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/clojure-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/clojure.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/clojure.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/cmake.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/cmake.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/coffeescript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/coffeescript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/coq.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/coq.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/cos.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/cos.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/cpp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/cpp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/crmsh.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/crmsh.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/crystal.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/crystal.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/csharp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/csharp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/csp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/csp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/css.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/css.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/d.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/d.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dart.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dart.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/delphi.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/delphi.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/diff.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/diff.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/django.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/django.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dns.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dns.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dockerfile.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dockerfile.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dos.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dos.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dsconfig.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dsconfig.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dts.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dts.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dust.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/dust.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ebnf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ebnf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/elixir.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/elixir.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/elm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/elm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/erb.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/erb.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/erlang-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/erlang-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/erlang.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/erlang.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/excel.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/excel.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/fix.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/fix.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/flix.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/flix.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/fortran.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/fortran.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/fsharp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/fsharp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gams.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gams.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gauss.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gauss.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gcode.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gcode.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gherkin.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gherkin.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/glsl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/glsl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/go.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/go.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/golo.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/golo.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gradle.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/gradle.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/graphql.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/graphql.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/groovy.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/groovy.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/haml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/haml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/handlebars.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/handlebars.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/haskell.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/haskell.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/haxe.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/haxe.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/hsp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/hsp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/http.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/http.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/hy.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/hy.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/inform7.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/inform7.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ini.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ini.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/irpf90.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/irpf90.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/isbl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/isbl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/java.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/java.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/javascript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/javascript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/jboss-cli.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/jboss-cli.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/json.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/json.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/julia-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/julia-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/julia.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/julia.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/kotlin.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/kotlin.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/lasso.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/lasso.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/latex.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/latex.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ldif.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ldif.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/leaf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/leaf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/less.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/less.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/lisp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/lisp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/livecodeserver.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/livecodeserver.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/livescript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/livescript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/llvm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/llvm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/lsl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/lsl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/lua.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/lua.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/makefile.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/makefile.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/markdown.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/markdown.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mathematica.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mathematica.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/matlab.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/matlab.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/maxima.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/maxima.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mel.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mel.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mercury.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mercury.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mipsasm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mipsasm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mizar.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mizar.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mojolicious.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/mojolicious.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/monkey.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/monkey.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/moonscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/moonscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/n1ql.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/n1ql.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nestedtext.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nestedtext.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nginx.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nginx.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nim.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nim.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nix.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nix.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/node-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/node-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nsis.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/nsis.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/objectivec.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/objectivec.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ocaml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ocaml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/openscad.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/openscad.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/oxygene.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/oxygene.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/parser3.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/parser3.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/perl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/perl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/pf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/pf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/pgsql.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/pgsql.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/php-template.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/php-template.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/php.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/php.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/plaintext.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/plaintext.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/pony.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/pony.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/powershell.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/powershell.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/processing.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/processing.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/profile.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/profile.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/prolog.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/prolog.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/properties.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/properties.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/protobuf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/protobuf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/puppet.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/puppet.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/purebasic.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/purebasic.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/python-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/python-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/python.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/python.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/q.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/q.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/qml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/qml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/r.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/r.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/reasonml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/reasonml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/rib.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/rib.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/roboconf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/roboconf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/routeros.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/routeros.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/rsl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/rsl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ruby.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ruby.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ruleslanguage.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/ruleslanguage.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/rust.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/rust.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/sas.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/sas.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/scala.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/scala.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/scheme.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/scheme.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/scilab.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/scilab.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/scss.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/scss.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/shell.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/shell.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/smali.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/smali.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/smalltalk.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/smalltalk.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/sml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/sml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/sqf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/sqf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/sql.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/sql.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/stan.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/stan.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/stata.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/stata.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/step21.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/step21.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/stylus.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/stylus.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/subunit.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/subunit.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/swift.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/swift.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/taggerscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/taggerscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/tap.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/tap.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/tcl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/tcl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/thrift.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/thrift.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/tp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/tp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/twig.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/twig.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/typescript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/typescript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vala.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vala.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vbnet.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vbnet.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vbscript-html.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vbscript-html.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vbscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vbscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/verilog.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/verilog.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vhdl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vhdl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vim.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/vim.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/wasm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/wasm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/wren.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/wren.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/x86asm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/x86asm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/xl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/xl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/xml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/xml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/xquery.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/xquery.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/yaml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/yaml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/zephir.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/languages/zephir.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/package.json
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/es/utils/regex.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/common.d.ts
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/common.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/core.d.ts
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/core.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/index.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/1c.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/1c.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/abnf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/abnf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/accesslog.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/accesslog.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/actionscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/actionscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ada.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ada.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/angelscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/angelscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/apache.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/apache.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/applescript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/applescript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/arcade.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/arcade.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/arduino.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/arduino.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/armasm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/armasm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/asciidoc.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/asciidoc.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/aspectj.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/aspectj.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/autohotkey.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/autohotkey.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/autoit.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/autoit.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/avrasm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/avrasm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/awk.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/awk.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/axapta.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/axapta.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/bash.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/bash.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/basic.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/basic.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/bnf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/bnf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/brainfuck.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/brainfuck.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/c.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/c.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/cal.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/cal.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/capnproto.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/capnproto.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ceylon.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ceylon.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/clean.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/clean.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/clojure-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/clojure-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/clojure.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/clojure.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/cmake.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/cmake.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/coffeescript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/coffeescript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/coq.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/coq.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/cos.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/cos.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/cpp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/cpp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/crmsh.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/crmsh.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/crystal.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/crystal.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/csharp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/csharp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/csp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/csp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/css.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/css.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/d.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/d.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dart.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dart.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/delphi.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/delphi.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/diff.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/diff.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/django.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/django.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dns.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dns.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dockerfile.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dockerfile.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dos.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dos.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dsconfig.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dsconfig.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dts.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dts.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dust.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/dust.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ebnf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ebnf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/elixir.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/elixir.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/elm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/elm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/erb.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/erb.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/erlang-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/erlang-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/erlang.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/erlang.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/excel.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/excel.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/fix.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/fix.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/flix.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/flix.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/fortran.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/fortran.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/fsharp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/fsharp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gams.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gams.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gauss.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gauss.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gcode.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gcode.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gherkin.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gherkin.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/glsl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/glsl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/go.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/go.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/golo.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/golo.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gradle.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/gradle.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/graphql.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/graphql.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/groovy.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/groovy.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/haml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/haml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/handlebars.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/handlebars.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/haskell.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/haskell.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/haxe.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/haxe.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/hsp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/hsp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/http.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/http.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/hy.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/hy.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/inform7.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/inform7.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ini.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ini.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/irpf90.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/irpf90.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/isbl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/isbl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/java.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/java.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/javascript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/javascript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/jboss-cli.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/jboss-cli.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/json.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/json.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/julia-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/julia-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/julia.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/julia.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/kotlin.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/kotlin.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/lasso.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/lasso.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/latex.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/latex.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ldif.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ldif.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/leaf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/leaf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/less.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/less.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/lisp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/lisp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/livecodeserver.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/livecodeserver.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/livescript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/livescript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/llvm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/llvm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/lsl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/lsl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/lua.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/lua.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/makefile.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/makefile.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/markdown.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/markdown.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mathematica.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mathematica.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/matlab.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/matlab.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/maxima.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/maxima.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mel.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mel.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mercury.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mercury.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mipsasm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mipsasm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mizar.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mizar.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mojolicious.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/mojolicious.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/monkey.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/monkey.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/moonscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/moonscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/n1ql.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/n1ql.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nestedtext.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nestedtext.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nginx.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nginx.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nim.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nim.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nix.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nix.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/node-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/node-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nsis.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/nsis.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/objectivec.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/objectivec.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ocaml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ocaml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/openscad.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/openscad.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/oxygene.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/oxygene.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/parser3.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/parser3.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/perl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/perl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/pf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/pf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/pgsql.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/pgsql.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/php-template.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/php-template.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/php.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/php.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/plaintext.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/plaintext.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/pony.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/pony.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/powershell.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/powershell.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/processing.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/processing.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/profile.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/profile.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/prolog.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/prolog.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/properties.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/properties.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/protobuf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/protobuf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/puppet.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/puppet.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/purebasic.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/purebasic.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/python-repl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/python-repl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/python.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/python.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/q.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/q.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/qml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/qml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/r.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/r.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/reasonml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/reasonml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/rib.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/rib.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/roboconf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/roboconf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/routeros.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/routeros.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/rsl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/rsl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ruby.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ruby.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ruleslanguage.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/ruleslanguage.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/rust.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/rust.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/sas.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/sas.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/scala.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/scala.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/scheme.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/scheme.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/scilab.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/scilab.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/scss.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/scss.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/shell.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/shell.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/smali.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/smali.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/smalltalk.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/smalltalk.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/sml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/sml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/sqf.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/sqf.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/sql.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/sql.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/stan.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/stan.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/stata.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/stata.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/step21.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/step21.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/stylus.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/stylus.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/subunit.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/subunit.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/swift.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/swift.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/taggerscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/taggerscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/tap.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/tap.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/tcl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/tcl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/thrift.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/thrift.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/tp.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/tp.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/twig.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/twig.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/typescript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/typescript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vala.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vala.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vbnet.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vbnet.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vbscript-html.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vbscript-html.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vbscript.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vbscript.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/verilog.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/verilog.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vhdl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vhdl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vim.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/vim.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/wasm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/wasm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/wren.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/wren.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/x86asm.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/x86asm.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/xl.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/xl.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/xml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/xml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/xquery.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/xquery.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/yaml.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/yaml.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/zephir.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/lib/languages/zephir.js.js
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/package.json
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/a11y-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/a11y-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/agate.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/an-old-hope.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/androidstudio.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/arduino-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/arta.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/ascetic.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/atom-one-dark-reasonable.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/atom-one-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/atom-one-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/3024.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/apathy.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/apprentice.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/ashes.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-cave-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-cave.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-dune-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-dune.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-estuary-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-estuary.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-forest-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-forest.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-heath-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-heath.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-lakeside-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-lakeside.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-plateau-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-plateau.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-savanna-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-savanna.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-seaside-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-seaside.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-sulphurpool-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atelier-sulphurpool.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/atlas.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/bespin.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-bathory.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-burzum.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-dark-funeral.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-gorgoroth.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-immortal.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-khold.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-marduk.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-mayhem.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-nile.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal-venom.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/black-metal.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/brewer.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/bright.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/brogrammer.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/brush-trees-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/brush-trees.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/chalk.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/circus.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/classic-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/classic-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/codeschool.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/colors.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/cupcake.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/cupertino.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/danqing.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/darcula.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/dark-violet.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/darkmoss.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/darktooth.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/decaf.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/default-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/default-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/dirtysea.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/dracula.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/edge-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/edge-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/eighties.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/embers.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/equilibrium-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/equilibrium-gray-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/equilibrium-gray-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/equilibrium-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/espresso.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/eva-dim.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/eva.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/flat.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/framer.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/fruit-soda.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/gigavolt.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/github.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/google-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/google-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/grayscale-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/grayscale-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/green-screen.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/gruvbox-dark-hard.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/gruvbox-dark-medium.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/gruvbox-dark-pale.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/gruvbox-dark-soft.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/gruvbox-light-hard.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/gruvbox-light-medium.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/gruvbox-light-soft.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/hardcore.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/harmonic16-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/harmonic16-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/heetch-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/heetch-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/helios.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/hopscotch.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/horizon-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/horizon-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/humanoid-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/humanoid-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/ia-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/ia-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/icy-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/ir-black.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/isotope.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/kimber.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/london-tube.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/macintosh.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/marrakesh.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/materia.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/material-darker.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/material-lighter.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/material-palenight.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/material-vivid.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/material.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/mellow-purple.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/mexico-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/mocha.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/monokai.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/nebula.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/nord.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/nova.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/ocean.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/oceanicnext.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/one-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/onedark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/outrun-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/papercolor-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/papercolor-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/paraiso.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/pasque.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/phd.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/pico.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/pop.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/porple.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/qualia.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/railscasts.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/rebecca.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/ros-pine-dawn.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/ros-pine-moon.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/ros-pine.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/sagelight.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/sandcastle.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/seti-ui.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/shapeshifter.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/silk-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/silk-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/snazzy.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/solar-flare-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/solar-flare.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/solarized-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/solarized-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/spacemacs.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/summercamp.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/summerfruit-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/summerfruit-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/synth-midnight-terminal-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/synth-midnight-terminal-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/tango.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/tender.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/tomorrow-night.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/tomorrow.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/twilight.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/unikitty-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/unikitty-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/vulcan.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/windows-10-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/windows-10.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/windows-95-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/windows-95.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/windows-high-contrast-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/windows-high-contrast.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/windows-nt-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/windows-nt.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/woodland.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/xcode-dusk.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/base16/zenburn.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/brown-paper.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/codepen-embed.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/color-brewer.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/default.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/devibeans.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/docco.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/far.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/felipec.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/foundation.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/github-dark-dimmed.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/github-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/github.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/gml.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/googlecode.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/gradient-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/gradient-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/grayscale.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/hybrid.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/idea.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/intellij-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/ir-black.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/isbl-editor-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/isbl-editor-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/kimbie-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/kimbie-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/lightfair.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/lioshi.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/magula.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/mono-blue.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/monokai-sublime.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/monokai.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/night-owl.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/nnfx-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/nnfx-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/nord.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/obsidian.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/panda-syntax-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/panda-syntax-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/paraiso-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/paraiso-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/pojoaque.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/purebasic.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/qtcreator-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/qtcreator-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/rainbow.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/routeros.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/school-book.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/shades-of-purple.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/srcery.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/stackoverflow-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/stackoverflow-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/sunburst.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/tokyo-night-dark.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/tokyo-night-light.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/tomorrow-night-blue.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/tomorrow-night-bright.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/vs.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/vs2015.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/xcode.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/scss/xt256.scss
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/a11y-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/a11y-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/a11y-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/a11y-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/agate.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/agate.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/an-old-hope.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/an-old-hope.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/androidstudio.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/androidstudio.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/arduino-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/arduino-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/arta.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/arta.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/ascetic.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/ascetic.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/atom-one-dark-reasonable.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/atom-one-dark-reasonable.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/atom-one-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/atom-one-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/atom-one-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/atom-one-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/3024.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/3024.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/apathy.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/apathy.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/apprentice.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/apprentice.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ashes.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ashes.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-cave-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-cave-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-cave.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-cave.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-dune-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-dune-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-dune.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-dune.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-estuary-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-estuary-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-estuary.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-estuary.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-forest-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-forest-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-forest.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-forest.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-heath-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-heath-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-heath.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-heath.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-lakeside-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-lakeside-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-lakeside.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-lakeside.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-plateau-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-plateau-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-plateau.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-plateau.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-savanna-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-savanna-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-savanna.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-savanna.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-seaside-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-seaside-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-seaside.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-seaside.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-sulphurpool-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-sulphurpool-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-sulphurpool.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atelier-sulphurpool.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atlas.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/atlas.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/bespin.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/bespin.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-bathory.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-bathory.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-burzum.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-burzum.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-dark-funeral.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-dark-funeral.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-gorgoroth.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-gorgoroth.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-immortal.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-immortal.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-khold.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-khold.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-marduk.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-marduk.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-mayhem.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-mayhem.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-nile.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-nile.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-venom.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal-venom.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/black-metal.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/brewer.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/brewer.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/bright.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/bright.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/brogrammer.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/brogrammer.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/brush-trees-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/brush-trees-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/brush-trees.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/brush-trees.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/chalk.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/chalk.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/circus.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/circus.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/classic-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/classic-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/classic-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/classic-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/codeschool.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/codeschool.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/colors.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/colors.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/cupcake.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/cupcake.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/cupertino.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/cupertino.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/danqing.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/danqing.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/darcula.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/darcula.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/dark-violet.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/dark-violet.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/darkmoss.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/darkmoss.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/darktooth.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/darktooth.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/decaf.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/decaf.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/default-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/default-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/default-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/default-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/dirtysea.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/dirtysea.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/dracula.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/dracula.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/edge-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/edge-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/edge-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/edge-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/eighties.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/eighties.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/embers.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/embers.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/equilibrium-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/equilibrium-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/equilibrium-gray-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/equilibrium-gray-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/equilibrium-gray-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/equilibrium-gray-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/equilibrium-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/equilibrium-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/espresso.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/espresso.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/eva-dim.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/eva-dim.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/eva.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/eva.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/flat.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/flat.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/framer.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/framer.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/fruit-soda.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/fruit-soda.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gigavolt.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gigavolt.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/github.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/github.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/google-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/google-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/google-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/google-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/grayscale-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/grayscale-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/grayscale-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/grayscale-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/green-screen.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/green-screen.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-dark-hard.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-dark-hard.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-dark-medium.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-dark-medium.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-dark-pale.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-dark-pale.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-dark-soft.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-dark-soft.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-light-hard.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-light-hard.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-light-medium.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-light-medium.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-light-soft.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/gruvbox-light-soft.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/hardcore.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/hardcore.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/harmonic16-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/harmonic16-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/harmonic16-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/harmonic16-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/heetch-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/heetch-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/heetch-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/heetch-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/helios.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/helios.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/hopscotch.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/hopscotch.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/horizon-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/horizon-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/horizon-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/horizon-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/humanoid-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/humanoid-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/humanoid-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/humanoid-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ia-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ia-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ia-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ia-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/icy-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/icy-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ir-black.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ir-black.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/isotope.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/isotope.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/kimber.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/kimber.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/london-tube.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/london-tube.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/macintosh.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/macintosh.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/marrakesh.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/marrakesh.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/materia.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/materia.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material-darker.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material-darker.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material-lighter.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material-lighter.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material-palenight.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material-palenight.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material-vivid.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material-vivid.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/material.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/mellow-purple.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/mellow-purple.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/mexico-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/mexico-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/mocha.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/mocha.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/monokai.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/monokai.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/nebula.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/nebula.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/nord.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/nord.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/nova.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/nova.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ocean.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ocean.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/oceanicnext.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/oceanicnext.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/one-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/one-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/onedark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/onedark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/outrun-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/outrun-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/papercolor-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/papercolor-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/papercolor-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/papercolor-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/paraiso.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/paraiso.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/pasque.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/pasque.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/phd.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/phd.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/pico.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/pico.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/pop.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/pop.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/porple.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/porple.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/qualia.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/qualia.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/railscasts.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/railscasts.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/rebecca.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/rebecca.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ros-pine-dawn.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ros-pine-dawn.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ros-pine-moon.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ros-pine-moon.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ros-pine.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/ros-pine.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/sagelight.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/sagelight.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/sandcastle.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/sandcastle.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/seti-ui.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/seti-ui.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/shapeshifter.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/shapeshifter.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/silk-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/silk-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/silk-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/silk-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/snazzy.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/snazzy.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/solar-flare-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/solar-flare-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/solar-flare.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/solar-flare.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/solarized-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/solarized-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/solarized-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/solarized-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/spacemacs.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/spacemacs.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/summercamp.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/summercamp.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/summerfruit-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/summerfruit-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/summerfruit-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/summerfruit-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/synth-midnight-terminal-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/synth-midnight-terminal-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/synth-midnight-terminal-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/synth-midnight-terminal-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/tango.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/tango.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/tender.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/tender.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/tomorrow-night.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/tomorrow-night.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/tomorrow.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/tomorrow.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/twilight.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/twilight.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/unikitty-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/unikitty-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/unikitty-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/unikitty-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/vulcan.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/vulcan.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-10-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-10-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-10.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-10.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-95-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-95-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-95.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-95.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-high-contrast-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-high-contrast-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-high-contrast.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-high-contrast.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-nt-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-nt-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-nt.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/windows-nt.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/woodland.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/woodland.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/xcode-dusk.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/xcode-dusk.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/zenburn.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/base16/zenburn.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/brown-paper.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/brown-paper.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/brown-papersq.png
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/codepen-embed.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/codepen-embed.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/color-brewer.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/color-brewer.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/default.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/default.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/devibeans.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/devibeans.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/docco.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/docco.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/far.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/far.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/felipec.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/felipec.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/foundation.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/foundation.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/github-dark-dimmed.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/github-dark-dimmed.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/github-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/github-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/github.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/github.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/gml.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/gml.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/googlecode.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/googlecode.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/gradient-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/gradient-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/gradient-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/gradient-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/grayscale.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/grayscale.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/hybrid.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/hybrid.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/idea.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/idea.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/intellij-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/intellij-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/ir-black.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/ir-black.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/isbl-editor-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/isbl-editor-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/isbl-editor-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/isbl-editor-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/kimbie-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/kimbie-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/kimbie-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/kimbie-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/lightfair.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/lightfair.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/lioshi.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/lioshi.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/magula.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/magula.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/mono-blue.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/mono-blue.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/monokai-sublime.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/monokai-sublime.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/monokai.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/monokai.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/night-owl.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/night-owl.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/nnfx-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/nnfx-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/nnfx-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/nnfx-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/nord.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/nord.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/obsidian.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/obsidian.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/panda-syntax-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/panda-syntax-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/panda-syntax-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/panda-syntax-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/paraiso-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/paraiso-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/paraiso-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/paraiso-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/pojoaque.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/pojoaque.jpg
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/pojoaque.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/purebasic.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/purebasic.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/qtcreator-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/qtcreator-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/qtcreator-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/qtcreator-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/rainbow.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/rainbow.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/routeros.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/routeros.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/school-book.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/school-book.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/shades-of-purple.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/shades-of-purple.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/srcery.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/srcery.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/stackoverflow-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/stackoverflow-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/stackoverflow-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/stackoverflow-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/sunburst.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/sunburst.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/tokyo-night-dark.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/tokyo-night-dark.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/tokyo-night-light.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/tokyo-night-light.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/tomorrow-night-blue.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/tomorrow-night-blue.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/tomorrow-night-bright.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/tomorrow-night-bright.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/vs.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/vs.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/vs2015.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/vs2015.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/xcode.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/xcode.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/xt256.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/styles/xt256.min.css
create mode 100644 node_modules/@yalesites-org/component-library-twig/node_modules/highlight.js/types/index.d.ts
create mode 100644 node_modules/@yalesites-org/component-library-twig/package.json
diff --git a/node_modules/@yalesites-org/component-library-twig/README.md b/node_modules/@yalesites-org/component-library-twig/README.md
new file mode 100644
index 000000000..829bca125
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/README.md
@@ -0,0 +1,129 @@
+# YaleSites Twig Component Library
+
+All YaleSites projects have access to components in the YaleSites component library. Themes may choose which variations of components to implement, and options are available.
+
+## Installation
+
+Prerequisites
+
+Each environment that needs to pull @yalesites-org packages from GitHub needs to be authenticated using a "Personal Access Token". This only needs to be done once per-environment.
+
+- Go to `https://github.com/settings/tokens/new`
+ - In the "Note" field add something like "YaleSites GitHub Packages"
+ - Choose an expiration value
+ - Check the box for "write:packages" (this will automatically check all of the "repo" boxes as well)
+ - Click "Generate token"
+- On your local machine, create an environment variable. This process varies depending on the shell and operating system you use. It will be something similar to this though: `export KEY=value`.
+ - The `key` for YaleSites projects needs to be `YALESITES_BUILD_TOKEN`
+ - The `value` is the token you created above
+- Done!
+
+- [Here's a stack overflow post showing how to set persistent environment variables for various shells](https://unix.stackexchange.com/questions/117467/how-to-permanently-set-environmental-variables)
+
+
+
+### Installing the component library locally
+
+If you want to work directly on the component library locally, you can clone this repo and install the dependencies as described below.
+
+1. Clone the repository `git clone git@github.com:yalesites-org/component-library-twig.git`
+2. Change directories into the repo `cd component-library-twig`
+3. Verify you're using the correct version of node `nvm use`
+4. Install dependencies `npm install`
+5. Run the develop script `npm run develop`
+6. Make your changes and commit them!
+
+### Installing the package in another project
+
+There must be a `.npmrc` file in the project root that tells npm to get `@yalesites-org` packages from GitHub rather than npm.
+
+- Create a `.npmrc` file in your project root (or modify an existing one) and add the following:
+
+```bash
+@yalesites-org:registry=https://npm.pkg.github.com
+```
+
+Then you can install the package like any other npm dependency.
+
+```bash
+npm install @yalesites-org/component-library-twig
+```
+
+## Releases
+
+Any time something is pushed to the `main` branch on GitHub, a [GitHub Action](.github/workflows/release.yml) is run to determine whether a new release is needed (via semantic-release.)
+
+This is an entirely automated process, so whether changes are pushed directly to `main` or if they go through the preferred PR workflow the release process will be run.
+
+## Live Component Library
+
+You can view the latest version of the component library at any time by visiting the [Deployed Storybook](https://yalesites-org.github.io/component-library-twig). All new commits to the `main` branch trigger a rebuild and deploy of the component library, so it will always be up-to-date with the latest released code.
+
+## Development Component Libraries
+
+The `develop` branch also has an auto-deployed component library. This will contain all of the work that will go out in the next release. It is [deployed to netlify](https://dev-component-library-twig.netlify.app).
+
+PRs also have auto-deployed component libraries, which allow reviewers to load the latest state of a PR at any given time without having to fiddle with local tooling. Each PR will have a link posted to the PR comments by the "netlify bot" when the link is ready. See screenshot below.
+
+![PR preview link is the last link in the Netlify bot comment](./.github/docs/pr-preview-link.png)
+
+## Visual Regression Testing
+
+This project uses Percy's StoryBook integration to visually test and verify components during Pull Requests in GitHub.
+
+View the status of any build here: https://percy.io/95144ff9/component-library-twig
+
+### Running Visreg Tests
+
+**NOTE:** Percy is temporarily auto-approving all branches for now. (Original was only auto-approving `main`) This will be reverted once we have a better handle on how to manage the visreg tests.
+
+Visual regression tests are automatically run on Percy any time a PR is changed from "Draft" state to "Ready for Review". So there are a few things to keep in mind when creating PRs.
+
+- When you initially create a PR that needs visreg tests, click the "Create draft PR" button instead of the "Create Pull Request" button.
+
+![Click the Create draft PR button](./.github/docs/draft-pr.png)
+
+- Then, when the PR is ready for review, you can click the "Ready for Review" button at the bottom of the page. This will trigger the visual regression tests to be run.
+
+![Click the Ready for Review button when the PR is complete](./.gihub/docs/../../.github/docs/ready-for-review.png)
+
+- If you've already created a PR and need forgot to create a draft first, or you need to re-run the visual regression tests after changes were made, you can click the "Convert to draft" link at the bottom of the page.
+
+![Click the Convert to draft button](./.github/docs/convert-to-draft.png)
+
+- Then click the "Ready for Review" button mentioned above to trigger visual regression tests.
+
+### Configuring Percy Tests
+
+Official Docs: https://docs.percy.io/docs/storybook
+
+By default all new Stories are tested, but stories can be excluded if a test does not provide value in isolation.
+
+In the project root, there is a `.percyrc` file that can be used to modify Percy's configuration, including custom css, and which Stories to skip when testing.
+
+#### Percy-specific CSS
+
+For example, we use the following percy-specific css to hide images from screenshots (since we use a random image service, which would otherwise cause regressions on every test that includes an image.)
+
+```css
+img {
+ visibility: hidden;
+}
+```
+
+#### Excluding Stories from Testing
+
+Since Percy bills by the screenshot, it's best to only test the Stories that provide value when tested visually. Some reasons stories should be excluded include:
+
+- Anything that is simply a representation of a base or "primitive" token. These will be represented in the larger components that implement them, so in isolation they don't provide significant value to visual testing.
+- Dynamic stories that automatically update when new tokens are added upstream. e.g. The colors story. Since colors aren't really a concern at this level (they're defined in Figma by a designer) we don't really need to test them in isolation here.
+- "Playground" types of stories. e.g. The site "Header" story. Since there are a number of choices, or props, that can affect how the site header looks, we have a "playground" story that allows a visitor to toggle all of the controls to see what can be generated with the design system options. What SHOULD be tested is one or more examples of the component with various decisions selected. That is why we have a "Header Examples" story that demonstrates the allowed color combinations.
+
+To exclude stories, add an item to the `exclude` array in a regex format. Some examples of what we currently exclude are:
+
+```yml
+storybook:
+ exclude:
+ - 'Tokens/Breakpoints: Breakpoints' # This specific story (must match exactly)
+ - 'Tokens/Effects: [a-zA-Z]+' # Any story in the `Tokens/Effects` section, since they are dynamically generated.
+```
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/breakpoints/breakpoints.stories.js b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/breakpoints/breakpoints.stories.js
new file mode 100644
index 000000000..782f02e39
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/breakpoints/breakpoints.stories.js
@@ -0,0 +1,11 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+import breakpointsTwig from './breakpoints.twig';
+
+const breakpointsData = { breakpoints: tokens.break };
+
+export default {
+ title: 'Tokens/Breakpoints',
+};
+
+export const breakpoints = () => breakpointsTwig(breakpointsData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/breakpoints/breakpoints.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/breakpoints/breakpoints.twig
new file mode 100644
index 000000000..94576a174
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/breakpoints/breakpoints.twig
@@ -0,0 +1,34 @@
+{% set breakpoints__base_class = 'cl-table' %}
+{% set breakpoint_names = {
+ 's': 'Small',
+ 'm': 'Medium',
+ 'l': 'Large',
+ 'xl': 'X-Large',
+ '2xl': 'XX-Large',
+ 'max-width': 'Max-Width',
+ 'mobile': 'Mobile (targets larger screens)',
+ 'mobile-max': 'Mobile Max (targets smaller screens)',
+} %}
+
+
+
+
+ Breakpoint
+ (SCSS) Variable
+ Width
+
+
+
+ {% for breakpoint, value in _context.breakpoints %}
+
+ {% for breakpoint_short, breakpoint_name in breakpoint_names %}
+ {% if breakpoint_short == breakpoint %}
+ {{ breakpoint_name }}
+ {% endif %}
+ {% endfor %}
+ $break-{{ breakpoint }}
+ {{ value }}
+
+ {% endfor %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-basic-themes.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-basic-themes.scss
new file mode 100644
index 000000000..de20d2416
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-basic-themes.scss
@@ -0,0 +1,16 @@
+@use '~@yalesites-org/tokens/build/scss/tokens';
+@use '../functions/map';
+
+$basic-themes: map.deep-get(tokens.$tokens, 'basic-themes');
+
+@each $basicTheme, $value in $basic-themes {
+ [data-basic-theme='#{$basicTheme}'] {
+ --color-background: var(--basic-themes-#{$basicTheme}-background);
+ --color-text: var(--basic-themes-#{$basicTheme}-text);
+ --color-heading: var(--basic-themes-#{$basicTheme}-heading);
+ --color-text-shadow: var(--basic-themes-#{$basicTheme}-background);
+
+ background-color: var(--color-background);
+ color: var(--color-text);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-component-themes.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-component-themes.scss
new file mode 100644
index 000000000..f1d86dbff
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-component-themes.scss
@@ -0,0 +1,17 @@
+@use '~@yalesites-org/tokens/build/scss/tokens';
+@use '../functions/map';
+
+$themes: map.deep-get(tokens.$tokens, 'component-themes');
+
+@each $theme, $value in $themes {
+ [data-component-theme='#{$theme}'] {
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-background: var(--component-themes-#{$theme}-background);
+ --color-text: var(--component-themes-#{$theme}-text);
+ --color-heading: var(--component-themes-#{$theme}-heading);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-global-themes.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-global-themes.scss
new file mode 100644
index 000000000..881bf47e5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/_color-global-themes.scss
@@ -0,0 +1,14 @@
+@use '~@yalesites-org/tokens/build/scss/tokens';
+@use '../functions/map';
+
+$global-themes: map.deep-get(tokens.$tokens, 'global-themes');
+
+@each $globalTheme, $value in $global-themes {
+ [data-global-theme='#{$globalTheme}'] {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(--global-themes-#{$globalTheme}-colors-slot-three);
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/cl-colors.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/cl-colors.scss
new file mode 100644
index 000000000..a6fe2503b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/cl-colors.scss
@@ -0,0 +1,64 @@
+.cl-colors__list {
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0 0 var(--size-spacing-7);
+ padding: 0;
+}
+
+.cl-colors__item {
+ list-style: none;
+ padding: var(--size-spacing-5) var(--size-spacing-7);
+ flex: 1 1 20%;
+ min-width: 150px;
+ min-height: 150px;
+ display: flex;
+ justify-content: center;
+ align-items: flex-end;
+}
+
+.cl-colors__title {
+ background: hsl(0deg 0% 100% / 80%);
+ padding: 0.5rem;
+}
+
+[data-global-theme] {
+ .global-theme-title {
+ position: sticky;
+ top: 0;
+ z-index: 10;
+ padding: var(--site-spacing-5);
+ background-color: var(--color-basic-white);
+ border-bottom: 0.25rem solid var(--color-gray-700);
+ margin-bottom: var(--size-spacing-6);
+ }
+}
+
+.cl-basic-themes-pairing {
+ padding: var(--size-spacing-5);
+ margin-bottom: var(--size-spacing-6);
+
+ .text-field a {
+ --color-text-shadow: var(--color-background);
+
+ color: var(--color-text);
+
+ &:hover {
+ text-decoration: none;
+ }
+ }
+}
+
+.cl-color-pairing {
+ margin-bottom: var(--size-spacing-6);
+ width: 100%;
+ max-width: 100%;
+}
+
+.cl-color-global-themes {
+ margin-bottom: var(--size-spacing-10);
+ padding-top: var(--size-spacing-10);
+
+ + .cl-color-global-themes {
+ border-top: 0.25rem dotted var(--color-gray-300);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-basic-themes.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-basic-themes.twig
new file mode 100644
index 000000000..217107bd8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-basic-themes.twig
@@ -0,0 +1,33 @@
+{% set color_pairing__base_class = 'cl-basic-themes-pairing' %}
+
+{% for theme, value in _context.themes %}
+
+
Basic Theme: {{ theme }}
+
Here's a paragraph with some text. And links can go here too. Isn't that cool?
+
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: 'Cta Link',
+ cta__href: '#',
+ } %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: 'Outline',
+ cta__style: 'outline',
+ cta__href: '#',
+ } %}
+
+ {% include "@molecules/social-links/yds-social-links.twig" with {
+ icons: {
+ 1: {
+ name: 'Facebook',
+ icon: 'facebook',
+ url: 'https://www.facebook.com',
+ },
+ 2: {
+ name: 'X',
+ icon: 'x-twitter',
+ url: 'https://www.twitter.com',
+ }
+ }
+ } %}
+
+{% endfor %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-component-theme-pairings.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-component-theme-pairings.twig
new file mode 100644
index 000000000..cf74d848a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-component-theme-pairings.twig
@@ -0,0 +1,144 @@
+{% set color_pairing__base_class = 'cl-color-pairing' %}
+
+
+
+
+
+
Component themes (dials)
+
+
This page outlines all components which have dial/component theme options. Each component below has control options to view and change each component's default component color theme.
+
+
Each component theme is defined in the tokens repository: atomic/_yale-packages/tokens/tokens/base/color.yml
. Each theme has a generic numerical name. If you were to add another component theme, it should follow the same naming convention. For example: four
or seven
.
+
+
The header and footer themes have their own yml configuration files.
+
+ atomic/_yale-packages/tokens/tokens/organisms/site-header.yml
+ atomic/_yale-packages/tokens/tokens/organisms/site-footer.yml
+
+
+
+
+
+
+
+
+
+ {% include "@organisms/site-header/yds-site-header.twig" with {
+ site_header__theme: site_header__theme,
+ } %}
+
+
+
+
+ {% include "@molecules/banner/action/yds-action-banner.twig" %}
+
+
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. A lacus vestibulum sed arcu non odio euismod lacinia. Varius sit amet mattis vulputate enim nulla. Sit amet justo donec enim diam vulputate ut pharetra sit. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam purus. Lorem ipsum dolor sit amet consectetur adipiscing elit pellentesque. Vitae congue mauris rhoncus aenean vel elit scelerisque. Vulputate odio ut enim blandit volutpat maecenas volutpat blandit aliquam. Turpis massa sed elementum tempus egestas sed sed risus. A erat nam at lectus urna duis convallis convallis. Sollicitudin nibh sit amet commodo nulla. Iaculis urna id volutpat lacus.',
+ } %}
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ component__modifiers: ['no-top-margin', 'no-bottom-margin']
+ }%}
+ {% block component_wrapper_inner %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: 'Button link',
+ cta__href: 'javascript:;',
+ cta__blockname: callout__base_class,
+ cta__component_theme: cta_button__component_theme,
+ } %}
+ {% endblock %}
+ {% endembed %}
+
+
+
+
+ {% include "@molecules/quick-links/yds-quick-links.twig" with {
+ quick_links__heading: 'Heading for Quick Links',
+ quick_links__description: '
This is a Quick Links description.
',
+ quick_links__image: true,
+ quick_links__background_color: quick_links__background_color|default('one'),
+ quick_links__links:[
+ {
+ quick_links__link__url: '#',
+ quick_links__link__content: 'This is a link',
+ },
+ { quick_links__link__url: '#',
+ quick_links__link__content: 'This is another link',
+ },
+ { quick_links__link__url: '#',
+ quick_links__link__content: 'Link #3',
+ },
+ { quick_links__link__url: '#',
+ quick_links__link__content: 'This is a long link that will wrap lines',
+ }
+ ]
+ }%}
+
+
+
+ {% include "@molecules/pull-quote/yds-pull-quote.twig" with {
+ pull_quote__width: 'site',
+ pull_quote__alignment: 'left',
+ pull_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+
+
+ {% include "@molecules/callout/yds-callout.twig" with {
+ callouts: [
+ {
+ callout__heading: 'Degree Programs',
+ callout__text: 'Designed for those who intend to pursue graduate and those who wish to immediately enter a career in which broad scientific training is beneficial.',
+ callout__link__content: 'Programs',
+ callout__link__url: '#',
+ },
+ {
+ callout__heading: 'Preference Selection',
+ callout__text: 'Preference Selection system is now open and will close again on Monday, January 10, 2022.',
+ callout__link__content: 'Select preferences',
+ callout__link__url: '#',
+ },
+ ],
+ } %}
+
+
+
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" %}
+ {% block component_wrapper_inner %}
+ {% include "@molecules/tabs/yds-tabs.twig" %}
+ {% endblock %}
+ {% endembed %}
+
+
+
+ {% include "@molecules/quote-callout/yds-quote-callout.twig" with {
+ standalone_quote__width: 'site',
+ standalone_quote__alignment: 'left',
+ standalone_quote__quote_alignment: 'left',
+ standalone_quote__style: 'bar',
+ standalone_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. A lacus vestibulum sed arcu non odio euismod lacinia. Varius sit amet mattis vulputate enim nulla. Sit amet justo donec enim diam vulputate ut pharetra sit. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam purus. Lorem ipsum dolor sit amet consectetur adipiscing elit pellentesque. Vitae congue mauris rhoncus aenean vel elit scelerisque. Vulputate odio ut enim blandit volutpat maecenas volutpat blandit aliquam. Turpis massa sed elementum tempus egestas sed sed risus. A erat nam at lectus urna duis convallis convallis. Sollicitudin nibh sit amet commodo nulla. Iaculis urna id volutpat lacus.',
+ } %}
+
+
+
+
+ {% include "@organisms/site-footer/yds-site-footer.twig" with {
+ site_footer__theme: site_footer__theme,
+ site_footer__border_thickness: '8',
+ } %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-theme-pairings.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-theme-pairings.twig
new file mode 100644
index 000000000..4ed9df5ab
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-theme-pairings.twig
@@ -0,0 +1,146 @@
+{% set color_global_theme__base_class = 'cl-color-global-themes' %}
+
+
+
+
+
+
Global Themes (levers)
+
This page outlines all components which have component theme (dial) options. Each component below is housed within a global theme application. Global themes define the color palette from which each component theme gets its color slot assignments.
+
+
Each global theme is defined in the tokens repository: atomic/_yale-packages/tokens/tokens/base/color.yml
. Each theme has a generic numerical name. If you were to add another global theme, it should follow the same naming convention. For example: six
or seven
. Each global themes has a label
value. While each is referenced in code by its numerical name, the label is surfaced to users, as it's more user-friendly.
+
+
The controls
panel in storybook allow you to select which global theme (lever) to apply for all components on the page. After selecting a global theme, you can scroll down the page to see how the global change affects individual components, and, optionally change each component's dial theme option to see how each dial change affects each component.
+
+
+
+
+
+
+
Global Theme: {{ site_global__theme }}
+
+
+ {% include "@organisms/site-header/yds-site-header.twig" with {
+ site_header__theme: site_header__theme,
+ site_header__accent: site_header__accent,
+ } %}
+
+
+
+ {% include "@molecules/banner/action/yds-action-banner.twig" with {
+ banner__width: 'site',
+ }%}
+
+
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. A lacus vestibulum sed arcu non odio euismod lacinia. Varius sit amet mattis vulputate enim nulla.
Sit amet justo donec enim diam vulputate ut pharetra sit. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam purus. Lorem ipsum dolor sit amet consectetur adipiscing elit pellentesque. Vitae congue mauris rhoncus aenean vel elit scelerisque. Vulputate odio ut enim blandit volutpat maecenas volutpat blandit aliquam. Turpis massa sed elementum tempus egestas sed sed risus. A erat nam at lectus urna duis convallis convallis. Sollicitudin nibh sit amet commodo nulla. Iaculis urna id volutpat lacus.',
+ } %}
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ component__modifiers: ['no-top-margin', 'no-bottom-margin']
+ }%}
+ {% block component_wrapper_inner %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: 'Button link',
+ cta__href: 'javascript:;',
+ cta__blockname: callout__base_class,
+ cta__component_theme: cta_button__component_theme,
+ } %}
+ {% endblock %}
+ {% endembed %}
+
+
+
+ {% include "@molecules/quick-links/yds-quick-links.twig" with {
+ quick_links__heading: 'Heading for Quick Links',
+ quick_links__description: '
This is a Quick Links description.
',
+ quick_links__image: true,
+ quick_links__background_color: quick_links__background_color|default('one'),
+ quick_links__links:[
+ {
+ quick_links__link__url: '#',
+ quick_links__link__content: 'This is a link',
+ },
+ { quick_links__link__url: '#',
+ quick_links__link__content: 'This is another link',
+ },
+ { quick_links__link__url: '#',
+ quick_links__link__content: 'Link #3',
+ },
+ { quick_links__link__url: '#',
+ quick_links__link__content: 'This is a long link that will wrap lines',
+ }
+ ]
+ }%}
+
+
+
+ {% include "@molecules/pull-quote/yds-pull-quote.twig" with {
+ pull_quote__width: 'site',
+ pull_quote__alignment: 'left',
+ pull_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+
+
+ {% include "@molecules/callout/yds-callout.twig" with {
+ callouts: [
+ {
+ callout__heading: 'Degree Programs',
+ callout__text: 'Designed for those who intend to pursue graduate and those who wish to immediately enter a career in which broad scientific training is beneficial.',
+ callout__link__content: 'Programs',
+ callout__link__url: '#',
+ },
+ {
+ callout__heading: 'Preference Selection',
+ callout__text: 'Preference Selection system is now open and will close again on Monday, January 10, 2022.',
+ callout__link__content: 'Select preferences',
+ callout__link__url: '#',
+ },
+ ],
+ } %}
+
+
+
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ }%}
+ {% block component_wrapper_inner %}
+ {% include "@molecules/tabs/yds-tabs.twig" %}
+ {% endblock %}
+ {% endembed %}
+
+
+
+ {% include "@molecules/quote-callout/yds-quote-callout.twig" with {
+ standalone_quote__width: 'site',
+ standalone_quote__alignment: 'left',
+ standalone_quote__quote_alignment: 'left',
+ standalone_quote__style: 'bar',
+ standalone_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. A lacus vestibulum sed arcu non odio euismod lacinia. Varius sit amet mattis vulputate enim nulla. Sit amet justo donec enim diam vulputate ut pharetra sit. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam purus. Lorem ipsum dolor sit amet consectetur adipiscing elit pellentesque. Vitae congue mauris rhoncus aenean vel elit scelerisque. Vulputate odio ut enim blandit volutpat maecenas volutpat blandit aliquam. Turpis massa sed elementum tempus egestas sed sed risus. A erat nam at lectus urna duis convallis convallis. Sollicitudin nibh sit amet commodo nulla. Iaculis urna id volutpat lacus.',
+ } %}
+
+
+
+
+
+ {% include "@organisms/site-footer/yds-site-footer.twig" with {
+ site_footer__theme: site_footer__theme,
+ site_footer__accent: site_footer__accent,
+ site_footer__border_thickness: '8',
+ } %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-themes.js b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-themes.js
new file mode 100644
index 000000000..9abecb925
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-themes.js
@@ -0,0 +1,14 @@
+// Function to take an object and push each key into a new array.
+// return the array as `label` : `key` to use in storybook options.
+const getGlobalThemes = (globalThemeTokens) => {
+ const globalThemeOptions = {};
+ const tempArr = Object.keys(globalThemeTokens);
+
+ tempArr.forEach((element) => {
+ globalThemeOptions[globalThemeTokens[element].label] = element;
+ });
+
+ return globalThemeOptions;
+};
+
+export default getGlobalThemes;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-themes.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-themes.twig
new file mode 100644
index 000000000..73963fd53
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/color-global-themes.twig
@@ -0,0 +1,43 @@
+{% set color_global_theme__base_class = 'cl-color-global-themes' %}
+{% set colors__base_class = "cl-colors" %}
+
+
+
+
+
+
These are global themes.
+
+ Each theme is defined in the tokens repository: atomic/_yale-packages/tokens/tokens/base/color.yml
. Each theme has a generic numerical name. If you were to add another global theme, it should follow the same naming convention. For example: six
- "Purple Dream". Following this example, each theme's non-numerical name (e.g. "Purple Dream") is added in this color-global-themes.twig
file. The text label is stored in a label
key value for each theme.
+
+
+ Each theme defines "color slots", which get mapped to color slots to be used by component themes (dials).
+
+
+
+
+
+
+{% for globalTheme, values in _context.globalThemes %}
+
+
{{globalTheme|capitalize}}: "{{values.label}}"
+
+
+ {% for colors in values %}
+ {% for color, colorset in colors %}
+ {% if colorset is iterable %}
+ {% for nested_color, nested_value in colorset %}
+
+ --global-themes-{{globalTheme}}-colors-{{ nested_color }}
+
+ {% endfor %}
+ {% else %}
+
+ --global-themes-{{globalTheme}}-colors-{{ color }}
+
+ {% endif %}
+ {% endfor %}
+ {% endfor %}
+
+
+
+{% endfor %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/colors.stories.js b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/colors.stories.js
new file mode 100644
index 000000000..fc234e408
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/colors.stories.js
@@ -0,0 +1,403 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+import getGlobalThemes from './color-global-themes';
+
+import colorsTwig from './colors.twig';
+import colorComponentThemeTwig from './color-component-theme-pairings.twig';
+import colorGlobalThemeTwig from './color-global-themes.twig';
+import colorGlobalThemePairingTwig from './color-global-theme-pairings.twig';
+import colorBasicThemesTwig from './color-basic-themes.twig';
+
+import utilityNavData from '../../03-organisms/menu/utility-nav/utility-nav.yml';
+import primaryNavData from '../../03-organisms/menu/primary-nav/primary-nav.yml';
+
+// JavaScript to handle size
+import '../../03-organisms/site-header/yds-site-header';
+import '../../02-molecules/menu/menu-toggle/yds-menu-toggle';
+import '../../02-molecules/tabs/yds-tabs';
+
+import quickLinksData from '../../02-molecules/quick-links/quick-links.yml';
+import imageData from '../../01-atoms/images/image/image.yml';
+import tabData from '../../02-molecules/tabs/tabs.yml';
+import bannerData from '../../02-molecules/banner/banner.yml';
+
+const colorsData = {
+ colors: {
+ blue: tokens.color.blue,
+ green: tokens.color.green,
+ orange: tokens.color.orange,
+ yellow: tokens.color.yellow,
+ basic: tokens.color.basic,
+ gray: tokens.color.gray,
+ },
+};
+
+const colorComponentThemeData = { themes: tokens['component-themes'] };
+const colorBasicThemeData = { themes: tokens['basic-themes'] };
+const colorGlobalThemeData = { globalThemes: tokens['global-themes'] };
+const siteHeaderThemes = { themes: tokens['site-header-themes'] };
+const siteHeaderThemeOptions = Object.keys(tokens['site-header-themes']);
+const siteFooterThemes = { themes: tokens['site-footer-themes'] };
+const siteFooterThemeOptions = Object.keys(tokens['site-footer-themes']);
+const siteHeaderAccents = [
+ 'one',
+ 'two',
+ 'three',
+ 'four',
+ 'five',
+ 'six',
+ 'seven',
+ 'eight',
+];
+const siteFooterAccents = [
+ 'one',
+ 'two',
+ 'three',
+ 'four',
+ 'five',
+ 'six',
+ 'seven',
+ 'eight',
+];
+
+const ctaButtonThemeOptions = Object.keys(tokens['button-cta-themes']);
+
+// get global themes as `label` : `key` values to pass into options as array.
+const siteGlobalThemeOptions = getGlobalThemes(tokens['global-themes']);
+
+export default {
+ title: 'Tokens/Colors',
+};
+
+export const Colors = () => colorsTwig(colorsData);
+export const ColorGlobalThemes = () =>
+ colorGlobalThemeTwig(colorGlobalThemeData);
+
+export const ColorBasicThemes = () => `
+ These pairings are selected to support accessibility standards.
+ This page is useful to check the accessibility of various components against the available background colors.
+
+ ${colorBasicThemesTwig(colorBasicThemeData)}
+`;
+
+export const ComponentThemeColorPairings = ({
+ heading,
+ description,
+ image,
+ calloutTheme,
+ ctaButtonTheme,
+ qlTheme,
+ quoteTheme,
+ standaloneQuoteTheme,
+ tabTheme,
+ bannerTheme,
+ primaryNavPosition,
+ menuVariation,
+ siteHeaderImage,
+ siteHeaderSiteNameImage,
+ siteHeaderTwig,
+ siteHeaderTheme,
+ siteFooterTheme,
+ siteHeaderAccent,
+ siteFooterAccent,
+ siteFooterVariation,
+}) =>
+ colorComponentThemeTwig({
+ ...imageData.responsive_images['16x9'],
+ ...tabData,
+ ...bannerData,
+ ...siteHeaderTwig,
+ ...siteHeaderThemes,
+ ...siteFooterThemes,
+ ...colorComponentThemeData,
+ ...utilityNavData,
+ ...primaryNavData,
+ ...siteHeaderAccents,
+ ...siteFooterAccents,
+ ...ctaButtonThemeOptions,
+ site_name: 'Department of Chemistry',
+ site_header__border_thickness: '8',
+ site_header__nav_position: primaryNavPosition,
+ site_header__menu__variation: menuVariation,
+ site_header__theme: siteHeaderTheme,
+ site_header__background_image: siteHeaderImage,
+ site_header__site_name_is_image: siteHeaderSiteNameImage,
+ site_header__accent: siteHeaderAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ quick_links__heading: heading,
+ quick_links__description: description,
+ quick_links__image: image,
+ quick_links__background_color: qlTheme,
+ callout__background_color: calloutTheme,
+ cta_button__component_theme: ctaButtonTheme,
+ quick_links__links: quickLinksData.quick_links__links,
+ tabs__theme: tabTheme,
+ banner__content__background: bannerTheme,
+ pull_quote__accent_theme: quoteTheme,
+ standalone_quote__accent_theme: standaloneQuoteTheme,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ site_footer__variation: siteFooterVariation,
+ });
+ComponentThemeColorPairings.argTypes = {
+ primaryNavPosition: {
+ name: 'Header: Navigation Position',
+ options: ['left', 'center', 'right'],
+ type: 'select',
+ defaultValue: 'left',
+ },
+ menuVariation: {
+ name: 'Header: Menu Variation',
+ options: ['basic', 'mega', 'focus'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+ siteHeaderTheme: {
+ name: 'Header: Theme (dial)',
+ options: siteHeaderThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteHeaderAccent: {
+ name: 'Header: Accent Color (dial)',
+ options: siteHeaderAccents,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteHeaderImage: {
+ name: 'Header: With image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ siteHeaderSiteNameImage: {
+ name: 'Header: Site Name is an Image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ bannerTheme: {
+ name: 'Banner Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ ctaButtonTheme: {
+ name: 'Button CTA Theme (dial)',
+ type: 'select',
+ options: ctaButtonThemeOptions,
+ defaultValue: 'one',
+ },
+ qlTheme: {
+ name: 'Quick Links Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ quoteTheme: {
+ name: 'Quote Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ standaloneQuoteTheme: {
+ name: 'Standalone Quote Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ calloutTheme: {
+ name: 'Callout Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ tabTheme: {
+ name: 'Tabs Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ siteFooterTheme: {
+ name: 'Footer: Theme (dial)',
+ options: siteFooterThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteFooterAccent: {
+ name: 'Footer: Accent Color (dial)',
+ options: siteFooterAccents,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteFooterVariation: {
+ name: 'Footer: Variation (dial)',
+ options: ['basic', 'mega'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+};
+
+export const GlobalThemeColorPairings = ({
+ heading,
+ description,
+ image,
+ globalTheme,
+ calloutTheme,
+ ctaButtonTheme,
+ qlTheme,
+ quoteTheme,
+ standaloneQuoteTheme,
+ tabTheme,
+ bannerTheme,
+ primaryNavPosition,
+ menuVariation,
+ siteHeaderTwig,
+ siteHeaderTheme,
+ siteHeaderAccent,
+ siteHeaderImage,
+ siteHeaderSiteNameImage,
+ siteFooterTheme,
+ siteFooterAccent,
+ siteFooterVariation,
+}) =>
+ colorGlobalThemePairingTwig({
+ ...imageData.responsive_images['16x9'],
+ ...colorGlobalThemeData,
+ ...colorGlobalThemeTwig,
+ ...tabData,
+ ...bannerData,
+ ...siteHeaderTwig,
+ ...siteHeaderThemes,
+ ...siteFooterThemes,
+ ...utilityNavData,
+ ...primaryNavData,
+ ...siteHeaderAccents,
+ ...siteFooterAccents,
+ site_global__theme: globalTheme,
+ site_name: 'Department of Chemistry',
+ site_header__border_thickness: '8',
+ site_header__nav_position: primaryNavPosition,
+ site_header__menu__variation: menuVariation,
+ site_header__theme: siteHeaderTheme,
+ site_header__background_image: siteHeaderImage,
+ site_header__site_name_is_image: siteHeaderSiteNameImage,
+ site_header__accent: siteHeaderAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ quick_links__heading: heading,
+ quick_links__description: description,
+ quick_links__image: image,
+ quick_links__background_color: qlTheme,
+ callout__background_color: calloutTheme,
+ cta_button__component_theme: ctaButtonTheme,
+ quick_links__links: quickLinksData.quick_links__links,
+ tabs__theme: tabTheme,
+ banner__content__background: bannerTheme,
+ pull_quote__accent_theme: quoteTheme,
+ standalone_quote__accent_theme: standaloneQuoteTheme,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ site_footer__variation: siteFooterVariation,
+ });
+
+GlobalThemeColorPairings.argTypes = {
+ globalTheme: {
+ name: 'Site: Global Theme (lever)',
+ options: siteGlobalThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ primaryNavPosition: {
+ name: 'Header: Navigation Position',
+ options: ['left', 'center', 'right'],
+ type: 'select',
+ defaultValue: 'left',
+ },
+ menuVariation: {
+ name: 'Header: Menu Variation',
+ options: ['basic', 'mega', 'focus'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+ siteHeaderTheme: {
+ name: 'Header: Theme (dial)',
+ options: siteHeaderThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteHeaderAccent: {
+ name: 'Header: Accent Color (dial)',
+ options: siteHeaderAccents,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteHeaderImage: {
+ name: 'Header: With Image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ siteHeaderSiteNameImage: {
+ name: 'Header: Site Name Is An Image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ bannerTheme: {
+ name: 'Banner Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ ctaButtonTheme: {
+ name: 'Button CTA Theme (dial)',
+ type: 'select',
+ options: ctaButtonThemeOptions,
+ defaultValue: 'one',
+ },
+ qlTheme: {
+ name: 'Quick Links Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ quoteTheme: {
+ name: 'Quote Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ standaloneQuoteTheme: {
+ name: 'Standalone Quote Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ calloutTheme: {
+ name: 'Callout Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ tabTheme: {
+ name: 'Tabs Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ siteFooterTheme: {
+ name: 'Footer: Theme (dial)',
+ options: siteFooterThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteFooterAccent: {
+ name: 'Footer: Accent Color (dial)',
+ options: siteFooterAccents,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteFooterVariation: {
+ name: 'Footer: Variation (dial)',
+ options: ['basic', 'mega'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/colors.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/colors.twig
new file mode 100644
index 000000000..540882edc
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/colors/colors.twig
@@ -0,0 +1,31 @@
+{% set colors__base_class = "cl-colors" %}
+
+
+
+
+
+
All available color options are outlined here.
+
Each color is defined in the tokens repository: atomic/_yale-packages/tokens/tokens/figma-export/tokens.json
.
+
+
+
+
+
+{% for color, colorset in _context.colors %}
+
+
{{ color }}
+
+ {% if colorset is iterable %}
+ {% for nested_color, nested_value in colorset %}
+
+ --color-{{ color }}-{{ nested_color }}
+
+ {% endfor %}
+ {% else %}
+
+ --color-{{ color }}
+
+ {% endif %}
+
+
+{% endfor %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/_effects.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/_effects.scss
new file mode 100644
index 000000000..f1c4f6853
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/_effects.scss
@@ -0,0 +1,148 @@
+@use '~@yalesites-org/tokens/build/scss/tokens';
+
+@mixin animate(
+ $property: all,
+ $duration: var(--animation-speed-default),
+ $function: ease-in-out,
+ $delay: 0ms
+) {
+ @media (prefers-reduced-motion: no-preference) {
+ transition: #{$property} #{$duration} #{$function} #{$delay};
+ }
+}
+
+// This animation is to remove hidden items from screen readers and
+// keyboard navigation, while maintaining the slow "close" effect.
+// Apply this mixin to a selector that indicates the "hidden" state (not just.
+// the element base class. It must specifically indicate "hidden".)
+@mixin animate-hidden($speed: var(--animation-speed-default)) {
+ visibility: hidden;
+ animation: #{$speed} fade-out;
+ animation-fill-mode: forwards;
+
+ @keyframes fade-out {
+ // Start visible at 0% to avoid an occasional "flash" when closing.
+ 0% {
+ visibility: visible;
+ z-index: 0;
+ }
+
+ 99% {
+ visibility: visible;
+ z-index: 0;
+ }
+
+ 100% {
+ visibility: hidden;
+ z-index: -1;
+ }
+ }
+}
+
+:root {
+ --underline-thick: var(--size-thickness-4);
+
+ @media (min-width: tokens.$break-mobile) {
+ --underline-thick: var(--size-thickness-8);
+ }
+}
+
+@mixin underline-slide-start($variation: default, $size: 'thin') {
+ @if $size == 'thick' {
+ --thickness: var(--underline-thick);
+ --position: 0 100%;
+
+ // When using the 'thick' variation, add some space between the text and the
+ // underline.
+ padding-bottom: calc(var(--thickness) + var(--size-spacing-3));
+ } @else {
+ --thickness: var(--link-underline-size-default);
+ --position: 0 1.15em;
+ }
+
+ // Add the decorative bar under links.
+ background-image: linear-gradient(currentcolor, currentcolor);
+ background-position: var(--position);
+ background-repeat: no-repeat;
+
+ @media (prefers-reduced-motion: no-preference) {
+ transition: background-size var(--animation-speed-default) linear,
+ color var(--animation-speed-default) ease-in-out;
+ }
+
+ @if $variation == 'no-underline' {
+ background-size: 0 var(--thickness);
+ } @else {
+ background-size: 100% var(--thickness);
+ }
+}
+
+@mixin underline-slide-end($variation: default, $size: 'thin') {
+ --thickness: var(--link-underline-size-default);
+
+ @if $size == 'thick' {
+ --thickness: var(--underline-thick);
+ }
+
+ @if $variation == 'no-underline' {
+ background-size: 100% var(--thickness);
+ } @else {
+ background-size: 0 var(--thickness);
+ }
+}
+
+@mixin underline-slide-none($size: 'thin') {
+ --thickness: var(--link-underline-size-default);
+
+ @if $size == 'thick' {
+ --thickness: var(--underline-thick);
+ }
+
+ background-size: 0 var(--thickness);
+}
+
+// Animate upward on hover: cards
+@mixin rise-effect($amount: -0.25em) {
+ @media (prefers-reduced-motion: no-preference) {
+ transform: translateY(0);
+
+ &:hover {
+ transform: translateY($amount);
+ color: var(--color-cta-text);
+ background-color: var(--color-cta-bg);
+ }
+ }
+}
+
+// Animate center outwards: divider
+@mixin expand-out {
+ // only set scale to 0 if animation can run
+ @media (prefers-reduced-motion: no-preference) {
+ transform: scaleX(0);
+
+ &.animate {
+ transform: scaleX(1);
+ }
+ }
+}
+
+// Animate and fade-in upwards: pull quote
+@mixin fade-in-up {
+ // only run animation if animation can run
+ @media (prefers-reduced-motion: no-preference) {
+ opacity: 0;
+ transform: translate3d(0, 100%, 0);
+
+ &.animate {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+ }
+}
+
+@mixin expand-height($height: 100%) {
+ // only run animation if animation can run
+ @media (prefers-reduced-motion: no-preference) {
+ height: $height;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/borders.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/borders.twig
new file mode 100644
index 000000000..89f356e95
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/borders.twig
@@ -0,0 +1,17 @@
+{% set borders__base_class = "cl-borders" %}
+
+
+
+ {% for border, value in _context.borders %}
+ {% set variable = prefix ~ border|lower|replace({' ': '-'}) %}
+
+ Border {{ border }}
+
+ Border Details
+ variable: {{ variable }}
+ value: {{ value }}
+
+
+ {% endfor %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/cl-effects.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/cl-effects.scss
new file mode 100644
index 000000000..8bc2d070a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/cl-effects.scss
@@ -0,0 +1,63 @@
+@use '~@yalesites-org/tokens/build/scss/tokens.scss' as break;
+
+$effects-gap: var(--size-spacing-6);
+$shadow-levels: 'level-1', 'level-1-bottom-shadow-only', 'level-2', 'level-3',
+ 'level-4';
+
+.cl-shadows__list,
+.cl-radii__list,
+.cl-borders__list {
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0;
+ padding: 0;
+}
+
+@mixin cl-list-item {
+ list-style: none;
+ padding: var(--size-spacing-7);
+ margin: 0 $effects-gap $effects-gap;
+ flex: 1 1 calc(50% - calc($effects-gap * 5));
+ min-width: 100px;
+ min-height: 100px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+
+ @media (min-width: break.$break-l) {
+ flex-basis: 20%;
+ }
+}
+
+.cl-shadows__item {
+ @include cl-list-item;
+
+ &:last-child {
+ max-width: 20%;
+ }
+
+ @each $level in $shadow-levels {
+ &[data-shadow-level='#{$level}'] {
+ &:hover {
+ box-shadow: var(--drop-shadow-#{$level});
+ }
+ }
+ }
+}
+
+.cl-radii__item {
+ @include cl-list-item;
+}
+
+.cl-borders__item {
+ @include cl-list-item;
+
+ @media (min-width: break.$break-l) {
+ flex-basis: 25%;
+ }
+
+ @media (min-width: break.$break-xl) {
+ flex-basis: 10%;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/effects.stories.js b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/effects.stories.js
new file mode 100644
index 000000000..eb3808b40
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/effects.stories.js
@@ -0,0 +1,32 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+import shadowsTwig from './shadows.twig';
+import radiiTwig from './radii.twig';
+import bordersTwig from './borders.twig';
+
+const shadowsData = { shadows: tokens.dropShadow, prefix: '--drop-shadow-' };
+const radiiData = { radii: tokens.radius, prefix: '--radius-' };
+const bordersData = {
+ borders: tokens.border.thickness,
+ prefix: '--border-thickness-',
+};
+
+export default {
+ title: 'Tokens/Effects',
+};
+
+export const Shadows = () => `
+ Shadows should only be used as hover or interaction effect
+ The five levels are displayed below. Hover over each box to see the shadow effect.
+ ${shadowsTwig(shadowsData)}
+`;
+
+export const Radius = () => `
+ Radius selection will affect the appearance of cards and list groups
+ ${radiiTwig(radiiData)}
+`;
+
+export const Borders = () => `
+ Thick borders should be reserved for dividers on headers and footers and not appear on cards or other components.
+ ${bordersTwig(bordersData)}
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/radii.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/radii.twig
new file mode 100644
index 000000000..4d0afe029
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/radii.twig
@@ -0,0 +1,22 @@
+{% set radii__base_class = "cl-radii" %}
+
+
+
+ {% for radius, value in _context.radii %}
+ {% set variable = prefix ~ radius|lower|replace({' ': '-'}) %}
+ {% set radii_item__attributes = {
+ class: bem("item", [], radii__base_class),
+ style: 'border-radius: var(' ~ variable ~ ')',
+ 'data-basic-theme': 'gray-700',
+ } %}
+
+ Radius {{ radius }}
+
+ Radius Details
+ variable: {{ variable }}
+ value: {{ value }}
+
+
+ {% endfor %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/shadows.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/shadows.twig
new file mode 100644
index 000000000..e9086edbf
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/shadows.twig
@@ -0,0 +1,30 @@
+{% set shadows__base_class = "cl-shadows" %}
+
+
+
+
+ {% for shadow, value in _context.shadows %}
+
+ {% set tempShadowVariable = shadow|lower|replace({' ': '-'}) %}
+
+ {# For those variables with names in this way: "Level Number - Variant" #}
+ {% set shadowVariable = tempShadowVariable|replace({'---': '-'}) %}
+
+ {% set variable = prefix ~ shadowVariable %}
+
+ {% set shadow_item__attributes = {
+ class: bem("item", [], shadows__base_class),
+ 'data-shadow-level': shadowVariable,
+ 'data-basic-theme': 'blue-yale',
+ } %}
+
+ {{ shadow }}
+
+ Shadow Details
+ variable: {{ variable }}
+ value: {{ value }}
+
+
+ {% endfor %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/yds-animate.js b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/yds-animate.js
new file mode 100644
index 000000000..17b4a58ad
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/effects/yds-animate.js
@@ -0,0 +1,51 @@
+Drupal.behaviors.animateItems = {
+ attach(context) {
+ // Check if animation is active in site settings.
+ const siteAnimationTheme = context.querySelector('[data-site-animation]');
+
+ // Set variable to check that the animation theme isn't the default.
+ const siteAnimationEnabled = siteAnimationTheme
+ ? siteAnimationTheme.getAttribute('data-site-animation') !== 'default'
+ : false;
+
+ // Select all elements with [data-animate-item] attribute
+ const elementsToAnimate = context.querySelectorAll(
+ '[data-animate-item="enabled"]',
+ );
+
+ // Check if the user prefers reduced motion
+ const prefersReducedMotionNoPref = window.matchMedia(
+ '(prefers-reduced-motion: no-preference)',
+ ).matches;
+
+ // Create a new Intersection Observer
+ const observer = new IntersectionObserver((entries) => {
+ entries.forEach((entry) => {
+ const animatedElement = entry.target;
+
+ if (entry.isIntersecting) {
+ // If the element is in the viewport, add the 'animate' class
+ animatedElement.classList.add('animate');
+ }
+ });
+ });
+ // Only add observer if siteAnimationEnabled, there are elements to animate,
+ // and if user hasn't enabled reduced motion.
+ if (
+ elementsToAnimate &&
+ siteAnimationEnabled &&
+ prefersReducedMotionNoPref
+ ) {
+ // Observe each .divider element
+ elementsToAnimate.forEach((animatedElement) => {
+ observer.observe(animatedElement);
+ });
+ }
+ // Set each component to data-animate-item false if prefers reduced motion.
+ if (!prefersReducedMotionNoPref) {
+ elementsToAnimate.forEach((reducedMotionElement) => {
+ reducedMotionElement.setAttribute('data-animate-item', 'disabled');
+ });
+ }
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/functions/_map.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/functions/_map.scss
new file mode 100644
index 000000000..a4c2077ee
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/functions/_map.scss
@@ -0,0 +1,19 @@
+@use 'sass:list';
+@use 'sass:map';
+@use 'sass:meta';
+
+/// Map deep get
+/// Reference: https://stackoverflow.com/a/66004582/17322403
+/// @param {Map} $map - Map
+/// @param {Arglist} $keys - Key chain
+/// @return {*} - Desired value
+@function deep-get($map, $keys...) {
+ $scope: $map;
+ $i: 1;
+ // stylelint-disable-next-line
+ @while (meta.type-of($scope) == map) and ($i <= list.length($keys)) {
+ $scope: map.get($scope, list.nth($keys, $i));
+ $i: $i + 1;
+ }
+ @return $scope;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/_layout.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/_layout.scss
new file mode 100644
index 000000000..d2b24b1a9
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/_layout.scss
@@ -0,0 +1,138 @@
+@use '~@yalesites-org/tokens/build/scss/tokens';
+@use '../../00-tokens/functions/map';
+
+:root {
+ --size-spacing-site-gutter: var(--size-spacing-5);
+
+ /* The `--spacing-page-section` variable is the larger spacing that is
+ * used between "section" components. Components that are "standalone" content
+ * like a card grid, or a callout should use this. */
+ --spacing-page-section: var(--size-spacing-8);
+
+ /* The `--spacing-page-inner` variable is the smaller spacing that is used
+ * between "content-like" components. It is used between components within a
+ * logical section. */
+ --spacing-page-inner: var(--size-spacing-7);
+
+ /* The `--spacing-component-banner` variable is assigned to components which
+ * need more space above and below.
+ * these include: banners, quick links, callouts, quote spotlight */
+ --spacing-component-banner: var(--size-spacing-9);
+
+ @media (min-width: tokens.$break-m) {
+ --size-spacing-site-gutter: var(--size-spacing-6);
+ }
+
+ @media (min-width: tokens.$break-l) {
+ --size-spacing-site-gutter: var(--size-spacing-7);
+ --spacing-page-section: var(--size-spacing-10);
+ --spacing-component-banner: var(--size-spacing-10);
+ }
+
+ @media (min-width: tokens.$break-xl) {
+ --size-spacing-site-gutter: var(--size-spacing-8);
+ --spacing-component-banner: var(--size-spacing-11);
+ }
+
+ @media (min-width: tokens.$break-2xl) {
+ --size-spacing-site-gutter: var(--size-spacing-10);
+ --spacing-component-banner: var(--size-spacing-12);
+ }
+
+ height: 100%;
+}
+
+////////
+// sticky footer
+body,
+html {
+ height: 100%;
+}
+
+.layout-container {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
+
+.dialog-off-canvas-main-canvas {
+ height: 100%;
+}
+
+///////
+
+$layout-widths: map.deep-get(tokens.$tokens, size, component-layout, width);
+
+[data-component-width] {
+ &:not([data-embedded-components] [data-component-width]) {
+ padding-inline-start: var(--size-spacing-site-gutter);
+ padding-inline-end: var(--size-spacing-site-gutter);
+ }
+}
+
+[class*='__inner'] {
+ width: 100%;
+ max-width: var(--component-width);
+ margin-inline-start: auto;
+ margin-inline-end: auto;
+
+ @each $width, $value in $layout-widths {
+ [data-component-width='#{$width}'] & {
+ --component-width: var(--size-component-layout-width-#{$width});
+ }
+ }
+}
+
+// The spacing-page-inner mixin should be applied to components that are
+// "content-like." They generally accompany other components within a "section."
+@mixin spacing-page-inner {
+ --font-spacing-paragraph-extra: 2em;
+
+ .no-page-spacing + & {
+ margin-top: var(--font-spacing-paragraph-extra);
+ }
+
+ &:not(.no-page-spacing) {
+ margin-bottom: var(--spacing-page-inner);
+ }
+}
+
+// The spacing-page-section mixin should be applied to components that are
+// intended to "stand out" from the components around them. A callout, or a card
+// grid, for example, may relate to the text around them, but they're not "part"
+// of the text.
+@mixin spacing-page-section(
+ $flush-bottom: false,
+ $flush-top: false,
+ $banner-spacing: false
+) {
+ margin-block-start: var(--spacing-page-section);
+ margin-block-end: var(--spacing-page-section);
+
+ @if $flush-top == true {
+ &:first-child {
+ --main-content-top-margin: 0;
+
+ margin-bottom: var(--size-spacing-7);
+ }
+ }
+
+ @if $flush-bottom == true {
+ &:last-child {
+ --main-content-bottom-margin: 0;
+ }
+ }
+
+ @if $banner-spacing == true {
+ margin-block-start: var(--spacing-component-banner);
+ margin-block-end: var(--spacing-component-banner);
+
+ @if $flush-top == true {
+ &:first-child {
+ --main-content-top-margin: 0;
+
+ margin-bottom: var(--spacing-component-banner);
+ }
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/cl-layout.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/cl-layout.scss
new file mode 100644
index 000000000..69487a7a7
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/cl-layout.scss
@@ -0,0 +1,3 @@
+#root {
+ height: 100%;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/yds-layout.js b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/yds-layout.js
new file mode 100644
index 000000000..eea9d6e6c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/layout/yds-layout.js
@@ -0,0 +1,40 @@
+Drupal.behaviors.layout = {
+ attach(context) {
+ // Classes.
+ // This array of classes should not have the preceding `.` so that we can
+ // check for them in `classList.contains` below.
+ const classesToCheck = ['text-field', 'wrapped-image'];
+ // Generate a string of the above classes with preceding `.` for the
+ // querySelectorAll below.
+ const bodyCopyClasses = classesToCheck.map((i) => `.${i}`);
+ // Selectors.
+ const bodyCopyComponents = context.querySelectorAll(bodyCopyClasses);
+
+ // tables
+ const tableElement = context.querySelectorAll('table');
+
+ bodyCopyComponents.forEach((component) => {
+ const nextElement = component.nextElementSibling;
+
+ if (
+ // If there is a next element.
+ nextElement &&
+ // And the next element contains one of the classesToCheck
+ classesToCheck.some((className) =>
+ nextElement.classList.contains(className),
+ )
+ ) {
+ // Add the `no-page-spacing` class to the component.
+ component.classList.add('no-page-spacing');
+ }
+ });
+
+ // Wrap table elements in a wrapping div to control overflow
+ tableElement.forEach((table) => {
+ const wrapper = document.createElement('div');
+ wrapper.classList.add('table-wrapper');
+ table.parentNode.insertBefore(wrapper, table);
+ wrapper.appendChild(table);
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/spacing/spacing.stories.js b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/spacing/spacing.stories.js
new file mode 100644
index 000000000..7152acf14
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/spacing/spacing.stories.js
@@ -0,0 +1,14 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+import spacingTwig from './spacing.twig';
+
+const spacingData = {
+ spacing_options: tokens.size.spacing,
+ prefix: 'size-spacing',
+};
+
+export default {
+ title: 'Tokens/Spacing',
+};
+
+export const Spacing = () => spacingTwig(spacingData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/spacing/spacing.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/spacing/spacing.twig
new file mode 100644
index 000000000..e58da53f7
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/spacing/spacing.twig
@@ -0,0 +1,22 @@
+{% set spacing__base_class = 'cl-table' %}
+
+
+
+
+ variable
+ rem
+ px
+ example
+
+
+
+ {% for key, value in _context.spacing_options %}
+
+ --{{ prefix }}-{{ key }}
+ {{ value|trim('rem') }}
+ {{ value * 16 }}
+
+
+ {% endfor %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/tokens.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/tokens.scss
new file mode 100644
index 000000000..b479ef06d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/tokens.scss
@@ -0,0 +1,9 @@
+@forward '~@yalesites-org/tokens/build/scss/tokens';
+@forward 'functions/map';
+@forward 'colors/color-global-themes';
+@forward 'colors/color-component-themes';
+@forward 'colors/color-basic-themes';
+@forward 'typography/typography';
+@forward 'layout/layout';
+@forward 'utility/utility';
+@forward 'effects/effects';
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/_typography.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/_typography.scss
new file mode 100644
index 000000000..649ae34b6
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/_typography.scss
@@ -0,0 +1,162 @@
+body {
+ background-color: var(--color-background);
+ color: var(--color-text);
+ font: var(--font-style-body-default);
+}
+
+code {
+ --color-code-border: var(--color-gray-200);
+ --color-code-background: var(--color-gray-100);
+
+ border: var(--border-thickness-1) solid var(--color-code-border);
+ border-radius: var(--radius-4);
+ padding: 0 var(--size-spacing-3);
+ background-color: var(--color-code-background);
+
+ [data-component-theme='one'] &,
+ [data-component-theme='three'] &,
+ [data-basic-theme='blue-yale'] &,
+ [data-basic-theme='gray-700'] & {
+ --color-code-border: var(--color-gray-800);
+ --color-code-background: var(--color-gray-600);
+ }
+}
+
+// Heading mixins
+@mixin h1-yale-new {
+ font: var(--font-style-heading-h1-yale-new);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h2-yale-new {
+ font: var(--font-style-heading-h2-yale-new);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h3-yale-new {
+ font: var(--font-style-heading-h3-yale-new);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h4-yale-new {
+ font: var(--font-style-heading-h4-yale-new);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h5-yale-new {
+ font: var(--font-style-heading-h5-yale-new);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h6-yale-new {
+ font: var(--font-style-heading-h6-yale-new);
+ text-transform: var(--font-text-transform-h6-yale-new);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h1-mallory-compact-medium {
+ font: var(--font-style-heading-h1-mallory-compact-medium);
+ letter-spacing: var(--font-letter-spacing-h1-mallory-compact-medium);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h2-mallory-compact-medium {
+ font: var(--font-style-heading-h2-mallory-compact-medium);
+ letter-spacing: var(--font-letter-spacing-h2-mallory-compact-medium);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h3-mallory-compact-medium {
+ font: var(--font-style-heading-h3-mallory-compact-medium);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h4-mallory-compact-medium {
+ font: var(--font-style-heading-h4-mallory-compact-medium);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h5-mallory-compact-medium {
+ font: var(--font-style-heading-h5-mallory-compact-medium);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h6-mallory-compact-medium {
+ font: var(--font-style-heading-h6-mallory-compact-medium);
+ letter-spacing: var(--font-letter-spacing-h6-mallory-compact-medium);
+ text-transform: var(--font-text-transform-h6-mallory-compact-medium);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h1-mallory-compact-book {
+ font: var(--font-style-heading-h1-mallory-compact-book);
+ letter-spacing: var(--font-letter-spacing-h1-mallory-compact-book);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h2-mallory-compact-book {
+ font: var(--font-style-heading-h2-mallory-compact-book);
+ letter-spacing: var(--font-letter-spacing-h2-mallory-compact-book);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h3-mallory-compact-book {
+ font: var(--font-style-heading-h3-mallory-compact-book);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h4-mallory-compact-book {
+ font: var(--font-style-heading-h4-mallory-compact-book);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h5-mallory-compact-book {
+ font: var(--font-style-heading-h5-mallory-compact-book);
+ font-variant-numeric: oldstyle-nums;
+}
+
+@mixin h6-mallory-compact-book {
+ font: var(--font-style-heading-h6-mallory-compact-book);
+ letter-spacing: var(--font-letter-spacing-h6-mallory-compact-book);
+ text-transform: var(--font-text-transform-h6-mallory-compact-book);
+ font-variant-numeric: oldstyle-nums;
+}
+
+// Body mixins
+@mixin body-xl {
+ font: var(--font-style-body-xl);
+}
+
+@mixin body-l {
+ font: var(--font-style-body-l);
+}
+
+@mixin body-default {
+ font: var(--font-style-body-default);
+}
+
+@mixin body-default-condensed {
+ font: var(--font-style-body-default-condensed);
+}
+
+@mixin body-s {
+ font: var(--font-style-body-s);
+}
+
+@mixin body-s-condensed {
+ font: var(--font-style-body-s-condensed);
+}
+
+@mixin body-xs {
+ font: var(--font-style-body-xs);
+}
+
+@mixin truncate-text($lines: 1) {
+ max-width: 100%;
+ text-overflow: ellipsis;
+ width: fit-content;
+ white-space: nowrap;
+ line-clamp: $lines;
+ -webkit-line-clamp: $lines;
+ overflow: hidden;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/body-styles.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/body-styles.twig
new file mode 100644
index 000000000..ba69fb13f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/body-styles.twig
@@ -0,0 +1,19 @@
+{% set type__base_class = 'cl-type' %}
+
+Type Styles use SASS Mixins to capture their entire style
+Like heading styles, body styles may include only a font
attribute. However, in order to keep implementation consistent, all typography definitions across the codebase must implement the relevant sass mixin and not mix or omit parts of any typography style.
+
+
+ {% for style, value in body_styles %}
+
+
+
Body {{ style }} Acconvallis volutpat tempus elementum viverra. Eu ultrices laoreet eu nunc, tortor mi porttitor. Scelerisque euismod et nisl, tempor senectus. Vitae mi purus placerat nibh purus faucibus imperdiet quisque diam. Elementum urna feugiat rhoncus purus. Consectetur neque auctor commodo consequat.
+
+
+ Font Details
+ variable: @include body-{{ style }}
+ font: {{ value }}
+
+
+ {% endfor %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/cl-typography.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/cl-typography.scss
new file mode 100644
index 000000000..4e482326b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/cl-typography.scss
@@ -0,0 +1,13 @@
+.cl-type {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+
+ &__item {
+ margin-bottom: var(--size-spacing-5);
+ }
+
+ &__family {
+ margin: 0 0 var(--size-spacing-6);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/heading-styles.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/heading-styles.twig
new file mode 100644
index 000000000..5e680beb2
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/heading-styles.twig
@@ -0,0 +1,25 @@
+{% set type__base_class = 'cl-type' %}
+
+Type Styles use SASS Mixins to capture their entire style
+Heading styles all include a font
attribute, but some also include the letter-spacing
and/or text-transform
attributes. So, in order to keep implementation consistent, all typography definitions across the codebase must implement the relevant sass mixin and not mix or omit parts of any typography style.
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-faces.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-faces.twig
new file mode 100644
index 000000000..3f908e047
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-faces.twig
@@ -0,0 +1,15 @@
+{% set type__base_class = 'cl-type' %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-faces.yml b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-faces.yml
new file mode 100644
index 000000000..bb6f5c160
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-faces.yml
@@ -0,0 +1,34 @@
+families:
+ - name: YaleNew
+ id: 'YaleNew, serif'
+ styles:
+ - name: Bold
+ weight: 700
+ style: normal
+ - name: Roman
+ weight: 400
+ style: normal
+ - name: Mallory
+ id: 'Mallory, sans-serif'
+ styles:
+ - name: Bold
+ weight: 700
+ style: normal
+ - name: Medium
+ weight: 500
+ style: normal
+ - name: Book
+ weight: 400
+ style: normal
+ - name: Mallory Compact
+ id: "'Mallory Compact', sans-serif"
+ styles:
+ - name: Bold
+ weight: 700
+ style: normal
+ - name: Medium
+ weight: 500
+ style: normal
+ - name: Book
+ weight: 400
+ style: normal
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-scale.twig b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-scale.twig
new file mode 100644
index 000000000..9f723a24a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/type-scale.twig
@@ -0,0 +1,14 @@
+{% set type__base_class = 'cl-type' %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/typography.stories.js b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/typography.stories.js
new file mode 100644
index 000000000..a81ac8365
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/typography/typography.stories.js
@@ -0,0 +1,30 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+// Twig templates
+import typeFaces from './type-faces.twig';
+import typeScale from './type-scale.twig';
+import headingStyles from './heading-styles.twig';
+import bodyStyles from './body-styles.twig';
+
+// Data files
+import typeFacesData from './type-faces.yml';
+
+const scaleData = { font_scale: tokens.font.scale };
+const headingStyleData = { heading_styles: tokens.font.style.heading };
+const bodyStyleData = { body_styles: tokens.font.style.body };
+const letterSpacing = { letter_spacing: tokens.font.letterSpacing };
+const textTransforms = { text_transforms: tokens.font.textTransform };
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Tokens/Typography' };
+
+export const TypeFaces = () => typeFaces(typeFacesData);
+
+export const TypeScale = () => typeScale(scaleData);
+
+export const HeadingStyles = () =>
+ headingStyles({ ...headingStyleData, ...letterSpacing, ...textTransforms });
+
+export const BodyStyles = () => bodyStyles(bodyStyleData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/00-tokens/utility/_utility.scss b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/utility/_utility.scss
new file mode 100644
index 000000000..3e6545d24
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/00-tokens/utility/_utility.scss
@@ -0,0 +1,37 @@
+@mixin visually-hidden {
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+ overflow: hidden;
+ height: 1px;
+ width: 1px;
+ word-wrap: normal;
+}
+
+.visually-hidden {
+ @include visually-hidden;
+}
+
+// These are abstracted from the general use `focus` mixin below to support
+// use-cases like `focus-within` that apply to an "outer" element when something
+// "inside" has focus. e.g. The utility nav search box.
+@mixin focus-styles {
+ outline: var(--size-thickness-2) solid var(--color-link-base);
+ outline-offset: var(--size-thickness-2);
+}
+
+@mixin focus {
+ &:focus-visible {
+ @include focus-styles;
+ }
+
+ // Remove browser focus indicator from browsers that support `:focus-visible`
+ // This allows older browsers (e.g. Safari) to show default styles, while
+ // modern browsers use our focus designs.
+ &:focus:not(:focus-visible) {
+ outline: none;
+ }
+}
+
+* {
+ @include focus;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/atoms.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/atoms.scss
new file mode 100644
index 000000000..2bdddbd3f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/atoms.scss
@@ -0,0 +1,18 @@
+@forward './controls/button/yds-button' as button-*;
+@forward './controls/cta/yds-cta';
+@forward './controls/text-link/yds-text-link';
+@forward './controls/text-copy-button/yds-text-copy-button';
+@forward './date-time/yds-date-time';
+@forward './divider/yds-divider';
+@forward './forms/yds-form' as forms-*;
+@forward './forms/textfields/yds-textfields';
+@forward './forms/select/yds-select';
+@forward './images/icons/yds-icons';
+@forward './images/fa-icons/yds-fa-icons';
+@forward './images/image/yds-image';
+@forward './lists/yds-list' as list-*;
+@forward './tables/table';
+@forward './typography/headings/yds-headings';
+@forward './typography/text/yds-text';
+@forward './videos/video-embed/yds-video-embed';
+@forward './videos/video-background/yds-video-background';
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/base/yds-control-icon.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/base/yds-control-icon.twig
new file mode 100644
index 000000000..c65d1010e
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/base/yds-control-icon.twig
@@ -0,0 +1,30 @@
+{% set control_icon__names = {
+ 'external': {
+ fa_icon__title: 'Arrow Up Right',
+ fa_icon__extra_class: ['fa-solid fa-arrow-up-right fa-fw'],
+ fa_icon__decorative: true,
+ fa_icon__sr_title: '(link is external)',
+ },
+ 'download': {
+ fa_icon__title: 'Circle Down',
+ fa_icon__extra_class: ['fa-regular fa-circle-down fa-fw'],
+ fa_icon__decorative: true,
+ fa_icon__sr_title: '(file download)',
+ },
+ 'target-blank': {
+ fa_icon__title: 'Up Right',
+ fa_icon__extra_class: ['fa-solid fa-arrow-up-right-from-square fa-fw'],
+ fa_icon__decorative: true,
+ fa_icon__sr_title: '(opens in a new window/tab)',
+ },
+ 'chevron': {
+ fa_icon__title: 'Angle Right',
+ fa_icon__extra_class: ['fa-solid fa-angle-right fa-fw'],
+ fa_icon__decorative: true,
+ fa_icon__sr_title: '',
+ }
+} %}
+
+{%- if control_icon__url_type is defined and control_icon__url_type != 'internal' %}
+ {%- include "@atoms/images/fa-icons/_yds-fa-icon.twig" with control_icon__names[control_icon__url_type] %}
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/base/yds-control.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/base/yds-control.twig
new file mode 100644
index 000000000..c04b6d660
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/base/yds-control.twig
@@ -0,0 +1,37 @@
+{#
+ # Available Variables:
+ # - control__url: If provided, sets the element to 'a' and adds `href`
+ # - control__content
+ #}
+
+{% set control__attributes = control__attributes|default({}) %}
+
+{% if control__url|length > 0 %}
+ {% set control__url_type = control__url_type|default(getUrlType(control__url, control__attributes)) %}
+ {% set control__base_class = control__base_class|default('link') %}
+ {% set control__element = 'a' %}
+ {% set control__attributes = control__attributes|merge({
+ href: control__url,
+ }) %}
+{% else %}
+ {% set control__url_type = control__url_type|default("internal") %}
+ {% set control__base_class = control__base_class|default('button') %}
+ {% set control__element = control__element|default('button') %}
+
+ {% if aria_expanded %}
+ {% set control__attributes = control__attributes|merge({
+ 'aria-expanded': aria_expanded,
+ }) %}
+ {% endif %}
+{% endif %}
+
+{% set control__attributes = control__attributes|merge({
+ class: bem(control__base_class, control__modifiers, control__blockname),
+}) %}
+
+<{{ control__element }} {{ add_attributes(control__attributes) }}>
+ {{- control__content -}}
+ {%- include "@atoms/controls/base/yds-control-icon.twig" with {
+ control_icon__url_type: control__url_type,
+ } %}
+{{ control__element }}>
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/button/_yds-button.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/button/_yds-button.scss
new file mode 100644
index 000000000..dad75b214
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/button/_yds-button.scss
@@ -0,0 +1,16 @@
+@use '../../../00-tokens/tokens';
+
+// This reset mixin is used to remove browser default styles for button
+// elements that shouldn't look like a traditional "button".
+@mixin reset {
+ border: 0;
+ background: transparent;
+ padding: 0;
+ color: inherit;
+}
+
+// In FireFox, button:focus-visible is picking up the normalize.css styles
+// and making outlines dotted. This makes sure it uses our styles.
+button:focus-visible {
+ @include tokens.focus-styles;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/control.stories.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/control.stories.js
new file mode 100644
index 000000000..6df73af9a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/control.stories.js
@@ -0,0 +1,407 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+import getGlobalThemes from '../../00-tokens/colors/color-global-themes';
+import ctaTwig from './cta/yds-cta.twig';
+import linkTwig from './text-link/yds-text-link.twig';
+
+import textCopyButton from './text-copy-button/yds-text-copy-button.twig';
+
+import './text-link/yds-text-link';
+import './text-copy-button/yds-text-copy-button';
+
+import themeExamplesTwig from './cta/_yds-cta-examples.twig';
+
+const siteGlobalThemes = { themes: tokens['global-themes'] };
+const componentThemes = { themes: tokens['button-cta-themes'] };
+const componentThemeOptions = Object.keys(tokens['button-cta-themes']);
+const siteGlobalThemeOptions = getGlobalThemes(tokens['global-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Atoms/Controls',
+};
+
+const ctaText = 'Call to action';
+export const Cta = ({ componentTheme }) => `
+ Filled
+
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: 'https://google.com',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__radius: 'soft',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: 'https://google.com/test.pdf',
+ cta__radius: 'pill',
+ cta__component_theme: componentTheme,
+ })}
+
+ Outline
+
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__style: 'outline',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__radius: 'soft',
+ cta__style: 'outline',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__radius: 'pill',
+ cta__style: 'outline',
+ cta__component_theme: componentTheme,
+ })}
+
+ Outline Weights
+
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__style: 'outline',
+ cta__outline_weight: '1',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__style: 'outline',
+ cta__outline_weight: '2',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__style: 'outline',
+ cta__outline_weight: '4',
+ cta__component_theme: componentTheme,
+ })}
+
+ Hover Effects
+
+ ${ctaTwig({
+ cta__content: 'Fade',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: 'Rise',
+ cta__hover_style: 'rise',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: 'Wipe',
+ cta__hover_style: 'wipe',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+
+
+ ${ctaTwig({
+ cta__content: 'Fade',
+ cta__style: 'outline',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: 'Rise',
+ cta__style: 'outline',
+ cta__hover_style: 'rise',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: 'Wipe',
+ cta__style: 'outline',
+ cta__hover_style: 'wipe',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+
+`;
+
+Cta.argTypes = {
+ componentTheme: {
+ name: 'Component Theme (dial)',
+ options: componentThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+};
+
+export const textLink = () => `
+ ${linkTwig({
+ link__url: 'http://localhost:6006',
+ link__content: 'This is a default link',
+ })}
+ ${linkTwig({
+ link__url: '#',
+ link__content: 'This is a "no-underline" link',
+ link__style: 'no-underline',
+ link__type: 'normal',
+ })}
+ ${linkTwig({
+ link__url: 'https://google.com',
+ link__content: 'This is an "external" link',
+ link__style: 'underline-with-icon',
+ link__type: 'external',
+ })}
+ ${linkTwig({
+ link__url: '#',
+ link__content: 'This is a "new target" link',
+ link__style: 'underline-with-icon',
+ link__type: 'target-blank',
+ link__attributes: {
+ target: '_blank',
+ },
+ })}
+ ${linkTwig({
+ link__url: 'https://google.com/download.pdf',
+ link__content: 'This is a "download" link',
+ link__style: 'underline-with-icon',
+ link__type: 'download',
+ })}
+ ${linkTwig({
+ link__url: '#',
+ link__content: 'This is a link with chevron',
+ link__style: 'underline-with-icon',
+ link__type: 'with-chevron',
+ link__url_type: 'chevron',
+ })}
+ ${linkTwig({
+ link__url: '#',
+ link__content: 'This is a long link without animated underlines',
+ link__style: 'no-underline-animation',
+ })}
+`;
+
+export const CtaExamples = ({ globalTheme, componentTheme }) =>
+ themeExamplesTwig({
+ ...siteGlobalThemes,
+ ...componentThemes,
+ site_global__theme: globalTheme,
+ example_content: `
+ Filled
+
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: 'https://google.com',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: 'https://google.com/download.pdf',
+ cta__radius: 'soft',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__radius: 'pill',
+ cta__component_theme: componentTheme,
+ })}
+
+ Outline
+
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__style: 'outline',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__radius: 'soft',
+ cta__style: 'outline',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__radius: 'pill',
+ cta__style: 'outline',
+ cta__component_theme: componentTheme,
+ })}
+
+ Outline Weights
+
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__style: 'outline',
+ cta__outline_weight: '1',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__style: 'outline',
+ cta__outline_weight: '2',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: ctaText,
+ cta__href: '#',
+ cta__style: 'outline',
+ cta__outline_weight: '4',
+ cta__component_theme: componentTheme,
+ })}
+
+ Hover Effects
+
+ ${ctaTwig({
+ cta__content: 'Fade',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: 'Rise',
+ cta__hover_style: 'rise',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: 'Wipe',
+ cta__hover_style: 'wipe',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+
+
+ ${ctaTwig({
+ cta__content: 'Fade',
+ cta__style: 'outline',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: 'Rise',
+ cta__style: 'outline',
+ cta__hover_style: 'rise',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+ ${ctaTwig({
+ cta__content: 'Wipe',
+ cta__style: 'outline',
+ cta__hover_style: 'wipe',
+ cta__href: '#',
+ cta__component_theme: componentTheme,
+ })}
+
+ `,
+ });
+
+CtaExamples.argTypes = {
+ globalTheme: {
+ name: 'Global Theme (lever)',
+ options: siteGlobalThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ componentTheme: {
+ name: 'Component Theme (dial)',
+ options: componentThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+};
+
+export const LinkExamples = ({ globalTheme, componentTheme }) =>
+ themeExamplesTwig({
+ ...siteGlobalThemes,
+ ...componentThemes,
+ site_global__theme: globalTheme,
+ example_content: `
+
+ ${linkTwig({
+ link__url: 'http://localhost:6006',
+ link__content: 'This is a default link',
+ })}
+ ${linkTwig({
+ link__url: '#',
+ link__content: 'This is a "no-underline" link',
+ link__style: 'no-underline',
+ link__type: 'normal',
+ })}
+ ${linkTwig({
+ link__url: 'https://google.com',
+ link__content: 'This is an "external" link',
+ link__style: 'underline-with-icon',
+ link__type: 'external',
+ })}
+ ${linkTwig({
+ link__url: '#',
+ link__content: 'This is a "new target" link',
+ link__style: 'underline-with-icon',
+ link__type: 'target-blank',
+ link__attributes: {
+ target: '_blank',
+ },
+ })}
+ ${linkTwig({
+ link__url: 'https://google.com/download.pdf',
+ link__content: 'This is a "download" link',
+ link__style: 'underline-with-icon',
+ link__type: 'download',
+ })}
+ ${linkTwig({
+ link__url: '#',
+ link__content: 'This is a link with chevron',
+ link__style: 'underline-with-icon',
+ link__type: 'with-chevron',
+ link__url_type: 'chevron',
+ })}
+ ${linkTwig({
+ link__url: '#',
+ link__content: 'This is a long link without animated underlines',
+ link__style: 'no-underline-animation',
+ })}
+
+ `,
+ });
+
+export const textCopyButtonExamples = ({ globalTheme, componentTheme }) =>
+ themeExamplesTwig({
+ ...siteGlobalThemes,
+ ...componentThemes,
+ site_global__theme: globalTheme,
+ example_content: `
+ ${textCopyButton({
+ text_copy_button__pre_text: 'person@example.com',
+ text_copy_button__content: '(copy)',
+ text_copy_button__component_theme: componentTheme,
+ })}
+ `,
+ });
+
+textCopyButtonExamples.argTypes = {
+ globalTheme: {
+ name: 'Global Theme (lever)',
+ options: siteGlobalThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ componentTheme: {
+ name: 'Component Theme (dial)',
+ options: componentThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/_yds-cta-examples.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/_yds-cta-examples.twig
new file mode 100644
index 000000000..25474b541
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/_yds-cta-examples.twig
@@ -0,0 +1,5 @@
+
+
+ {{example_content}}
+
+
\ No newline at end of file
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/_yds-cta.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/_yds-cta.scss
new file mode 100644
index 000000000..42eeb5a11
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/_yds-cta.scss
@@ -0,0 +1,353 @@
+@use 'sass:selector';
+@use '~@yalesites-org/tokens/build/scss/tokens' as sass-tokens;
+@use '../../../00-tokens/functions/map';
+@use '../../../00-tokens/tokens';
+
+$component-cta-themes: map.deep-get(tokens.$tokens, 'button-cta-themes');
+$component-basic-themes: map.deep-get(tokens.$tokens, 'basic-themes');
+$global-cta-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$cta-radii: (
+ 'soft': var(--cta-radius-soft),
+ 'pill': 100vmax,
+);
+$cta-outline-weights: (
+ '1': var(--border-thickness-1),
+ '2': var(--border-thickness-2),
+ '4': var(--border-thickness-4),
+);
+
+@mixin cta {
+ // prettier-ignore
+ border: var(--border-thickness-cta, var(--border-thickness-2)) solid var(--color-cta-border);
+ border-radius: var(--border-radius-cta, var(--radius-0));
+ background-color: var(--color-cta-bg);
+ color: var(--color-cta-text);
+ font-weight: var(--font-weights-mallory-medium);
+ padding: var(--size-spacing-3) var(--size-spacing-6);
+ text-decoration: none;
+ text-align: center;
+ min-height: var(--size-click-target-minimum);
+
+ &:hover {
+ background-color: var(--color-cta-bg-hover);
+ color: var(--color-cta-text-hover);
+ }
+
+ // Radius options
+ @each $radius, $value in $cta-radii {
+ &[data-cta-radius='#{$radius}'] {
+ --border-radius-cta: #{$value};
+ }
+ }
+
+ // Outline weights options
+ @each $weight, $value in $cta-outline-weights {
+ &[data-cta-outline-weight='#{$weight}'] {
+ --border-thickness-cta: #{$value};
+ }
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-cta-themes {
+ &[data-cta-theme='#{$theme}'] {
+ --color-slot-one: var(--button-cta-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--button-cta-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--button-cta-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--button-cta-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--button-cta-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--button-cta-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--button-cta-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--button-cta-themes-#{$theme}-slot-eight);
+ --color-action: var(--color-cta-action);
+ --color-action-secondary: var(--color-cta-action-secondary);
+ --color-cta-action-secondary: var(--color-basic-white);
+ --color-cta-action: var(--color-slot-one);
+ --color-link-base: var(--color-slot-two);
+ }
+ }
+
+ @each $theme, $value in $component-basic-themes {
+ [data-basic-theme='#{$theme}'] & {
+ --color-action: var(--color-text);
+ --color-action-secondary: var(--color-background);
+ }
+ }
+
+ // Styles
+ &[data-cta-style='filled'] {
+ --color-cta-bg: var(--color-action);
+ --color-cta-bg-hover: transparent;
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-action-secondary);
+ --color-cta-text-hover: var(--color-action);
+ }
+
+ &[data-cta-style='outline'] {
+ --color-cta-bg: transparent;
+ --color-cta-bg-hover: var(--color-action);
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-action);
+ --color-cta-text-hover: var(--color-action-secondary);
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-cta-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-cta-theme='one'] {
+ &[data-cta-style='filled'] {
+ --color-cta-action-secondary: var(--color-slot-eight);
+ --color-cta-action: var(--color-slot-one);
+ --color-cta-bg: var(--color-slot-one);
+ --color-cta-bg-hover: transparent;
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-cta-action-secondary);
+ --color-cta-text-hover: var(--color-action);
+ }
+
+ &[data-cta-style='outline'] {
+ --color-cta-action-secondary: var(--color-slot-eight);
+ --color-cta-action: var(--color-slot-one);
+ --color-cta-bg: transparent;
+ --color-cta-bg-hover: var(--color-action);
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-action);
+ --color-cta-text-hover: var(--color-cta-action-secondary);
+ }
+ }
+
+ &[data-cta-theme='two'] {
+ &[data-cta-style='filled'] {
+ --color-cta-action: var(--color-slot-two);
+ --color-cta-bg: var(--color-slot-two);
+ --color-cta-bg-hover: transparent;
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-slot-eight);
+ --color-cta-text-hover: var(--color-action);
+ }
+
+ &[data-cta-style='outline'] {
+ --color-cta-action-secondary: var(--color-slot-eight);
+ --color-cta-action: var(--color-slot-two);
+ --color-cta-bg: transparent;
+ --color-cta-bg-hover: var(--color-action);
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-action);
+ --color-cta-text-hover: var(--color-cta-action-secondary);
+ }
+ }
+
+ &[data-cta-theme='three'] {
+ &[data-cta-style='filled'] {
+ --color-cta-action: var(--color-slot-three);
+ --color-cta-bg: var(--color-slot-three);
+ --color-cta-bg-hover: transparent;
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-slot-seven);
+ --color-cta-text-hover: var(--color-slot-seven);
+ }
+
+ &[data-cta-style='outline'] {
+ --color-cta-action-secondary: var(--color-slot-seven);
+ --color-action: var(--color-slot-three);
+ --color-cta-bg: transparent;
+ --color-cta-bg-hover: var(--color-action);
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-slot-seven);
+ --color-cta-text-hover: var(--color-cta-action-secondary);
+ }
+ }
+
+ &[data-cta-theme='four'] {
+ &[data-cta-style='filled'] {
+ --color-cta-action: var(--color-slot-four);
+ --color-cta-bg: var(--color-slot-four);
+ --color-cta-bg-hover: transparent;
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-slot-seven);
+ --color-cta-text-hover: var(--color-slot-seven);
+ }
+
+ &[data-cta-style='outline'] {
+ --color-cta-action-secondary: var(--color-slot-seven);
+ --color-action: var(--color-slot-four);
+ --color-cta-bg: transparent;
+ --color-cta-bg-hover: var(--color-action);
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-slot-seven);
+ --color-cta-text-hover: var(--color-slot-seven);
+ }
+ }
+
+ &[data-cta-theme='five'] {
+ &[data-cta-style='filled'] {
+ --color-cta-action: var(--color-slot-five);
+ --color-cta-bg: var(--color-slot-five);
+ --color-cta-bg-hover: transparent;
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-slot-eight);
+ --color-cta-text-hover: var(--color-action);
+ }
+
+ &[data-cta-style='outline'] {
+ --color-cta-action-secondary: var(--color-slot-eight);
+ --color-action: var(--color-slot-five);
+ --color-cta-bg: transparent;
+ --color-cta-bg-hover: var(--color-action);
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-action);
+ --color-cta-text-hover: var(--color-cta-action-secondary);
+ }
+ }
+
+ &[data-cta-theme='six'] {
+ &[data-cta-style='filled'] {
+ --color-cta-action: var(--color-slot-six);
+ --color-cta-bg: var(--color-slot-six);
+ --color-cta-bg-hover: transparent;
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-slot-eight);
+ --color-cta-text-hover: var(--color-action);
+ }
+
+ &[data-cta-style='outline'] {
+ --color-cta-action-secondary: var(--color-slot-six);
+ --color-action: var(--color-slot-six);
+ --color-cta-bg: transparent;
+ --color-cta-bg-hover: var(--color-action);
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-action);
+ --color-cta-text-hover: var(--color-slot-eight);
+ }
+ }
+
+ &[data-cta-theme='seven'] {
+ &[data-cta-style='filled'] {
+ --color-cta-action: var(--color-slot-seven);
+ --color-cta-bg: var(--color-slot-seven);
+ --color-cta-bg-hover: transparent;
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-slot-eight);
+ --color-cta-text-hover: var(--color-action);
+ }
+
+ &[data-cta-style='outline'] {
+ --color-cta-action-secondary: var(--color-slot-seven);
+ --color-action: var(--color-slot-seven);
+ --color-cta-bg: transparent;
+ --color-cta-bg-hover: var(--color-action);
+ --color-cta-border: var(--color-action);
+ --color-cta-text: var(--color-action);
+ --color-cta-text-hover: var(--color-slot-eight);
+ }
+ }
+
+ // Hover styles
+ &[data-cta-hover-style='fade'] {
+ @include tokens.animate('color, background-color');
+ }
+
+ &[data-cta-hover-style='rise'] {
+ @include tokens.animate($property: 'transform');
+
+ transform: translateY(0);
+
+ &:hover {
+ transform: translateY(-0.25em);
+ color: var(--color-cta-text);
+ background-color: var(--color-cta-bg);
+ box-shadow: var(--drop-shadow-level-1);
+ }
+ }
+
+ &[data-cta-hover-style='wipe'] {
+ @include tokens.animate($duration: 400ms);
+
+ &:hover {
+ &[data-cta-style='outline'] {
+ box-shadow: inset 6.5em 0 0 0 var(--color-cta-bg-hover);
+ }
+ }
+
+ &[data-cta-style='filled'] {
+ box-shadow: inset -6.5em 0 0 0 var(--color-cta-bg);
+
+ &:hover {
+ box-shadow: none;
+ }
+ }
+ }
+
+ &:active {
+ --color-cta-bg-active: var(--color-gray-700);
+ --color-cta-border-active: var(--color-gray-700);
+ --color-cta-text-active: var(--color-basic-white);
+ --cta-box-shadow-active: none;
+
+ // Don't ever use !important!!!
+ // With that said, these are !important because the active styles below
+ // should take precedence over any hover styles regardless of specificity.
+ // We experimented with adding extra specificity to this selector to make it
+ // "naturally" override the nested data attributes above... but that seemed
+ // more hacky than adding a few !importants. In this case we want the active
+ // state to take precedence over the hover state in any/all situations.
+ background-color: var(--color-cta-bg-active) !important;
+ border-color: var(--color-cta-border-active);
+ color: var(--color-cta-text-active) !important;
+ box-shadow: var(--cta-box-shadow-active) !important;
+ }
+
+ // @at-root docs: https://sass-lang.com/documentation/at-rules/at-root
+ @at-root #{selector.unify(&, a)} {
+ &:hover,
+ &:focus-visible {
+ text-decoration: underline;
+ }
+ }
+
+ // A cta link with a font-icon should have more padding
+ &:has(> i.fa-icon) {
+ padding-right: var(--size-spacing-8);
+ }
+}
+
+.cta {
+ @include cta;
+
+ .form--inline & {
+ height: 100%;
+ }
+}
+
+// @TODO: Temporary place for this
+.cta-group {
+ display: flex;
+ gap: var(--size-spacing-7);
+ margin-bottom: var(--size-spacing-7);
+
+ .component-wrapper--no-bottom-margin & {
+ margin-bottom: 0;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/yds-cta.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/yds-cta.twig
new file mode 100644
index 000000000..0ebf47846
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/cta/yds-cta.twig
@@ -0,0 +1,40 @@
+{#
+ # Available props
+ # Reference: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/button_role#associated_aria_roles_states_and_properties
+ # - aria_expanded: whether the controlled grouping is expanded or not
+ # - cta__hover_style: fade (default), rise, or swipe
+ # - cta__radius: none (default), soft, or pill
+ # - cta__style: filled (default) or outline
+ # - cta__outline_weight: 1 (default), 2, or 4
+ #
+ # Available variables:
+ # - cta__content - the content of the cta (typically text)
+ # - cta__href - the URL the link points to
+ #}
+
+{% set cta__base_class = 'cta' %}
+{% set cta__element = cta__element|default('button') %}
+{% set cta__attributes = cta__attributes|default({}) %}
+
+{% set cta__attributes = cta__attributes|merge({
+ 'data-cta-hover-style': cta__hover_style|default('fade'),
+ 'data-cta-radius': cta__radius|default('none'),
+ 'data-cta-style': cta__style|default('filled'),
+ 'data-cta-outline-weight': cta__outline_weight|default('2'),
+}) %}
+
+{% if cta__component_theme %}
+ {% set cta__attributes = cta__attributes|merge({
+ 'data-cta-theme': cta__component_theme,
+ }) %}
+{% endif %}
+
+{% include "@atoms/controls/base/yds-control.twig" with {
+ control__base_class: cta__base_class,
+ control__modifiers: cta__modifiers,
+ control__blockname: cta__blockname,
+ control__attributes: cta__attributes,
+ control__url: cta__href,
+ control__content: cta__content,
+ control__element: cta__element,
+} %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/_yds-text-copy-button.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/_yds-text-copy-button.scss
new file mode 100644
index 000000000..4cc60204b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/_yds-text-copy-button.scss
@@ -0,0 +1,51 @@
+@use 'sass:selector';
+@use '~@yalesites-org/tokens/build/scss/tokens' as sass-tokens;
+@use '../../../00-tokens/functions/map';
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/controls/button/yds-button' as button;
+
+$text-copy-button-themes: map.deep-get(sass-tokens.$tokens, color, link, theme);
+$global-text-copy-button-themes: map.deep-get(tokens.$tokens, 'global-themes');
+
+.text-copy-button {
+ // Component themes
+ @each $theme, $value in $text-copy-button-themes {
+ [data-basic-theme='#{$theme}'] {
+ --color-link-base: var(--color-link-theme-#{$theme}-base);
+ --color-link-hover: var(--color-link-theme-#{$theme}-hover);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-text-copy-button-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-link-hover: var(--color-slot-two);
+ }
+ }
+}
+
+.text-copy-button__button {
+ @include button.reset;
+
+ color: var(--color-link-base);
+ font-weight: var(--font-weights-mallory-medium);
+ line-height: normal;
+ cursor: pointer;
+ text-underline-offset: 0.22rem;
+
+ &:hover {
+ color: var(--color-link-hover);
+ text-decoration: underline;
+ text-decoration-thickness: 0.1em;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/yds-text-copy-button.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/yds-text-copy-button.js
new file mode 100644
index 000000000..c0ceaa673
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/yds-text-copy-button.js
@@ -0,0 +1,35 @@
+Drupal.behaviors.textCopyButton = {
+ attach(context) {
+ // Add click event listener for clicking the text
+ const elems = context.querySelectorAll('.text-copy-button__button');
+ elems.forEach((elem) => {
+ elem.addEventListener(
+ 'click',
+ (event) => {
+ // Only fire if the target has id copy
+ if (!event.target.matches('.text-copy-button__button')) return;
+
+ if (!navigator.clipboard) {
+ // Clipboard API not available
+ return;
+ }
+ const text = event.target.parentNode
+ .querySelector('.pre-text__text')
+ .textContent.trim();
+ try {
+ navigator.clipboard.writeText(text);
+ const triggerValue = elem;
+ triggerValue.innerHTML = 'Copied to clipboard';
+ setTimeout(() => {
+ triggerValue.innerHTML = '(Copy)';
+ }, 1200);
+ } catch (error) {
+ const triggerValue = elem;
+ triggerValue.innerHTML = '(error)';
+ }
+ },
+ false,
+ );
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/yds-text-copy-button.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/yds-text-copy-button.twig
new file mode 100644
index 000000000..7c13b0597
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-copy-button/yds-text-copy-button.twig
@@ -0,0 +1,33 @@
+{#
+ # Available variables:
+ # - text_copy_button__content - the content of the link (typically text)
+ # - text_copy_button__attributes - array of attribute,value pairs
+ #
+ # Available blocks:
+ # - text_copy_button__content - used to replace the content of the link
+ # Example: to insert the image component
+ #}
+
+{% set text_copy_button__base_class = text_copy_button__base_class|default('text-copy-button') %}
+{% set text_copy_button__attributes = text_copy_button__attributes|default({}) %}
+
+{% set text_copy_button__attributes = text_copy_button__attributes|merge({
+ class: bem(text_copy_button__base_class, text_copy_button__modifiers, text_copy_button__blockname, text_copy_button__extra_class),
+ 'data-cta-theme': text_copy_button__component_theme|default('one'),
+}) %}
+
+
+ {# set these bem classes so that they can't be changed.
+ the JS in `./yds-text-link.js` is looking for `pre-text__text` #}
+ {% if text_copy_button__pre_text %}
+
+ {{text_copy_button__pre_text}}
+
+ {% endif %}
+
+
+ {% block text_copy_button__content %}
+ {{- text_copy_button__content -}}
+ {% endblock %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/_yds-text-link.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/_yds-text-link.scss
new file mode 100644
index 000000000..4c0707edb
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/_yds-text-link.scss
@@ -0,0 +1,290 @@
+@use '~@yalesites-org/tokens/build/scss/tokens' as sass-tokens;
+@use '../../../00-tokens/functions/map';
+@use '../../../00-tokens/tokens';
+
+$link-themes: map.deep-get(sass-tokens.$tokens, color, link, theme);
+$global-link-themes: map.deep-get(tokens.$tokens, 'global-themes');
+
+:root {
+ // Component themes
+ @each $theme, $value in $link-themes {
+ [data-basic-theme='#{$theme}'] {
+ --color-link-base: var(--color-link-theme-#{$theme}-base);
+ --color-link-hover: var(--color-link-theme-#{$theme}-hover);
+ --color-text-shadow: var(--color-background-#{$theme}-background-color);
+ }
+ }
+}
+
+// Mixin for generic links.
+// Style options are "default" or "no-underline" or "no-animation".
+// The style name indicates the initial appearance.
+@mixin link($style: default, $family-weight: 'mallory-medium') {
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-link-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-link-hover: var(--color-slot-two);
+ }
+ }
+
+ @include tokens.underline-slide-start($variation: #{$style});
+
+ color: var(--color-link-base);
+ text-decoration: none;
+ font-weight: var(--font-weights-#{$family-weight});
+ line-height: normal;
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-link-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-link-hover: var(--color-slot-two);
+ }
+ }
+
+ // This text shadow will make the animated underline appear to avoid
+ // descenders in content.
+ // inspired by:
+ // https://github.com/adamschwartz/magic-of-css/commit/35fa2f5ab36aa8c81f053f5a8c7b67b60c79ae5b
+
+ text-shadow: 0.03em 0 var(--color-text-shadow),
+ -0.03em 0 var(--color-text-shadow), 0 0.03em var(--color-text-shadow),
+ 0 -0.03em var(--color-text-shadow), 0.06em 0 var(--color-text-shadow),
+ -0.06em 0 var(--color-text-shadow), 0.09em 0 var(--color-text-shadow),
+ -0.09em 0 var(--color-text-shadow), 0.12em 0 var(--color-text-shadow),
+ -0.12em 0 var(--color-text-shadow), 0.15em 0 var(--color-text-shadow),
+ -0.15em 0 var(--color-text-shadow);
+
+ // Animate the decorative bar when the link is hovered.
+ &:hover {
+ @include tokens.underline-slide-end($variation: #{$style});
+
+ color: var(--color-link-hover);
+ }
+
+ // Remove underline when focus is visible.
+ &:focus-visible {
+ @include tokens.underline-slide-none;
+ }
+
+ &:visited {
+ color: var(--color-link-visited-base);
+
+ &:focus,
+ &:hover {
+ color: var(--color-link-visited-hover);
+ }
+ }
+
+ // Make the underline link encompass the icon as well.
+ &:has(> i.fa-icon) {
+ padding-right: var(--size-spacing-6);
+ }
+}
+
+// This mixin is primarily used in instances in which the link mixin
+// (and underline-slide-start) doesn't work.
+// Specifically, in instances where we want a plain text link with an underline
+// decoration but also want to control the thickness of the underline.
+// Currently used in: components/02-molecules/banner/grand-hero/_yds-grand-hero.scss
+// and directly referenced at the bottom of this file in:
+// &[data-link-style='no-underline-animation']
+@mixin plain-link {
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-link-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-link-hover: var(--color-slot-two);
+ }
+ }
+
+ color: var(--color-link-base);
+ text-decoration: underline;
+ text-decoration-thickness: 0.1em;
+ font-weight: var(--font-weights-mallory-medium);
+ line-height: normal;
+
+ &:hover {
+ text-decoration: none;
+ color: var(--color-link-hover);
+ }
+
+ &:visited {
+ color: var(--color-link-visited-base);
+
+ &:focus,
+ &:hover {
+ color: var(--color-link-visited-hover);
+ }
+ }
+}
+
+// This mixin is used to style linked headings in components that should be
+// "fully clickable". e.g. When an entire card is clickable, this applies the
+// appropriate styles to the heading inside the card.
+// NOTES:
+// - Apply the mixin to the parent item. e.g.: `.card` and it will affect
+// the `.card__heading-link` element inside.
+// - The component will likely also need some JS to round out the design and
+// functionality desired. Check `reference-card.js` for an example. And/or read
+// the Cards chapter here: https://inclusive-components.design/cards.
+@mixin clickable-component-heading-link {
+ // Style the component when it's heading is focused.
+ &:focus-within {
+ @include tokens.focus-styles;
+ }
+
+ // Style the heading link inside the component.
+ [class*='__heading-link'] {
+ @include tokens.underline-slide-start('no-underline');
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-link-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(
+ --global-themes-#{$globalTheme}-colors-slot-four
+ );
+ --color-slot-five: var(
+ --global-themes-#{$globalTheme}-colors-slot-five
+ );
+ --color-link-hover: var(--color-slot-two);
+ }
+ }
+
+ color: currentcolor;
+ text-decoration: none;
+ font-weight: var(--font-weights-yalenew-bold);
+ letter-spacing: var(--font-letter-spacing-yalenew-bold);
+
+ // adjust position so the text-shadow aligns nicely with the text.
+ --position: 0 1.05em;
+
+ // This text shadow will make the animated underline appear to avoid
+ // descenders in content.
+ // inspired by:
+ // https://github.com/adamschwartz/magic-of-css/commit/35fa2f5ab36aa8c81f053f5a8c7b67b60c79ae5b
+
+ text-shadow: 0.03em 0 var(--color-text-shadow),
+ -0.03em 0 var(--color-text-shadow), 0 0.03em var(--color-text-shadow),
+ 0 -0.03em var(--color-text-shadow), 0.06em 0 var(--color-text-shadow),
+ -0.06em 0 var(--color-text-shadow), 0.09em 0 var(--color-text-shadow),
+ -0.09em 0 var(--color-text-shadow), 0.12em 0 var(--color-text-shadow),
+ -0.12em 0 var(--color-text-shadow), 0.15em 0 var(--color-text-shadow),
+ -0.15em 0 var(--color-text-shadow);
+
+ &:focus {
+ // Setting `outline: none` is generally a huge no-no! In this case,
+ // however, we're visually and functionally making the entire component
+ // "clickable", so we've added focus styles to the component itself using
+ // `:focus-within` above, so we can safely remove this outline, since it
+ // would otherwise be redundant and create confusion as two different
+ // elements would appear to be focused at the same time.
+ outline: none;
+ }
+
+ &:visited {
+ color: var(--color-link-visited-base);
+ }
+ }
+
+ // Style the heading link when the component is focused.
+ &:focus-visible [class*='__heading-link'] {
+ @include tokens.underline-slide-end('no-underline');
+ }
+
+ // Style the heading link when the component is hovered.
+ &:hover [class*='__heading-link'] {
+ @include tokens.underline-slide-end('no-underline');
+
+ color: var(--color-link-hover);
+
+ &:visited {
+ color: var(--color-link-visited-hover);
+ }
+ }
+
+ // Make the underline link encompass the icon as well.
+ & [class*='__heading-link']:has(> i.fa-icon) {
+ padding-right: var(--size-spacing-5);
+ }
+}
+
+.link {
+ &[data-link-style='underline'] {
+ @include link;
+
+ // set default --color-text-shadow
+ --color-text-shadow: var(--color-basic-white);
+ }
+
+ &[data-link-style='underline-with-icon'] {
+ @include link;
+
+ // set default --color-text-shadow
+ --color-text-shadow: var(--color-basic-white);
+
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ width: fit-content;
+ background-size: calc(100% - var(--size-spacing-3)) var(--thickness);
+
+ // Footer elements with a dark background can't have white shadows
+ // so this overrides it to match the current background color of the footer.
+ .site-footer__secondary & {
+ --color-text-shadow: var(--color-site-footer-background-color);
+ }
+ }
+
+ &[data-link-style='no-underline'] {
+ @include link(no-underline);
+ }
+
+ &[data-link-style='no-underline-animation'] {
+ @include plain-link;
+ }
+
+ &:visited {
+ color: var(--color-link-visited-base);
+
+ &:hover {
+ color: var(--color-link-visited-hover);
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/yds-text-link.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/yds-text-link.js
new file mode 100644
index 000000000..6fb97a19a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/yds-text-link.js
@@ -0,0 +1,49 @@
+Drupal.behaviors.textLink = {
+ attach(context) {
+ // Selectors
+ const currentURL = window.location.origin;
+ const links = context.querySelectorAll('a');
+
+ // Add click event listener for clicking the text
+ const elems = document.querySelectorAll('.copy-trigger');
+ elems.forEach((elem) => {
+ elem.addEventListener(
+ 'click',
+ (event) => {
+ // Only fire if the target has id copy
+ if (!event.target.matches('.copy-trigger')) return;
+
+ if (!navigator.clipboard) {
+ // Clipboard API not available
+ return;
+ }
+ const text =
+ event.target.parentNode.querySelector(
+ '.pre-text__text',
+ ).textContent;
+ try {
+ navigator.clipboard.writeText(text);
+ const triggerValue = elem;
+ triggerValue.innerHTML = 'Copied to clipboard';
+ setTimeout(() => {
+ triggerValue.innerHTML = '(Copy)';
+ }, 1200);
+ } catch (error) {
+ const triggerValue = elem;
+ triggerValue.innerHTML = '(error)';
+ }
+ },
+ false,
+ );
+ });
+
+ // find all external links and add a class
+ links.forEach((link) => {
+ const linkHref = link.getAttribute('href');
+
+ if (linkHref !== currentURL) {
+ link.classList.add('external-link');
+ }
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/yds-text-link.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/yds-text-link.twig
new file mode 100644
index 000000000..7012d3b4a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/controls/text-link/yds-text-link.twig
@@ -0,0 +1,59 @@
+{#
+ # Available props:
+ # - link__type:
+ # - normal (default),
+ # - download
+ # - external (adds icon),
+ # - target-blank (adds icon + opens in new window/tab),
+ # - with-chevron
+ # - link__style: underline (default), no-underline, no-animation
+ #
+ # Available variables:
+ # - link__content - the content of the link (typically text)
+ # - link__url - the url this link should poing to
+ # - link__attributes - array of attribute,value pairs
+ #
+ # Available blocks:
+ # - link__content - used to replace the content of the link
+ # Example: to insert the image component
+ #}
+
+{% set link__base_class = link__base_class|default('link') %}
+{% set link__attributes = link__attributes|default({}) %}
+{% set link__modifiers = link__modifiers|default([]) %}
+
+{% if link__url is defined and link__url is not null and link__url|length > 0 %}
+ {% set link__url_type = link__url_type|default(getUrlType(link__url, link__attributes)) %}
+{% else %}
+ {% set link__url_type = "internal" %}
+{% endif %}
+
+{% set link__type = link__type|default(link__url_type) %}
+{% set link__style = link_style|default('underline') %}
+
+{% if link__type == 'external' or link__type == 'target-blank' or link__type == 'download' or link__type == 'with-chevron' %}
+ {% set link__modifiers = link__modifiers|merge(['with-icon']) %}
+ {% set link__style = link__style ~ "-with-icon" %}
+{% endif %}
+
+{% set link__attributes = link__attributes|merge({
+ 'data-link-style': link__style|default('underline'),
+ 'data-link-type': link__type|default('normal'),
+ class: bem(link__base_class, link__modifiers, link__blockname, link__extra_class),
+ href: link__url,
+}) %}
+
+{% if link__url_type == 'download' %}
+ {% set link__attributes = link__attributes|merge({
+ download: '',
+ }) %}
+{% endif %}
+
+
+ {% block link__content %}
+ {{- link__content -}}
+ {% endblock %}
+ {% include "@atoms/controls/base/yds-control-icon.twig" with {
+ control_icon__url_type: link__url_type,
+ } %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/date-time/_yds-date-time.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/date-time/_yds-date-time.scss
new file mode 100644
index 000000000..6b636b518
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/date-time/_yds-date-time.scss
@@ -0,0 +1,6 @@
+.date-time {
+ font-variant-caps: small-caps;
+ font-variant-numeric: oldstyle-nums;
+ text-transform: lowercase;
+ letter-spacing: 0.5px;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/date-time/yds-date-time.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/date-time/yds-date-time.twig
new file mode 100644
index 000000000..1a94db109
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/date-time/yds-date-time.twig
@@ -0,0 +1,87 @@
+{# Remove white space caused by all of the new lines in this file. #}
+{% apply spaceless %}
+
+{#
+ # Logic Variables:
+ # - date_time__format: 'time', 'date', or null (default. Returns date and time.)
+ #
+ # Available Variables:
+ # - date_time__all_day
+ # - date_time__start
+ # - date_time__end
+ #}
+
+{# Set the end date to the start date, by default, so that Twig doesn't
+ # erroneously use "today" like it does when no date is provided.
+ # In the logic below we filter for "When start and end are the same, which, in
+ # combination with this, accounts for "no end date provided" as well. #}
+{% set date_time__end = date_time__end|default(date_time__start) %}
+
+{# Date/Time formats used in this file #}
+{% set format__iso = 'c' %} {# 2022-04-01T08:34:42+00:00 #}
+{% set format__html_date = 'Y-m-d' %} {# 2022-04-01 #}
+{% set format__date = 'F j, Y' %} {# April 1, 2022 #}
+{% set format__day__full__start = 'l, F j' %} {# Friday, April 1 #}
+{% set format__day__full = 'l, F j, Y' %} {# Friday, April 1, 2022 #}
+{# If minutes == ":00" don't show them #}
+{% if date_time__start|date('i') == '00' %}
+ {% set format__time__start = 'g-' %} {# 8- #}
+{% else %}
+ {% set format__time__start = 'g:i-' %} {# 8:30- #}
+{% endif %}
+{% if date_time__end|date('i') == '00' %}
+ {% set format__time = 'g a T' %} {# 11 pm ET #}
+{% else %}
+ {% set format__time = 'g:i a T' %} {# 11:30 pm ET #}
+{% endif %}
+
+
+{% if date_time__all_day == true %}
+ All Day
+{#############
+ # TIME ONLY #
+ #############}
+{% elseif date_time__format == 'time' %}
+ {# If start and end times are equal #}
+ {% if date_time__start|date(format__iso) == date_time__end|date(format__iso) %}
+ {% set date_time = date_time__start|date(format__time) %}
+ {# If start and end times are different #}
+ {% else %}
+ {% set date_time = date_time__start|date(format__time__start) ~ date_time__end|date(format__time) %}
+ {% endif %}
+{#############
+ # DATE ONLY #
+ #############}
+{% elseif date_time__format == 'date' %}
+ {# If start and end date/time are equal. #}
+ {% if date_time__start|date(format__html_date) == date_time__end|date(format__html_date) %}
+ {# Specific Date #}
+ {# Expample: April 1, 2022 #}
+ {% set date_time = date_time__start|date(format__date) %}
+ {# If start and end times are different. #}
+ {% else %}
+ {% set date_time = date_time__start|date(format__date) ~ '-' ~ date_time__end|date(format__date) %}
+ {% endif %}
+{################
+ # DAY AND DATE #
+ ################}
+{% else %}
+ {# If start and end date/time are equal. #}
+ {% if date_time__start|date(format__html_date) == date_time__end|date(format__html_date) %}
+ {# Specific Day #}
+ {# Expample: Friday, April 1, 2022 #}
+ {% set date_time = date_time__start|date(format__day__full) %}
+ {# If start and end times are different. #}
+ {% else %}
+ {% set date_time = date_time__start|date(format__day__full__start) ~ ' to ' ~ date_time__end|date(format__day__full) %}
+ {% endif %}
+{% endif %}
+
+{% set date_time__attribuites = {
+ datetime: date_time__start|date(format__iso),
+ class: bem('date-time'),
+} %}
+
+{{ date_time }}
+
+{% endapply %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/_yds-divider.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/_yds-divider.scss
new file mode 100644
index 000000000..01937cfe2
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/_yds-divider.scss
@@ -0,0 +1,43 @@
+@use '../../00-tokens/tokens';
+
+$divider-widths: 100, 75, 50, 25;
+
+@each $divider-width in $divider-widths {
+ .divider[data-divider-width='#{$divider-width}'] {
+ --width-divider: var(--layout-width-#{$divider-width});
+ }
+}
+
+$divider-positions: left, center;
+
+@each $divider-position in $divider-positions {
+ .divider__inner[data-divider-position='#{$divider-position}'] {
+ --position-divider: var(--layout-flex-position-#{$divider-position});
+ }
+}
+
+.divider__wrapper {
+ @include tokens.spacing-page-section;
+}
+
+.divider__inner {
+ display: flex;
+ justify-content: var(--position-divider);
+}
+
+.divider {
+ background: var(--color-divider);
+ width: var(--width-divider);
+ height: var(--thickness-divider);
+
+ // if animation is active
+ [data-site-animation='artistic'] & {
+ &[data-animate-item='enabled'] {
+ @include tokens.animate(
+ $property: 'transform',
+ $duration: var(--animation-speed-slow)
+ );
+ @include tokens.expand-out;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/cl-dividers.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/cl-dividers.scss
new file mode 100644
index 000000000..854551bb5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/cl-dividers.scss
@@ -0,0 +1,4 @@
+.divider__wrapper {
+ min-height: 5rem;
+ margin-block: 2rem;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/divider.stories.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/divider.stories.js
new file mode 100644
index 000000000..fb0f1ffae
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/divider.stories.js
@@ -0,0 +1,87 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+import dividerTwig from './yds-divider.twig';
+
+import './cl-dividers.scss';
+import '../../00-tokens/effects/yds-animate';
+
+const layoutOptions = ['left', 'center'];
+const thicknessOptions = Object.keys(tokens.border.thickness);
+const widths = Object.keys(tokens.layout.width);
+
+export default {
+ title: 'Atoms/Divider',
+ argTypes: {
+ thickness: {
+ name: 'Line thickness',
+ options: thicknessOptions,
+ type: 'select',
+ defaultValue: 'hairline',
+ },
+ dividerColor: {
+ name: 'Line Color',
+ options: ['gray-500', 'blue-yale', 'basic-brown-gray'],
+ type: 'select',
+ defaultValue: 'gray-500',
+ },
+ width: {
+ name: 'Divider width',
+ options: [...widths, 'View-All'],
+ type: 'select',
+ defaultValue: 'View-All',
+ },
+ position: {
+ name: 'Divider position',
+ options: layoutOptions,
+ type: 'select',
+ defaultValue: 'center',
+ },
+ },
+};
+
+export const Dividers = ({ position, thickness, dividerColor, width }) => {
+ const customProperties = {
+ '--thickness-theme-divider': `var(--size-thickness-${thickness})`,
+ };
+
+ const root = document.documentElement;
+ Object.entries(customProperties).forEach((entry) => {
+ const [key, value] = entry;
+ root.style.setProperty(key, value);
+ });
+
+ const viewAll = width === 'View-All';
+
+ return `
+ ${dividerTwig()}
+ ${dividerTwig()}
+ ${dividerTwig()}
+ ${dividerTwig()}
+ ${dividerTwig()}
+ ${dividerTwig()}
+
+
Playground
+
Use the StoryBook controls to see the dividers below implement the available positions, thicknesses, and colors.
+ ${dividerTwig({
+ divider__width: `${viewAll ? '25' : width}`,
+ divider__position: `${position}`,
+ })}
+ ${dividerTwig({
+ divider__width: `${viewAll ? '50' : width}`,
+ divider__position: `${position}`,
+ })}
+ ${dividerTwig({
+ divider__width: `${viewAll ? '75' : width}`,
+ divider__position: `${position}`,
+ })}
+ ${dividerTwig({
+ divider__width: `${viewAll ? '100' : width}`,
+ divider__position: `${position}`,
+ })}
+
+
+ `;
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/yds-divider.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/yds-divider.twig
new file mode 100644
index 000000000..4696a22c0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/divider/yds-divider.twig
@@ -0,0 +1,40 @@
+{#
+ # Available Props:
+ # - animate__item: defaults to `enabled`, will only animate if site_animate_components (lever / config) is not `default`
+ #
+ # Available Variables:
+ # - divider__width: available options are 100% (default), 75%, 50%, and 25%
+ # - divider__thickness: available options are 1 (default), 2, 3, 4, 5, and 6
+ # - divider__position: available options are center (default), left, and right
+ #}
+
+{% set divider__base_class = 'divider' %}
+{% set divider__position = divider__position|default('center')|lower %}
+{% set divider__width = divider__width|default('100') %}
+{% set divider__component_width = divider__component_width|default('site') %}
+{% set divider__attributes = divider__attributes|default({}) %}
+
+{% set divider__wrapper__attributes = {
+ 'data-component-width': divider__component_width,
+ class: bem('wrapper', [], divider__base_class),
+} %}
+
+{% set divider__inner__attributes = {
+ 'data-divider-position': divider__position,
+ class: bem('inner', [], divider__base_class),
+} %}
+
+{% set divider__attributes = divider__attributes|merge({
+ 'data-animate-item': animate__item|default('enabled'),
+}) %}
+
+{% set divider__attributes = divider__attributes|merge({
+ class: bem(divider__base_class),
+ 'data-divider-width': divider__width,
+}) %}
+
+ {% block prefix_suffix %}{% endblock %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_input.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_input.twig
new file mode 100644
index 000000000..811045fa3
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_input.twig
@@ -0,0 +1,13 @@
+{#
+/**
+ * @file
+ * Theme override for an 'input' #type form element.
+ *
+ * Available variables:
+ * - attributes: A list of HTML attributes for the input element.
+ * - children: Optional additional rendered elements.
+ *
+ * @see template_preprocess_input()
+ */
+#}
+ {{ children }}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_textarea.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_textarea.twig
new file mode 100644
index 000000000..6afdbc6f2
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_textarea.twig
@@ -0,0 +1,24 @@
+{#
+/**
+ * @file
+ * Theme override for a 'textarea' #type form element.
+ *
+ * Available variables
+ * - wrapper_attributes: A list of HTML attributes for the wrapper element.
+ * - attributes: A list of HTML attributes for the textarea element.
+ * - resizable: An indicator for whether the textarea is resizable.
+ * - required: An indicator for whether the textarea is required.
+ * - value: The textarea content.
+ *
+ * @see template_preprocess_textarea()
+ */
+#}
+{%
+ set classes = [
+ 'form-item__textfield',
+ 'form-item__textarea',
+ ]
+%}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_yds-form.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_yds-form.scss
new file mode 100644
index 000000000..fda6780ee
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/_yds-form.scss
@@ -0,0 +1,66 @@
+@use '../../00-tokens/tokens';
+
+// the button-submit mixin to emulate yds-button without the HTML attributes.
+// use case is specific to submit inputs in Drupal.
+// for all other use cases yds-button should be used.
+@mixin button-submit {
+ transition: color,
+ background-color var(--animation-speed-default) ease-in-out 0ms;
+
+ --color-action-secondary: var(--color-basic-white);
+ --color-button-bg: var(--color-action);
+ --color-button-bg-hover: transparent;
+ --color-button-border: var(--color-action);
+ --color-button-text: var(--color-action-secondary);
+ --color-button-text-hover: var(--color-action);
+ --border-thickness-button: var(--border-thickness-2);
+ --border-radius-button: 100vmax;
+
+ border: var(--border-thickness-button, var(--border-thickness-2)) solid
+ var(--color-button-border);
+ border-radius: var(--border-radius-button, var(--radius-0));
+ background-color: var(--color-button-bg);
+ color: var(--color-button-text);
+ font-weight: var(--font-weights-mallory-medium);
+ padding: var(--size-spacing-3) var(--size-spacing-6);
+ text-decoration: none;
+ text-align: center;
+ min-height: var(--size-click-target-minimum);
+ width: auto;
+
+ &:hover {
+ background-color: var(--color-button-bg-hover);
+ color: var(--color-button-text-hover);
+ }
+}
+
+.webform-submission-form {
+ max-width: 80rem;
+}
+
+// Used for exposed filter forms
+.ys-filter-form,
+.content-moderation-entity-moderation-form {
+ align-items: flex-end;
+ display: flex;
+ gap: 1rem;
+ margin-bottom: var(--size-spacing-8);
+ flex-flow: row wrap;
+
+ .form-item {
+ width: 100%;
+ margin-bottom: 0;
+ }
+
+ .form-select {
+ height: 3rem;
+ }
+
+ .form-submit {
+ @include button-submit;
+
+ --border-radius-button: var(--radius-0);
+
+ min-height: var(--size-spacing-9);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/_yds-checkbox-item.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/_yds-checkbox-item.twig
new file mode 100644
index 000000000..db5a47e96
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/_yds-checkbox-item.twig
@@ -0,0 +1,5 @@
+
+
+ {{ checkbox_item }}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/_yds-checkbox.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/_yds-checkbox.scss
new file mode 100644
index 000000000..bb029a5de
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/_yds-checkbox.scss
@@ -0,0 +1,8 @@
+@use '../../../00-tokens/tokens';
+
+.form-item--checkboxes,
+.form-item--checkbox__item {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/checkbox.yml b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/checkbox.yml
new file mode 100644
index 000000000..93a73fddc
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/checkbox.yml
@@ -0,0 +1,6 @@
+checkboxes:
+ - title: 'Option 1'
+ checked: 'checked'
+ - title: 'Option 2'
+ - title: 'Option 3'
+ - title: 'Option 4'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/yds-checkbox.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/yds-checkbox.twig
new file mode 100644
index 000000000..92413e8a6
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/checkbox/yds-checkbox.twig
@@ -0,0 +1,15 @@
+{% if not attributes %}
+
+ Options as Checkboxes
+
+
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/contact-form-example.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/contact-form-example.twig
new file mode 100644
index 000000000..63d43df60
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/contact-form-example.twig
@@ -0,0 +1,21 @@
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/forms.stories.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/forms.stories.js
new file mode 100644
index 000000000..c904ff7c6
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/forms.stories.js
@@ -0,0 +1,26 @@
+// Checkbox, radio and select elements are commented out because we
+// may use these soon, but not yet.
+// import checkbox from './checkbox/yds-checkbox.twig';
+// import radio from './radio/yds-radio.twig';
+import select from './select/yds-select.twig';
+import textfields from './textfields/yds-textfields.twig';
+import formExample from './contact-form-example.twig';
+
+// import checkboxData from './checkbox/checkbox.yml';
+// import radioData from './radio/radio.yml';
+import selectOptionsData from './select/select.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Atoms/Forms' };
+
+// export const checkboxes = () => checkbox(checkboxData);
+
+// export const radioButtons = () => radio(radioData);
+
+export const selectDropdowns = () => select(selectOptionsData);
+
+export const textfieldsExamples = () => textfields();
+
+export const exampleForm = () => formExample();
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/_yds-radio-item.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/_yds-radio-item.twig
new file mode 100644
index 000000000..33b95e79a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/_yds-radio-item.twig
@@ -0,0 +1,5 @@
+
+
+ {{ radio_item }}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/_yds-radio.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/_yds-radio.scss
new file mode 100644
index 000000000..d9733904c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/_yds-radio.scss
@@ -0,0 +1,8 @@
+@use '../../../00-tokens/tokens';
+
+.form-item--radios,
+.form-item--radio__item {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/radio.yml b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/radio.yml
new file mode 100644
index 000000000..278b78ea0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/radio.yml
@@ -0,0 +1,6 @@
+radios:
+ - title: 'Option 1'
+ checked: 'checked'
+ - title: 'Option 2'
+ - title: 'Option 3'
+ - title: 'Option 4'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/yds-radio.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/yds-radio.twig
new file mode 100644
index 000000000..392c7fd4e
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/radio/yds-radio.twig
@@ -0,0 +1,15 @@
+{% if not attributes %}
+
+ Options as Radio Buttons
+
+
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/_yds-select-item.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/_yds-select-item.twig
new file mode 100644
index 000000000..a38afcbfb
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/_yds-select-item.twig
@@ -0,0 +1 @@
+{{ select_item }}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/_yds-select.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/_yds-select.scss
new file mode 100644
index 000000000..90a29caf5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/_yds-select.scss
@@ -0,0 +1,89 @@
+@use '../../../00-tokens/tokens';
+
+// CSS-only select styling (from https://github.com/filamentgroup/select-css)
+// SVG background-images encoded using https://yoksel.github.io/url-encoder/
+.form-item__dropdown {
+ --color-dropdown-border: var(--color-gray-400);
+ --color-dropdown-border-hover: var(--color-blue-horizon);
+ --color-dropdown-icon: var(--color-gray-400);
+ --color-dropdown-icon-hover: var(--color-blue-horizon);
+
+ border: var(--border-thickness-1) solid var(--color-dropdown-border);
+ display: block;
+ position: relative;
+
+ &::after {
+ content: ' ';
+ position: absolute;
+ top: 35%;
+ right: 1em;
+ height: 1rem;
+ width: 1rem;
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512' fill='%239C9C9C'%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath d='M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z'/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 1rem;
+ z-index: 0;
+
+ /* These hacks make the select behind the arrow clickable in some browsers */
+ pointer-events: none;
+ display: none;
+ }
+
+ &:hover,
+ &:focus,
+ &:focus-visible {
+ border-color: var(--color-dropdown-border-hover);
+
+ &::after {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512' fill=' %23276BBE'%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath d='M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z'/%3E%3C/svg%3E");
+ }
+ }
+}
+
+.form-item__select {
+ --color-select-border: var(--color-gray-400);
+ --color-select-border-hover: var(--color-blue-horizon);
+ --color-select-background: var(--color-gray-100);
+ --color-select-icon: var(--color-gray-400);
+ --color-select-icon-hover: var(--color-blue-horizon);
+ --color-select-text-color: var(--color-gray-700);
+
+ font-size: 100%;
+ line-height: 1.4;
+ margin: 0;
+ padding: 0.5em 0.8em;
+ width: 100%;
+ min-width: 22rem;
+ color: var(--color-select-text-color);
+
+ :focus {
+ outline: none;
+ color: var(--color-select-icon-hover);
+ }
+}
+
+@supports (-webkit-appearance: none) or (appearance: none) or
+ ((-moz-appearance: none) and (mask-type: alpha)) {
+ /* Show custom arrow */
+ .form-item__dropdown::after {
+ display: block;
+ }
+
+ /* Remove select styling */
+ .form-item__select {
+ padding-right: 2em; /* Match-01 */
+
+ /* inside @supports so that iOS <= 8 display the native arrow */
+ background: none; /* Match-04 */
+
+ /* inside @supports so that Android <= 4.3 display the native arrow */
+ border: 1px solid transparent; /* Match-05 */
+ appearance: none;
+
+ &:focus {
+ border-color: var(--color-select-border-hover);
+ border-radius: 0;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/select.yml b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/select.yml
new file mode 100644
index 000000000..597ac2fc8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/select.yml
@@ -0,0 +1,6 @@
+select:
+ - title: 'Choose an Option'
+ - title: 'Option 1'
+ - title: 'Option 2'
+ - title: 'Option 3'
+ - title: 'Option 4'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/yds-select.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/yds-select.twig
new file mode 100644
index 000000000..515c15f5a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/select/yds-select.twig
@@ -0,0 +1,18 @@
+{% if not attributes %}
+
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/textfields/_yds-textfields.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/textfields/_yds-textfields.scss
new file mode 100644
index 000000000..0611c9957
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/textfields/_yds-textfields.scss
@@ -0,0 +1,113 @@
+@use '../../../00-tokens/tokens';
+@use '../yds-form' as forms;
+
+$form-item-max-width: 25rem;
+$form-item-icon-size: 1.7rem;
+
+.form-item {
+ --color-form-item-border: var(--color-gray-400);
+ --color-form-item-border-focus: var(--color-gray-800);
+ --color-form-item-placeholder: var(--color-gray-600);
+ --color-form-item-error: var(--color-alert-emergency-background-color);
+ --color-form-item-description: var(--color-gray-500);
+
+ margin-bottom: var(--size-spacing-7);
+ max-width: $form-item-max-width;
+ clear: both;
+
+ .form--inline & {
+ margin-bottom: unset;
+ }
+}
+
+.form-item__label {
+ display: block;
+ margin-bottom: var(--size-spacing-1);
+ font-weight: 500;
+
+ &--required::after {
+ color: var(--color-gray-600);
+ margin: calc(var(--size-spacing-4) * 1) 0 0 0.2em;
+ content: '*';
+ }
+}
+
+.form-item__textfield {
+ border: var(--border-thickness-1) solid var(--color-form-item-border);
+ padding: var(--size-spacing-4);
+ width: 100%;
+ max-width: 100%;
+
+ .form--inline & {
+ height: 100%;
+ }
+
+ // TODO: change this to token style, when tokens update is merged.
+ line-height: 1.4;
+
+ &::placeholder {
+ color: var(--color-form-item-placeholder);
+ font-style: italic;
+ opacity: 1;
+ }
+
+ &:focus {
+ border-color: var(--color-form-item-border-focus);
+ }
+
+ &--error {
+ border-width: var(--border-thickness-2);
+ border-color: var(--color-form-item-error);
+ padding-right: calc(var(--size-spacing-4) + $form-item-icon-size);
+
+ &:focus {
+ border-color: var(--color-form-item-error);
+ }
+ }
+}
+
+.form-item__inner--with-icon {
+ position: relative;
+ display: flex;
+ align-items: center;
+}
+
+.form-item__error_icon__icon {
+ position: absolute;
+ top: auto;
+ right: var(--size-spacing-4);
+ fill: var(--color-alert-emergency-background-color);
+ width: $form-item-icon-size;
+ height: $form-item-icon-size;
+}
+
+.form-item__description {
+ @include tokens.body-xs;
+
+ color: var(--color-form-item-description);
+ padding-block-start: var(--size-spacing-2);
+}
+
+.form-fieldset {
+ border: none;
+ margin-bottom: var(--size-spacing-4);
+ padding: 0;
+
+ .form-item {
+ margin-inline-start: var(--size-spacing-4);
+ margin-inline-end: var(--size-spacing-4);
+ max-width: $form-item-max-width;
+ }
+}
+
+.form-item__error-text {
+ @include tokens.body-s-condensed;
+
+ color: var(--color-form-item-error);
+}
+
+.form-actions {
+ .webform-button--submit {
+ @include forms.button-submit;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/textfields/yds-textfields.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/textfields/yds-textfields.twig
new file mode 100644
index 000000000..51d9adbd0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/forms/textfields/yds-textfields.twig
@@ -0,0 +1,34 @@
+
+
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/_yds-fa-icon.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/_yds-fa-icon.twig
new file mode 100644
index 000000000..97af978df
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/_yds-fa-icon.twig
@@ -0,0 +1,43 @@
+{#
+ # Available variables:
+ # - fa_icon__title: the name of the icon
+ # - fa_icon__role: a11y role
+ # - fa_icon__title: a11y title
+ # - fa_icon__desc: a11y description
+ # - fa_icon__decorative: "hide" the icon from screen readers
+ # - fa_icon__class: font awesome classes
+ #}
+
+{%- set fa_icon__base_class = fa_icon__base_class|default('fa-icon') %}
+{%- set fa_icon__attributes = fa_icon__attributes|default({}) %}
+
+{%- set fa_icon__attributes = fa_icon__attributes|merge({
+ class: bem(fa_icon__base_class, fa_icon__modifiers, fa_icon__blockname, fa_icon__extra_class),
+}) %}
+
+{%- set unique_name = fa_icon__title|lower|replace({' ': '-'}) ~ '-' ~ random() %}
+
+ {% if fa_icon__title %}
+ {{ fa_icon__title }}
+ {% endif %}
+ {% if fa_icon__desc %}
+ {{ fa_icon__desc }}
+ {% endif %}
+
+{%- if fa_icon__sr_title %}
+ {{fa_icon__sr_title}}
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/_yds-fa-icons.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/_yds-fa-icons.scss
new file mode 100644
index 000000000..6f3751a37
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/_yds-fa-icons.scss
@@ -0,0 +1,14 @@
+.fa-icon {
+ --fa-display: inline-block;
+
+ font-size: var(--font-scale-15-16);
+ padding-left: var(--size-spacing-3);
+ width: 100%;
+ max-width: calc(1rem - var(--size-spacing-3));
+
+ &::before {
+ display: inline-block;
+ width: 100%;
+ max-width: calc(1rem + var(--size-spacing-3));
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/fa-icons.yml b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/fa-icons.yml
new file mode 100644
index 000000000..7409d181b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/fa-icons.yml
@@ -0,0 +1,9 @@
+fa_icons:
+ - fa_icon__name: Up Right
+ fa_icon__extra_class: ['fa-solid fa-arrow-up-right']
+ - fa_icon__name: External Link
+ fa_icon__extra_class: ['fa-solid fa-arrow-up-right-from-square']
+ - fa_icon__name: Angle Right
+ fa_icon__extra_class: ['fa-solid fa-angle-right']
+ - fa_icon__name: Circle Down
+ fa_icon__extra_class: ['fa-regular fa-circle-down']
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/yds-fa-icons.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/yds-fa-icons.twig
new file mode 100644
index 000000000..332df78b8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/fa-icons/yds-fa-icons.twig
@@ -0,0 +1,11 @@
+
+ {% for item in fa_icons %}
+
+ {% include "@atoms/images/fa-icons/_yds-fa-icon.twig" with {
+ fa_icon__title: item.fa_icon__name,
+ fa_icon__extra_class: item.fa_icon__extra_class,
+ } %}
+
{{ item.fa_icon__name }} {{ item.fa_icon__extra_class }}
+
+ {% endfor %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/_yds-icon.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/_yds-icon.twig
new file mode 100644
index 000000000..946052d9c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/_yds-icon.twig
@@ -0,0 +1,40 @@
+{#
+ # Available variables:
+ # - icon__name: the name of the icon
+ # - icon__role: a11y role
+ # - icon__title: a11y title
+ # - icon__desc: a11y description
+ # - icon__decorative: "hide" the icon from screen readers
+ #}
+
+{% set icon__base_class = icon__base_class|default('icon') %}
+{# If `directory` is defined, set the path relative for Drupal.
+ # Otherwise, set the path relative to the Component Library. #}
+{% set icon__url = directory ? '/' ~ directory ~ '/node_modules/@yalesites-org/component-library-twig/dist/' %}
+
+{% set unique_name = icon__name ~ '-' ~ random() %}
+
+
+ {% if icon__title %}
+ {{ icon__title }}
+ {% endif %}
+ {% if icon__desc %}
+ {{ icon__desc }}
+ {% endif %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/_yds-icons.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/_yds-icons.scss
new file mode 100644
index 000000000..1ca4a6952
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/_yds-icons.scss
@@ -0,0 +1,3 @@
+svg {
+ fill: currentcolor;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/cl-icons.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/cl-icons.scss
new file mode 100644
index 000000000..88b9f37fd
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/cl-icons.scss
@@ -0,0 +1,23 @@
+.icons-demo {
+ display: flex;
+ flex-wrap: wrap;
+ text-align: center;
+
+ .icon {
+ height: 100px;
+ width: 100px;
+ padding: var(--size-spacing-5);
+ }
+
+ pre {
+ margin: 0;
+ padding: var(--size-spacing-3);
+ background-color: var(--color-text);
+ color: var(--color-background);
+ }
+}
+
+.icons-demo__item {
+ border: var(--border-thickness-1) solid;
+ margin: var(--size-spacing-3);
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/yds-icons.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/yds-icons.twig
new file mode 100644
index 000000000..752d864e1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/icons/yds-icons.twig
@@ -0,0 +1,10 @@
+
+ {% for item in icons %}
+
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: item
+ } %}
+
{{ item }}
+
+ {% endfor %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_image.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_image.twig
new file mode 100644
index 000000000..9833c6d79
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_image.twig
@@ -0,0 +1,14 @@
+{% set image__base_class = image__base_class|default('image') %}
+
+{% if image__src is empty %}
+ Missing image
+{% else %}
+
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_picture.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_picture.twig
new file mode 100644
index 000000000..923b710d1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_picture.twig
@@ -0,0 +1,13 @@
+{% set picture__base_class = picture__base_class|default('picture') %}
+
+
+ {% if sources %}
+ {% for source_attributes in sources %}
+
+ {% endfor %}
+ {% endif %}
+ {# The controlling image, with the fallback image in srcset. #}
+ {% include "@atoms/images/image/_image.twig" with {
+ image__blockname: picture__image__blockname|default(picture__blockname),
+ } %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_responsive-image.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_responsive-image.twig
new file mode 100644
index 000000000..ce398c868
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_responsive-image.twig
@@ -0,0 +1,32 @@
+{#
+ # Available variables:
+ # - sources: The attributes of the tags for this tag.
+ # - img_element: The controlling image, with the fallback image in srcset.
+ # - output_image_tag: Whether or not to output an tag instead of a tag.
+ #}
+
+{% set responsive_image__base_class = responsive_image__base_class|default('image') %}
+
+{% if output_image_tag %}
+ {% include "@atoms/images/image/_image.twig" with {
+ image__base_class: responsive_image__base_class,
+ image__modifiers: responsive_image__modifiers,
+ image__blockname: responsive_image__blockname,
+ image__srcset: image__srcset|default(img_element['#attributes'].srcset),
+ image__sizes: image__sizes|default(img_element['#attributes'].sizes),
+ image__src: image__src|default(img_element['#uri']),
+ image__alt: image__alt|default(img_element['#alt']),
+ image__title: image__title|default(img_element['#title']),
+ } %}
+{% else %}
+ {% include "@atoms/images/image/_picture.twig" with {
+ picture__base_class: responsive_image__base_class,
+ picture__modifiers: responsive_image__modifiers,
+ picture__blockname: responsive_image__blockname,
+ image__srcset: image__srcset|default(img_element['#attributes'].srcset),
+ image__sizes: image__sizes|default(img_element['#attributes'].sizes),
+ image__src: image__src|default(img_element['#uri']),
+ image__alt: image__alt|default(img_element['#alt']),
+ image__title: image__title|default(img_element['#title']),
+ } %}
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_yds-image.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_yds-image.scss
new file mode 100644
index 000000000..a4430f5c8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/_yds-image.scss
@@ -0,0 +1,47 @@
+@use '../../../00-tokens/tokens';
+@use '../../controls/text-link/yds-text-link' as link;
+
+img,
+picture {
+ display: block;
+ height: auto;
+ width: 100%;
+ max-width: 100%;
+}
+
+figure {
+ margin: 0; /* override normalize */
+}
+
+.caption {
+ @include tokens.body-s-condensed;
+
+ color: var(--color-basic-brown-gray);
+ margin-top: var(--size-spacing-4);
+
+ > p:last-child {
+ margin-bottom: 0;
+ }
+
+ a {
+ @include link.link;
+ @include link.plain-link;
+
+ // Override hover variable, it shouldn't use global-theme slots.
+ &:hover {
+ color: var(--color-gray-800);
+ }
+ }
+}
+
+@mixin clickable-component-image {
+ $selector: &;
+
+ &__image {
+ @include tokens.animate('box-shadow');
+ }
+
+ &:hover #{$selector}__image {
+ box-shadow: var(--drop-shadow-level-1);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/cl-image.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/cl-image.scss
new file mode 100644
index 000000000..6b7a9c65c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/cl-image.scss
@@ -0,0 +1,18 @@
+.cl-image-examples {
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--size-spacing-6);
+}
+
+.cl-image-example {
+ flex: 1 0 clamp(10rem, 40%, 20rem);
+}
+
+.sb-show-main {
+ [data-collection-type='grid'] {
+ .reference-card__image img {
+ height: 100%;
+ object-fit: cover;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/figure.yml b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/figure.yml
new file mode 100644
index 000000000..31748d835
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/figure.yml
@@ -0,0 +1,5 @@
+output_image_tag: true
+image__url: '#'
+image__src: 'https://placeimg.com/1200/200/tech'
+image__alt: 'This is the alt text'
+figure__caption: 'This is an image caption.
'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/image.yml b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/image.yml
new file mode 100644
index 000000000..f2b1c8fdc
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/image.yml
@@ -0,0 +1,37 @@
+responsive_images:
+ 16x9:
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/180 320w, https://picsum.photos/480/270 480w, https://picsum.photos/640/360 640w, https://picsum.photos/800/450 800w, https://picsum.photos/960/540 960w, https://picsum.photos/1120/630 1120w, https://picsum.photos/1280/720 1280w, https://picsum.photos/1440/810 1440w, https://picsum.photos/1600/900 1600w, https://picsum.photos/1760/990 1760w, https://picsum.photos/1920/1080 1920w, https://picsum.photos/2080/1170 2080w, https://picsum.photos/2240/1260 2240w, https://picsum.photos/2400/1350 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/180'
+ image__alt: 'A 16 by 9 image'
+ 3x2:
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/213 320w, https://picsum.photos/480/320 480w, https://picsum.photos/640/427 640w, https://picsum.photos/800/533 800w, https://picsum.photos/960/640 960w, https://picsum.photos/1120/747 1120w, https://picsum.photos/1280/853 1280w, https://picsum.photos/1440/960 1440w, https://picsum.photos/1600/1067 1600w, https://picsum.photos/1760/1173 1760w, https://picsum.photos/1920/1280 1920w, https://picsum.photos/2080/1387 2080w, https://picsum.photos/2240/1493 2240w, https://picsum.photos/2400/1600 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/213'
+ image__alt: 'A 3 by 2 image'
+ 1x1:
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320 320w, https://picsum.photos/480 480w, https://picsum.photos/640 640w, https://picsum.photos/800 800w, https://picsum.photos/960 960w, https://picsum.photos/1120 1120w, https://picsum.photos/1280 1280w, https://picsum.photos/1440 1440w, https://picsum.photos/1600 1600w, https://picsum.photos/1760 1760w, https://picsum.photos/1920 1920w, https://picsum.photos/2080 2080w, https://picsum.photos/2240 2240w, https://picsum.photos/2400 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320'
+ image__alt: 'A 1 by 1 image'
+ 1x1.6:
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/512 320w, https://picsum.photos/480/768 480w, https://picsum.photos/640/1024 640w, https://picsum.photos/800/1280 800w, https://picsum.photos/960/1536 960w, https://picsum.photos/1120/1792 1120w, https://picsum.photos/1280/2048 1280w, https://picsum.photos/1440/2304 1440w, https://picsum.photos/1600/2560 1600w, https://picsum.photos/1760/2816 1760w, https://picsum.photos/1920/3072 1920w, https://picsum.photos/2080/3328 2080w, https://picsum.photos/2240/3584 2240w, https://picsum.photos/2400/3840 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/512'
+ image__alt: 'A 1 by 1.6 image'
+ 4x3:
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/240 320w, https://picsum.photos/480/360 480w, https://picsum.photos/640/480 640w, https://picsum.photos/800/600 800w, https://picsum.photos/960/720 960w, https://picsum.photos/1120/840 1120w, https://picsum.photos/1280/960 1280w, https://picsum.photos/1440/1080 1440w, https://picsum.photos/1600/1200 1600w, https://picsum.photos/1760/1320 1760w, https://picsum.photos/1920/1440 1920w, https://picsum.photos/2080/1560 2080w, https://picsum.photos/2240/1680 2240w, https://picsum.photos/2400/1800 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/240'
+ image__alt: 'A 4 by 3 image'
+ 2x3:
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/213/320 213w, https://picsum.photos/320/480 320w, https://picsum.photos/427/640 427w, https://picsum.photos/533/800 533w, https://picsum.photos/640/960 640w, https://picsum.photos/747/1120 747w, https://picsum.photos/853/1280 853w, https://picsum.photos/960/1440 960w, https://picsum.photos/1067/1600 1067w, https://picsum.photos/1173/1760 1173w, https://picsum.photos/1280/1920 1280w, https://picsum.photos/1387/2080 1387w, https://picsum.photos/1493/2240 1493w, https://picsum.photos/1600/2400 1600w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/213/320'
+ image__alt: 'A 2 by 3 image'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/yds-image.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/yds-image.twig
new file mode 100644
index 000000000..f836ad90d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/image/yds-image.twig
@@ -0,0 +1,27 @@
+{# Set this block in a variable so that we can implement it in multiple places below. #}
+{% set image__image %}
+ {% block image__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+{% endset %}
+
+{# Render the image in a if there is a caption provided. #}
+{% if figure__caption %}
+ {% set figure__attributes = {
+ 'class': bem('figure'),
+ } %}
+
+
+ {{ image__image }}
+
+ {% if figure__caption %}
+
+ {# We use `|raw` here to accomodate WYSIWYG content #}
+ {{- figure__caption|raw -}}
+
+ {% endif %}
+
+{# Render a standard or directly if there is no caption. #}
+{% else %}
+ {{ image__image}}
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/images.stories.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/images.stories.js
new file mode 100644
index 000000000..91848075e
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/images/images.stories.js
@@ -0,0 +1,55 @@
+import imageTwig from './image/yds-image.twig';
+import iconsTwig from './icons/yds-icons.twig';
+import faIconsTwig from './fa-icons/yds-fa-icons.twig';
+
+import imageData from './image/image.yml';
+import figureData from './image/figure.yml';
+import faIconData from './fa-icons/fa-icons.yml';
+
+import './image/cl-image.scss';
+import './icons/cl-icons.scss';
+
+const svgIcons = require.context('../../../images/icons', true, /\.svg$/);
+const icons = [];
+svgIcons.keys().forEach((key) => {
+ const icon = key.split('./')[1].split('.')[0];
+ icons.push(icon);
+});
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Atoms/Images' };
+
+export const Images = () => `
+ Aspect Ratios
+ These are the current aspect ratios that we use in components that require a programmatic crop.
+
+
+
16:9
+ ${imageTwig(imageData.responsive_images['16x9'])}
+
+
+
3:2
+ ${imageTwig(imageData.responsive_images['3x2'])}
+
+
+
1:1
+ ${imageTwig(imageData.responsive_images['1x1'])}
+
+
+
1:1.6
+ ${imageTwig(imageData.responsive_images['1x1.6'])}
+
+
+
4:3
+ ${imageTwig(imageData.responsive_images['4x3'])}
+
+
+`;
+
+export const Figures = () => imageTwig(figureData);
+
+export const Icons = () => iconsTwig({ icons });
+
+export const FAIcons = () => faIconsTwig(faIconData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/_yds-list-item.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/_yds-list-item.twig
new file mode 100644
index 000000000..6b052421d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/_yds-list-item.twig
@@ -0,0 +1,35 @@
+{#
+ # Available variables:
+ # - list__item__content - the content of the list_item (typically text)
+ #
+ # Available blocks:
+ # - list__item__content - used to replace the content of the list_item with something other than text
+ # for example: to insert the image and/or link components
+ #}
+
+{% set list__item__base_class = list__item__base_class|default('item') %}
+{% set list__item__attributes = list__item__attributes|default({}) %}
+{% set list__item__attributes = list__item__attributes|merge({
+ class: bem(list__item__base_class, list__item__modifiers, list__item__blockname),
+}) %}
+
+ {% if list__item__content__heading %}
+ {% set list__item__is_heading = true %}
+
+ {# li modifier#}
+ {% set list__item__content__heading %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__blockname: list__item__blockname,
+ text__content: list__item__content__heading,
+ text__base_class: 'heading',
+ text__attributes: { 'aria-hidden': 'true' }
+ } %}
+ {% endset %}
+{% endif %}
+
+
+ {% block list__item__content %}
+ {{ list__item__content__heading }}
+ {{ list__item__content }}
+ {% endblock %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/_yds-list.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/_yds-list.scss
new file mode 100644
index 000000000..976044de0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/_yds-list.scss
@@ -0,0 +1,35 @@
+@mixin reset {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+ul {
+ list-style-type: disc;
+
+ ul {
+ list-style-type: circle;
+
+ ul {
+ list-style-type: square;
+ }
+ }
+}
+
+ol {
+ list-style-type: decimal;
+
+ ol {
+ list-style-type: lower-alpha;
+
+ ol {
+ list-style-type: lower-roman;
+ }
+ }
+}
+
+.text-field {
+ li {
+ padding-left: var(--size-spacing-1);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/list.stories.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/list.stories.js
new file mode 100644
index 000000000..4025aa97b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/list.stories.js
@@ -0,0 +1,19 @@
+import listTwig from './yds-list.twig';
+
+import listData from './list.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Atoms/Lists' };
+
+export const UnorderedList = () => `
+
+ ${listTwig({ list__items: listData.unordered__list__items })}
+
+`;
+export const OrderedList = () => `
+
+ ${listTwig({ list__items: listData.ordered__list__items, list__type: 'ol' })}
+
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/list.yml b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/list.yml
new file mode 100644
index 000000000..792043931
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/list.yml
@@ -0,0 +1,10 @@
+unordered__list__items:
+ - list__item__content: "This is a list of items that doesn't need numbers.They may have sub-levels. "
+ - list__item__content: 'Amet consectetur purus justo feugiat mattis sit ultricies odio. Pellentesque pellentesque sit sed porttitor duis interdum.'
+ - list__item__content: 'Elementum elit est, vitae feugiat enim odio cursus. Enim cum dictum gravida amet id eget.'
+ordered__list__items:
+ - list__item__content: "This is a list of items that benefits from numbers.They may have sub-levels.Here's another level "
+ list__item__is_heading: true
+ list__item__content__heading: 'Heading here'
+ - list__item__content: 'Amet consectetur purus justo feugiat mattis sit ultricies odio. Pellentesque pellentesque sit sed porttitor duis interdum.'
+ - list__item__content: 'Elementum elit est, vitae feugiat enim odio cursus. Enim cum dictum gravida amet id eget.'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/yds-list.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/yds-list.twig
new file mode 100644
index 000000000..300e35a4e
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/lists/yds-list.twig
@@ -0,0 +1,27 @@
+{#
+ # Available variables:
+ # - list__items - the array of list items
+ #
+ # Available blocks:
+ # - list__content
+ #}
+{% set list__base_class = list__base_class|default('list') %}
+{% set list__type = list__type|default('ul') %}
+{% set list__attributes = list__attributes|default([]) %}
+{% set list__attributes = list__attributes|merge({
+ class: bem(list__base_class, list__modifiers, list__blockname),
+}) %}
+
+<{{ list__type }} {{ add_attributes(list__attributes) }}>
+ {% block list__content %}
+ {% for list__item in list__items %}
+ {% include "@atoms/lists/_yds-list-item.twig" with {
+ list__item__content: list__item.list__item__content,
+ list__item__blockname: list__base_class,
+ list__item__modifiers: list__item__modifiers,
+ list__item__content__heading: list__item.list__item__content__heading,
+ list__item__is_heading: list__item.list__item__is_heading,
+ } %}
+ {% endfor %}
+ {% endblock %}
+{{ list__type }}>
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/_table.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/_table.scss
new file mode 100644
index 000000000..58830c686
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/_table.scss
@@ -0,0 +1,59 @@
+@use '../../00-tokens/tokens';
+
+table {
+ @include tokens.body-s-condensed;
+
+ caption-side: bottom;
+ border-collapse: collapse;
+ text-align: left;
+ width: 100%;
+}
+
+.table-wrapper {
+ overflow-x: auto;
+}
+
+table caption {
+ text-align: left;
+ margin-top: var(--size-spacing-4);
+}
+
+tr:nth-child(even) {
+ background-color: var(--color-gray-100);
+}
+
+th {
+ background-color: var(--color-gray-200);
+ padding: var(--size-spacing-3) var(--size-spacing-5);
+ font-weight: var(--font-weights-mallory-medium);
+ border: var(--size-thickness-1) solid var(--color-gray-200);
+ position: sticky;
+
+ thead & {
+ top: 0;
+ border-bottom: var(--size-thickness-2) solid var(--color-gray-700);
+ }
+
+ tbody & {
+ left: 0;
+ border-right: var(--size-thickness-2) solid var(--color-gray-700);
+ }
+}
+
+td {
+ padding: var(--size-spacing-3) var(--size-spacing-5);
+ border: var(--size-thickness-1) solid var(--color-gray-300);
+ min-width: 8rem;
+
+ &:first-child {
+ border-left: none;
+ }
+
+ &:last-child {
+ border-right: none;
+ }
+
+ tbody tr:last-child & {
+ border-bottom: var(--size-thickness-2) solid var(--color-gray-700);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/example-tables.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/example-tables.twig
new file mode 100644
index 000000000..e805e6ea4
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/example-tables.twig
@@ -0,0 +1,121 @@
+Table with Column Headers
+
+{% set table_with_column_headers %}
+
+
+
+ Name
+ Email
+ Phone Number
+
+
+
+
+ Deanna Curtis
+ deanna.curtis@example.com
+ (316) 555-0116
+
+
+ Jessica Hanson
+ jessica.hanson@example.com
+ (208) 555-0112
+
+
+ Michelle Rivera
+ michelle.rivera@example.com
+ (219) 555-0114
+
+
+ Nathan Roberts
+ nathan.roberts@exxample.com
+ (229) 555-0109
+
+
+ Optional caption for the table here.
+
+{% endset %}
+
+{% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: table_with_column_headers,
+} %}
+
+Table with Column and Row Headers
+
+{% set table_with_column_and_row_headers %}
+
+
+
+
+ 2020
+ 2021
+ 2022
+ 2022
+ 2022
+ 2022
+ 2022
+ 2022
+
+
+
+
+ Freshman
+ 130
+ 556
+ here's some long text, it's really long
+ here's some long text, it's really long
+ here's some long text, it's really long
+ here's some long text, it's really long
+ here's some long text, it's really long
+ here's some long text, it's really long
+
+
+ Sophomore
+ 703
+ 740
+ 798
+ 798
+ 798
+ 798
+ 798
+ 798
+
+
+ Junior
+ 423
+ 922
+ 453
+ 453
+ 453
+ 453
+ 453
+ 453
+
+
+ Senior
+ 647
+ 877
+ 583
+ 583
+ 583
+ 583
+ 583
+ 583
+
+
+ Graduate
+ 357
+ 826
+ 492
+ 492
+ 492
+ 492
+ 492
+ 492
+
+
+
+{% endset %}
+
+{% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: table_with_column_and_row_headers,
+} %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/table.stories.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/table.stories.js
new file mode 100644
index 000000000..8899544ee
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/tables/table.stories.js
@@ -0,0 +1,9 @@
+// Markup.
+import tableTwig from './example-tables.twig';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Atoms/Table' };
+
+export const Table = () => tableTwig();
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/headings/_yds-headings.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/headings/_yds-headings.scss
new file mode 100644
index 000000000..6e9195b25
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/headings/_yds-headings.scss
@@ -0,0 +1,64 @@
+@use '../../../00-tokens/tokens';
+@use '../../controls/text-link/yds-text-link';
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin: 0;
+ color: var(--color-heading);
+}
+
+@mixin text-field-header-spacing {
+ margin-block-end: 0.6em;
+
+ &:not(:first-child) {
+ margin-top: 1em;
+ }
+}
+
+// These styles use the `:not([class])` selector which means they will apply to
+// any heading that does not also have a class. This accounts for any
+// "interface" headings that are not a part of a design system component, as
+// well as headings that appear in a wysiwyg without a class.
+h1:not([class]) {
+ @include tokens.h1-yale-new;
+ @include text-field-header-spacing;
+}
+
+h2:not([class]) {
+ @include tokens.h2-yale-new;
+ @include text-field-header-spacing;
+}
+
+h3:not([class]) {
+ @include tokens.h3-yale-new;
+ @include text-field-header-spacing;
+}
+
+h4:not([class]) {
+ @include tokens.h4-yale-new;
+ @include text-field-header-spacing;
+}
+
+h5:not([class]) {
+ @include tokens.h5-yale-new;
+ @include text-field-header-spacing;
+
+ // h5 needs a bit more top margin
+ &:not(:first-child) {
+ margin-top: 1.4em;
+ }
+}
+
+h6:not([class]) {
+ @include tokens.h6-yale-new;
+ @include text-field-header-spacing;
+
+ // h6 needs more top margin
+ &:not(:first-child) {
+ margin-top: 2em;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/headings/yds-heading.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/headings/yds-heading.twig
new file mode 100644
index 000000000..fa3056859
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/headings/yds-heading.twig
@@ -0,0 +1,35 @@
+{#
+ # Available Props:
+ # - heading__level - the header level 1-6 (produces h1, h2, etc.)
+ #
+ # Available Variables
+ # - heading - the content of the heading (typically text)
+ #
+ # - heading__url - (optional) the url the heading should poing to
+ # - heading__link__attributes - key/value attributes to pass to link
+ # - heading__link__base_class - override the link base class
+ # - heading__link__modifiers - override the link modifiers
+ # - heading__link__blockname - override the link block name (defaults to heading__base_class)
+ #}
+
+{% set heading__base_class = heading__base_class|default('heading') %}
+
+
+ {% if heading__prefix %}
+
+ {{ heading__prefix }}
+
+ {% endif %}
+ {%- if heading__url %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: heading,
+ link__url: heading__url,
+ link__attributes: heading__link__attributes,
+ link__base_class: heading__link__base_class|default('heading-link'),
+ link__modifiers: heading__link__modifiers,
+ link__blockname: heading__link__blockname|default(heading__blockname),
+ } %}
+ {% else %}
+ {{- heading -}}
+ {% endif -%}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/_yds-text.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/_yds-text.scss
new file mode 100644
index 000000000..8fc98f1f8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/_yds-text.scss
@@ -0,0 +1,116 @@
+// Code highlighting color variables
+
+:root {
+ --color-hljs-text: #f8f8f2;
+ --color-hljs-background: #23241f;
+ --color-hljs-strong: #a8a8a2;
+ --color-hljs-highlight: #ae81ff;
+ --color-hljs-code: #a6e22e;
+ --color-hljs-keyword: #f92672;
+ --color-hljs-symbol: #66d9ef;
+ --color-hljs-string: #e6db74;
+ --color-hljs-comment: #75715e;
+}
+
+p {
+ margin-block-end: var(--font-spacing-paragraph);
+}
+
+.text {
+ p:last-child {
+ margin-bottom: 0;
+ }
+
+ // Code blocks.
+ pre code {
+ display: block;
+ padding: var(--size-spacing-5);
+
+ // from highlightjs Monokai Sublime
+ // @see highlight.js/styles/monokai-sublime.css
+
+ /*
+ Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/
+ */
+
+ &.hljs {
+ background: var(--color-hljs-background);
+ color: var(--color-hljs-text);
+ overflow-x: auto;
+ }
+
+ .hljs-tag,
+ .hljs-subst {
+ color: var(--color-hljs-text);
+ }
+
+ .hljs-strong,
+ .hljs-emphasis {
+ color: var(--color-hljs-strong);
+ }
+
+ .hljs-bullet,
+ .hljs-quote,
+ .hljs-number,
+ .hljs-regexp,
+ .hljs-literal,
+ .hljs-link {
+ color: var(--color-hljs-highlight);
+ }
+
+ .hljs-code,
+ .hljs-title,
+ .hljs-section,
+ .hljs-selector-class {
+ color: var(--color-hljs-code);
+ }
+
+ .hljs-strong {
+ font-weight: bold;
+ }
+
+ .hljs-emphasis {
+ font-style: italic;
+ }
+
+ .hljs-keyword,
+ .hljs-selector-tag,
+ .hljs-name,
+ .hljs-attr {
+ color: var(--color-hljs-keyword);
+ }
+
+ .hljs-symbol,
+ .hljs-attribute {
+ color: var(--color-hljs-symbol);
+ }
+
+ .hljs-params,
+ .hljs-title.class_,
+ .hljs-class .hljs-title {
+ color: var(--color-hljs-text);
+ }
+
+ .hljs-string,
+ .hljs-type,
+ .hljs-built_in,
+ .hljs-selector-id,
+ .hljs-selector-attr,
+ .hljs-selector-pseudo,
+ .hljs-addition,
+ .hljs-variable,
+ .hljs-template-variable {
+ color: var(--color-hljs-string);
+ }
+
+ .hljs-comment,
+ .hljs-deletion,
+ .hljs-meta {
+ color: var(--color-hljs-comment);
+ }
+ }
+}
+
+strong {
+ font-weight: var(--font-weights-mallory-medium);
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/yds-text.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/yds-text.js
new file mode 100644
index 000000000..5c1d7d4ef
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/yds-text.js
@@ -0,0 +1,78 @@
+import hljs from 'highlight.js/lib/core';
+import c from 'highlight.js/lib/languages/c';
+import cpp from 'highlight.js/lib/languages/cpp';
+import csharp from 'highlight.js/lib/languages/csharp';
+import css from 'highlight.js/lib/languages/css';
+import html from 'highlight.js/lib/languages/vbscript-html';
+import java from 'highlight.js/lib/languages/java';
+import javascript from 'highlight.js/lib/languages/javascript';
+import json from 'highlight.js/lib/languages/json';
+import matlab from 'highlight.js/lib/languages/matlab';
+import php from 'highlight.js/lib/languages/php';
+import python from 'highlight.js/lib/languages/python';
+import r from 'highlight.js/lib/languages/r';
+import twig from 'highlight.js/lib/languages/twig';
+import typescript from 'highlight.js/lib/languages/typescript';
+import scss from 'highlight.js/lib/languages/scss';
+import shell from 'highlight.js/lib/languages/shell';
+import sql from 'highlight.js/lib/languages/sql';
+import yaml from 'highlight.js/lib/languages/yaml';
+import vim from 'highlight.js/lib/languages/vim';
+
+// Register the languages we need
+hljs.registerLanguage('c', c);
+hljs.registerLanguage('cpp', cpp);
+hljs.registerLanguage('csharp', csharp);
+hljs.registerLanguage('css', css);
+hljs.registerLanguage('html', html);
+hljs.registerLanguage('java', java);
+hljs.registerLanguage('javascript', javascript);
+hljs.registerLanguage('json', json);
+hljs.registerLanguage('matlab', matlab);
+hljs.registerLanguage('php', php);
+hljs.registerLanguage('python', python);
+hljs.registerLanguage('r', r);
+hljs.registerLanguage('twig', twig);
+hljs.registerLanguage('typescript', typescript);
+hljs.registerLanguage('scss', scss);
+hljs.registerLanguage('shell', shell);
+hljs.registerLanguage('sql', sql);
+hljs.registerLanguage('yaml', yaml);
+hljs.registerLanguage('vim', vim);
+
+hljs.configure({
+ languages: [
+ 'c',
+ 'cpp',
+ 'csharp',
+ 'css',
+ 'html',
+ 'java',
+ 'javascript',
+ 'json',
+ 'matlab',
+ 'php',
+ 'python',
+ 'r',
+ 'twig',
+ 'typescript',
+ 'scss',
+ 'shell',
+ 'sql',
+ 'yaml',
+ 'vim',
+ ],
+});
+
+Drupal.behaviors.textHighlight = {
+ attach(context) {
+ // Selectors
+ const codeBlocks = context.querySelectorAll('pre > code');
+
+ codeBlocks.forEach((codeBlock) => {
+ if (typeof codeBlock === 'object') {
+ hljs.highlightBlock(codeBlock);
+ }
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/yds-text.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/yds-text.twig
new file mode 100644
index 000000000..1546187ee
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/typography/text/yds-text.twig
@@ -0,0 +1,19 @@
+{#
+ # Available Props:
+ # - text__element: div (default), p, pre, etc.
+ #
+ # Available Variables:
+ # - text__content: We're using raw here to support Drupal's wysiwyg editor.
+ #}
+
+{% set text__base_class = text__base_class|default('text') %}
+{% set text__element = text__element|default('div') %}
+{% set text__attributes = text__attributes|default({}) %}
+
+{% set text__attributes = text__attributes|merge({
+ class: bem(text__base_class, text__modifiers, text__blockname, text__extra_class),
+}) %}
+
+<{{ text__element }} {{ add_attributes(text__attributes) }}>
+ {{- text__content|raw -}}
+{{ text__element }}>
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/video-background.stories.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/video-background.stories.js
new file mode 100644
index 000000000..fa9426dda
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/video-background.stories.js
@@ -0,0 +1,12 @@
+import videoBackgroundTwig from './yds-video-background.twig';
+
+import videoBackgroundData from './video-background.yml';
+
+import './yds-video-background';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Atoms/Videos/Video Background' };
+
+export const videoBackground = () => videoBackgroundTwig(videoBackgroundData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/video-background.yml b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/video-background.yml
new file mode 100644
index 000000000..133741d3d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/video-background.yml
@@ -0,0 +1 @@
+video_background__content: 'https://ia800301.us.archive.org/17/items/VjmorphVjLoops4/SequinSparkle02.mp4'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.js
new file mode 100644
index 000000000..d22553130
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.js
@@ -0,0 +1,58 @@
+Drupal.behaviors.videoBG = {
+ attach(context) {
+ // Selectors
+ const items = context.querySelectorAll('.video-background');
+ const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)');
+
+ // Classes
+ const pauseControl = '.video-background__control--pause';
+ const playControl = '.video-background__control--play';
+
+ items.forEach((item) => {
+ const video = item.querySelector('video');
+ const pauseVideo = item.querySelector(pauseControl);
+ const playVideo = item.querySelector(playControl);
+ const allowAutoPlay = video.play();
+
+ // set the background video to autoplay if reduceMotion (os-level) is false
+ // AND if the browser's built-in autoplay is undefined
+ if (allowAutoPlay !== undefined && reduceMotion.matches === false) {
+ allowAutoPlay
+ .then(() => {
+ item.setAttribute('is-playing', true);
+ video.setAttribute('autoplay', '');
+ video.setAttribute('loop', '');
+ })
+ .catch(() => {
+ item.setAttribute('is-playing', false);
+ video.removeAttribute('autoplay', '');
+ video.removeAttribute('loop', '');
+ });
+ } else {
+ item.setAttribute('is-playing', false);
+ video.pause();
+ }
+
+ // manaully control the video
+ // pause/play by adding and removing autoplay/loop attributes
+ pauseVideo.addEventListener('click', () => {
+ video.pause();
+ video.removeAttribute('autoplay', '');
+ video.removeAttribute('loop', '');
+ pauseVideo
+ .closest('.video-background')
+ .setAttribute('is-playing', false);
+ });
+
+ // play, add playing attributes
+ playVideo.addEventListener('click', () => {
+ video.play();
+ video.setAttribute('autoplay', '');
+ video.setAttribute('loop', '');
+ pauseVideo
+ .closest('.video-background')
+ .setAttribute('is-playing', true);
+ });
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.scss
new file mode 100644
index 000000000..3af6373ca
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.scss
@@ -0,0 +1,156 @@
+@use '../../../00-tokens/tokens';
+@use '../../../00-tokens/functions/map';
+
+$global-video-bg-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$component-video-bg-themes: map.deep-get(tokens.$tokens, 'component-themes');
+$video-background-icon-size: 2rem;
+$video-background-icon-size-sm: 1.4rem;
+$break-video-banner: tokens.$break-m;
+$break-video-banner-max: $break-video-banner - 0.05;
+
+.video-background {
+ width: 100%;
+ height: 100%;
+ position: relative;
+
+ video {
+ display: block;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-video-bg-themes {
+ &[data-component-theme='#{$theme}'] {
+ --color-backgound: var(--color-video-background);
+ --color-video-svg: var(--color-basic-white);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-video-bg-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-video-background: var(--color-slot-one);
+ --color-video-svg: var(--color-basic-white);
+ }
+
+ &[data-component-theme='two'] {
+ --color-video-background: var(--color-slot-four);
+ --color-video-svg: var(--color-gray-800);
+ }
+
+ &[data-component-theme='three'] {
+ --color-video-background: var(--color-slot-five);
+ --color-video-svg: var(--color-basic-white);
+ }
+}
+
+.video-background__control {
+ display: flex;
+ align-items: center;
+ position: absolute;
+ bottom: var(--size-spacing-4);
+ right: var(--size-spacing-4);
+ border: 0;
+ background: transparent;
+ padding: var(--size-spacing-3);
+ color: inherit;
+ z-index: 1;
+
+ &:focus-visible {
+ @include tokens.focus-styles;
+ }
+
+ [data-grand-hero-overlay-variation='contained'] & {
+ @media (max-width: $break-video-banner-max) {
+ top: var(--size-spacing-6);
+ right: var(--size-spacing-6);
+ bottom: unset;
+ }
+ }
+
+ [data-grand-hero-overlay-variation='full'] & {
+ border: 1px solid var(--color-basic-white);
+ }
+
+ [data-body-frozen] & {
+ z-index: 0;
+ }
+
+ svg {
+ fill: var(--color-video-svg);
+ width: $video-background-icon-size-sm;
+ height: $video-background-icon-size-sm;
+
+ @media (min-width: $break-video-banner) {
+ width: $video-background-icon-size;
+ height: $video-background-icon-size;
+
+ &.video-background__icon--play {
+ padding-inline-start: var(--size-spacing-3);
+ padding-inline-end: var(--size-spacing-3);
+ }
+ }
+ }
+
+ &::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: var(--color-video-background);
+ opacity: 0.85;
+ z-index: -1;
+ }
+
+ &:hover::after {
+ opacity: 1;
+ }
+
+ @media (min-width: $break-video-banner) {
+ bottom: var(--size-spacing-7);
+ right: var(--size-spacing-7);
+ }
+}
+
+.video-background__control--play {
+ [is-playing='false'] & {
+ display: flex;
+ }
+
+ [is-playing='true'] & {
+ display: none;
+ }
+}
+
+.video-background__control--pause {
+ display: none;
+
+ [is-playing='false'] & {
+ display: none;
+ }
+
+ [is-playing='true'] & {
+ display: flex;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.twig
new file mode 100644
index 000000000..6601cb153
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-background/yds-video-background.twig
@@ -0,0 +1,39 @@
+{#
+ # Available variables:
+ # - video_background__content - the content of the video (typically an iframe)
+ # the "|raw" filter is applied so that the iframe is rendered instead
+ # of simply passing the iframe as plain text.
+ #
+ # Available blocks:
+ # - video_background__content - used to replace the content of the video with something other than the typical iframe
+ # for example: to insert an html5 video component
+#}
+
+{% set video_background__base_class = video_background__base_class|default('video-background') %}
+{% set video_background__button__background_color = video_background__button__background_color|default('one') %}
+
+
+ {% block video_background__content %}
+
+
+
+ {% endblock %}
+
+ {{ 'Play the Video'|t }}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'play',
+ icon__decorative: true,
+ icon__blockname: video_background__base_class,
+ icon__modifiers: ['play'],
+ } %}
+
+
+ {{ 'Pause the Video'|t }}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'pause',
+ icon__decorative: true,
+ icon__blockname: video_background__base_class,
+ icon__modifiers: ['pause'],
+ } %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/_yds-video-embed.scss b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/_yds-video-embed.scss
new file mode 100644
index 000000000..e87858772
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/_yds-video-embed.scss
@@ -0,0 +1,31 @@
+/* Responsive Video using CSS only */
+.video-embed {
+ aspect-ratio: 16 / 9;
+
+ iframe {
+ height: 100%;
+ width: 100%;
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 16 / 9) {
+ position: absolute;
+ }
+ }
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 16 / 9) {
+ position: relative;
+
+ &::before {
+ float: left;
+ padding-top: 56.25%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/video-embed.stories.js b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/video-embed.stories.js
new file mode 100644
index 000000000..3f263ef66
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/video-embed.stories.js
@@ -0,0 +1,10 @@
+import videoEmbedTwig from './yds-video-embed.twig';
+
+import videoEmbedData from './video-embed.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Atoms/Videos/Video Embed' };
+
+export const videoEmbed = () => videoEmbedTwig(videoEmbedData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/video-embed.yml b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/video-embed.yml
new file mode 100644
index 000000000..45b1541c0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/video-embed.yml
@@ -0,0 +1 @@
+video_embed__content: VIDEO
diff --git a/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/yds-video-embed.twig b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/yds-video-embed.twig
new file mode 100644
index 000000000..20ff23971
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/01-atoms/videos/video-embed/yds-video-embed.twig
@@ -0,0 +1,18 @@
+{#
+ # Available variables:
+ # - video_embed__content - the content of the video (typically an iframe)
+ # the "|raw" filter is applied so that the iframe is rendered instead
+ # of simply passing the iframe as plain text.
+ #
+ # Available blocks:
+ # - video_embed__content - used to replace the content of the video with something other than the typical iframe
+ # for example: to insert an html5 video component
+#}
+
+{% set video_embed__base_class = video_embed__base_class|default('video-embed') %}
+
+
+ {% block video_embed__content %}
+ {{ video_embed__content|raw }}
+ {% endblock %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/_yds-accordion-item.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/_yds-accordion-item.twig
new file mode 100644
index 000000000..b1deb1cc5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/_yds-accordion-item.twig
@@ -0,0 +1,48 @@
+{#
+ # Available Variables:
+ # - accordion__item__heading
+ # - accordion__item__heading__level (passed down by `accordion.twig`)
+ #
+ # Available Blocks:
+ # - accordion__item__content
+ #}
+
+{% set accordion__item__base_class = 'accordion-item' %}
+
+{% set accordion__item__attributes = {
+ 'data-accordion-expanded': 'true',
+ class: bem(accordion__item__base_class),
+} %}
+
+{% set accordion__item__cta__content %}
+ {{ accordion__item__heading }}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ icon__blockname: accordion__item__base_class,
+ icon__decorative: true,
+ } %}
+{% endset %}
+
+{% set accordion__item__heading__content %}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__content: accordion__item__cta__content,
+ control__base_class: 'toggle',
+ control__blockname: accordion__item__base_class,
+ aria_expanded: 'true',
+ } %}
+{% endset %}
+
+
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: accordion__item__heading__level|default('2'),
+ heading__blockname: accordion__item__base_class,
+ heading: accordion__item__heading__content,
+ } %}
+
+ {% block accordion__item__content %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: accordion__item__content,
+ } %}
+ {% endblock %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/_yds-accordion.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/_yds-accordion.scss
new file mode 100644
index 000000000..a21025eec
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/_yds-accordion.scss
@@ -0,0 +1,125 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+
+// The accordion group.
+.accordion {
+ @include tokens.spacing-page-section;
+
+ --color-text-shadow: var(--color-basic-white);
+}
+
+.accordion__heading {
+ @include tokens.h2-yale-new;
+
+ margin-bottom: var(--size-spacing-5);
+}
+
+.accordion__controls {
+ @include atoms.list-reset;
+
+ display: flex;
+ margin-bottom: var(--size-spacing-5);
+
+ > *:not(:last-child) {
+ padding-right: var(--size-spacing-5);
+ margin-right: var(--size-spacing-5);
+ border-right: var(--border-thickness-1) solid;
+ }
+
+ [data-component-alignment='left'] & {
+ max-width: var(--size-component-layout-width-content);
+ }
+}
+
+.accordion__icon {
+ height: 1em;
+ width: 1em;
+}
+
+.accordion__toggle-all {
+ @include tokens.body-s;
+ @include atoms.button-reset;
+
+ display: flex;
+ gap: var(--size-spacing-3);
+ align-items: center;
+
+ &:hover {
+ color: var(--color-link-base);
+ }
+
+ &[aria-expanded='true'] .accordion__icon {
+ transform: rotate(180deg);
+ }
+}
+
+// Individual accordion items.
+.accordion-item {
+ border-bottom: var(--border-thickness-1) solid;
+ padding-top: var(--size-spacing-5);
+
+ [data-component-alignment='left'] & {
+ max-width: var(--size-component-layout-width-content);
+ }
+}
+
+.accordion-item__heading {
+ @include tokens.body-l;
+
+ margin-bottom: var(--size-spacing-5);
+}
+
+.accordion-item__toggle {
+ @include atoms.button-reset;
+
+ display: flex;
+ gap: var(--size-spacing-5);
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ padding: var(--size-spacing-3) var(--size-spacing-4) var(--size-spacing-3) 0;
+ text-align: left;
+
+ &:hover {
+ color: var(--color-link-base);
+ }
+}
+
+.accordion-item__icon {
+ @include tokens.animate;
+
+ height: 1em;
+ width: 1em;
+ flex-shrink: 0;
+
+ [aria-expanded='true'] > & {
+ transform: rotate(180deg);
+ }
+}
+
+.accordion-item__content {
+ @include tokens.animate(all, var(--animation-speed-slow));
+
+ max-height: var(--accordion-item-height);
+ overflow: hidden;
+
+ @media (max-width: tokens.$break-mobile-max) {
+ padding-inline-start: var(--size-spacing-6);
+ padding-inline-end: var(--size-spacing-6);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ padding-inline-start: var(--size-spacing-8);
+ padding-inline-end: var(--size-spacing-8);
+ }
+
+ [data-accordion-expanded='true'] & {
+ margin-bottom: var(--size-spacing-6);
+ }
+
+ [data-accordion-expanded='false'] & {
+ @include tokens.animate-hidden(var(--animation-speed-slow));
+
+ max-height: 0;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/accordion.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/accordion.stories.js
new file mode 100644
index 000000000..ede56e23f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/accordion.stories.js
@@ -0,0 +1,66 @@
+import accordionTwig from './yds-accordion.twig';
+
+import accordionData from './accordion.yml';
+
+import './yds-accordion';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Accordion',
+ argTypes: {
+ accordionHeading: {
+ name: 'Accordion Heading',
+ type: 'string',
+ defaultValue: accordionData.accordion__heading,
+ },
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: accordionData.accordion__item__heading,
+ },
+ content: {
+ name: 'Content',
+ type: 'string',
+ defaultValue: accordionData.accordion__item__content,
+ },
+ },
+};
+
+export const Accordion = ({ accordionHeading, heading, content }) => {
+ return `
+ With multiple items
+
+ ${accordionTwig({
+ accordion__heading: accordionHeading,
+ accordion__items: [
+ {
+ accordion__item__heading: heading,
+ accordion__item__content: content,
+ },
+ {
+ accordion__item__heading: accordionData.accordion__item__heading,
+ accordion__item__content: accordionData.accordion__item__content,
+ },
+ {
+ accordion__item__heading: accordionData.accordion__item__heading,
+ accordion__item__content: accordionData.accordion__item__content,
+ },
+ ],
+ })}
+
+ With one item
+
+ ${accordionTwig({
+ accordion__heading: accordionHeading,
+ accordion__items: [
+ {
+ accordion__item__heading: heading,
+ accordion__item__content: content,
+ },
+ ],
+ })}
+
+ `;
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/accordion.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/accordion.yml
new file mode 100644
index 000000000..6424d92b4
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/accordion.yml
@@ -0,0 +1,3 @@
+accordion__heading: 'List of Art Collections'
+accordion__item__heading: 'Art Collections'
+accordion__item__content: 'The Yale Center for British Art will present Bridget Riley: Perceptual Abstraction from March 3 through July 24, 2022. Born in Britain in 1931, Riley is among the most important and influential painters in Britain and the world. Displayed on two floors, this major survey traces Riley’s oeuvre from the 1960s through the present by featuring over fifty works that were selected by the artist in collaboration with the YCBA.
Also, revisit an exhibition hosted at the Yale University Art Gallery, On the Basis of Art: 150 Years of Women at Yale , including a related audio guide, publication, and more.
'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/yds-accordion.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/yds-accordion.js
new file mode 100644
index 000000000..85fcaf296
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/yds-accordion.js
@@ -0,0 +1,233 @@
+Drupal.behaviors.accordion = {
+ attach(context) {
+ // Selectors
+ const items = context.querySelectorAll('.accordion-item');
+ const controls = context.querySelectorAll('.accordion__controls');
+ // Classes
+ const itemContent = '.accordion-item__content';
+ const itemState = 'data-accordion-expanded';
+ const itemToggle = '.accordion-item__toggle';
+ const accordion = '.accordion';
+ const accordionControls = '.accordion__controls';
+ const accordionToggleAll = '.accordion__toggle-all';
+ const accordionItem = '.accordion-item';
+ // States
+ const buttonState = 'aria-expanded';
+ const collapseText = 'Collapse';
+ const expandText = 'Expand';
+
+ // Function to expand an accordion item.
+ const expand = (item) => {
+ const toggle = item.querySelector(itemToggle);
+ const content = item.querySelector(itemContent);
+
+ content.style.setProperty(
+ '--accordion-item-height',
+ `${content.scrollHeight}px`,
+ );
+ item.setAttribute(itemState, 'true');
+ toggle.setAttribute(buttonState, 'true');
+ };
+
+ // Function to collapse an accordion item.
+ const collapse = (item) => {
+ const toggle = item.querySelector(itemToggle);
+
+ item.setAttribute(itemState, 'false');
+ toggle.setAttribute(buttonState, 'false');
+ };
+
+ // Tests if a value starts with a set of text
+ const alreadyStartsWith = (value, startsWith) => {
+ return value.startsWith(startsWith);
+ };
+
+ // Replaces the first word of a string with another string
+ const replaceFirstWord = (original, revised) => {
+ // Capture the first word of a string
+ const firstWord = /^[^\s]+/;
+
+ return original.replace(firstWord, revised);
+ };
+
+ // Updates the button text and aria-exparnded state
+ const updateToggleButtonToCollapse = (element) => {
+ const button = element;
+
+ if (alreadyStartsWith(button.innerHTML, collapseText)) return;
+
+ button.innerHTML = replaceFirstWord(button.innerHTML, collapseText);
+
+ // Set the button state so that arrows and actions take place
+ button.setAttribute(buttonState, true);
+ };
+
+ // Update the toggle button to expand text
+ const updateToggleButtonToExpand = (element) => {
+ const button = element;
+
+ if (alreadyStartsWith(button.innerHTML, expandText)) return;
+
+ button.innerHTML = replaceFirstWord(button.innerHTML, expandText);
+
+ // Set the button state so that arrows and actions take place
+ button.setAttribute(buttonState, false);
+ };
+
+ // Returns the number of expanded items
+ const expandedItemCount = (allItems) => {
+ const itemsToEvaluate = allItems || [];
+
+ return Array.from(itemsToEvaluate).filter((item) => {
+ return item.getAttribute(itemState) === 'true';
+ }).length;
+ };
+
+ // Tests if all of the items have been expanded
+ const allItemsExpanded = (allItems) => {
+ const unevalutedItems = allItems || [];
+
+ return expandedItemCount(unevalutedItems) === unevalutedItems.length;
+ };
+
+ // Finds all items in a context
+ const findAllItems = (domContext) => {
+ return domContext.querySelectorAll(accordionItem);
+ };
+
+ // Finds the closest accordion from an item
+ const findClosestAccordion = (item) => item.closest(accordion);
+ // Finds the closest accordion controls from an item
+ const findClosestAccordionControls = (item) =>
+ findClosestAccordion(item).querySelector(accordionControls);
+ // Finds the closest toggle button from an item
+ const findClosestToggleButton = (item) =>
+ findClosestAccordionControls(item).querySelector(accordionToggleAll);
+
+ // Finds the toggler from an item
+ const findTogglerFromItem = (item) => {
+ return findClosestToggleButton(item);
+ };
+
+ // Tells if the expand/collapse button is expanded
+ const isButtonExpanded = (element) => {
+ const value = element.getAttribute(buttonState);
+
+ return value === 'true';
+ };
+
+ // Tests if a list of items is empty
+ const isEmpty = (itemsList) => {
+ return itemsList.length === 0;
+ };
+
+ // Tests if an item is expanded
+ const isExpanded = (item) => item.getAttribute(buttonState) === 'true';
+
+ // Given a list of items, run a state function on each item
+ // Currently, it's recommended to use one of the following:
+ // collapse
+ // expand
+ const setAllItemStates = (allItems, stateFn) => {
+ allItems.forEach((item) => stateFn(item));
+ };
+
+ // Toggles an item's state to match the toggler
+ const toggleItemState = (toggler, item) =>
+ isExpanded(toggler) ? collapse(item) : expand(item);
+
+ // Check if all of the items have been expanded or collapsed
+ const updateToggleButtonState = (allItems) => {
+ if (isEmpty(allItems)) return;
+
+ const toggler = findTogglerFromItem(allItems[0]);
+
+ if (allItemsExpanded(allItems)) {
+ updateToggleButtonToCollapse(toggler);
+ } else {
+ updateToggleButtonToExpand(toggler);
+ }
+ };
+
+ // Graceful degrading by only collapsing if JavaScript is enabled
+ const collapseAllItems = (allItems) => {
+ allItems.forEach((item) => {
+ collapse(item);
+ });
+ };
+
+ // Attaches item click events to subitems
+ const attachItemClickEvent = (allItems) => {
+ // Toggle accordion content when toggle is activated.
+ allItems.forEach((item) => {
+ const toggle = item.querySelector(itemToggle);
+ const otherAccordionItems =
+ findClosestAccordion(item).querySelectorAll(accordionItem);
+
+ toggle.addEventListener('click', () => {
+ toggleItemState(toggle, item);
+ updateToggleButtonState(otherAccordionItems);
+ });
+ });
+ };
+
+ // Determines if there is only one item
+ const hasMoreThanOneItem = (allItems) => {
+ return allItems.length > 1;
+ };
+
+ // Hides the toggle button if there is one item
+ const hideToggleIfOneItem = (parentUl, allItems) => {
+ if (hasMoreThanOneItem(allItems)) return;
+
+ const ul = parentUl;
+ ul.style.display = 'none';
+ };
+
+ // Display the toggle button
+ const showToggleButton = (ul) => {
+ const control = ul;
+ control.style.display = '';
+ };
+
+ // Show accordion controls if JavaScript is enabled
+ const hideOrShowToggleButtons = (ul, allItems) => {
+ if (hasMoreThanOneItem(allItems)) {
+ showToggleButton(ul);
+ } else {
+ hideToggleIfOneItem(ul, allItems);
+ }
+ };
+
+ // Traverses each control to hide toggles with one item
+ const hideSingleItemToggles = (allControls) => {
+ allControls.forEach((parentUl) => {
+ const allItems = findAllItems(parentUl.parentNode);
+ hideOrShowToggleButtons(parentUl, allItems);
+ });
+ };
+
+ // Attaches the toggle button click event to controls
+ const attachToggleButtonClickEvent = (allControls) => {
+ allControls.forEach((parentUl) => {
+ // Get all items relevant to the control.
+ const allItems = findAllItems(parentUl.parentNode);
+ // Add click listener on the parent
+ parentUl.addEventListener('click', (e) => {
+ if (isButtonExpanded(e.target)) {
+ updateToggleButtonToExpand(e.target);
+ setAllItemStates(allItems, collapse);
+ } else {
+ updateToggleButtonToCollapse(e.target);
+ setAllItemStates(allItems, expand);
+ }
+ });
+ });
+ };
+
+ collapseAllItems(items);
+ hideSingleItemToggles(controls);
+ attachItemClickEvent(items);
+ attachToggleButtonClickEvent(controls);
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/yds-accordion.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/yds-accordion.twig
new file mode 100644
index 000000000..95e5dd6a5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/accordion/yds-accordion.twig
@@ -0,0 +1,76 @@
+{#
+ # Available Variables:
+ # - accordion__heading
+ #
+ # Available Blocks:
+ # - accordion__items
+ #}
+
+{% set accordion__base_class = 'accordion' %}
+
+{# Default assuming no accordion header exists; will changed when detected #}
+{% set accordion__item__heading__level = (accordion__heading is empty) ? '2' : '3' %}
+
+{% set toggle_all__content -%}
+ Expand All
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ icon__blockname: accordion__base_class,
+ } %}
+{% endset %}
+
+{% set control__attributes = {
+ 'aria-expanded': 'false'
+} %}
+
+{% set accordion__attibutes = {
+ 'data-component-width': accordion__width|default('content'),
+ 'data-component-alignment': accordion__alignment|default('center'),
+ class: bem(accordion__base_class, accordion__modifiers),
+} %}
+
+{% set section_controls__attributes = {
+ 'style': 'display: none',
+ 'aria-label': 'Section controls'
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {% if accordion__heading is not empty %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: accordion__base_class,
+ heading: accordion__heading,
+ } %}
+ {% endif %}
+ {% embed "@atoms/lists/yds-list.twig" with {
+ list__base_class: 'controls',
+ list__blockname: accordion__base_class,
+ list__attributes: section_controls__attributes,
+ } %}
+ {% block list__content %}
+ {% embed "@atoms/lists/_yds-list-item.twig" %}
+ {% block list__item__content %}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__content: toggle_all__content,
+ control__base_class: 'toggle-all',
+ control__blockname: accordion__base_class,
+ control__attributes: control__attributes,
+ } %}
+ {% endblock %}
+ {% endembed %}
+ {% endblock %}
+ {% endembed %}
+ {% block accordion__items %}
+ {% for item in accordion__items %}
+ {% include "@molecules/accordion/_yds-accordion-item.twig" with {
+ accordion__item__heading: item.accordion__item__heading,
+ accordion__item__content: item.accordion__item__content,
+ accordion__item__heading__level: accordion__item__heading__level,
+ } %}
+ {% endfor %}
+ {% endblock %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/_yds-alert.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/_yds-alert.scss
new file mode 100644
index 000000000..6542bb7e1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/_yds-alert.scss
@@ -0,0 +1,181 @@
+@use '~@yalesites-org/tokens/build/scss/tokens' as sass-tokens;
+@use '../../00-tokens/functions/map';
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+
+$alert-themes: map.deep-get(sass-tokens.$tokens, color, alert);
+$alert-fade-speed: var(--animation-speed-slow);
+
+.alert {
+ --size-icon: 1.25rem;
+ --color-link-base: currentcolor;
+ --color-link-hover: currentcolor;
+
+ position: relative;
+ z-index: 3;
+ background-color: var(--color-alert-background);
+ color: var(--color-alert-text);
+ max-height: 25rem; // we need to set a max-height to animate the alert close state.
+ opacity: 1;
+ overflow: hidden;
+
+ @each $theme, $value in $alert-themes {
+ &[data-alert-type='#{$theme}'] {
+ --color-alert-background: var(--color-alert-#{$theme}-background-color);
+ --color-alert-text: var(--color-alert-#{$theme}-text);
+ --color-alert-border: var(--color-alert-#{$theme}-border-color);
+ --color-text-shadow: var(--color-alert-#{$theme}-background-color);
+ }
+ }
+
+ &[data-alert-state='dismissed'] {
+ &.alert__animate {
+ @include tokens.animate($duration: $alert-fade-speed);
+ }
+
+ visibility: hidden;
+ opacity: 0;
+ max-height: 0;
+ }
+}
+
+.alert__inner {
+ display: flex;
+ align-items: flex-start;
+ padding-block-start: var(--size-spacing-5);
+ padding-block-end: var(--size-spacing-5);
+
+ @media (min-width: tokens.$break-mobile) {
+ align-items: center;
+ }
+}
+
+.alert__icon {
+ display: flex;
+ margin-right: var(--size-spacing-3);
+ flex: 0 0 var(--size-icon);
+
+ @media (max-width: tokens.$break-mobile-max) {
+ padding-top: var(--size-spacing-1);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ margin-right: var(--size-spacing-5);
+
+ [data-alert-state='expanded'] &,
+ // fix icon alignment shift
+ [data-alert-state='dismissed'] & {
+ align-self: flex-start;
+ }
+ }
+
+ svg {
+ height: var(--size-icon);
+ width: var(--size-icon);
+
+ @media (min-width: tokens.$break-mobile) {
+ [data-alert-state='collapsed'] & {
+ --size-icon: 1.5625rem;
+ }
+
+ [data-alert-state='expanded'] &,
+ // fix icon resize when dismissed
+ [data-alert-state='dismissed'] & {
+ --size-icon: 2.125rem;
+ }
+ }
+ }
+}
+
+.alert__content {
+ flex: 1 1 auto;
+ display: flex;
+ flex-wrap: wrap;
+ padding-right: var(--size-spacing-3);
+
+ @media (max-width: tokens.$break-mobile-max) {
+ gap: var(--size-spacing-3);
+ flex-direction: column;
+ align-items: flex-start;
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ gap: var(--size-spacing-5);
+ justify-content: space-between;
+ align-items: center;
+ padding-right: var(--size-spacing-7);
+ border-right: var(--border-thickness-1) solid var(--color-alert-border);
+
+ [data-alert-state='collapsed'] & {
+ border: none;
+ }
+ }
+}
+
+.alert__heading {
+ @include tokens.h5-mallory-compact-medium;
+
+ color: inherit;
+}
+
+.alert__text {
+ @include tokens.body-s-condensed;
+
+ margin-top: var(--size-spacing-2);
+ max-width: var(--size-component-layout-width-content);
+
+ [data-alert-state='collapsed'] & {
+ display: none;
+ }
+
+ > *:last-child {
+ margin-bottom: 0;
+ }
+}
+
+.alert__link {
+ @include atoms.link;
+ @include tokens.body-s;
+
+ --position: 0 1.3em;
+
+ margin-bottom: var(--size-spacing-2);
+
+ [data-alert-state='collapsed'] & {
+ display: none;
+ }
+
+ &:visited {
+ color: var(--color-alert-text);
+ }
+
+ &:has(> i.fa-icon) {
+ padding-right: var(--size-spacing-3);
+ }
+}
+
+.alert__toggle {
+ @include atoms.button-reset;
+
+ --size-icon: 1.25rem;
+
+ flex: 0 0 var(--size-icon);
+ display: flex;
+ transform: rotate(180deg);
+
+ [data-alert-state='collapsed'] & {
+ transform: rotate(0deg);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ --size-icon: 1.5625rem;
+
+ padding: var(--size-spacing-3);
+ margin-left: var(--size-spacing-5);
+ }
+
+ svg {
+ height: var(--size-icon);
+ width: var(--size-icon);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/alert.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/alert.stories.js
new file mode 100644
index 000000000..77b05a942
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/alert.stories.js
@@ -0,0 +1,115 @@
+import alertTwig from './yds-alert.twig';
+import textFieldTwig from '../text/yds-text-field.twig';
+import ctaTwig from '../../01-atoms/controls/cta/yds-cta.twig';
+
+import alertData from './alert.yml';
+
+import './yds-alert';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Alert',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ heading: {
+ name: 'Alert Heading',
+ type: 'string',
+ defaultValue: alertData.alert__heading,
+ },
+ content: {
+ name: 'Alert Content',
+ type: 'string',
+ defaultValue: alertData.alert__content,
+ },
+ linkContent: {
+ name: 'Alert Link Text',
+ type: 'string',
+ defaultValue: alertData.alert__link__content,
+ },
+ },
+};
+
+const alertResetInstructions = `
+Resetting Alerts in Storybook Once you've closed a dismissible alert, they will not show up again, even after page reloads. In order to see them again, here in storybook, click this reset button, and all alerts will be reset to their initial state.
+${ctaTwig({
+ cta__content: 'Reset dismissed alerts',
+ cta__attributes: { onClick: 'resetAlerts();' },
+ cta__component_theme: 'one',
+})}
+`;
+
+export const Alert = ({ type, heading, content, linkContent }) => `
+
+${alertTwig({
+ alert__type: type,
+ alert__heading: heading,
+ alert__content: content,
+ alert__link__content: linkContent,
+ alert__link__url: alertData.alert__link__url,
+ alert__id: '123',
+})}
+${textFieldTwig({
+ text_field__content: alertResetInstructions,
+})}`;
+Alert.argTypes = {
+ type: {
+ name: 'Alert Type',
+ type: 'select',
+ options: ['emergency', 'announcement', 'marketing'],
+ defaultValue: 'announcement',
+ },
+};
+
+export const AlertExamples = ({ heading, content, linkContent }) => `
+
+${alertTwig({
+ alert__type: 'emergency',
+ alert__heading: heading,
+ alert__content: content,
+ alert__link__content: linkContent,
+ alert__link__url: alertData.alert__link__url,
+ alert__id: '234',
+})}
+${alertTwig({
+ alert__type: 'announcement',
+ alert__heading: heading,
+ alert__content: content,
+ alert__link__content: linkContent,
+ alert__link__url: alertData.alert__link__url,
+ alert__id: '345',
+})}
+${alertTwig({
+ alert__type: 'marketing',
+ alert__heading: heading,
+ alert__content: content,
+ alert__link__content: linkContent,
+ alert__link__url: '#',
+ alert__id: '456',
+})}
+${textFieldTwig({
+ text_field__content: alertResetInstructions,
+})}`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/alert.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/alert.yml
new file mode 100644
index 000000000..dc1d59187
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/alert.yml
@@ -0,0 +1,4 @@
+alert__heading: 'This is the heading for the alert'
+alert__content: 'This is an optional text for more information if needed.'
+alert__link__content: 'Optional link'
+alert__link__url: 'https://google.com'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/yds-alert.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/yds-alert.js
new file mode 100644
index 000000000..90f56f0ea
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/yds-alert.js
@@ -0,0 +1,119 @@
+Drupal.behaviors.alert = {
+ attach(context) {
+ // Selectors
+ const alerts = context.querySelectorAll('.alert');
+ const alertToggle = '.alert__toggle';
+ // Classes and States
+ const alertId = 'data-alert-id';
+ const alertState = 'data-alert-state';
+ const buttonState = 'aria-expanded';
+
+ // Function to expand an alert.
+ const expand = (item, toggle, id) => {
+ item.setAttribute(alertState, 'expanded');
+ toggle.setAttribute(buttonState, 'true');
+ localStorage.setItem(id, 'expanded');
+ };
+
+ // Function to collapse an alert.
+ const collapse = (item, toggle, id) => {
+ item.setAttribute(alertState, 'collapsed');
+ toggle.setAttribute(buttonState, 'false');
+ localStorage.setItem(id, 'collapsed');
+ };
+
+ // Function to dismiss an alert.
+ const dismiss = (item, id) => {
+ item.setAttribute(alertState, 'dismissed');
+ localStorage.setItem(id, 'dismissed');
+ };
+
+ // Function to animate the dismissal of an alert.
+ const animatedDismiss = (item, id) => {
+ dismiss(item, id);
+ item.classList.add('alert__animate');
+ };
+
+ // Function to remove old alerts from storage.
+ const resetAlerts = () => {
+ Object.keys(localStorage).forEach((key) => {
+ if (key.substring(0, 12) === 'ys-alert-id-') {
+ localStorage.removeItem(key);
+ }
+ });
+ };
+
+ // Function to check whether localStorage is both supported and available.
+ // See: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#testing_for_availability
+ function storageAvailable(type) {
+ let storage;
+ try {
+ storage = window[type];
+ const x = '__storage_test__';
+ storage.setItem(x, x);
+ storage.removeItem(x);
+ return true;
+ } catch (e) {
+ return (
+ e instanceof DOMException &&
+ // everything except Firefox
+ (e.code === 22 ||
+ // Firefox
+ e.code === 1014 ||
+ // test name field too, because code might not be present
+ // everything except Firefox
+ e.name === 'QuotaExceededError' ||
+ // Firefox
+ e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
+ // acknowledge QuotaExceededError only if there's something already stored
+ storage &&
+ storage.length !== 0
+ );
+ }
+ }
+
+ if (storageAvailable('localStorage')) {
+ const alertCount = alerts.length;
+ let newAlerts = 0;
+
+ alerts.forEach((alert) => {
+ const id = alert.getAttribute(alertId);
+ const type = alert.getAttribute('data-alert-type');
+ const toggle = alert.querySelector(alertToggle);
+
+ // Get the alert state if previously interacted with by the user.
+ const state = localStorage.getItem(id);
+
+ // If the current alert has no state, clear other values from storage.
+ if (state == null) {
+ newAlerts += 1;
+ }
+
+ // If the alert was dismissed, keep it dismissed.
+ if (state === 'dismissed') {
+ dismiss(alert, id);
+ // If the alert was collapsed, load it in the collapsed state.
+ } else if (state === 'collapsed') {
+ collapse(alert, toggle, id);
+ }
+
+ // Toggle alert state
+ toggle.addEventListener('click', () => {
+ if (type === 'emergency') {
+ // For emergency alerts, toggle the "expanded/collapsed" state.
+ return alert.getAttribute(alertState) === 'expanded'
+ ? collapse(alert, toggle, id)
+ : expand(alert, toggle, id);
+ }
+
+ // For all other alert types, dismiss the alert with animation.
+ return animatedDismiss(alert, id);
+ });
+ });
+
+ if (alertCount === newAlerts) {
+ resetAlerts();
+ }
+ }
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/yds-alert.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/yds-alert.twig
new file mode 100644
index 000000000..802bb42a9
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/alert/yds-alert.twig
@@ -0,0 +1,87 @@
+{#
+ # Available Variables:
+ # - alert__id: unique id (must be unique to each site)
+ # - alert__type: emergency, announcement (default), marketing
+ # - alert__heading
+ # - alert__content
+ # - alert__link__content
+ # - alert__link__url
+ #}
+
+{% set alert__base_class = 'alert' %}
+{% set alert__type = alert__type|default('announcement') %}
+
+{# Set emergency icons #}
+{% if alert__type == 'emergency' %}
+ {% set alert__icon = 'triangle-exclamation' %}
+ {% set alert__toggle = 'angle-down' %}
+ {% set alert__toggle__text = 'Hide alert details' %}
+ {% set alert__toggle__aria_expanded = 'true' %}
+{# Set announcement icons #}
+{% elseif alert__type == 'announcement' %}
+ {% set alert__icon = 'circle-info' %}
+ {% set alert__toggle = 'xmark' %}
+ {% set alert__toggle__text = 'Close alert' %}
+{# Set marketign icon #}
+{% else %}
+ {% set alert__toggle = 'xmark' %}
+ {% set alert__toggle__text = 'Close alert' %}
+{% endif %}
+
+{% set alert__attributes = {
+ 'data-component-width': 'site',
+ 'data-alert-id': 'ys-alert-id-' ~ alert__id,
+ 'data-alert-state': alert__state|default('expanded'),
+ 'data-alert-type': alert__type,
+ 'aria-label': 'announcement',
+ class: bem(alert__base_class),
+} %}
+
+
+
+ {% if alert__icon %}
+
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: alert__icon,
+ icon__decorative: true,
+ } %}
+
+ {% endif %}
+
+
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: alert__base_class,
+ heading: alert__heading,
+ } %}
+ {% if alert__content %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__element: 'div',
+ text__content: alert__content,
+ text__blockname: alert__base_class,
+ } %}
+ {% endif %}
+
+ {% if alert__link__content and alert__link__url %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: alert__link__content,
+ link__url: alert__link__url,
+ link__blockname: alert__base_class,
+ } %}
+ {% endif %}
+
+ {% set alert__control %}
+
{{ alert__toggle__text }}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: alert__toggle,
+ icon__decorative: true,
+ } %}
+ {% endset %}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__content: alert__control,
+ control__base_class: 'toggle',
+ control__blockname: alert__base_class,
+ aria_expanded: alert__toggle__aria_expanded,
+ } %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/action/_yds-action-banner.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/action/_yds-action-banner.scss
new file mode 100644
index 000000000..f0f6400c5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/action/_yds-action-banner.scss
@@ -0,0 +1,352 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+@use '../../../00-tokens/functions/map';
+
+// get global themes
+$global-banner-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$component-banner-themes: map.deep-get(tokens.$tokens, 'component-themes');
+$break-cta-banner: tokens.$break-l;
+$break-cta-banner-max: $break-cta-banner - 0.05;
+
+.cta-banner {
+ @include tokens.spacing-page-section(
+ $flush-top: true,
+ $flush-bottom: true,
+ $banner-spacing: true
+ );
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-banner-themes {
+ &[data-component-theme='#{$theme}'] {
+ --color-text: var(--color-banner-text);
+ --color-backgound: var(--color-banner-background);
+ --color-heading: var(--color-banner-heading);
+ --color-action: var(--color-banner-action);
+ --color-action-secondary: var(--color-banner-action-secondary);
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--component-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--component-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--component-themes-#{$theme}-slot-eight);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-banner-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ max-width: tokens.$break-max-width;
+ margin-inline-start: auto;
+ margin-inline-end: auto;
+ padding: 0;
+ background-color: var(--color-banner-background);
+
+ --banner-content-max-width: 37rem;
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-banner-background: var(--color-slot-one);
+ --color-banner-text: var(--color-slot-eight);
+ --color-banner-heading: var(--color-slot-eight);
+ --color-banner-action: var(--color-slot-eight);
+ --color-banner-action-secondary: var(--color-slot-one);
+ --color-link-base: var(--color-banner-heading);
+ --color-link-hover: var(--color-banner-heading);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+
+ &[data-component-theme='two'] {
+ --color-banner-background: var(--color-slot-four);
+ --color-banner-text: var(--color-slot-seven);
+ --color-banner-heading: var(--color-slot-seven);
+ --color-banner-action: var(--color-slot-seven);
+ --color-banner-action-secondary: var(--color-slot-eight);
+ --color-link-base: var(--color-banner-heading);
+ --color-link-hover: var(--color-banner-heading);
+ }
+
+ &[data-component-theme='three'] {
+ --color-banner-background: var(--color-slot-five);
+ --color-banner-text: var(--color-slot-eight);
+ --color-banner-heading: var(--color-slot-eight);
+ --color-banner-action: var(--color-slot-eight);
+ --color-banner-action-secondary: var(--color-slot-one);
+ --color-link-base: var(--color-banner-heading);
+ --color-link-hover: var(--color-banner-heading);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+}
+
+.cta-banner__content-wrapper {
+ position: relative;
+
+ @media (min-width: $break-cta-banner) {
+ aspect-ratio: 16 / 5;
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 16 / 5) {
+ &::before {
+ float: left;
+ padding-top: 26.25%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+ }
+
+ [data-banner-content-layout='bottom'] & {
+ @media (min-width: $break-cta-banner) {
+ display: flex;
+ align-items: flex-end;
+ padding-top: var(--size-spacing-12);
+ }
+ }
+}
+
+.cta-banner__image {
+ @media (max-width: $break-cta-banner - 0.05) {
+ aspect-ratio: 16 / 5;
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 16 / 5) {
+ &::before {
+ float: left;
+ padding-top: 26.25%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+ }
+
+ @media (min-width: $break-cta-banner) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ }
+
+ img {
+ object-fit: cover;
+ height: 100%;
+ width: 100%;
+ }
+}
+
+.cta-banner__content {
+ display: flex;
+ position: relative;
+ color: var(--color-text);
+
+ // Override the background to transparent, so we can add an opacity to it via
+ // the `::before` element below.
+ background-color: transparent;
+
+ > * {
+ position: relative;
+ }
+
+ [data-banner-content-layout='bottom'] & {
+ width: 100%;
+ max-width: 100%;
+ }
+
+ [data-banner-content-layout='left'] & {
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-max) + (var(--size-spacing-10)));
+
+ @media (min-width: $break-cta-banner) {
+ width: 100%;
+
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-max) + (var(--size-spacing-site-gutter) * 2));
+ min-height: 100%;
+ justify-content: flex-start;
+ align-items: center;
+ margin: 0 auto;
+ }
+ }
+
+ [data-banner-content-layout='right'] & {
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-max) + (var(--size-spacing-10)));
+
+ @media (min-width: $break-cta-banner) {
+ width: 100%;
+
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-max) + (var(--size-spacing-site-gutter) * 2));
+ min-height: 100%;
+ justify-content: flex-end;
+ align-items: center;
+ margin: 0 auto;
+ }
+ }
+
+ [data-banner-width='site'][data-banner-content-layout='right'] &,
+ [data-banner-width='site'][data-banner-content-layout='left'] & {
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-site) + (var(--size-spacing-10)));
+
+ @media (min-width: $break-cta-banner) {
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-site) + (var(--size-spacing-site-gutter) * 2));
+ margin: 0 auto;
+ }
+ }
+
+ &::before {
+ position: absolute;
+ top: 0;
+ height: 100%;
+ width: 100%;
+ content: '';
+ background-color: var(--color-banner-background);
+
+ @media (min-width: $break-cta-banner) {
+ opacity: 0.85;
+ }
+
+ [data-banner-content-layout='left'] &,
+ [data-banner-content-layout='right'] & {
+ @media (min-width: $break-cta-banner) {
+ max-width: var(--banner-content-max-width);
+ }
+ }
+ }
+}
+
+.cta-banner__outer-wrap {
+ width: 100%;
+
+ [data-banner-content-layout='left'] &,
+ [data-banner-content-layout='right'] & {
+ @media (min-width: $break-cta-banner) {
+ max-width: var(--banner-content-max-width);
+ }
+ }
+}
+
+.cta-banner__wrap {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ height: 100%;
+
+ // prettier-ignore
+ padding: var(--size-spacing-6) var(--size-spacing-7) var(--size-spacing-7);
+
+ [data-banner-content-layout='left'] &,
+ [data-banner-content-layout='right'] & {
+ width: 100%;
+ max-width: var(--size-component-layout-width-content);
+ }
+
+ [data-banner-content-layout='bottom'] & {
+ @media (min-width: $break-cta-banner) {
+ gap: var(--size-spacing-5);
+ flex-basis: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding-block-start: var(--size-spacing-5);
+ padding-block-end: var(--size-spacing-5);
+ min-height: auto;
+ width: 100%;
+ max-width: 108rem; // 1728px
+ margin: 0 auto;
+ }
+ }
+
+ @media (min-width: $break-cta-banner) {
+ padding: var(--size-spacing-6) var(--size-spacing-site-gutter)
+ var(--size-spacing-7);
+ }
+
+ [data-banner-width='site'] & {
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-site) + (var(--size-spacing-10)));
+
+ @media (min-width: $break-cta-banner) {
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-site) + (var(--size-spacing-site-gutter) * 2));
+ margin: 0 auto;
+ }
+ }
+}
+
+.cta-banner__heading {
+ @include tokens.h2-yale-new;
+
+ margin-bottom: var(--size-spacing-2);
+}
+
+.cta-banner__snippet {
+ @include tokens.body-default-condensed;
+
+ [data-banner-content-layout='bottom'] & {
+ @media (min-width: $break-cta-banner) {
+ > *:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+}
+
+.cta-banner__cta {
+ @include atoms.cta;
+
+ flex: 0 0 auto;
+
+ &:has(> i.fa-icon) {
+ padding-right: var(--size-spacing-7);
+ }
+}
+
+.cta-banner__link {
+ @include atoms.link;
+
+ flex: 0 0 auto;
+}
+
+.cta-banner__button-group {
+ display: flex;
+ flex-flow: row wrap;
+ gap: var(--size-spacing-5);
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/action/yds-action-banner.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/action/yds-action-banner.twig
new file mode 100644
index 000000000..eca8e0191
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/action/yds-action-banner.twig
@@ -0,0 +1,100 @@
+{#
+ # Available Props:
+ # - banner__content__layout: bottom (default), left, or right
+ #
+ # Available Variables:
+ # - banner__heading
+ # - banner__snippet
+ # - banner__link__content
+ # - banner__link__url
+ #
+ # Available Blocks:
+ # - banner__image
+ #}
+
+{% set banner__base_class = 'cta-banner' %}
+{% set banner__content__background = banner__content__background|default('one') %}
+
+{% set banner__attributes = {
+ 'data-banner-content-layout': banner__content__layout|default('bottom'),
+ 'data-component-theme': banner__content__background,
+ class: bem(banner__base_class),
+} %}
+
+{% if banner__width %}
+ {% set banner__attributes = banner__attributes|merge({
+ 'data-banner-width' : banner__width,
+ }) %}
+{% endif %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+
+ {% block banner__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+
+
+
+
+
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: banner__heading__level|default('2'),
+ heading__blockname: banner__base_class,
+ heading: banner__heading,
+ } %}
+ {% if banner__snippet %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'snippet',
+ text__blockname: banner__base_class,
+ text__content: banner__snippet,
+ } %}
+ {% endif %}
+
+ {# Add wrapping opening div if there are two links #}
+ {% if banner__link__content and banner__link__url and banner__link__content_two and banner__link__url_two %}
+
+ {% endif %}
+ {% if banner__link__content and banner__link__url %}
+ {% if banner__link__style == 'text-link' %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: banner__link__content,
+ link__url: banner__link__url,
+ link__blockname: banner__base_class,
+ } %}
+ {% else %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: banner__link__content,
+ cta__href: banner__link__url,
+ cta__blockname: banner__base_class,
+ cta__style: 'outline',
+ } %}
+ {% endif %}
+ {% endif %}
+ {% if banner__link__content_two and banner__link__url_two %}
+ {% if banner__link__style == 'text-link' %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: banner__link__content_two,
+ link__url: banner__link__url_two,
+ link__blockname: banner__base_class,
+ } %}
+ {% else %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: banner__link__content_two,
+ cta__href: banner__link__url_two,
+ cta__blockname: banner__base_class,
+ cta__style: 'outline',
+ } %}
+ {% endif %}
+ {% endif %}
+ {# Add wrapping closing div if there are two links #}
+ {% if banner__link__content and banner__link__url and banner__link__content_two and banner__link__url_two %}
+
+ {% endif %}
+
+
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/banner.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/banner.stories.js
new file mode 100644
index 000000000..c2c9c089d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/banner.stories.js
@@ -0,0 +1,128 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+import bannerTwig from './action/yds-action-banner.twig';
+import grandHeroTwig from './grand-hero/yds-grand-hero.twig';
+
+import bannerData from './banner.yml';
+import grandHeroData from './grand-hero.yml';
+
+import imageData from '../../01-atoms/images/image/image.yml';
+
+const colorPairingsData = Object.keys(tokens['component-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Banners',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: bannerData.banner__heading,
+ },
+ snippet: {
+ name: 'Snippet',
+ type: 'string',
+ defaultValue: bannerData.banner__snippet,
+ },
+ linkContent: {
+ name: 'Link Content',
+ type: 'string',
+ defaultValue: bannerData.banner__link__content,
+ },
+ linkContentTwo: {
+ name: 'Link Content Two',
+ type: 'string',
+ defaultValue: bannerData.banner__link__content_two,
+ },
+ bgColor: {
+ name: 'Component Theme (dial)',
+ type: 'select',
+ options: colorPairingsData,
+ defaultValue: 'one',
+ },
+ },
+};
+
+export const ActionBanner = ({
+ heading,
+ snippet,
+ linkContent,
+ linkContentTwo,
+ linkStyle,
+ contentLayout,
+ bgColor,
+}) =>
+ bannerTwig({
+ ...imageData.responsive_images['16x9'],
+ banner__heading: heading,
+ banner__snippet: snippet,
+ banner__link__content: linkContent,
+ banner__link__url: bannerData.banner__link__url,
+ banner__link__content_two: linkContentTwo,
+ banner__link__url_two: bannerData.banner__link__url_two,
+ banner__link__style: linkStyle,
+ banner__content__layout: contentLayout,
+ banner__content__background: bgColor,
+ });
+ActionBanner.argTypes = {
+ linkStyle: {
+ name: 'Link Style',
+ type: 'select',
+ options: ['cta', 'text-link'],
+ defaultValue: 'cta',
+ },
+ contentLayout: {
+ name: 'Content Layout',
+ type: 'select',
+ options: ['bottom', 'left', 'right'],
+ defaultValue: 'bottom',
+ },
+};
+
+export const GrandHeroBanner = ({
+ heading,
+ snippet,
+ linkContent,
+ linkContentTwo,
+ bgColor,
+ overlayVariation,
+ size,
+ withVideo,
+}) =>
+ grandHeroTwig({
+ ...imageData.responsive_images['16x9'],
+ grand_hero__heading: heading,
+ grand_hero__snippet: snippet,
+ grand_hero__link__content: linkContent,
+ grand_hero__link__url: grandHeroData.grand_hero__link__url,
+ grand_hero__link__content_two: linkContentTwo,
+ grand_hero__link__url_two: grandHeroData.grand_hero__link__url_two,
+ grand_hero__content__background: bgColor,
+ grand_hero__overlay_variation: overlayVariation,
+ grand_hero__size: size,
+ grand_hero__video: withVideo ? 'true' : 'false',
+ });
+GrandHeroBanner.argTypes = {
+ overlayVariation: {
+ name: 'Content Overlay',
+ type: 'select',
+ options: ['contained', 'full'],
+ defaultValue: 'full',
+ },
+ size: {
+ name: 'Content Size',
+ type: 'select',
+ options: ['reduced', 'full'],
+ defaultValue: 'full',
+ },
+ withVideo: {
+ name: 'With Video',
+ type: 'boolean',
+ defaultValue: false,
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/banner.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/banner.yml
new file mode 100644
index 000000000..0e238b319
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/banner.yml
@@ -0,0 +1,6 @@
+banner__heading: 'Heading for the Banner'
+banner__snippet: 'Text option, in case there is more that needs to be said.
'
+banner__link__url: 'https://google.com'
+banner__link__content: 'This is a link'
+banner__link__url_two: 'https://yale.edu'
+banner__link__content_two: 'This is another link'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero.yml
new file mode 100644
index 000000000..582c1d435
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero.yml
@@ -0,0 +1,6 @@
+grand_hero__heading: 'Heading for the Grand Hero'
+grand_hero__snippet: 'Text option, in case there is more that needs to be said.
'
+grand_hero__link__url: 'https://google.com'
+grand_hero__link__content: 'This is a link'
+grand_hero__link__url_two: 'https://yale.edu'
+grand_hero__link__content_two: 'This is another link'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero/_yds-grand-hero.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero/_yds-grand-hero.scss
new file mode 100644
index 000000000..48d0228da
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero/_yds-grand-hero.scss
@@ -0,0 +1,279 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+@use '../../../00-tokens/functions/map';
+
+$global-grand-hero-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$component-grand-hero-themes: map.deep-get(tokens.$tokens, 'component-themes');
+$break-grand-hero-banner: tokens.$break-m;
+
+.grand-hero-banner {
+ @include tokens.spacing-page-section(
+ $flush-top: true,
+ $flush-bottom: true,
+ $banner-spacing: true
+ );
+
+ position: relative;
+ overflow: hidden;
+ display: grid;
+ align-items: end;
+ width: 100%;
+ max-width: tokens.$break-max-width;
+ margin: 0 auto;
+ background-color: var(--color-grand-hero-background);
+
+ @media (min-width: $break-grand-hero-banner) {
+ align-items: center;
+ }
+
+ &[data-grand-hero-size='reduced'] {
+ min-height: 28rem;
+ }
+
+ &[data-grand-hero-size='full'] {
+ min-height: calc(95vh - var(--site-header-height));
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-grand-hero-themes {
+ &[data-component-theme='#{$theme}'] {
+ --color-text: var(--color-grand-hero-text);
+ --color-backgound: var(--color-grand-hero-background);
+ --color-heading: var(--color-grand-hero-heading);
+ --color-action: var(--color-grand-hero-action);
+ --color-action-secondary: var(--color-grand-hero-action-secondary);
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--component-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--component-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--component-themes-#{$theme}-slot-eight);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-grand-hero-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-grand-hero-background: var(--color-slot-one);
+ --color-grand-hero-text: var(--color-slot-eight);
+ --color-grand-hero-heading: var(--color-slot-eight);
+ --color-grand-hero-action: var(--color-slot-eight);
+ --color-grand-hero-action-secondary: var(--color-slot-one);
+ --color-link-base: var(--color-grand-hero-text);
+ --color-link-hover: var(--color-grand-hero-text);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+
+ &[data-component-theme='two'] {
+ --color-grand-hero-background: var(--color-slot-four);
+ --color-grand-hero-text: var(--color-slot-seven);
+ --color-grand-hero-heading: var(--color-slot-seven);
+ --color-grand-hero-action: var(--color-slot-seven);
+ --color-grand-hero-action-secondary: var(--color-slot-eight);
+ --color-link-base: var(--color-grand-hero-text);
+ --color-link-hover: var(--color-grand-hero-text);
+
+ p > a {
+ color: var(--color-slot-seven);
+ }
+ }
+
+ &[data-component-theme='three'] {
+ --color-grand-hero-background: var(--color-slot-five);
+ --color-grand-hero-text: var(--color-slot-eight);
+ --color-grand-hero-heading: var(--color-slot-eight);
+ --color-grand-hero-action: var(--color-slot-eight);
+ --color-grand-hero-action-secondary: var(--color-slot-one);
+ --color-link-base: var(--color-grand-hero-text);
+ --color-link-hover: var(--color-grand-hero-text);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+}
+
+.grand-hero-banner__image {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+}
+
+.grand-hero-banner__video {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+
+ video {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+}
+
+.grand-hero-banner__outer-wrap {
+ width: 100%;
+
+ [data-grand-hero-overlay-variation='contained'] & {
+ align-items: flex-end;
+
+ @media (min-width: $break-grand-hero-banner) {
+ align-items: center;
+ }
+ }
+
+ [data-grand-hero-overlay-variation='full'] & {
+ display: flex;
+ width: 100%;
+ height: 100%;
+ align-items: center;
+ }
+}
+
+.grand-hero-banner__wrap {
+ display: flex;
+ width: 100%;
+ margin: 0 auto;
+
+ [data-grand-hero-overlay-variation='contained'] & {
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-max) + (var(--size-spacing-site-gutter) * 2) );
+ }
+
+ [data-grand-hero-overlay-variation='full'] & {
+ height: 100%;
+ align-items: center;
+ }
+
+ [data-grand-hero-overlay-variation='contained'][data-grand-hero-width='site']
+ & {
+ // prettier-ignore
+ max-width: calc(var(--size-component-layout-width-site) + (var(--size-spacing-site-gutter) * 2));
+
+ @media (min-width: $break-grand-hero-banner) {
+ margin: 0 auto;
+ }
+ }
+}
+
+.grand-hero-banner__content {
+ position: relative;
+ padding: var(--size-spacing-6) var(--size-spacing-site-gutter);
+ background: transparent;
+ color: var(--color-text);
+
+ [data-grand-hero-overlay-variation='contained'] & {
+ margin-bottom: var(--size-spacing-6);
+ width: 100%;
+
+ @media (min-width: $break-grand-hero-banner) {
+ width: auto;
+ max-width: var(--size-component-layout-width-content);
+ }
+ }
+
+ [data-grand-hero-overlay-variation='full'] & {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: var(--color-grand-hero-background);
+ opacity: 0.85;
+ }
+}
+
+.grand-hero-banner__content-inner {
+ position: relative;
+ display: grid;
+ gap: var(--size-spacing-3);
+ padding-left: 0;
+
+ @media (min-width: $break-grand-hero-banner) {
+ width: 100%;
+ max-width: var(--size-component-layout-width-max);
+ margin: 0 auto;
+ }
+
+ > * {
+ max-width: var(--size-component-layout-width-content);
+ }
+
+ [data-grand-hero-width='site'] & {
+ // prettier-ignore
+ max-width: var(--size-component-layout-width-site);
+
+ @media (min-width: $break-grand-hero-banner) {
+ margin: 0 auto;
+ }
+ }
+}
+
+.grand-hero-banner__snippet {
+ p:last-child {
+ margin-bottom: 0;
+ }
+}
+
+.grand-hero-banner__heading {
+ @include tokens.h2-yale-new;
+}
+
+.grand-hero-banner__link {
+ @include atoms.plain-link;
+
+ width: fit-content;
+
+ [data-component-theme] & {
+ --color-link-hover: var(--color-grand-hero-text);
+ }
+}
+
+.grand-hero-banner__button-group {
+ display: flex;
+ flex-flow: row wrap;
+ gap: var(--size-spacing-7);
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero/yds-grand-hero.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero/yds-grand-hero.twig
new file mode 100644
index 000000000..905683a66
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/banner/grand-hero/yds-grand-hero.twig
@@ -0,0 +1,105 @@
+{#
+ # Available Props:
+ # - grand_hero__content__background
+ # - grand_hero__overlay_variation: contained (default), full
+ #
+ # Available Variables:
+ # - grand_hero__heading
+ # - grand_hero__snippet
+ # - grand_hero__link__content
+ # - grand_hero__link__url
+ # - video_background__button__background_color
+ #
+ # Available Blocks:
+ # - grand_hero__media
+ #}
+
+{% set grand_hero__base_class = 'grand-hero-banner' %}
+{% set grand_hero__content__background = grand_hero__content__background|default('one') %}
+{% set grand_hero__overlay_variation = grand_hero__overlay_variation|default('contained') %}
+{% set grand_hero__size = grand_hero__size|default('full') %}
+
+{% set grand_hero__attributes = {
+ 'data-grand-hero-overlay-variation': grand_hero__overlay_variation,
+ 'data-grand-hero-size' : grand_hero__size,
+ 'data-component-theme' : grand_hero__content__background,
+ class: bem(grand_hero__base_class),
+} %}
+
+{% if grand_hero__width %}
+ {% set grand_hero__attributes = grand_hero__attributes|merge({
+ 'data-grand-hero-width' : grand_hero__width,
+ }) %}
+{% endif %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+ {% if grand_hero__video == 'true' %}
+
+ {% block grand_hero__video %}
+ {% include "@atoms/videos/video-background/yds-video-background.twig" with {
+ video_background__content: video_background__content|default('https://ia800301.us.archive.org/17/items/VjmorphVjLoops4/SequinSparkle02.mp4'),
+ video_background__button__background_color: grand_hero__content__background,
+ }%}
+ {% endblock %}
+
+ {% else %}
+
+ {% block grand_hero__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+
+ {% endif %}
+ {% if grand_hero__heading is not empty or grand_hero__snippet is not empty or grand_hero__link__content is not empty and grand_hero__link__url is not empty %}
+
+
+
+
+ {% if grand_hero__heading is not empty %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: grand_hero__heading__level|default('2'),
+ heading__blockname: grand_hero__base_class,
+ heading: grand_hero__heading,
+ } %}
+ {% endif %}
+ {% if grand_hero__snippet %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'snippet',
+ text__blockname: grand_hero__base_class,
+ text__content: grand_hero__snippet,
+ } %}
+ {% endif %}
+ {# Add wrapping opening div if there are two links #}
+ {% if grand_hero__link__content and grand_hero__link__url and grand_hero__link__content_two and grand_hero__link__url_two %}
+
+ {% endif %}
+ {% if grand_hero__link__content and grand_hero__link__url %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: grand_hero__link__content,
+ link__url: grand_hero__link__url,
+ link__blockname: grand_hero__base_class,
+ link__type: 'with-chevron',
+ link__style: grand_hero__link__style|default('no-underline-animation'),
+ link__url_type: 'chevron',
+ } %}
+ {% endif %}
+ {% if grand_hero__link__content_two and grand_hero__link__url_two %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: grand_hero__link__content_two,
+ link__url: grand_hero__link__url_two,
+ link__blockname: grand_hero__base_class,
+ link__type: 'with-chevron',
+ link__style: grand_hero__link__style|default('no-underline-animation'),
+ link__url_type: 'chevron',
+ } %}
+ {% endif %}
+ {% if grand_hero__link__content and grand_hero__link__url and grand_hero__link__content_two and grand_hero__link__url_two %}
+
+ {% endif %}
+
+
+
+
+ {% endif %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/_yds-callout.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/_yds-callout.scss
new file mode 100644
index 000000000..0d3186d9d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/_yds-callout.scss
@@ -0,0 +1,205 @@
+@use '~@yalesites-org/tokens/build/scss/tokens' as sass-tokens;
+@use '../../00-tokens/tokens';
+@use '../../00-tokens/functions/map';
+@use '../../01-atoms/atoms';
+
+$component-callout-themes: map.deep-get(tokens.$tokens, 'component-themes');
+$global-callout-themes: map.deep-get(tokens.$tokens, 'global-themes');
+
+.callouts {
+ @include tokens.spacing-page-section(
+ $flush-bottom: true,
+ $banner-spacing: true
+ );
+
+ color: var(--color-text);
+ background-color: var(--color-callouts-background);
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-callout-themes {
+ &[data-component-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-callouts-background: var(--component-themes-#{$theme}-background);
+ --color-text-shadow: var(--component-themes-#{$theme}-background);
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--component-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--component-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--component-themes-#{$theme}-slot-eight);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-callout-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-callouts-background: var(--color-slot-one);
+ --color-text-shadow: var(--color-slot-one);
+ --color-action: var(--color-basic-white);
+ --color-action-secondary: var(--color-slot-one);
+ --color-text: var(--color-basic-white);
+ --color-heading: var(--color-basic-white);
+ --color-link-base: var(--color-slot-eight);
+ }
+
+ &[data-component-theme='two'] {
+ --color-callouts-background: var(--color-slot-four);
+ --color-text-shadow: var(--color-slot-one);
+ --color-action: var(--color-gray-800);
+ --color-action-secondary: var(--color-basic-white);
+ --color-text: var(--color-gray-800);
+ --color-heading: var(--color-gray-800);
+ --color-link-base: var(--color-slot-seven);
+ }
+
+ &[data-component-theme='three'] {
+ --color-callouts-background: var(--color-slot-five);
+ --color-text-shadow: var(--color-slot-one);
+ --color-action: var(--color-basic-white);
+ --color-action-secondary: var(--color-slot-one);
+ --color-text: var(--color-basic-white);
+ --color-heading: var(--color-basic-white);
+ --color-link-base: var(--color-slot-eight);
+ }
+}
+
+.callouts__wrap {
+ display: flex;
+ max-width: var(--size-component-layout-width-site);
+ margin: 0 auto;
+
+ [data-component-width='content'][data-component-alignment='left'] & {
+ justify-content: flex-start;
+ }
+}
+
+.callouts__inner {
+ @media (min-width: tokens.$break-mobile) {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+
+ > *:nth-child(2n) {
+ padding-left: var(--size-spacing-9);
+ }
+
+ > *:nth-child(2n + 1):not(:last-child) {
+ padding-right: var(--size-spacing-9);
+ }
+
+ [data-component-width='content'][data-component-alignment='left'] & {
+ margin: 0;
+ }
+ }
+}
+
+.callout {
+ position: relative;
+ padding-top: var(--size-spacing-8);
+ padding-bottom: var(--size-spacing-9);
+ padding-inline-start: var(--size-spacing-7);
+ padding-inline-end: var(--size-spacing-7);
+ flex: 1 1 50%;
+ text-align: center;
+
+ &:nth-child(2n) {
+ &::before {
+ position: absolute;
+ content: '';
+ background-color: var(--color-text);
+
+ @media (max-width: tokens.$break-mobile-max) {
+ top: 0;
+ left: var(--size-spacing-8);
+ right: var(--size-spacing-8);
+ height: var(--border-thickness-1);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ left: 0;
+ top: var(--size-spacing-8);
+ bottom: var(--size-spacing-8);
+ width: var(--border-thickness-1);
+ }
+ }
+ }
+}
+
+.callout__inner {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ height: 100%;
+ max-width: 40rem;
+ width: auto;
+}
+
+.callout__heading {
+ @include tokens.h3-yale-new;
+
+ margin-bottom: var(--size-spacing-4);
+}
+
+.callout__text {
+ @include tokens.body-default-condensed;
+
+ a {
+ @include atoms.link;
+ }
+
+ p:last-child {
+ margin-bottom: 0;
+ }
+}
+
+.callout__link {
+ @include atoms.link;
+
+ --color-text-shadow: var(--color-callouts-background);
+
+ margin-top: var(--size-spacing-4);
+
+ [data-component-theme='one'] & {
+ --color-link-hover: var(--color-slot-eight);
+ }
+
+ [data-component-theme='two'] & {
+ --color-link-hover: var(--color-slot-seven);
+ }
+
+ [data-component-theme='three'] & {
+ --color-link-hover: var(--color-slot-eight);
+ }
+}
+
+.callout__cta {
+ @include atoms.cta;
+
+ margin-top: var(--size-spacing-6);
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/_yds-callout.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/_yds-callout.twig
new file mode 100644
index 000000000..440dfa3df
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/_yds-callout.twig
@@ -0,0 +1,40 @@
+{# Variables are documented in the main `yds-callout.twig` file. #}
+
+{% set callout__base_class = 'callout' %}
+{% set callout__link__type = callout__link__type|default('cta') %}
+
+{% set callout__attributes = {
+ class: bem(callout__base_class),
+} %}
+
+
+
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: callout__base_class,
+ heading: callout__heading,
+ } %}
+ {% if callout__text %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__blockname: callout__base_class,
+ text__content: callout__text,
+ } %}
+ {% endif %}
+ {% if callout__link__url and callout__link__content %}
+ {% if callout__link__type == 'link' %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__url: callout__link__url,
+ link__content: callout__link__content,
+ link__blockname: callout__base_class,
+ } %}
+ {% else %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: callout__link__content,
+ cta__href: callout__link__url,
+ cta__blockname: callout__base_class,
+ cta__style: 'outline',
+ } %}
+ {% endif %}
+ {% endif %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/callout.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/callout.stories.js
new file mode 100644
index 000000000..ad95795bd
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/callout.stories.js
@@ -0,0 +1,94 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+import calloutTwig from './yds-callout.twig';
+
+import calloutData from './callout.yml';
+
+const colorPairingsData = Object.keys(tokens['component-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Callout',
+ argTypes: {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: calloutData.callout__heading,
+ },
+ text: {
+ name: 'Text',
+ type: 'string',
+ defaultValue: calloutData.callout__text,
+ },
+ linkText: {
+ name: 'Link Text',
+ type: 'string',
+ defaultValue: calloutData.callout__link__content,
+ },
+ linkType: {
+ name: 'Link Type',
+ type: 'select',
+ options: ['button', 'link'],
+ defaultValue: calloutData.callout__link__type,
+ },
+ backgroundColor: {
+ name: 'Callout Theme (dial)',
+ type: 'select',
+ options: colorPairingsData,
+ defaultValue: 'one',
+ },
+ calloutAlignment: {
+ name: 'Callout Alignment',
+ type: 'select',
+ options: ['left', 'center'],
+ defaultValue: 'center',
+ },
+ },
+};
+
+export const Callout = ({
+ heading,
+ text,
+ linkText,
+ linkType,
+ backgroundColor,
+ calloutAlignment,
+}) => `
+ One Callout
+ ${calloutTwig({
+ callout__background_color: backgroundColor,
+ callout__alignment: calloutAlignment,
+ callouts: [
+ {
+ callout__heading: heading,
+ callout__text: text,
+ callout__link__content: linkText,
+ callout__link__url: calloutData.callout__link__url,
+ callout__link__type: linkType,
+ },
+ ],
+ })}
+ Two Callouts
+ ${calloutTwig({
+ callout__background_color: backgroundColor,
+ callout__alignment: calloutAlignment,
+ callouts: [
+ {
+ callout__heading: heading,
+ callout__text: text,
+ callout__link__content: linkText,
+ callout__link__url: calloutData.callout__link__url,
+ callout__link__type: linkType,
+ },
+ {
+ callout__heading: calloutData.callout__heading,
+ callout__text: calloutData.callout__text,
+ callout__link__content: calloutData.callout__link__content,
+ callout__link__url: calloutData.callout__link__url,
+ callout__link__type: linkType,
+ },
+ ],
+ })}
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/callout.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/callout.yml
new file mode 100644
index 000000000..ab7ddef54
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/callout.yml
@@ -0,0 +1,5 @@
+callout__heading: 'Degree Programs'
+callout__text: 'Designed for those who intend to pursue graduate and those who wish to immediately enter a career in which broad scientific training is beneficial.
'
+callout__link__content: 'Programs'
+callout__link__url: 'https://google.com'
+callout__link__type: 'button'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/yds-callout.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/yds-callout.twig
new file mode 100644
index 000000000..b21558d5e
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/callout/yds-callout.twig
@@ -0,0 +1,46 @@
+{#
+ # Available Props:
+ # - callout__background_color: one, two, or three
+ # - callout__link__type: cta (default), or link
+ #
+ # Available Variables:
+ # - callouts: an array of items, each with the following variables:
+ # - callout__heading
+ # - callout__text
+ # - callout__link__content
+ # - callout__link__url
+ # - callout__width: site (default), or 'content'
+ #}
+
+{% set callouts__base_class = 'callouts' %}
+
+{% if callout__alignment == 'left' %}
+ {% set callout__width = 'content' %}
+{% endif %}
+
+{% set callouts__attributes = {
+ 'data-component-theme': callout__background_color|default('one'),
+ 'data-component-width': callout__width|default('site'),
+ 'data-component-alignment': callout__alignment|default('center'),
+ class: bem(callouts__base_class),
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+
+ {% block callout__items %}
+ {% for callout in callouts %}
+ {% include "@molecules/callout/_yds-callout.twig" with {
+ callout__heading: callout.callout__heading,
+ callout__text: callout.callout__text,
+ callout__link__content: callout.callout__link__content,
+ callout__link__url: callout.callout__link__url,
+ callout__link__type: callout.callout__link__type,
+ } %}
+ {% endfor %}
+ {% endblock %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/_yds-custom-card.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/_yds-custom-card.scss
new file mode 100644
index 000000000..c154becf4
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/_yds-custom-card.scss
@@ -0,0 +1,176 @@
+@use '../../../01-atoms/atoms';
+@use '../../../00-tokens/tokens';
+@use '../../../00-tokens/functions/map';
+
+$global-card-themes: map.deep-get(tokens.$tokens, 'global-themes');
+
+.custom-card {
+ @include atoms.clickable-component-heading-link;
+
+ // only animate if animation is enabled in site configuration.
+ [data-site-animation='artistic'] & {
+ @include tokens.animate($property: 'transform');
+ @include tokens.rise-effect;
+ }
+
+ --card-border: 1px solid var(--color-gray-200);
+ --color-text-shadow: var(--color-basic-white);
+ --color-card-bar-long: var(--color-blue-shale);
+ --color-card-bar-short: var(--color-blue-horizon);
+
+ display: grid;
+ grid-template-columns: 1fr 2fr;
+ column-gap: var(--size-spacing-6);
+ grid-template-areas: 'image content';
+
+ &[data-with-image='false'] {
+ grid-template-areas:
+ 'image'
+ 'content';
+ grid-template-columns: 1fr;
+ border: var(--card-border);
+ }
+
+ &:hover {
+ cursor: pointer;
+ }
+
+ @media (min-width: tokens.$break-s) {
+ &[data-with-image='true'] {
+ [data-collection-featured='true'] & {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ [data-collection-featured='false'] & {
+ grid-template-columns: 1fr 2fr;
+ grid-template-areas: 'image content';
+ }
+ }
+ }
+
+ @media (min-width: tokens.$break-m) {
+ flex-basis: 100%;
+ display: flex;
+ flex-direction: column-reverse;
+
+ &:hover {
+ box-shadow: var(--drop-shadow-level-1);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-card-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-card-bar-long: var(--color-slot-two);
+ --color-card-bar-short: var(--color-slot-one);
+ }
+ }
+}
+
+.custom-card__content {
+ padding: var(--size-spacing-5) 0;
+ grid-area: content;
+
+ [data-with-image='false'] & {
+ padding: var(--size-spacing-5);
+
+ @media (min-width: tokens.$break-m) {
+ // without images, allow the content to grow so columns can stretch.
+ flex: 1 auto;
+ }
+ }
+
+ @media (min-width: tokens.$break-m) {
+ padding: var(--size-spacing-5) var(--size-spacing-6);
+
+ [data-with-image='true'] & {
+ border-top: 0;
+ border-left: var(--card-border);
+ border-right: var(--card-border);
+ border-bottom: var(--card-border);
+ flex: 1;
+ }
+ }
+}
+
+.custom-card__heading {
+ @include tokens.h4-yale-new;
+
+ margin-bottom: var(--size-spacing-3);
+}
+
+.custom-card__snippet {
+ @include tokens.body-default-condensed;
+
+ > *:last-child {
+ margin-bottom: 0;
+ }
+
+ a {
+ @include atoms.link;
+
+ &:has(> i.fa-icon) {
+ padding-right: var(--size-spacing-5);
+ }
+ }
+}
+
+.custom-card__image {
+ grid-area: image;
+
+ [data-collection-featured='false'] & {
+ min-height: 0.25rem;
+
+ @media (min-width: tokens.$break-m) {
+ min-height: 0.375rem;
+ margin-bottom: tokens.$size-spacing-5;
+ }
+ }
+
+ // if the custom card is not part of a featured card collection
+ // and it doesn't have images
+ // show a top bar and animate it.
+ // If a global theme is active, the --color-card-bar-long and --color-card-bar-short
+ // will change from default colors to color slots.
+ [data-collection-featured='false'] [data-with-image='false'] & {
+ background-color: var(--color-card-bar-long);
+ position: relative;
+
+ &::before {
+ @include tokens.animate(width);
+
+ content: '';
+ background-color: var(--color-card-bar-short);
+ height: 100%;
+ width: 25%;
+ position: absolute;
+ right: 0;
+ top: 0;
+ }
+ }
+
+ // change hover background gradient and animate it.
+ .custom-card:hover & {
+ [data-collection-featured='false'] & {
+ &::before {
+ width: 0%;
+ }
+ }
+ }
+
+ @media (min-width: tokens.$break-s) {
+ [data-with-image='true'] & {
+ background: none;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/custom-card.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/custom-card.stories.js
new file mode 100644
index 000000000..603abcde0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/custom-card.stories.js
@@ -0,0 +1,59 @@
+// Custom card twig file
+import customCardTwig from './yds-custom-card.twig';
+
+// Custom card default data
+import customCardData from './custom-card.yml';
+
+// Image atom component - generic images for demo
+import imageData from '../../../01-atoms/images/image/image.yml';
+
+// JavaScript to handle full-card linking
+import './yds-custom-card';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Cards',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: customCardData.custom_card__heading,
+ },
+ snippet: {
+ name: 'Snippet',
+ type: 'string',
+ defaultValue: customCardData.custom_card__snippet,
+ },
+ withImage: {
+ name: 'With Image',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ featured: {
+ name: 'Featured',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ },
+};
+
+export const customCard = ({ heading, snippet, withImage, featured }) => `
+
+
+
+ ${customCardTwig({
+ ...imageData.responsive_images['3x2'],
+ custom_card__heading: heading,
+ custom_card__snippet: snippet,
+ custom_card__url: 'https://google.com',
+ custom_card__image: withImage ? 'true' : 'false',
+ })}
+
+
+
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/custom-card.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/custom-card.yml
new file mode 100644
index 000000000..e1352cb2b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/custom-card.yml
@@ -0,0 +1,3 @@
+custom_card__heading: 'Card Title'
+custom_card__snippet: 'Content goes here.
'
+custom_card__url: 'https://google.com'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/yds-custom-card.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/yds-custom-card.js
new file mode 100644
index 000000000..477cde02d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/yds-custom-card.js
@@ -0,0 +1,36 @@
+Drupal.behaviors.customCard = {
+ attach(context) {
+ // Inspiration and reasoning for this JavaScript can be found in the Cards
+ // chapter of the book linked below:
+ // https://inclusive-components.design/cards/#theredundantclickevent
+ // Selectors
+ const customCards = context.querySelectorAll('.custom-card');
+
+ customCards.forEach((customCard) => {
+ const card = customCard;
+ const link = card.querySelector('.custom-card__heading-link');
+
+ // If the card has a link, make the whole card clickable. However, allow
+ // users to select text by only triggering the link if the "click up" is
+ // less than 200ms from the "click down".
+ if (link) {
+ let down;
+ let up;
+
+ card.style.cursor = 'pointer';
+ card.onmousedown = () => {
+ // Calculate when the "click" starts.
+ down = +new Date();
+ };
+ card.onmouseup = () => {
+ // Calculate when the "click" ends.
+ up = +new Date();
+ // If the click "duration" is less than 200ms, trigger a click.
+ if (up - down < 200) {
+ link.click();
+ }
+ };
+ }
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/yds-custom-card.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/yds-custom-card.twig
new file mode 100644
index 000000000..6f0115534
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/custom-card/yds-custom-card.twig
@@ -0,0 +1,45 @@
+{#
+ # Available Props:
+ # - custom_card__image
+ #
+ # Available Variables:
+ # - custom_card__heading
+ # - custom_card__snippet
+ # - custom_card__url
+ #
+ # Available Blocks:
+ # - custom_card__image
+ #}
+
+{% set custom_card__base_class = 'custom-card' %}
+{% set custom_card__image = custom_card__image|default('true') %}
+
+{% set custom_card__attributes = {
+ 'class': bem(custom_card__base_class),
+ 'data-with-image': custom_card__image == 'true' ? 'true' : 'false',
+} %}
+
+
+
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: (custom_card_collection__heading is not empty) ? '3' : '2',
+ heading__blockname: custom_card__base_class,
+ heading: custom_card__heading,
+ heading__url: custom_card__url,
+ } %}
+ {% if custom_card__snippet %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'snippet',
+ text__blockname: custom_card__base_class,
+ text__content: custom_card__snippet,
+ } %}
+ {% endif %}
+
+
+ {% if custom_card__image == 'true' %}
+ {% block custom_card__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+ {% endif %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/_yds-directory-listing-card.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/_yds-directory-listing-card.scss
new file mode 100644
index 000000000..c1890adbc
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/_yds-directory-listing-card.scss
@@ -0,0 +1,153 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+@use '../../../01-atoms/controls/text-link/yds-text-link' as link;
+
+$break-directory-card-collection-max: tokens.$break-m - 0.05;
+$break-directory-card-collection-list-image-max: tokens.$break-s - 0.05;
+
+.directory-listing-card {
+ --color-text-shadow: var(--color-basic-white);
+
+ display: flex;
+ flex-flow: column-reverse;
+ gap: var(--size-spacing-4);
+
+ // from small to media, both grid and list render using a horizontal layout.
+ [data-collection-type='directory-listing'] & {
+ @media (min-width: tokens.$break-s) and (max-width: $break-directory-card-collection-max) {
+ flex-flow: row-reverse nowrap;
+ gap: var(--size-spacing-6);
+ align-items: flex-start;
+ }
+ }
+}
+
+.directory-listing-card__image {
+ @media (max-width: $break-directory-card-collection-list-image-max) {
+ margin-bottom: tokens.$size-spacing-5;
+
+ [data-collection-type='directory-listing'] & {
+ max-width: 50%;
+ }
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ [data-collection-type='directory-listing'] & {
+ aspect-ratio: 3/2;
+ }
+ }
+}
+
+.directory-listing-card__content {
+ width: 100%;
+
+ @media (min-width: tokens.$break-s) and (max-width: $break-directory-card-collection-max) {
+ [data-collection-type='directory-listing'][data-collection-featured='true']
+ & {
+ flex: 1 0 50%;
+ }
+
+ [data-collection-type='directory-listing'][data-collection-featured='false']
+ & {
+ flex: 1 0 66%;
+ }
+ }
+}
+
+.directory-listing-card__overline {
+ @include tokens.body-s;
+
+ margin-bottom: var(--size-spacing-3);
+ color: var(--color-gray-500);
+ font-variant-caps: small-caps;
+ font-variant-numeric: oldstyle-nums;
+ text-transform: lowercase;
+ letter-spacing: 0.5px;
+}
+
+.directory-listing-card__heading {
+ [data-collection-featured='false'] & {
+ @include tokens.h5-yale-new;
+
+ font-weight: var(--font-weights-yalenew-bold);
+ }
+
+ [data-collection-featured='true'] & {
+ @include tokens.h4-yale-new;
+
+ font-weight: var(--font-weights-yalenew-bold);
+ }
+}
+
+.directory-listing-card__heading-link {
+ @include atoms.link('no-underline');
+
+ color: currentcolor;
+ font-weight: inherit;
+}
+
+.directory-listing-card__subheading {
+ display: flex;
+ flex-wrap: wrap;
+ margin-top: var(--size-spacing-3);
+
+ > *:not(:first-child) {
+ margin-left: var(--size-spacing-5);
+ padding-left: var(--size-spacing-5);
+ position: relative;
+
+ &::before {
+ position: absolute;
+ content: '|';
+ left: -0.225rem;
+ }
+ }
+
+ [data-collection-featured='false'] & {
+ @include tokens.body-default-condensed;
+ }
+
+ [data-collection-featured='true'] & {
+ @include tokens.h5-yale-new;
+ }
+
+ [data-collection-type='profile-directory'][data-collection-featured='false']
+ & {
+ @include tokens.body-s-condensed;
+ }
+}
+
+.directory-listing-card__snippet {
+ margin-top: var(--size-spacing-3);
+
+ [data-collection-featured='false'] & {
+ @include tokens.body-default-condensed;
+ }
+
+ [data-collection-type='profile-directory'][data-collection-featured='false']
+ & {
+ @include tokens.body-s-condensed;
+ }
+}
+
+.directory-listing-card__link {
+ @include link.plain-link;
+}
+
+.directory-listing-card__email {
+ @include tokens.body-default-condensed;
+
+ [data-collection-type='profile-directory'][data-collection-featured='false']
+ & {
+ @include tokens.body-s-condensed;
+ }
+}
+
+.directory-listing-card__phone {
+ @include tokens.body-default-condensed;
+
+ [data-collection-type='profile-directory'][data-collection-featured='false']
+ & {
+ @include tokens.body-s-condensed;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/directory-listing-card.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/directory-listing-card.stories.js
new file mode 100644
index 000000000..9d16214a5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/directory-listing-card.stories.js
@@ -0,0 +1,82 @@
+import directoryCardTwig from './yds-directory-listing-card.twig';
+
+import directoryCardData from './yds-directory-listing-card.yml';
+import imageData from '../../../01-atoms/images/image/image.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Cards',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: directoryCardData.directory_listing_card__heading,
+ },
+ subheading: {
+ name: 'Subheading',
+ type: 'string',
+ defaultValue: directoryCardData.directory_listing_card__subheading,
+ },
+ snippet: {
+ name: 'Snippet',
+ type: 'string',
+ defaultValue: directoryCardData.directory_listing_card__snippet,
+ },
+ email: {
+ name: 'Email',
+ type: 'string',
+ defaultValue: directoryCardData.directory_listing_card__email,
+ },
+ phone: {
+ name: 'Phone',
+ type: 'string',
+ defaultValue: directoryCardData.directory_listing_card__phone,
+ },
+ featured: {
+ name: 'Featured',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ overline: {
+ name: 'Overline',
+ type: 'string',
+ defaultValue: directoryCardData.directory_listing_card__overline,
+ },
+ },
+};
+
+export const ProfileCardDirectoryListing = ({
+ collectionType,
+ featured,
+ heading,
+ subheading,
+ snippet,
+ overline,
+ email,
+ phone,
+}) => `
+
+
+
+ ${directoryCardTwig({
+ card_collection__source_type: 'profile',
+ card_collection__type: collectionType,
+ ...imageData.responsive_images['1x1'],
+ directory_listing_card__overline: overline,
+ directory_listing_card__heading: heading,
+ directory_listing_card__subheading: subheading,
+ directory_listing_card__snippet: snippet,
+ directory_listing_card__email: email,
+ directory_listing_card__phone: phone,
+ directory_listing_card__url:
+ directoryCardData.directory_listing_card__url,
+ })}
+
+
+
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/yds-directory-listing-card.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/yds-directory-listing-card.twig
new file mode 100644
index 000000000..af0ab4088
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/yds-directory-listing-card.twig
@@ -0,0 +1,71 @@
+{#
+ # Available Props:
+ # - directory_listing_card__image: boolean used to evaluate whether or not to show the image
+ #
+ # Available Variables:
+ # - directory_listing_card__overline
+ # - directory_listing_card__heading
+ # - directory_listing_card__subheading
+ # - directory_listing_card__url
+ # - directory_listing_card__snippet
+ #
+ # Available Blocks:
+ # - directory_listing_card__image
+ #}
+
+ {% set directory_listing_card__base_class = 'directory-listing-card' %}
+ {% set directory_listing_card__image = directory_listing_card__image|default('true') %}
+
+
+
+ {% if directory_listing_card__overline %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'overline',
+ text__blockname: directory_listing_card__base_class,
+ text__content: directory_listing_card__overline,
+ } %}
+ {% endif %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: directory_listing_card__heading_level|default('3'),
+ heading__blockname: directory_listing_card__base_class,
+ heading: directory_listing_card__heading,
+ heading__url: directory_listing_card__url,
+ } %}
+ {% if directory_listing_card__subheading %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__blockname: directory_listing_card__base_class,
+ text__base_class: 'subheading',
+ text__content: directory_listing_card__subheading,
+ } %}
+ {% endif %}
+ {% if directory_listing_card__snippet %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'snippet',
+ text__blockname: directory_listing_card__base_class,
+ text__content: directory_listing_card__snippet,
+ } %}
+ {% endif %}
+ {% if directory_listing_card__email %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__url: directory_listing_card_link__url|default('mailto:' ~ directory_listing_card__email),
+ link__content: directory_listing_card_link__content|default('Email'),
+ link__blockname: directory_listing_card__base_class,
+ }%}
+ {% endif %}
+ {% if directory_listing_card__phone %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'phone',
+ text__blockname: directory_listing_card__base_class,
+ text__content: directory_listing_card__phone,
+ } %}
+ {% endif %}
+
+ {% if directory_listing_card__image == 'true' %}
+
+ {% block directory_listing_card__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+
+ {% endif %}
+
+
\ No newline at end of file
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/yds-directory-listing-card.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/yds-directory-listing-card.yml
new file mode 100644
index 000000000..a20f0b106
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/directory-listing-card/yds-directory-listing-card.yml
@@ -0,0 +1,7 @@
+directory_listing_card__overline: Humanities
+directory_listing_card__heading: Person Namerton
+directory_listing_card__subheading: Professional Title and Professor of Subject
+directory_listing_card__snippet: Subtitle/Lede
+directory_listing_card__url: '#'
+directory_listing_card__email: person.name.@yale.edu
+directory_listing_card__phone: '203.565.7777'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/_yds-reference-card.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/_yds-reference-card.scss
new file mode 100644
index 000000000..99af26149
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/_yds-reference-card.scss
@@ -0,0 +1,408 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+
+$break-card-collection-max: tokens.$break-m - 0.05;
+$break-card-collection-list-image-max: tokens.$break-s - 0.05;
+$break-single-card-collection-max: tokens.$break-xl - 0.05;
+
+.reference-card {
+ @include atoms.clickable-component-heading-link;
+ @include atoms.clickable-component-image;
+
+ --color-text-shadow: var(--color-basic-white);
+
+ display: flex;
+ flex-flow: column-reverse;
+ gap: var(--size-spacing-4);
+
+ // from small to media, both grid and list render using a horizontal layout.
+ [data-collection-type='grid'] &,
+ [data-collection-type='list'] & {
+ @media (min-width: tokens.$break-s) and (max-width: $break-card-collection-max) {
+ flex-flow: row-reverse nowrap;
+ gap: var(--size-spacing-6);
+ align-items: flex-start;
+ }
+ }
+
+ // List
+ [data-collection-type='list'] & {
+ @media (min-width: tokens.$break-m) {
+ flex-flow: row-reverse nowrap;
+ gap: var(--size-spacing-8);
+ align-items: flex-start;
+ }
+ }
+
+ // Single card collection
+ [data-collection-type='single'] & {
+ --color-text-shadow: var(--color-blue-yale);
+ --color-card-single-bg: var(--color-blue-yale);
+ --color-card-single-text: var(--color-basic-white);
+ --color-heading: var(--color-card-single-text);
+
+ margin-block-start: var(--size-spacing-11);
+ }
+
+ // Condensed card collection
+ [data-collection-type='condensed'] & {
+ padding-bottom: var(--size-spacing-6);
+ border-bottom: var(--border-thickness-1) solid var(--color-divider);
+ margin-bottom: var(--size-spacing-5);
+
+ &:hover {
+ box-shadow: var(--drop-shadow-level-1-bottom-shadow-only);
+ }
+ }
+
+ // Single card collection featured
+ &[data-component-has-image='true'] {
+ [data-collection-type='single'][data-collection-featured='true'] & {
+ @media (min-width: tokens.$break-xl) {
+ display: grid;
+ grid-template-columns: repeat(5, 1fr);
+ grid-template-rows: repeat(6, 1fr);
+ }
+ }
+ }
+
+ // Single card collection non-featured
+ [data-collection-type='single'][data-collection-featured='false'] & {
+ position: relative;
+ display: flex;
+ background-color: var(--color-card-single-bg);
+ border-bottom: var(--border-thickness-8) solid var(--color-blue-light);
+ padding-bottom: var(--size-spacing-8);
+
+ @media (min-width: tokens.$break-xl) {
+ flex-flow: row-reverse wrap;
+ padding-bottom: var(--size-spacing-11);
+ }
+ }
+
+ // only animate if animation is enabled in site configuration.
+ [data-site-animation='artistic'] [data-animate-item='enabled'] & {
+ @include tokens.animate($property: 'transform');
+ @include tokens.rise-effect;
+ }
+}
+
+.reference-card__image {
+ // List and grid
+ @media (max-width: $break-card-collection-list-image-max) {
+ [data-collection-type='list'] &,
+ [data-collection-type='grid'][data-collection-featured='false'] & {
+ max-width: 50%;
+ }
+ }
+
+ // List and Grid non-featured
+ @media (min-width: tokens.$break-s) and (max-width: $break-card-collection-max) {
+ [data-collection-type='grid'][data-collection-featured='false'] &,
+ [data-collection-type='list'][data-collection-featured='false'] & {
+ flex: 0 33%;
+ }
+
+ [data-collection-type='grid'][data-collection-featured='true'] &,
+ [data-collection-type='list'][data-collection-featured='true'] & {
+ flex: 0 1 50%;
+ }
+ }
+
+ // List featured and non-featured
+ @media (min-width: tokens.$break-m) {
+ margin-bottom: tokens.$size-spacing-5;
+
+ [data-collection-type='list'][data-collection-featured='false'] & {
+ flex: 0 1 40%;
+ }
+
+ [data-collection-type='list'][data-collection-featured='true'] & {
+ flex: 0 1 50%;
+ }
+ }
+
+ // Grid
+ @media (min-width: tokens.$break-mobile) {
+ [data-collection-type='grid'] & {
+ aspect-ratio: 3/2;
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 3 / 2) {
+ &::before {
+ float: left;
+ padding-top: 66.66%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+ }
+
+ // List
+ [data-collection-type='list'] & {
+ flex: 0 0 33%;
+ }
+
+ // Profile grid
+ [data-collection-type='grid'][data-collection-source='profile'] & {
+ aspect-ratio: 1/1;
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 1 / 1) {
+ &::before {
+ float: left;
+ padding-top: 66.66%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+ }
+
+ // Profile list non-featured
+ [data-collection-source='profile'][data-collection-type='list'][data-collection-featured='false']
+ & {
+ flex-basis: 10%;
+ }
+
+ // Profile list featured
+ [data-collection-source='profile'][data-collection-type='list'][data-collection-featured='true']
+ & {
+ flex-basis: 15%;
+ }
+ }
+
+ // Single card collection featured
+ [data-collection-type='single'][data-collection-featured='true'] & {
+ aspect-ratio: 3/2;
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 3 / 2) {
+ &::before {
+ float: left;
+ padding-top: 66.66%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+
+ @media (min-width: tokens.$break-xl) {
+ grid-column: 1 / 4;
+ grid-row: 1 / -1;
+ }
+ }
+
+ // Single card collection non-featured
+ [data-collection-type='single'][data-collection-featured='false'] & {
+ margin-inline-start: var(--size-spacing-8);
+ margin-block-start: calc(var(--size-spacing-11) * -1);
+ align-self: flex-start;
+
+ @media (max-width: $break-single-card-collection-max) {
+ margin-inline-end: var(--size-spacing-8);
+ }
+
+ @media (min-width: tokens.$break-xl) {
+ flex: 1 0 calc(48% - var(--size-spacing-4));
+ }
+ }
+}
+
+.reference-card__content {
+ width: 100%;
+
+ [data-collection-type='single'] & {
+ color: var(--color-card-single-text);
+ }
+
+ // limit width of card content for a single card collection item without an image.
+ [data-component-has-image='false'] & {
+ @media (min-width: tokens.$break-xl) {
+ > * {
+ max-width: 70%;
+ }
+ }
+ }
+
+ [data-collection-type='single'][data-collection-featured='false'] & {
+ padding: var(--size-spacing-8) var(--size-spacing-8) 0;
+
+ @media (min-width: tokens.$break-xl) {
+ flex: 1 0 calc(50% - var(--size-spacing-11));
+ align-self: end;
+ }
+ }
+
+ [data-collection-type='single'][data-collection-featured='true'] & {
+ padding: var(--size-spacing-8);
+ position: relative;
+ background-color: var(--color-card-single-bg);
+
+ @media (max-width: $break-single-card-collection-max) {
+ margin: calc(var(--size-spacing-13) * -1) auto 0;
+ max-width: 90%;
+ }
+
+ @media (min-width: tokens.$break-xl) {
+ grid-column: 3 / -1;
+ grid-row: 2 / 7;
+ align-self: center;
+ }
+ }
+
+ [data-collection-type='list'][data-collection-featured='false'] & {
+ flex: 1 1 100%;
+ }
+
+ // vertically center content when profile source.
+ [data-collection-type='single'][data-collection-featured='false'][data-collection-source='profile']
+ & {
+ @media (min-width: tokens.$break-xl) {
+ align-self: center;
+ }
+ }
+
+ @media (max-width: $break-card-collection-list-image-max) {
+ [data-collection-type='list'][data-collection-source='profile'] & {
+ max-width: 50%;
+ }
+ }
+
+ @media (min-width: tokens.$break-s) and (max-width: $break-card-collection-max) {
+ [data-collection-type='grid'][data-collection-featured='true'] &,
+ [data-collection-type='list'][data-collection-featured='true'] & {
+ flex: 1 0 50%;
+ }
+
+ [data-collection-type='grid'][data-collection-featured='false'] &,
+ [data-collection-type='list'][data-collection-featured='false'] & {
+ flex: 1 0 66%;
+ }
+ }
+
+ @media (min-width: tokens.$break-m) {
+ [data-collection-type='list'][data-collection-featured='true'] & {
+ flex: 1 0 50%;
+ margin-inline-start: auto;
+ margin-inline-end: auto;
+ }
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ [data-collection-type='list'][data-collection-featured='true'] & {
+ flex: 0 1 71%;
+ margin-inline-start: auto;
+ margin-inline-end: auto;
+ }
+
+ [data-collection-source='profile'][data-collection-type='list'][data-collection-featured='false']
+ & {
+ flex-basis: 90%;
+ }
+
+ [data-collection-source='profile'][data-collection-type='list'][data-collection-featured='true']
+ & {
+ flex-basis: 85%;
+ }
+ }
+}
+
+.reference-card__overline {
+ @include tokens.body-s;
+
+ margin-bottom: var(--size-spacing-3);
+ color: var(--color-gray-500);
+ font-variant-caps: small-caps;
+ font-variant-numeric: oldstyle-nums;
+ text-transform: lowercase;
+ letter-spacing: 0.5px;
+
+ [data-collection-type='single'] & {
+ color: var(--color-card-single-text);
+ }
+}
+
+.reference-card__heading {
+ [data-collection-featured='false'] & {
+ @include tokens.h5-yale-new;
+
+ font-weight: var(--font-weights-yalenew-bold);
+ }
+
+ [data-collection-type='single'] & {
+ --color-link-base: var(--color-basic-white);
+ --color-link-hover: var(--color-basic-white);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+
+ @include tokens.h3-yale-new;
+
+ font-weight: var(--font-weights-yalenew-bold);
+
+ // Override hover link color since slot 2 could cause contrast issues
+ // with the darker background.
+ & .reference-card__heading-link {
+ --color-link-hover: var(--color-link-hover);
+ }
+ }
+
+ [data-collection-type='grid'][data-collection-featured='true'] & {
+ @include tokens.h4-yale-new;
+
+ font-weight: var(--font-weights-yalenew-bold);
+ }
+
+ [data-collection-type='list'][data-collection-featured='true'] & {
+ @include tokens.h3-yale-new;
+
+ font-weight: var(--font-weights-yalenew-bold);
+ }
+
+ [data-collection-type='condensed'][data-collection-featured='true'] & {
+ @include tokens.h4-yale-new;
+
+ font-weight: var(--font-weights-yalenew-bold);
+ }
+}
+
+.reference-card__subheading {
+ @include tokens.body-default-condensed;
+
+ display: flex;
+ flex-wrap: wrap;
+ margin-top: var(--size-spacing-3);
+
+ > *:not(:first-child) {
+ margin-left: var(--size-spacing-5);
+ padding-left: var(--size-spacing-5);
+ position: relative;
+
+ &::before {
+ position: absolute;
+ content: '|';
+ left: -0.225rem;
+ }
+ }
+}
+
+.reference-card__snippet {
+ margin-top: var(--size-spacing-3);
+
+ [data-collection-featured='false'] & {
+ @include tokens.body-default-condensed;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/event/_yds-event-format.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/event/_yds-event-format.twig
new file mode 100644
index 000000000..d81eb4b48
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/event/_yds-event-format.twig
@@ -0,0 +1,5 @@
+{% if format.1 -%}
+ Hybrid
+{%- else %}
+ {{ format.0|default(format) }}
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/_card--examples.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/_card--examples.twig
new file mode 100644
index 000000000..76b48e992
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/_card--examples.twig
@@ -0,0 +1,78 @@
+{% set reference_card__date__formatted %}
+ {% set date_time__format = card_collection__source_type == 'post' ? 'date' %}
+ {% include "@atoms/date-time/yds-date-time.twig" with {
+ date_time__start: reference_card__date,
+ } %}
+{% endset %}
+
+{% set reference_card__time__formatted %}
+ {% include "@atoms/date-time/yds-date-time.twig" with {
+ date_time__start: reference_card__date,
+ date_time__format: 'time',
+ } %}
+{% endset %}
+
+{# Post Card #}
+{% if card_collection__source_type == 'post' %}
+ {% set reference_card__overline = reference_card__date__formatted %}
+ {# If post, list, and not freatured, hide snippet. #}
+ {% if card_collection__type == 'list' and card_collection__featured == 'false' %}
+ {% set reference_card__snippet = null %}
+ {% endif %}
+
+ {# If post, and condensed, hide snippet and set image to false. #}
+ {% if card_collection__type == 'condensed' %}
+ {% set reference_card__snippet = null %}
+ {% set reference_card__image = 'false' %}
+ {% endif %}
+
+{# Profile Card #}
+{% elseif card_collection__source_type == 'profile' %}
+ {# If post, list, and not freatured, hide snippet. #}
+ {% if card_collection__type == 'list' and card_collection__featured == 'false' %}
+ {% set reference_card__subheading = null %}
+ {% endif %}
+
+ {# If profile, and condensed, hide snippet and set image to false. #}
+ {% if card_collection__type == 'condensed' %}
+ {% set reference_card__image = 'false' %}
+ {% set reference_card__snippet = null %}
+ {% endif %}
+
+{# Event Card #}
+{% elseif card_collection__source_type == 'event' %}
+ {# If a format is provided, put it in the overline #}
+ {% if format %}
+ {% set reference_card__overline %}
+ {% include "@molecules/cards/reference-card/event/_yds-event-format.twig" %}
+ {% endset %}
+ {% endif %}
+ {# If event and grid put the date in the subheading. #}
+ {% if card_collection__type == 'grid' %}
+ {% set reference_card__subheading %}
+ {{ reference_card__date__formatted }}
+ {% endset %}
+ {# If event, grid, and not featured, hide snippet. #}
+ {% if card_collection__featured == 'false' %}
+ {% set reference_card__snippet = null %}
+ {% endif %}
+ {# If event, and condensed, hide snippet and set image to false. #}
+ {% elseif card_collection__type == 'condensed' %}
+ {% set reference_card__overline = null %}
+ {% set reference_card__snippet = null %}
+ {% set reference_card__image = 'false' %}
+ {% set format %}
+ {{ format }}
+ {% endset %}
+ {% set reference_card__subheading = reference_card__date__formatted ~ reference_card__time__formatted ~ format %}
+ {% else %}
+ {# If event and list put the date and time in the subheading. #}
+ {% set reference_card__subheading = reference_card__date__formatted ~ reference_card__time__formatted %}
+ {% endif %}
+{% endif %}
+
+{% if card_collection__source_type == 'directory-listing' %}
+ {% include "@molecules/cards/directory-listing-card/yds-directory-listing-card.twig" %}
+{% else %}
+ {% include "@molecules/cards/reference-card/yds-reference-card.twig" %}
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/event-card.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/event-card.yml
new file mode 100644
index 000000000..093ee6fcd
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/event-card.yml
@@ -0,0 +1,5 @@
+reference_card__heading: BINYA! A celebration of the legacy of Binyavanga Wainaina at Yale
+reference_card__snippet: A panel celebrating the legacy of author Binyavanga Wainaina.
+reference_card__url: 'https://google.com/download.pdf'
+reference_card__date: 2022-03-30 13:00
+reference_card__format: 'Online'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/post-card.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/post-card.yml
new file mode 100644
index 000000000..da34f9210
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/post-card.yml
@@ -0,0 +1,4 @@
+reference_card__date: 2022-03-30 13:00
+reference_card__heading: Wu Tsai Institute postdocs bridge disciplines in the study of cognition
+reference_card__snippet: The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.
+reference_card__url: 'https://google.com'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/profile-card.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/profile-card.yml
new file mode 100644
index 000000000..18cc637de
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/examples/profile-card.yml
@@ -0,0 +1,4 @@
+reference_card__heading: Person Namertone
+reference_card__subheading: Professional Title and Professor of Subject
+reference_card__snippet: Subtitle/Lede
+reference_card__url: '#'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/reference-card.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/reference-card.stories.js
new file mode 100644
index 000000000..a7c7d3632
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/reference-card.stories.js
@@ -0,0 +1,137 @@
+import referenceCardTwig from './examples/_card--examples.twig';
+
+import referenceCardData from './examples/post-card.yml';
+import referenceProfileCardData from './examples/profile-card.yml';
+import imageData from '../../../01-atoms/images/image/image.yml';
+
+import './yds-reference-card';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Cards',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: referenceCardData.reference_card__heading,
+ },
+ snippet: {
+ name: 'Snippet',
+ type: 'string',
+ defaultValue: referenceCardData.reference_card__snippet,
+ },
+ collectionType: {
+ name: 'Collection Type',
+ type: 'select',
+ options: ['grid', 'list', 'condensed', 'single'],
+ defaultValue: 'grid',
+ },
+ featured: {
+ name: 'Featured',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ withImage: {
+ name: 'With Image',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ },
+};
+
+export const PostCard = ({
+ date,
+ heading,
+ snippet,
+ collectionType,
+ featured,
+ withImage,
+}) => `
+
+
+
+ ${referenceCardTwig({
+ card_collection__source_type: 'post',
+ card_collection__type: collectionType,
+ ...imageData.responsive_images['3x2'],
+ reference_card__date: date,
+ reference_card__heading: heading,
+ reference_card__snippet: snippet,
+ reference_card__featured: featured ? 'true' : 'false',
+ reference_card__image: withImage ? 'true' : 'false',
+ reference_card__url: referenceCardData.reference_card__url,
+ })}
+
+
+
+`;
+PostCard.argTypes = {
+ date: {
+ name: 'Date',
+ type: 'string',
+ defaultValue: referenceCardData.reference_card__date,
+ },
+};
+
+export const EventCard = ({
+ format,
+ heading,
+ snippet,
+ collectionType,
+ featured,
+ withImage,
+}) => `
+
+
+
+ ${referenceCardTwig({
+ card_collection__source_type: 'event',
+ card_collection__type: collectionType,
+ ...imageData.responsive_images['3x2'],
+ format,
+ reference_card__heading: heading,
+ reference_card__snippet: snippet,
+ reference_card__featured: featured ? 'true' : 'false',
+ reference_card__image: withImage ? 'true' : 'false',
+ reference_card__url: referenceCardData.reference_card__url,
+ })}
+
+
+
+`;
+EventCard.argTypes = {
+ format: {
+ name: 'Format',
+ control: 'check',
+ options: ['In-person', 'Online'],
+ defaultValue: 'In-person',
+ },
+};
+
+export const ProfileCard = ({ collectionType, featured, withImage }) => `
+
+
+
+ ${referenceCardTwig({
+ card_collection__source_type: 'profile',
+ card_collection__type: collectionType,
+ ...imageData.responsive_images['1x1'],
+ reference_card__featured: featured ? 'true' : 'false',
+ reference_card__image: withImage ? 'true' : 'false',
+ reference_card__heading:
+ referenceProfileCardData.reference_card__heading,
+ reference_card__subheading:
+ referenceProfileCardData.reference_card__subheading,
+ reference_card__snippet:
+ referenceProfileCardData.reference_card__snippet,
+ reference_card__url: referenceProfileCardData.reference_card__url,
+ })}
+
+
+
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/yds-reference-card.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/yds-reference-card.js
new file mode 100644
index 000000000..07ce94d4f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/yds-reference-card.js
@@ -0,0 +1,36 @@
+Drupal.behaviors.referenceCard = {
+ attach(context) {
+ // Inspiration and reasoning for this JavaScript can be found in the Cards
+ // chapter of the book linked below:
+ // https://inclusive-components.design/cards/#theredundantclickevent
+ // Selectors
+ const referenceCards = context.querySelectorAll('.reference-card');
+
+ referenceCards.forEach((referenceCard) => {
+ const card = referenceCard;
+ const link = card.querySelector('.reference-card__heading-link');
+
+ // If the card has a link, make the whole card clickable. However, allow
+ // users to select text by only triggering the link if the "click up" is
+ // less than 200ms from the "click down".
+ if (link) {
+ let down;
+ let up;
+
+ card.style.cursor = 'pointer';
+ card.onmousedown = () => {
+ // Calculate when the "click" starts.
+ down = +new Date();
+ };
+ card.onmouseup = () => {
+ // Calculate when the "click" ends.
+ up = +new Date();
+ // If the click "duration" is less than 200ms, trigger a click.
+ if (up - down < 200) {
+ link.click();
+ }
+ };
+ }
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/yds-reference-card.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/yds-reference-card.twig
new file mode 100644
index 000000000..c67756441
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/cards/reference-card/yds-reference-card.twig
@@ -0,0 +1,62 @@
+{#
+ # Available Props:
+ # - reference_card__image: boolean used to evaluate whether or not to show the image
+ #
+ # Available Variables:
+ # - reference_card__overline
+ # - reference_card__heading
+ # - reference_card__subheading
+ # - reference_card__url
+ # - reference_card__snippet
+ #
+ # Available Blocks:
+ # - reference_card__image
+ #}
+
+{% set reference_card__base_class = 'reference-card' %}
+{% set reference_card__image = reference_card__image|default('true') %}
+
+{# If stats__item__attributes is not defined, set it to an empty object by default #}
+{% set reference_card__attributes = {
+ 'data-component-has-image': reference_card__image,
+ class: bem(reference_card__base_class, reference_card__modifiers),
+} %}
+
+
+
+ {% if reference_card__overline %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'overline',
+ text__blockname: reference_card__base_class,
+ text__content: reference_card__overline,
+ } %}
+ {% endif %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: reference_card__heading_level|default('3'),
+ heading__blockname: reference_card__base_class,
+ heading: reference_card__heading,
+ heading__url: reference_card__url,
+ } %}
+ {% if reference_card__subheading %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__blockname: reference_card__base_class,
+ text__base_class: 'subheading',
+ text__content: reference_card__subheading,
+ } %}
+ {% endif %}
+ {% if reference_card__snippet %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'snippet',
+ text__blockname: reference_card__base_class,
+ text__content: reference_card__snippet,
+ } %}
+ {% endif %}
+
+ {% if reference_card__image == 'true' %}
+
+ {% block reference_card__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+
+ {% endif %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/_yds-content-spotlight-portrait.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/_yds-content-spotlight-portrait.scss
new file mode 100644
index 000000000..4c7529ce7
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/_yds-content-spotlight-portrait.scss
@@ -0,0 +1,220 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+@use '../../00-tokens/functions/map';
+
+// get global themes
+$global-content-spotlight-port-themes: map.deep-get(
+ tokens.$tokens,
+ 'global-themes'
+);
+$component-content-spotlight-port-themes: map.deep-get(
+ tokens.$tokens,
+ 'component-themes'
+);
+
+// Content Spotlight
+.content-spotlight-portrait {
+ // used by a element for animated hover underline
+ --color-text-shadow: var(--color-basic-white);
+
+ // if we're not using a component theme, add top and bottom margin
+ // Or if the spotlight is the only spotlight on the page
+ &[data-component-theme='default'],
+ &[data-spotlights-position='first-and-last'] {
+ @include tokens.spacing-page-section;
+ }
+
+ // We're using JavaScript to evaluate the last and first spotlights in a group of spotlights
+ &[data-spotlights-position='first'] {
+ margin-top: var(--size-spacing-10);
+ }
+
+ &[data-spotlights-position='last'] {
+ margin-bottom: var(--size-spacing-10);
+ }
+
+ // If we're using a component theme, add padding and set background-color and color;
+ &:not([data-component-theme='default']) {
+ padding-block-start: var(--size-spacing-10);
+ padding-block-end: var(--size-spacing-10);
+ background-color: var(--color-background);
+ color: var(--color-text);
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-content-spotlight-port-themes {
+ &[data-component-theme='#{$theme}'] {
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--component-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--component-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--component-themes-#{$theme}-slot-eight);
+ --color-spotlight-text-shadow: var(--color-background);
+
+ // override text-shadow color for links in component themes
+ .link,
+ .content-spotlight-portrait__text {
+ --color-text-shadow: var(--color-spotlight-text-shadow);
+ --color-link-hover: var(--color-link-hover);
+ }
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-content-spotlight-port-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-background: var(--color-slot-one);
+ --color-text: var(--color-slot-eight);
+ --color-heading: var(--color-slot-eight);
+ --color-link-base: var(--color-slot-eight);
+ --color-link-hover: var(--color-slot-eight);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+
+ &[data-component-theme='two'] {
+ --color-background: var(--color-slot-four);
+ --color-text: var(--color-slot-seven);
+ --color-heading: var(--color-slot-seven);
+ --color-link-base: var(--color-slot-seven);
+ --color-link-hover: var(--color-slot-seven);
+ }
+
+ &[data-component-theme='three'] {
+ --color-background: var(--color-slot-five);
+ --color-text: var(--color-slot-eight);
+ --color-heading: var(--color-slot-eight);
+ --color-link-base: var(--color-slot-eight);
+ --color-link-hover: var(--color-slot-eight);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+}
+
+.content-spotlight-portrait__inner {
+ display: flex;
+ flex-flow: column nowrap;
+ gap: var(--size-spacing-6);
+
+ @media (min-width: tokens.$break-mobile) {
+ flex-flow: row nowrap;
+ gap: var(--size-spacing-8);
+ align-items: center;
+
+ // When offset, increase the
+ [data-image-style='offset'] & {
+ --component-width: calc(
+ var(--size-component-layout-width-site) + var(--size-spacing-10)
+ );
+ }
+ }
+}
+
+.content-spotlight-portrait__image {
+ @media (max-width: tokens.$break-mobile-max) {
+ max-width: 50%;
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ margin-top: var(--size-spacing-2);
+ width: 100%;
+ max-width: 20%;
+
+ // Layout Options
+ [data-image-position='image-left'] & {
+ order: 1;
+ }
+
+ [data-image-position='image-right'] & {
+ order: 2;
+ }
+ }
+}
+
+.content-spotlight-portrait__content {
+ @media (max-width: tokens.$break-mobile-max) {
+ order: 1;
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ width: 100%;
+ max-width: 80%;
+
+ // Layout Options
+ [data-image-position='image-left'] & {
+ order: 2;
+ }
+
+ [data-image-position='image-right'] & {
+ order: 1;
+ }
+
+ // if offset, balance out the image offset with a margin on content
+ [data-image-style='offset'][data-image-position='image-right'] & {
+ margin-inline-start: var(--size-spacing-8);
+ }
+
+ [data-image-style='offset'][data-image-position='image-left'] & {
+ margin-inline-end: var(--size-spacing-8);
+ }
+ }
+
+ > *:not(:last-child) {
+ margin-bottom: var(--size-spacing-5);
+ }
+}
+
+.content-spotlight-portrait__overline {
+ @include tokens.h6-mallory-compact-book;
+
+ color: var(--color-text);
+}
+
+.content-spotlight-portrait__heading {
+ @include tokens.h3-yale-new;
+}
+
+.content-spotlight-portrait__subheading {
+ @include tokens.h5-mallory-compact-book;
+
+ color: var(--color-text);
+}
+
+.content-spotlight-portrait__text {
+ color: var(--color-text);
+
+ a {
+ @include atoms.link;
+ }
+
+ > *:last-child {
+ margin-bottom: 0;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlight-portrait.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlight-portrait.stories.js
new file mode 100644
index 000000000..1b961142f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlight-portrait.stories.js
@@ -0,0 +1,95 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+// Twig templates
+import contentSpotlightPortraitTwig from './yds-content-spotlight-portrait.twig';
+
+// Data files
+import imageData from '../../01-atoms/images/image/image.yml';
+import contentSpotlightPortraitData from './content-spotlight-portrait.yml';
+
+import './content-spotlights';
+
+const colorPairingsData = Object.keys(tokens['component-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Content Spotlight',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ componentTheme: {
+ name: 'Component Theme (dial)',
+ type: 'select',
+ options: colorPairingsData,
+ defaultValue: 'default',
+ },
+ position: {
+ name: 'Image Position',
+ type: 'select',
+ options: ['image-left', 'image-right'],
+ defaultValue: 'image-left',
+ },
+ imageStyle: {
+ name: 'Image Style',
+ type: 'select',
+ options: ['inline', 'offset'],
+ defaultValue: 'inline',
+ },
+ overline: {
+ name: 'Overline (optional)',
+ type: 'string',
+ defaultValue: null,
+ },
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue:
+ contentSpotlightPortraitData.content_spotlight_portrait__heading,
+ },
+ subheading: {
+ name: 'Subheading (optional)',
+ type: 'string',
+ defaultValue:
+ contentSpotlightPortraitData.content_spotlight_portrait__subheading,
+ },
+ text: {
+ name: 'Text',
+ type: 'string',
+ defaultValue:
+ contentSpotlightPortraitData.content_spotlight_portrait__text,
+ },
+ linkContent: {
+ name: 'Link Content (optional)',
+ type: 'string',
+ defaultValue:
+ contentSpotlightPortraitData.content_spotlight_portrait__link__content,
+ },
+ },
+};
+
+export const ContentSpotlightPortrait = ({
+ position,
+ overline,
+ heading,
+ subheading,
+ text,
+ linkContent,
+ componentTheme,
+ imageStyle,
+}) =>
+ contentSpotlightPortraitTwig({
+ ...imageData.responsive_images['2x3'],
+ content_spotlight_portrait__theme: componentTheme,
+ content_spotlight_portrait__position: position,
+ content_spotlight_portrait__style: imageStyle,
+ content_spotlight_portrait__overline: overline,
+ content_spotlight_portrait__heading: heading,
+ content_spotlight_portrait__subheading: subheading,
+ content_spotlight_portrait__text: text,
+ content_spotlight_portrait__link__content: linkContent,
+ content_spotlight_portrait__link__url:
+ contentSpotlightPortraitData.content_spotlight_portrait__link__url,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlight-portrait.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlight-portrait.yml
new file mode 100644
index 000000000..f736eedaf
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlight-portrait.yml
@@ -0,0 +1,6 @@
+content_spotlight_portrait__overline: 'By Charlyn Paradis'
+content_spotlight_portrait__heading: 'Admitted Students Envision Themselves as Yale Chemists During Visiting Days'
+content_spotlight_portrait__subheading: 'Submitted February 28, 2022'
+content_spotlight_portrait__text: 'Prospective students joined the Yale Chemistry community on Feb. 10 – 11 to learn about the research program and campus life at the much anticipated ‘Visiting Days’ event.
'
+content_spotlight_portrait__link__content: 'Visiting Days'
+content_spotlight_portrait__link__url: '#'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlights.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlights.js
new file mode 100644
index 000000000..832b2221c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/content-spotlights.js
@@ -0,0 +1,35 @@
+Drupal.behaviors.contentSpotlights = {
+ attach(context) {
+ // Define the selectors to check and store them in a variable
+ const selectorsToCheck =
+ '.text-with-image, .content-spotlight-portrait, .quote-callout, .facts-and-figures__group, .tiles';
+ // Select all elements with class "text-with-image" or "content-spotlight-portrait"
+ const contentSpotlights = context.querySelectorAll(selectorsToCheck);
+
+ // Iterate over each element
+ contentSpotlights.forEach((element) => {
+ // Check if the current element is the first element in a group
+ const isFirst =
+ !element.previousElementSibling ||
+ !element.previousElementSibling.matches(selectorsToCheck);
+ // Check if the current element is the last element in a group
+ const isLast =
+ !element.nextElementSibling ||
+ !element.nextElementSibling.matches(selectorsToCheck);
+
+ // Sets data-spotlights-position to "first" if the current element is the first element in a group
+ if (isFirst) {
+ element.setAttribute('data-spotlights-position', 'first');
+ }
+
+ // Sets data-spotlights-position to "last" if the current element is the first element in a group
+ if (isLast) {
+ element.setAttribute('data-spotlights-position', 'last');
+ }
+
+ if (isFirst && isLast) {
+ element.setAttribute('data-spotlights-position', 'first-and-last');
+ }
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig
new file mode 100644
index 000000000..551339361
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig
@@ -0,0 +1,79 @@
+{#
+ # Available Props:
+ # - content_spotlight_portrait__width: feature (default) or highlight
+ # - content_spotlight_portrait__position: image-left (default) or image-right
+ # - content_spotlight_portrait__theme: default (no theme), one, two, three
+ #
+ # Available variables:
+ # - content_spotlight_portrait__overline (optional)
+ # - content_spotlight_portrait__heading
+ # - content_spotlight_portrait__subheading (optional)
+ # - content_spotlight_portrait__text
+ # - content_spotlight_portrait__link__content (optional)
+ # - content_spotlight_portrait__link__url (optional)
+ #
+ # Available blocks:
+ # - content_spotlight_portrait__image
+ #}
+
+{% set content_spotlight_portrait__base_class = 'content-spotlight-portrait' %}
+
+{% set content_spotlight_portrait__attributes = {
+ 'data-image-position': content_spotlight_portrait__position|default('image-left'),
+ 'data-component-width': content_spotlight_portrait__width|default('site'),
+ 'data-component-theme': content_spotlight_portrait__theme|default('default'),
+ 'data-image-style': content_spotlight_portrait__style|default('inline'),
+ class: bem(content_spotlight_portrait__base_class)
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {# Content #}
+
+ {# Overline #}
+ {% if content_spotlight_portrait__overline %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__content: content_spotlight_portrait__overline,
+ text__base_class: 'overline',
+ text__blockname: content_spotlight_portrait__base_class,
+ } %}
+ {% endif %}
+ {# Heading #}
+ {% if content_spotlight_portrait__heading %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading: content_spotlight_portrait__heading,
+ heading__level: '2',
+ heading__blockname: content_spotlight_portrait__base_class,
+ } %}
+ {% endif %}
+ {# Subheading #}
+ {% if content_spotlight_portrait__subheading %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__content: content_spotlight_portrait__subheading,
+ text__base_class: 'subheading',
+ text__blockname: content_spotlight_portrait__base_class,
+ } %}
+ {% endif %}
+ {# Text #}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__content: content_spotlight_portrait__text,
+ text__blockname: content_spotlight_portrait__base_class,
+ } %}
+ {# Link #}
+ {% if content_spotlight_portrait__link__content and content_spotlight_portrait__link__url %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: content_spotlight_portrait__link__content,
+ link__url: content_spotlight_portrait__link__url,
+ } %}
+ {% endif %}
+
+ {# Image #}
+
+ {% block content_spotlight_portrait__image %}
+ {% include "@atoms/images/image/yds-image.twig" %}
+ {% endblock %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/_yds-embed.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/_yds-embed.scss
new file mode 100644
index 000000000..e9e547b4b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/_yds-embed.scss
@@ -0,0 +1,41 @@
+@use '../../00-tokens/tokens';
+
+.embed__inner {
+ @include tokens.spacing-page-section;
+
+ iframe {
+ display: block;
+ border: var(--border-thickness-2) solid;
+ }
+}
+
+$heights: (
+ 'form': 90vh,
+ 'audio': 130px,
+ 'unknown': 70vh,
+);
+
+@each $type, $height in $heights {
+ .embed {
+ iframe[data-embed-type='#{$type}'] {
+ height: $height;
+ }
+ }
+}
+
+// Video embeds were being cut off by regular vh heights,
+// so we're using a percentage-based padding-bottom hack instead.
+.embed__inner:has(iframe[data-embed-type='video']) {
+ position: relative;
+ padding-bottom: 56.25%; // 16:9 aspect ratio
+ height: 0;
+ overflow: visible;
+
+ & iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/embed.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/embed.stories.js
new file mode 100644
index 000000000..6bc84ca3c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/embed.stories.js
@@ -0,0 +1,83 @@
+import embedTwig from './yds-embed.twig';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Embed',
+ argTypes: {
+ width: {
+ name: 'Width',
+ type: 'select',
+ options: ['max', 'site', 'hightlight', 'content'],
+ defaultValue: 'site',
+ },
+ type: {
+ name: 'Type',
+ options: ['form', 'audio'],
+ type: 'select',
+ defaultValue: 'form',
+ },
+ loading: {
+ name: 'Loading',
+ options: ['lazy', 'eager'],
+ type: 'select',
+ defaultValue: 'lazy',
+ },
+ },
+};
+
+export const EmbedQualtrics = ({ width, type, loading }) =>
+ embedTwig({
+ embed__src:
+ 'https://yalesurvey.ca1.qualtrics.com/jfe/form/SV_cDezt2JVsNok77o',
+ embed__title: 'Example Qualtrics Form',
+ embed__width: width,
+ embed__height: '100%',
+ embed__type: type,
+ embed__loading: loading,
+ });
+
+export const EmbedSoundCloud = ({ width, type, loading }) =>
+ embedTwig({
+ embed__src:
+ 'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/320687463',
+ embed__title: 'Example SoundCloud Track',
+ embed__width: width,
+ embed__height: '100%',
+ embed__type: type,
+ embed__loading: loading,
+ });
+
+EmbedSoundCloud.args = {
+ type: 'audio',
+};
+
+export const EmbedInstagram = () => {
+ return ` `;
+};
+
+export const EmbedX = () => {
+ return ` `;
+};
+
+export const EmbedPowerBI = ({ width, type, loading }) =>
+ embedTwig({
+ embed__src:
+ 'https://app.powerbi.com/view?r=eyJrIjoiYzQ1ODA0ZjEtZjc5YS00OTgyLWIzOTItNmJmNDY2YmRiODQ2IiwidCI6ImRkOGNiZWJiLTIxMzktNGRmOC1iNDExLTRlM2U4N2FiZWI1YyIsImMiOjF9&pageName=ReportSection2ac2649f17189885d376',
+ embed__width: width,
+ embed__height: '100%',
+ embed__loading: loading,
+ embed__type: type,
+ });
+
+export const EmbedMicrosoftForms = ({ width, type, loading }) =>
+ embedTwig({
+ embed__title: 'Example Microsoft Form',
+ embed__src:
+ 'https://forms.office.com/Pages/ResponsePage.aspx?id=u76M3Tkh-E20EU4-h6vrXJ-OMhrDFtBEifIUjjt2g_xURUVBU1IyUVlTVFFFNjJQQzJXM1pNMVozVi4u&embed=true',
+ embed__width: width,
+ embed__height: '100%',
+ embed__loading: loading,
+ embed__type: type,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/yds-embed.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/yds-embed.twig
new file mode 100644
index 000000000..8fca33749
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/embed/yds-embed.twig
@@ -0,0 +1,31 @@
+{#
+ # Available Variables:
+ # - embed__src
+ # - embed__title
+ # - embed__width: default('site')
+ # - embed__type: 'form', 'audio', default('form')
+ # - embed__loading: 'lazy', 'eager', default('lazy')
+ # - embed__allowfullscreen: TRUE, FALSE, default(FALSE)
+ #}
+
+{% set embed__base_class = 'embed' %}
+{% set embed__width = embed__width|default('site') %}
+{% set embed__type = embed__type|default('form') %}
+{% set embed__loading = embed__loading|default('lazy') %}
+{% set embed__allowfullscreen = embed__allowfullscreen|default(FALSE) %}
+
+{% set embed__attributes = {
+ 'data-component-width': embed__width,
+ 'class': bem(embed__base_class),
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {% block embed__block %}
+
+ {% endblock %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/_yds-facts-and-figures.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/_yds-facts-and-figures.scss
new file mode 100644
index 000000000..237c8665c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/_yds-facts-and-figures.scss
@@ -0,0 +1,152 @@
+@use '../../00-tokens/tokens';
+@use '../../00-tokens/functions/map';
+
+$global-facts-and-figures-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$facts-and-figures-component-themes: map.deep-get(
+ tokens.$tokens,
+ 'component-themes'
+);
+
+.facts-and-figures {
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: center;
+ width: 100%;
+
+ --eyebrow-width: var(--size-spacing-11);
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $facts-and-figures-component-themes {
+ &[data-component-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--component-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--component-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--component-themes-#{$theme}-slot-eight);
+ --color-facts-and-figures-theme: var(--color-slot-one);
+ --color-facts-and-figures-content: var(--color-slot-eight);
+
+ background-color: var(--color-facts-and-figures-theme);
+ color: var(--color-facts-and-figures-content);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-facts-and-figures-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-facts-and-figures-theme: var(--color-slot-one);
+ --color-facts-and-figures-content: var(--color-slot-eight);
+ }
+
+ &[data-component-theme='two'] {
+ --color-facts-and-figures-theme: var(--color-slot-two);
+ --color-facts-and-figures-content: var(--color-slot-eight);
+ }
+
+ &[data-component-theme='three'] {
+ --color-facts-and-figures-theme: var(--color-slot-three);
+ --color-facts-and-figures-content: var(--color-slot-seven);
+ }
+
+ &__inner {
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: flex-start;
+ justify-content: flex-start;
+ padding: var(--size-spacing-8) 0;
+ height: 100%;
+
+ [data-component-alignment='left'] & {
+ text-align: left;
+ }
+
+ [data-component-alignment='center'] & {
+ text-align: center;
+ }
+
+ // if we're using a single facts-and-figures, add padding to the facts-and-figures item inner
+ [data-facts-and-figures-collection-type='single'] & {
+ padding: var(--size-spacing-8);
+ }
+ }
+}
+
+.facts-and-figures__stat {
+ @include tokens.h3-yale-new;
+
+ width: 100%;
+ position: relative;
+
+ // change font-variant-numeric to normal from the default of oldstyle-nums in the h3-yale-new mixin
+ [data-facts-and-figures-font-style='normal'] & {
+ font-variant-numeric: normal;
+ }
+
+ // add eyebrow above facts-and-figures
+ [data-facts-and-figures-style='basic'] & {
+ &::before {
+ content: '';
+ display: block;
+ position: relative;
+ width: var(--eyebrow-width);
+ border-bottom: var(--size-spacing-1) solid
+ var(--color-facts-and-figures-content);
+ margin-bottom: var(--size-spacing-4);
+ }
+ }
+
+ // set eyebrow width var to 100% if facts-and-figures is centered
+ [data-component-alignment='center'] & {
+ --eyebrow-width: 100%;
+ }
+}
+
+.facts-and-figures__icon {
+ align-self: flex-start;
+ margin-bottom: var(--size-spacing-2);
+
+ [data-component-alignment='center'] & {
+ align-self: center;
+ }
+}
+
+// svg
+.facts-and-figures__facts-and-figures-icon {
+ max-width: var(--size-spacing-9); // max-width 48px
+ max-height: var(--size-spacing-9); // max-height 48px
+ fill: var(--color-facts-and-figures-content);
+}
+
+.facts-and-figures__content {
+ @include tokens.body-default;
+
+ width: 100%;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/facts-and-figures.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/facts-and-figures.stories.js
new file mode 100644
index 000000000..1dde6a909
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/facts-and-figures.stories.js
@@ -0,0 +1,102 @@
+import factsAndFiguresTwig from './yds-facts-and-figures.twig';
+
+import factsAndFiguresData from './facts-and-figures.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Facts and Figures',
+ argTypes: {
+ factsAndFigures: {
+ name: 'Fact or Figure',
+ type: 'string',
+ defaultValue: factsAndFiguresData.facts_and_figures__stat,
+ },
+ content: {
+ name: 'Content',
+ type: 'string',
+ defaultValue: factsAndFiguresData.facts_and_figures__content,
+ },
+ presentationStyle: {
+ name: 'Presentation Style',
+ options: ['basic', 'icon-only'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+ fontStyle: {
+ name: 'Font Style',
+ options: ['normal', 'numeric-oldstyle'],
+ type: 'select',
+ defaultValue: 'normal',
+ },
+ alignment: {
+ name: 'Alignment',
+ options: ['left', 'center'],
+ type: 'select',
+ defaultValue: 'left',
+ },
+ themeColor: {
+ name: 'Component Theme (dial)',
+ options: ['one', 'two', 'three'],
+ type: 'select',
+ defaultValue: 'one',
+ },
+ factsAndFiguresIcon: {
+ name: 'factsAndFigures Icon',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ },
+};
+
+export const FactsAndFigures = ({
+ factsAndFigures,
+ content,
+ presentationStyle,
+ fontStyle,
+ alignment,
+ themeColor,
+ factsAndFiguresIcon,
+}) => `
+
+
+
+
Playground
+
Use the StoryBook controls to see the facts and figures below implement the available variations.
+
+
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/facts-and-figures.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/facts-and-figures.yml
new file mode 100644
index 000000000..31246a152
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/facts-and-figures.yml
@@ -0,0 +1,2 @@
+facts_and_figures__stat: $52,000
+facts_and_figures__content: Annual grant of Undergraduate students
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/yds-facts-and-figures.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/yds-facts-and-figures.twig
new file mode 100644
index 000000000..f7cfabbac
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/facts-and-figures/yds-facts-and-figures.twig
@@ -0,0 +1,50 @@
+{#
+ # Available Props:
+ # - facts_and_figures__presentation_style: basic, with-icon, icon-only
+ # - facts_and_figures__font_style: numeric-oldstyle, normal
+ # - facts_and_figures__has_icon: true, false
+ # - facts_and_figures__icon_name: string
+ # - facts_and_figures__alignment: left, center
+ #
+ # Available Variables:
+ # - facts_and_figures__facts_and_figures (required)
+ # - facts_and_figures__content
+ #}
+
+{% set facts_and_figures__base_class = 'facts-and-figures' %}
+{% set facts_and_figures__presentation_style = facts_and_figures__presentation_style|default('basic') %}
+{% set facts_and_figures__font_style = facts_and_figures__font_style|default('numeric-oldstyle') %}
+
+{# If facts_and_figures__attributes is not defined, set it to an empty object by default #}
+{% set facts_and_figures__attributes = facts_and_figures__attributes|default({}) %}
+
+{% set facts_and_figures__attributes = facts_and_figures__attributes|merge({
+ 'data-facts-and-figures-style': facts_and_figures__presentation_style,
+ 'data-facts-and-figures-font-style': facts_and_figures__font_style,
+ 'data-facts-and-figures-has-icon': facts_and_figures__has_icon == 'true' ? 'true' : 'false',
+ 'data-component-alignment': facts_and_figures__alignment|default('center'),
+ 'data-component-theme': facts_and_figures__theme|default('one'),
+ class: bem(facts_and_figures__base_class, facts_and_figures__modifiers),
+}) %}
+
+
+
+ {% if facts_and_figures__has_icon == 'true' %}
+ {% block facts_and_figures__icon %}
+
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: facts_and_figures__icon_name|default('sack-dollar-solid'),
+ icon__base_class: 'facts-and-figures-icon',
+ icon__blockname: facts_and_figures__base_class,
+ } %}
+
+ {% endblock %}
+ {% endif %}
+
+ {{ facts_and_figures__stat }}
+
+
+ {{ facts_and_figures__content }}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/_yds-content-image.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/_yds-content-image.scss
new file mode 100644
index 000000000..6bab7cb46
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/_yds-content-image.scss
@@ -0,0 +1,12 @@
+@use '../../00-tokens/tokens';
+
+.content-image {
+ @include tokens.spacing-page-inner;
+
+ &[data-component-alignment='left'] {
+ figure,
+ img {
+ max-width: var(--size-component-layout-width-content);
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/image.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/image.stories.js
new file mode 100644
index 000000000..420f7b367
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/image.stories.js
@@ -0,0 +1,30 @@
+import contentImageTwig from './yds-content-image.twig';
+
+import imageData from '../../01-atoms/images/image/image.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Image',
+ argTypes: {
+ caption: {
+ name: 'Caption',
+ type: 'string',
+ defaultValue: 'This is the caption for the 16:9 image above.',
+ },
+ width: {
+ name: 'Component Width',
+ type: 'select',
+ options: ['content', 'highlight', 'site', 'max'],
+ defaultValue: 'content',
+ },
+ },
+};
+
+export const ContentImage = ({ caption, width }) =>
+ contentImageTwig({
+ ...imageData.responsive_images['16x9'],
+ content_image__caption: caption,
+ content_image__width: width,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/yds-content-image.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/yds-content-image.twig
new file mode 100644
index 000000000..58f03d487
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/image/yds-content-image.twig
@@ -0,0 +1,38 @@
+{#
+ # Available Props:
+ # - content_image__width
+ #
+ # Available Variables:
+ # - content_image__caption
+ #
+ # Available Blocks:
+ # - content_image__image
+ #}
+
+{% set content_image__base_class = 'content-image' %}
+
+{% set content_image__attributes = {
+ 'data-component-width': content_image__width|default('content'),
+ 'data-component-alignment': content_image__alignment|default('center'),
+ 'class': bem(content_image__base_class, content_image__modifiers),
+} %}
+
+{% set content_image__image %}
+ {% block content_image__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+{% endset %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {% embed "@atoms/images/image/yds-image.twig" with {
+ figure__caption: content_image__caption,
+ } %}
+ {% block image__image %}
+ {{ content_image__image }}
+ {% endblock %}
+ {% endembed %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/_yds-link-grid--links.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/_yds-link-grid--links.twig
new file mode 100644
index 000000000..91db8aad6
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/_yds-link-grid--links.twig
@@ -0,0 +1,10 @@
+{% set link_grid__base_class = 'link-grid' %}
+
+
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content:link_grid__link__content|default(link.link_grid__link__content),
+ link__url: link_grid__link__url|default(link.link_grid__link__url),
+ link__blockname: link_grid__base_class,
+ link__style: 'no-underline',
+ }%}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/_yds-link-grid.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/_yds-link-grid.scss
new file mode 100644
index 000000000..d6c5f31bb
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/_yds-link-grid.scss
@@ -0,0 +1,121 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+@use '../../00-tokens/functions/map';
+
+$break-link-grid: tokens.$break-l;
+$break-link-grid-max: $break-link-grid - 0.05;
+
+// get global themes
+$global-link-grid-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$component-link-grid-themes: map.deep-get(tokens.$tokens, 'component-themes');
+
+.link-grid {
+ @include tokens.spacing-page-section($banner-spacing: true);
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-link-grid-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ }
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-link-grid-themes {
+ &[data-component-theme='#{$theme}'] {
+ --color-action: var(--color-link-grid-action);
+ --color-link-grid-border: var(--color-link-grid-action);
+ --color-heading: var(--color-gray-800);
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-link-grid-action: var(--color-slot-one);
+ }
+
+ &[data-component-theme='two'] {
+ --color-link-grid-action: var(--color-slot-three);
+ }
+
+ &[data-component-theme='three'] {
+ --color-link-grid-action: var(--color-slot-five);
+ }
+}
+
+.link-grid__heading {
+ @include tokens.h2-yale-new;
+
+ flex: 1 0 100%;
+ margin-bottom: var(--size-spacing-6);
+}
+
+.link-grid__inner {
+ --color-link-grid-border: var(--color-link-grid-action);
+
+ display: flex;
+ flex-flow: column nowrap;
+ width: 100%;
+ max-width: var(--size-component-layout-width-site);
+ border-color: var(--color-link-grid-border);
+
+ @media (min-width: tokens.$break-m) {
+ flex-flow: row wrap;
+ }
+}
+
+.link-grid__links-column {
+ @include atoms.list-reset;
+
+ width: 100%;
+ border-left: var(--size-thickness-1) solid var(--color-link-grid-border);
+ margin-bottom: var(--size-spacing-7);
+ padding: var(--size-spacing-4) 0;
+
+ // medium = two columns
+ @media (min-width: tokens.$break-m) {
+ flex: 1 1 50%;
+ }
+
+ // large = four columns
+ @media (min-width: $break-link-grid) {
+ flex: 1 1 25%;
+ }
+
+ // first column gets wider border
+ &:first-of-type {
+ border-width: var(--size-thickness-4);
+ }
+}
+
+.link-grid__list-item {
+ padding: 0 var(--size-spacing-6);
+ margin-bottom: var(--size-spacing-6);
+ line-height: 1.2;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+}
+
+.link-grid__link {
+ @include atoms.link;
+
+ text-align: left;
+ font-weight: var(--font-weights-mallory-book);
+ color: var(--color-link-base);
+
+ &:has(> i.fa-icon) {
+ padding-right: var(--size-spacing-4);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/link-grid.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/link-grid.stories.js
new file mode 100644
index 000000000..5f7a932aa
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/link-grid.stories.js
@@ -0,0 +1,28 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+import linkGridTwig from './yds-link-grid.twig';
+
+import linkGridData from './link-grid.yml';
+
+const colorPairingsData = Object.keys(tokens['component-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Link grid',
+ argTypes: {
+ themeColor: {
+ name: 'Component Theme (dial)',
+ type: 'select',
+ options: colorPairingsData,
+ defaultValue: 'one',
+ },
+ },
+};
+
+export const linkGrid = ({ themeColor }) =>
+ linkGridTwig({
+ link_grid__theme: themeColor,
+ ...linkGridData,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/link-grid.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/link-grid.yml
new file mode 100644
index 000000000..7fb93385a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/link-grid.yml
@@ -0,0 +1,41 @@
+link_grid__heading: 'This is a link grid'
+link_grid__links_one:
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is a link'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is another link'
+ - link_grid__link__url: 'https://google.com'
+ link_grid__link__content: 'This is a very long link that will wrap lines'
+ - link_grid__link__url: 'https://google.com/download.pdf'
+ link_grid__link__content: 'Link #4'
+link_grid__links_two:
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is a link in the second column'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is another link, column two'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is a very long link that will wrap lines'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'Link #4 column 2'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'Link #5 column 2'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'Link #6 column 2'
+link_grid__links_three:
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is a link in the third column'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is another link'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is a very long link that will wrap lines'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'Link #4 column #3'
+link_grid__links_four:
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is a link in the fourth column'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is another link in column 4'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'This is a very long link that will wrap lines'
+ - link_grid__link__url: '#'
+ link_grid__link__content: 'Link #4 column #4'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/yds-link-grid.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/yds-link-grid.twig
new file mode 100644
index 000000000..05dff72de
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-grid/yds-link-grid.twig
@@ -0,0 +1,69 @@
+{#
+ # Available Variables:
+ # - link_grid__theme (default is `one`, set as dial on component)
+ # - link_grid__width (default is `site`, not currently set as dial on component)
+ #
+ # Available Blocks
+ # - link_grid__links_one
+ # - link_grid__links_two
+ # - link_grid__links_three
+ # - link_grid__links_four
+#}
+
+{% set link_grid__base_class = 'link-grid' %}
+
+{% set link_column_modifiers = [] %}
+
+{% set link_grid__attributes = {
+ 'class': bem(link_grid__base_class),
+ 'data-component-theme': link_grid__theme|default('one'),
+ 'data-component-width': link_grid__width|default('site'),
+} %}
+
+
+
+ {% if link_grid__heading is not empty %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: link_grid__base_class,
+ heading: link_grid__heading,
+ } %}
+ {% endif %}
+ {% if link_grid__links_one %}
+
+ {% block link_grid__links_one %}
+ {% for link in link_grid__links_one %}
+ {% include "@molecules/link-grid/_yds-link-grid--links.twig" %}
+ {% endfor %}
+ {% endblock %}
+
+ {% endif %}
+ {% if link_grid__links_two %}
+
+ {% block link_grid__links_two %}
+ {% for link in link_grid__links_two %}
+ {% include "@molecules/link-grid/_yds-link-grid--links.twig" %}
+ {% endfor %}
+ {% endblock %}
+
+ {% endif %}
+ {% if link_grid__links_three %}
+
+ {% block link_grid__links_three %}
+ {% for link in link_grid__links_three %}
+ {% include "@molecules/link-grid/_yds-link-grid--links.twig" %}
+ {% endfor %}
+ {% endblock %}
+
+ {% endif %}
+ {% if link_grid__links_four %}
+
+ {% block link_grid__links_four %}
+ {% for link in link_grid__links_four %}
+ {% include "@molecules/link-grid/_yds-link-grid--links.twig" %}
+ {% endfor %}
+ {% endblock %}
+
+ {% endif %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/_yds-link-group--links.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/_yds-link-group--links.twig
new file mode 100644
index 000000000..5195a4ec8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/_yds-link-group--links.twig
@@ -0,0 +1,10 @@
+{% set link_group__base_class = 'link-group' %}
+
+
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content:link_group__link__content|default(link.link_group__link__content),
+ link__url: link_group__link__url|default(link.link_group__link__url),
+ link__blockname: link_group__base_class,
+ link__style: 'no-underline',
+ }%}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/_yds-link-group.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/_yds-link-group.scss
new file mode 100644
index 000000000..f0cc9ffe3
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/_yds-link-group.scss
@@ -0,0 +1,120 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+
+$break-link-group: tokens.$break-m;
+$break-link-group-max: $break-link-group - 0.05;
+
+.link-group {
+ .site-footer__columns-inner & {
+ @media (max-width: $break-link-group-max) {
+ grid-area: top;
+ }
+ }
+}
+
+.link-group__inner {
+ --color-link-group-border: var(--color-gray-700);
+
+ display: flex;
+ flex-wrap: wrap;
+ width: 100%;
+
+ @media (max-width: $break-link-group-max) {
+ display: grid;
+ grid-template:
+ 'header-one'
+ 'links-one'
+ 'header-two'
+ 'links-two'
+ / 1fr;
+ }
+
+ // if used in the footer, set border color to site-footer theme color
+ .site-footer & {
+ --color-link-group-border: var(--color-site-footer-border-color);
+ }
+}
+
+.link-group__text {
+ grid-area: header;
+}
+
+.link-group__heading {
+ @include tokens.h6-mallory-compact-medium;
+
+ border-left: var(--thickness-divider) solid var(--color-link-group-border);
+ padding: 0 var(--size-spacing-6) var(--size-spacing-3);
+ color: var(--color-site-footer-text-color);
+
+ &--one {
+ @media (max-width: $break-link-group-max) {
+ grid-area: header-one;
+ }
+
+ // Needed if only one heading is present. Pushes down the second column.
+ flex: 1 0 100%;
+ }
+
+ &--two {
+ @media (max-width: $break-link-group-max) {
+ grid-area: header-two;
+ }
+ }
+
+ // If two headings, set basis to 50%;
+ &--two-headings {
+ flex: 1 0 50%;
+ }
+}
+
+.link-group__links-column {
+ @include atoms.list-reset;
+
+ width: 100%;
+ border-left: var(--thickness-divider) solid var(--color-link-group-border);
+
+ &--one {
+ @media (max-width: $break-link-group-max) {
+ grid-area: links-one;
+ margin-bottom: var(--size-spacing-8);
+ }
+ }
+
+ &--two {
+ @media (max-width: $break-link-group-max) {
+ grid-area: links-two;
+ }
+ }
+
+ @media (min-width: $break-link-group) {
+ flex: 0 0 50%;
+ margin-bottom: var(--size-spacing-3);
+ }
+}
+
+.link-group__link {
+ @include atoms.cta;
+
+ display: block;
+ text-align: left;
+ line-height: 1.2;
+ font-weight: var(--font-weights-mallory-book);
+
+ // used in footer context, we need theme colors for hover
+ .site-footer__columns-inner & {
+ [data-footer-theme='one'] &,
+ [data-footer-theme='two'] &,
+ [data-footer-theme='three'] & {
+ --color-link-group-hover: var(--color-slot-two);
+ }
+
+ [data-footer-theme='four'] &,
+ [data-footer-theme='five'] & {
+ --color-link-group-hover: var(--color-slot-four);
+ }
+
+ &:hover {
+ color: var(--color-link-group-hover);
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/link-group.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/link-group.stories.js
new file mode 100644
index 000000000..523335cab
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/link-group.stories.js
@@ -0,0 +1,23 @@
+import linkGroupTwig from './yds-link-group.twig';
+
+import linkGroupData from './link-group.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Link group',
+ argTypes: {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: linkGroupData.link_group__heading,
+ },
+ },
+};
+
+export const linkGroup = ({ heading }) =>
+ linkGroupTwig({
+ ...linkGroupData,
+ link_group__heading: heading,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/link-group.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/link-group.yml
new file mode 100644
index 000000000..d1acc8fe5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/link-group.yml
@@ -0,0 +1,20 @@
+link_group__heading_one: 'Heading for Link Group One'
+link_group__heading_two: 'Heading for Link Group Two'
+link_group__links_one:
+ - link_group__link__url: '#'
+ link_group__link__content: 'This is a link'
+ - link_group__link__url: '#'
+ link_group__link__content: 'This is another link'
+ - link_group__link__url: '#'
+ link_group__link__content: 'This is a very long link that will wrap lines'
+ - link_group__link__url: 'https://google.com'
+ link_group__link__content: 'Link #4'
+link_group__links_two:
+ - link_group__link__url: '#'
+ link_group__link__content: 'This is a link'
+ - link_group__link__url: '#'
+ link_group__link__content: 'This is another link'
+ - link_group__link__url: '#'
+ link_group__link__content: 'This is a very long link that will wrap lines'
+ - link_group__link__url: 'https://google.com/download.pdf'
+ link_group__link__content: 'Link #4'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/yds-link-group.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/yds-link-group.twig
new file mode 100644
index 000000000..89e7952fa
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-group/yds-link-group.twig
@@ -0,0 +1,63 @@
+{#
+ # Available Variables:
+ # - link_group__heading_one (optional. If one is present it will span both columns)
+ # - link_group__heading_two (optional. If one is present, each heading will span 50% with respective columns)
+ #
+ # Available Blocks
+ # - link_group__links_one
+ # - link_group__links_two
+#}
+
+{% set link_group__base_class = 'link-group' %}
+
+{% set link_column_modifiers = [] %}
+
+{% set link_group__attributes = {
+ 'class': bem(link_group__base_class),
+} %}
+
+{% if link_group__heading_one and link_group__heading_two %}
+ {% set link_column_modifiers = link_column_modifiers|merge(['two-headings']) %}
+{% endif %}
+
+{# Set variable for all the links #}
+{% set link_group_columns %}
+ {% if link_group__links_one %}
+
+ {% for link in link_group__links_one %}
+ {% include "@molecules/link-group/_yds-link-group--links.twig" %}
+ {% endfor %}
+
+ {% endif %}
+ {% if link_group__links_two %}
+
+ {% for link in link_group__links_two %}
+ {% include "@molecules/link-group/_yds-link-group--links.twig" %}
+ {% endfor %}
+
+ {% endif %}
+{% endset %}
+
+
+
+ {% if link_group__heading_one %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: link_group__base_class,
+ heading: link_group__heading_one,
+ heading__modifiers: link_column_modifiers|merge(['one']),
+ } %}
+ {% endif %}
+ {% if link_group__heading_two %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: link_group__base_class,
+ heading: link_group__heading_two,
+ heading__modifiers: link_column_modifiers|merge(['two']),
+ } %}
+ {% endif %}
+ {% block link_group__links %}
+ {{link_group_columns}}
+ {% endblock %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/_yds-link-skip.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/_yds-link-skip.scss
new file mode 100644
index 000000000..52b547b19
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/_yds-link-skip.scss
@@ -0,0 +1,22 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/controls/text-link/yds-text-link' as link;
+
+$site-max-width: 84rem;
+
+.link-skip__link {
+ @include link.plain-link;
+
+ --color-text-shadow: var(--color-basic-white);
+
+ margin-block-start: var(--size-spacing-4);
+ margin-block-end: var(--size-spacing-4);
+ padding-inline-start: 0;
+
+ &.visually-hidden.focusable:focus {
+ display: block;
+ width: 100%;
+ max-width: $site-max-width;
+ margin-left: auto;
+ margin-right: auto;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/link-skip.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/link-skip.stories.js
new file mode 100644
index 000000000..387b4677a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/link-skip.stories.js
@@ -0,0 +1,15 @@
+import linkSkipTwig from './yds-link-skip.twig';
+
+import linkSkipData from './link-skip.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Link skip',
+};
+
+export const linkSkip = () =>
+ linkSkipTwig({
+ ...linkSkipData,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/link-skip.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/link-skip.yml
new file mode 100644
index 000000000..ab128e11d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/link-skip.yml
@@ -0,0 +1,2 @@
+link_skip__content: 'Skip to main content'
+link_skip__url: '#main-content'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/yds-link-skip.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/yds-link-skip.twig
new file mode 100644
index 000000000..91a53431f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/link-skip/yds-link-skip.twig
@@ -0,0 +1,17 @@
+{#
+ # Available variables:
+ # - link_skip__content - the content of the link (typically text)
+ #
+ # Available blocks:
+ # - link_skip__content - used to replace the content of the link
+ # Example: to insert the image component
+ #}
+
+{% set link_skip__base_class = link_skip__base_class|default('link-skip') %}
+{% set link_skip__extra_class = link_skip__extra_class %}
+
+
+ {% block link_skip__content %}
+ {{- link_skip__content -}}
+ {% endblock %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu-item.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu-item.twig
new file mode 100644
index 000000000..6798268f8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu-item.twig
@@ -0,0 +1,127 @@
+{#
+ # In this file, we're checking `if directory` in order to determine if the
+ # active environment is a Drupal site. We need to do this because Drupal
+ # returns a complex object, and in order to get the path, we use `.toStrong`,
+ # which, unfortunately, breaks environments like Storybook.
+ #}
+
+{% set item__modifiers = ['level-' ~ menu__level] %}
+{% set item__attributes = item__attributes|default({}) %}
+
+{# Link attributes #}
+{% set link__attributes = link__attributes|default({}) %}
+
+{# Item Modifiers #}
+{% if item.is_active == TRUE %}
+ {% set item__modifiers = item__modifiers|merge(['active']) %}
+{% endif %}
+{% if item.below %}
+ {% set item__modifiers = item__modifiers|merge(['with-sub']) %}
+{% endif %}
+
+{# Cta Modifiers #}
+{% set cta__modifiers = ['level-' ~ menu__level] %}
+
+{# Headings for main menu.
+ # @see web/profiles/custom/yalesites_profile/modules/custom/ys_core/ys_core.module
+#}
+{%
+ if menu__level == 1
+ and [item]|first
+ and item.list__item__is_heading
+ and menu__variation == 'mega'
+%}
+ {# Heading on left #}
+ {% set list__item__content__heading = item.title %}
+
+ {# CTA on right #}
+ {% set item = item|merge({'title': item.heading_cta }) %}
+
+ {# li modifier #}
+ {% set item__modifiers = item__modifiers|merge(['explore-bar', 'with-icon']) %}
+{% endif %}
+{# end headings for main menu #}
+
+{# Set link component as default #}
+{% set list__item %}
+ {% set link__item_title = item.title %}
+ {# Set aria-current if the link is the current page #}
+ {% if item.is_active %}
+ {% set link__attributes = link__attributes|merge({
+ 'aria-current': 'page',
+ }) %}
+ {% endif %}
+
+ {% if directory and not menu__contextual %}
+ {% set link__url = item.url.toString %}
+ {% else %}
+ {% set link__url = item.url %}
+ {% endif %}
+
+ {% if item.list__item__is_heading and menu__variation == 'mega' %}
+ {% set link__type = 'with-chevron' %}
+ {% set link__url_type = 'chevron' %}
+ {% endif %}
+
+ {% if menu__variation == 'basic'
+ and menu__level == 1
+ and [item]|first
+ and item.list__item__is_heading
+ %}
+ {% set link__item_title = item.node_title %}
+ {% endif %}
+
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: link__item_title,
+ link__base_class: 'link',
+ link__blockname: menu__base_class,
+ link__modifiers: item__modifiers,
+ link__attributes: link__attributes,
+ } %}
+{% endset %}
+
+{% embed "@atoms/lists/_yds-list-item.twig" with {
+ list__item__base_class: item__base_class|default('item'),
+ list__item__modifiers: item__modifiers,
+ list__item__blockname: item__blockname,
+ list__item__attributes: item__attributes,
+} %}
+
+ {% block list__item__content %}
+ {# This import needs to be inside the block for it to work in Drupal #}
+ {% import "@molecules/menu/yds-menu.twig" as menus %}
+
+ {% if menu__variation == 'mega' %}
+ {% set levels = 2 %}
+ {% elseif menu__variation == 'basic' %}
+ {% set levels = 1 %}
+ {% else %}
+ {% set levels = 0 %}
+ {% endif %}
+
+ {{ list__item__content__heading }}
+
+ {{- list__item -}}
+ {% if item.below and menu__level < levels %}
+ {% if menu__level == 0 and menu__level__toggle %}
+ {% set menu_item__cta__content %}
+ {{ item.title }}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ icon__base_class: 'toggle-icon',
+ icon__blockname: item__blockname,
+ } %}
+
+ {% endset %}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__content: menu_item__cta__content,
+ control__base_class: 'toggle',
+ control__modifiers: item__modifiers,
+ control__blockname: menu__base_class,
+ aria_expanded: 'false',
+ } %}
+ {% endif %}
+ {{ menus.menu_links(item.below, attributes, menu__level + 1, menu__base_class, menu__modifiers, menu__blockname, menu__list__type, menu__level__toggle, menu__contextual, item__base_class, item__modifiers, item__blockname, directory, menu__variation) }}
+ {% endif %}
+ {% endblock %}
+{% endembed %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu-list.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu-list.twig
new file mode 100644
index 000000000..a6ffdd724
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu-list.twig
@@ -0,0 +1,25 @@
+{% set item__blockname = menu__base_class %}
+
+{% set menu__item %}
+ {% block menu__item__content %}
+ {% for item in items %}
+ {% include "@molecules/menu/_yds-menu-item.twig" with {
+ list__item__is_heading: item.list__item__is_heading,
+ list__item__content__heading: item.list__item__content__heading,
+ list__item__modifiers: item.list__item__modifiers
+ }%}
+ {% endfor %}
+ {% endblock %}
+{% endset %}
+
+{# List #}
+{% embed "@atoms/lists/yds-list.twig" with {
+ list__base_class: 'menu',
+ list__blockname: menu__base_class,
+ list__modifiers: menu__modifiers,
+ list__type: menu__list__type,
+}%}
+ {% block list__content %}
+ {{ menu__item }}
+ {% endblock %}
+{% endembed %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu.scss
new file mode 100644
index 000000000..1f74eae4b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/_yds-menu.scss
@@ -0,0 +1,22 @@
+@use '../../00-tokens/tokens';
+
+:root {
+ --menu-link-color: var(--color-link-base);
+
+ [data-header-theme='three'] {
+ --menu-link-color: var(--color-link-hover);
+ }
+}
+
+@mixin menu-link {
+ @include tokens.animate('color');
+
+ color: var(--color-text);
+ text-decoration: none;
+ font-weight: var(--font-weights-mallory-book);
+ letter-spacing: 0.2px;
+
+ &:hover {
+ color: var(--menu-link-color);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/_yds-menu-toggle.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/_yds-menu-toggle.scss
new file mode 100644
index 000000000..17c126428
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/_yds-menu-toggle.scss
@@ -0,0 +1,75 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+
+@mixin main-menu-is-open {
+ [data-main-menu-state='open'] & {
+ @content;
+ }
+}
+
+@mixin toggle-close-bar($rotation) {
+ top: 50%;
+ left: 0;
+ transform: rotate($rotation);
+}
+
+.menu-toggle {
+ @include atoms.button-reset;
+
+ display: flex;
+ place-content: center;
+ align-items: center;
+ position: relative;
+ min-height: 45px;
+ min-width: 45px;
+
+ &__bars {
+ position: relative;
+ display: block;
+ height: 22px;
+ width: 31px;
+ }
+
+ &__bar {
+ @include tokens.animate;
+
+ position: absolute;
+ display: block;
+ height: 2px;
+ width: 100%;
+ background: var(--color-text);
+ border-radius: var(--radius-4);
+
+ &:nth-child(1) {
+ top: 0;
+
+ @include main-menu-is-open {
+ @include toggle-close-bar(45deg);
+ }
+ }
+
+ &:nth-child(2) {
+ @include tokens.animate(opacity);
+
+ top: 50%;
+ transform: translateY(-50%);
+ opacity: 1;
+
+ @include main-menu-is-open {
+ opacity: 0;
+ }
+ }
+
+ &:nth-child(3) {
+ bottom: 0;
+
+ @include main-menu-is-open {
+ @include toggle-close-bar(-45deg);
+ }
+ }
+ }
+
+ &__text {
+ @include tokens.visually-hidden;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/yds-menu-toggle.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/yds-menu-toggle.js
new file mode 100644
index 000000000..f76bcd2cc
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/yds-menu-toggle.js
@@ -0,0 +1,103 @@
+Drupal.behaviors.menuToggle = {
+ attach(context) {
+ // Selectors.
+ const menuToggle = context.querySelector('.menu-toggle');
+ const header = context.querySelector('.site-header');
+ const headerOverlay = context.querySelector('.site-header__overlay');
+ const body = context.querySelector('body');
+ const focusableElements =
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
+ // Classes.
+ const mainMenuState = 'data-main-menu-state';
+
+ // Function to trap focus when mobile menu is expanded.
+ function trapKeyboard(menu) {
+ const focusableMenuElements = menu.querySelectorAll(focusableElements);
+ const firstFocusableElement = focusableMenuElements[0];
+ const lastFocusableElement =
+ focusableMenuElements[focusableMenuElements.length - 1];
+
+ menu.addEventListener('keydown', (e) => {
+ const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
+
+ if (!isTabPressed) {
+ return;
+ }
+
+ if (e.shiftKey) {
+ if (document.activeElement === firstFocusableElement) {
+ e.preventDefault();
+ lastFocusableElement.focus();
+ }
+ } else if (document.activeElement === lastFocusableElement) {
+ e.preventDefault();
+ firstFocusableElement.focus();
+ }
+ });
+ }
+
+ // Function to toggle the open/closed state of the main menu.
+ function toggleMenuState(target, attribute) {
+ const newMenuState =
+ target.getAttribute(attribute) === 'open' ? 'closed' : 'open';
+ const ariaButtonState =
+ target.getAttribute(attribute) === 'closed' ? 'true' : 'false';
+
+ // Set the menu state.
+ target.setAttribute(attribute, newMenuState);
+
+ // Set the button aria properties.
+ menuToggle.setAttribute('aria-expanded', ariaButtonState);
+
+ // Set the Bg scroll state.
+ if (newMenuState === 'open') {
+ // Disable scrolling of "background" content.
+ body.setAttribute('data-body-frozen', '');
+ // Set mobile header height for expanded menu sizing.
+ body.style.setProperty(
+ '--header-height-mobile',
+ `${header.offsetHeight + header.getBoundingClientRect().top}px`,
+ );
+ } else {
+ // Enable scrolling of "background" content.
+ body.removeAttribute('data-body-frozen');
+ }
+ }
+
+ // Retrieve the current menu state of the menu
+ function getMenuState(target, attribute) {
+ return target.getAttribute(attribute);
+ }
+
+ // Show/Hide menu on toggle click.
+ if (menuToggle) {
+ menuToggle.addEventListener('click', () => {
+ toggleMenuState(header, mainMenuState);
+ trapKeyboard(header);
+ });
+
+ window.addEventListener('resize', () => {
+ if (getMenuState(header, mainMenuState) === 'closed') {
+ header.setAttribute(mainMenuState, 'loaded');
+ }
+ });
+ }
+
+ // Hide menu on escape key press.
+ document.addEventListener('keyup', (e) => {
+ if (e.key === 'Escape') {
+ if (header.getAttribute(mainMenuState) === 'open') {
+ // Close the main menu if open.
+ toggleMenuState(header, mainMenuState);
+ }
+ }
+ });
+
+ // Hide menu on overlay click.
+ if (headerOverlay) {
+ headerOverlay.addEventListener('click', () => {
+ toggleMenuState(header, mainMenuState);
+ });
+ }
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/yds-menu-toggle.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/yds-menu-toggle.twig
new file mode 100644
index 000000000..474176261
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/menu-toggle/yds-menu-toggle.twig
@@ -0,0 +1,17 @@
+{% set main_menu_toggle__base_class = 'menu-toggle' %}
+
+{% set menu_toggle__content %}
+ Menu
+
+
+
+
+
+{% endset %}
+
+{% include "@atoms/controls/base/yds-control.twig" with {
+ control__base_class: main_menu_toggle__base_class,
+ control__blockname: main_menu_toggle__blockname,
+ aria_expanded: 'false',
+ control__content: menu_toggle__content
+} %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/yds-menu.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/yds-menu.twig
new file mode 100644
index 000000000..b6c69b532
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/menu/yds-menu.twig
@@ -0,0 +1,60 @@
+{#
+ # Available variables:
+ # - menu__base_class - base classname of the wrapper.
+ # - menu__blockname - blockname prepended to the base classname of the wrapper(s) and each component.
+ # - menu__modifiers - array of modifiers to add to the base classname of the wrapper.
+ # - menu__name - name of the menu.
+ # - menu__attributes - array of attributes for the nav.
+ # - menu__additional_classes - array of classes in addition to bem structure.
+ # - menu__level - current menu level number in the hierarchy.
+ # - menu__level__toggle - Boolean value for toggles within each level in the hierarchy.
+ # - items: A nested list of menu items. Each menu item contains:
+ # - attributes: HTML attributes for the menu item.
+ # - below: The menu item child items.
+ # - title: The menu link title.
+ # - url: The menu link url, instance of \Drupal\Core\Url
+ # - localized_options: Menu link localized options.
+ # - is_expanded: TRUE if the link has visible children within the current
+ * menu tree.
+ # - is_collapsed: TRUE if the link has children within the current menu tree
+ * that are not currently visible.
+ # - in_active_trail: TRUE if the link is in the active trail.
+ #}
+{% set menu__base_class = menu__base_class|default('menu') %}
+{% set menu__blockname = menu__blockname %}
+{% set menu__modifiers = menu__modifiers|default([]) %}
+{% set menu__attributes = menu__attributes|default([]) %}
+{% set menu__name = menu__name|default([]) %}
+{% set menu__additional_classes = menu__additional_classes|default([]) %}
+{% set menu__variation = menu__variation|default('basic') %}
+
+{% if menu__level__toggle %}
+ {% set menu__additional_classes = menu__additional_classes|merge(['menu-with-toggle']) %}
+{% endif %}
+
+{% set menu__attributes = menu__attributes|merge({
+ 'class': bem(menu__base_class, menu__modifiers, menu__blockname, menu__additional_classes),
+ 'aria-label': menu__name,
+ 'data-menu-variation': menu__variation,
+}) %}
+
+{#
+ We call a macro which calls itself to render the full tree.
+ @see http://twig.sensiolabs.org/doc/tags/macro.html
+#}
+{% macro menu_links(items, attributes, menu__level, menu__base_class, menu__modifiers, menu__blockname, menu__list__type, menu__level__toggle, menu__contextual, item__base_class, item__modifiers, item__blockname, directory, menu__variation) %}
+ {% import _self as menus %}
+ {% if items %}
+ {% set menu__modifiers = ['level-' ~ menu__level] %}
+ {% block menu_list__content %}
+ {% include "@molecules/menu/_yds-menu-list.twig" %}
+ {% endblock %}
+ {% endif %}
+{% endmacro %}
+
+{% import _self as menus %}
+
+ {% block menu_prefix %}{% endblock %}
+ {{ menus.menu_links(items, attributes, 0, menu__base_class, menu__modifiers, menu__blockname, menu__list__type, menu__level__toggle, menu__contextual, item__base_class, item__modifiers, item__blockname, directory, menu__variation) }}
+ {% block menu_suffix %}{% endblock %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/basic-meta/_yds-basic-meta.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/basic-meta/_yds-basic-meta.scss
new file mode 100644
index 000000000..fbd355cbe
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/basic-meta/_yds-basic-meta.scss
@@ -0,0 +1,30 @@
+@use '../../../00-tokens/tokens';
+
+.basic-meta {
+ display: flex;
+ color: var(--color-gray-600);
+ margin-top: var(--size-spacing-4);
+
+ @media (max-width: tokens.$break-mobile-max) {
+ @include tokens.body-s;
+
+ display: flex;
+ flex-direction: column;
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ @include tokens.body-default-condensed;
+
+ > *:not(:first-child) {
+ position: relative;
+ margin-left: var(--size-spacing-5);
+ padding-left: var(--size-spacing-5);
+
+ &::before {
+ position: absolute;
+ content: '|';
+ left: -0.225rem;
+ }
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/basic-meta/yds-basic-meta.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/basic-meta/yds-basic-meta.twig
new file mode 100644
index 000000000..05ae19fe2
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/basic-meta/yds-basic-meta.twig
@@ -0,0 +1,4 @@
+{% include "@atoms/typography/text/yds-text.twig" with {
+ text__content: basic_meta,
+ text__base_class: 'basic-meta',
+} %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/event-meta/_yds-event-meta.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/event-meta/_yds-event-meta.scss
new file mode 100644
index 000000000..a922728d4
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/event-meta/_yds-event-meta.scss
@@ -0,0 +1,47 @@
+@use '../../../00-tokens/tokens';
+
+.event-meta__inner {
+ > * {
+ border-bottom: var(--border-thickness-1) solid var(--color-divider);
+ padding-block-start: var(--size-spacing-6);
+ padding-block-end: var(--size-spacing-6);
+ }
+}
+
+.event-meta {
+ color: var(--color-basic-brown-gray);
+}
+
+.event-meta__date {
+ @include tokens.h3-mallory-compact-book;
+}
+
+.event-meta__details {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ gap: var(--size-spacing-6);
+
+ @media (min-width: tokens.$break-mobile) {
+ flex-direction: row;
+ align-items: center;
+ }
+}
+
+.event-meta__ctas {
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--size-spacing-6);
+}
+
+.event-meta__address {
+ color: var(--color-text);
+}
+
+.event-meta__format {
+ color: var(--color-text);
+}
+
+.event-meta__past-event {
+ margin-top: var(--size-spacing-7);
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/event-meta/yds-event-meta.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/event-meta/yds-event-meta.twig
new file mode 100644
index 000000000..126950088
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/event-meta/yds-event-meta.twig
@@ -0,0 +1,118 @@
+{#
+ # Available Variables:
+ # - event_meta__date_start
+ # - event_meta__date_end
+ # - event_meta__format: Multiselect. Options are 'In-person', 'Virtual', or both.
+ # - event_meta__address
+ #}
+
+{% if event_meta__date_start %}
+
+ {% set event_meta__day %}
+ {% include "@atoms/date-time/yds-date-time.twig" with {
+ date_time__start: event_meta__date_start,
+ date_time__end: event_meta__date_end,
+ date_time__format: 'day__full',
+ } %}
+ {% endset %}
+
+ {% set event_meta__time %}
+ {% include "@atoms/date-time/yds-date-time.twig" with {
+ date_time__start: event_meta__date_start,
+ date_time__end: event_meta__date_end,
+ date_time__format: 'time',
+ date_time__all_day: event_meta__all_day,
+ } %}
+ {% endset %}
+
+{% endif %}
+
+{% set event_meta__base_class = 'event-meta' %}
+
+{# Check if event has passed #}
+{% set event_has_passed = event_meta__date_end < "now"|date("U") %}
+
+{# Set the event status based on event_has_passed variable #}
+{% set event_status = event_has_passed ? 'passed' : 'current' %}
+
+{# Set the event title prefix based on event status #}
+{% set event_title__prefix = event_has_passed ? 'Past Event: ' : '' %}
+
+
+ {# To get the event_title__prefix to wire properly to the page_title__prefix
+ and retain the logic of end_date, we need to include the page-title
+ in the same component file #}
+ {# instead of passing the page-title component into a template separately
+ and embedding the meta into it, we need to do that here. #}
+ {% embed "@molecules/page-title/yds-page-title.twig" with {
+ page_title__heading: event_title__heading,
+ page_title__width: 'content',
+ page_title__prefix: event_title__prefix,
+ }%}
+ {% block page_title__meta %}
+ {% if event_has_passed %}
+
+ This event has passed.
+
+ {% endif %}
+
+
+ {# Date #}
+
+
+ {# Day #}
+
+ {{ event_meta__day }}
+
+
+ {# Time #}
+
+ {{ event_meta__time }}
+
+
+ {# Event Details #}
+
+ {# Location #}
+ {% if event_meta__format.0 or event_meta__address %}
+
+ {# Format #}
+ {% if event_meta__format.0 or event_meta__format %}
+
+ {% include "@molecules/cards/reference-card/event/_yds-event-format.twig" with {
+ format: event_meta__format,
+ } %}
+
+ {% endif %}
+ {# Address #}
+ {% if event_meta__address %}
+
+ {{ event_meta__address }}
+
+ {% endif %}
+
+ {% endif %}
+ {# CTAs #}
+
+ {# Primary CTA #}
+ {% if event_meta__cta_primary__content and event_meta__cta_primary__href %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: event_meta__cta_primary__content,
+ cta__href: event_meta__cta_primary__href,
+ cta__component_theme: cta__component_theme|default('one'),
+ } %}
+ {% endif %}
+ {# Add to calendar #}
+ {% if event_meta__cta_secondary__content %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: event_meta__cta_secondary__content,
+ cta__href: event_meta__cta_secondary__href,
+ cta__style: 'outline',
+ cta__component_theme: cta__component_theme|default('one'),
+ } %}
+ {% endif %}
+
+
+
+ {% endblock %}
+ {% endembed %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/meta.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/meta.stories.js
new file mode 100644
index 000000000..a47f0b3e4
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/meta.stories.js
@@ -0,0 +1,131 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+import { eventArgTypes } from '../../04-page-layouts/cl-page-args';
+
+import basicMetaTwig from './basic-meta/yds-basic-meta.twig';
+import eventMetaTwig from './event-meta/yds-event-meta.twig';
+import dateTimeTwig from '../../01-atoms/date-time/yds-date-time.twig';
+import profileMetaTwig from './profile-meta/yds-profile-meta.twig';
+import imageData from '../../01-atoms/images/image/image.yml';
+
+const colorPairingsData = Object.keys(tokens['component-themes']);
+
+// Utility to convert dates to unix timestamps
+const toUnixTimeStamp = (date) => {
+ return Math.floor(Date.parse(date) / 1000);
+};
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Meta',
+};
+
+export const Basic = ({ meta }) => basicMetaTwig({ basic_meta: meta });
+Basic.argTypes = {
+ meta: {
+ name: 'Meta',
+ type: 'string',
+ defaultValue: `By Charlyn Paradis ${dateTimeTwig({
+ date_time__start: '2022-01-25',
+ date_time__format: 'day__full',
+ })}`,
+ },
+};
+
+export const Event = ({
+ pageTitle,
+ startDate,
+ endDate,
+ format,
+ address,
+ ctaText,
+ allDay,
+}) =>
+ eventMetaTwig({
+ event_title__heading: pageTitle,
+ event_meta__date_start: toUnixTimeStamp(startDate),
+ event_meta__date_end: toUnixTimeStamp(endDate),
+ event_meta__format: format,
+ event_meta__address: address,
+ event_meta__cta_primary__content: ctaText,
+ event_meta__cta_primary__href: '#',
+ event_meta__cta_secondary__content: 'Add to calendar',
+ event_meta__cta_secondary__href: '#',
+ event_meta__all_day: allDay,
+ });
+Event.argTypes = {
+ ...eventArgTypes,
+};
+
+export const Profile = ({
+ heading,
+ bgColor,
+ titleLine,
+ subTitle,
+ department,
+ profileImageOrientation,
+ profileImageAlignment,
+ profileImageStyle,
+}) =>
+ profileMetaTwig({
+ ...imageData.responsive_images['3x2'],
+ profile_meta__heading: heading,
+ profile_meta__title_line: titleLine,
+ profile_meta__subtitle_line: subTitle,
+ profile_meta__department: department,
+ profile_meta__background: bgColor,
+ profile_meta__image_orientation: profileImageOrientation,
+ image__srcset__1: imageData.responsive_images['2x3'].image__srcset,
+ image__sizes__1: imageData.responsive_images['2x3'].image__sizes,
+ image__alt__1: imageData.responsive_images['2x3'].image__alt,
+ image__src__1: imageData.responsive_images['2x3'].image__src,
+ profile_meta__image_style: profileImageStyle,
+ profile_meta__image_alignment: profileImageAlignment,
+ });
+Profile.argTypes = {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: 'Person Namerton',
+ },
+ titleLine: {
+ name: 'Profile professional title',
+ type: 'string',
+ defaultValue: 'Professional Title',
+ },
+ subTitle: {
+ name: 'Profile subtitle',
+ type: 'string',
+ defaultValue: 'Subtitle',
+ },
+ department: {
+ name: 'Profile department',
+ type: 'string',
+ defaultValue: 'Department name',
+ },
+ bgColor: {
+ name: 'Component Theme (dial)',
+ type: 'select',
+ options: colorPairingsData,
+ defaultValue: 'one',
+ },
+ profileImageOrientation: {
+ name: 'Profile Image Orientation',
+ type: 'select',
+ options: ['landscape', 'portrait'],
+ defaultValue: 'landscape',
+ },
+ profileImageAlignment: {
+ name: 'Profile Image Alignment',
+ type: 'select',
+ options: ['left', 'right'],
+ defaultValue: 'right',
+ },
+ profileImageStyle: {
+ name: 'Profile Image Style',
+ type: 'select',
+ options: ['inline', 'outdent'],
+ defaultValue: 'inline',
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/profile-meta/_yds-profile-meta.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/profile-meta/_yds-profile-meta.scss
new file mode 100644
index 000000000..c65b3c01c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/profile-meta/_yds-profile-meta.scss
@@ -0,0 +1,199 @@
+@use '~@yalesites-org/tokens/build/scss/tokens' as sass-tokens;
+@use '../../../00-tokens/tokens';
+@use '../../../00-tokens/functions/map';
+@use '../../../01-atoms/atoms';
+
+$component-profile-themes: map.deep-get(tokens.$tokens, 'component-themes');
+$global-profile-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$break-profile-banner: tokens.$break-l;
+$break-profile-banner-max: $break-profile-banner - 0.05;
+
+.profile-meta {
+ @include tokens.spacing-page-section(
+ $flush-top: true,
+ $flush-bottom: true,
+ $banner-spacing: true
+ );
+
+ color: var(--color-text);
+ background-color: var(--color-profile-background);
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-profile-themes {
+ &[data-component-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-profile-background: var(--component-themes-#{$theme}-background);
+ --color-text-shadow: var(--component-themes-#{$theme}-background);
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-profile-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-profile-background: var(--color-slot-one);
+ --color-text-shadow: var(--color-slot-one);
+ --color-text: var(--color-basic-white);
+ --color-heading: var(--color-basic-white);
+ }
+
+ &[data-component-theme='two'] {
+ --color-profile-background: var(--color-slot-four);
+ --color-text-shadow: var(--color-slot-one);
+ --color-text: var(--color-gray-800);
+ --color-heading: var(--color-gray-800);
+ }
+
+ &[data-component-theme='three'] {
+ --color-profile-background: var(--color-slot-five);
+ --color-text-shadow: var(--color-slot-one);
+ --color-text: var(--color-basic-white);
+ --color-heading: var(--color-basic-white);
+ }
+
+ @media (max-width: tokens.$break-mobile-max) {
+ @include tokens.body-s;
+
+ display: flex;
+ flex-direction: column;
+ }
+}
+
+.profile-meta__inner {
+ display: flex;
+ flex-direction: column-reverse;
+ width: 100%;
+ max-width: var(--size-component-layout-width-site);
+
+ @media (min-width: $break-profile-banner) {
+ flex-direction: row-reverse;
+ gap: var(--size-spacing-5);
+
+ [data-component-image-alignment='left'] & {
+ flex-direction: row;
+ gap: var(--size-spacing-7);
+ }
+ }
+}
+
+.profile-meta__image {
+ width: 100%;
+ flex: 0 auto;
+
+ @media (min-width: $break-profile-banner) {
+ [data-component-image-style='outdent'] & {
+ margin-top: var(--size-spacing-7);
+ margin-bottom: calc(var(--size-spacing-7) * -1);
+ }
+ }
+
+ [data-component-image-orientation='landscape'] & {
+ aspect-ratio: 3/2;
+
+ @media (max-width: $break-profile-banner-max) {
+ margin-bottom: var(--size-spacing-5);
+ }
+
+ @media (min-width: $break-profile-banner) {
+ max-width: 661px;
+ }
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 3 / 2) {
+ &::before {
+ float: left;
+ padding-top: 66.66%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+ }
+
+ [data-component-image-orientation='portrait'] & {
+ aspect-ratio: 2/3;
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 2 / 3) {
+ &::before {
+ float: left;
+ padding-top: 150%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+
+ @media (min-width: $break-profile-banner) {
+ max-width: 300px;
+ }
+ }
+}
+
+.profile-meta__content {
+ display: flex;
+ flex-direction: column;
+ flex: 1 auto;
+ padding-block: var(--size-spacing-8) var(--size-spacing-6);
+
+ [data-component-image-orientation='landscape'] & {
+ @media (min-width: $break-profile-banner) {
+ max-width: calc(100% - 661px);
+ }
+ }
+
+ [data-component-image-orientation='portrait'] & {
+ @media (min-width: $break-profile-banner) {
+ max-width: calc(100% - 300px);
+ }
+ }
+}
+
+.profile-title__page-title {
+ margin-bottom: var(--size-spacing-8);
+}
+
+.profile-meta__title-line {
+ @include tokens.h3-yale-new;
+
+ margin-bottom: var(--size-spacing-6);
+}
+
+.profile-meta__subtitle-line {
+ @include tokens.h4-yale-new;
+
+ margin-bottom: var(--size-spacing-6);
+}
+
+.profile-meta__department-line {
+ margin-top: auto;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/profile-meta/yds-profile-meta.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/profile-meta/yds-profile-meta.twig
new file mode 100644
index 000000000..b95dfef2d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/meta/profile-meta/yds-profile-meta.twig
@@ -0,0 +1,68 @@
+{#
+ # Available Variables:
+ # - event_meta__format: Multiselect. Options are 'In-person', 'Virtual', or both.
+ # - event_meta__address
+ #}
+
+{% set profile_meta__base_class = 'profile-meta' %}
+{% set profile_meta__background = profile_meta__background|default('one') %}
+
+{% set profile_meta__attributes = {
+ 'data-component-width': profile_meta__width|default('site'),
+ 'data-component-image-orientation': profile_meta__image_orientation|default('landscape'),
+ 'data-component-image-style': profile_meta__image_style|default('inline'),
+ 'data-component-image-alignment': profile_meta__image_alignment|default('left'),
+ class: bem(profile_meta__base_class, [], profile_meta__blockname, profile_meta__additional_classes),
+} %}
+
+
+
+
+
+ {% block profile__image %}
+ {% if profile_meta__image_orientation == 'portrait' %}
+ {% include "@atoms/images/image/_responsive-image.twig" with {
+ image__srcset: image__srcset__1,
+ image__sizes: image__sizes__1,
+ image__alt: image__alt__1,
+ image__src: image__src__1,
+ }%}
+ {% else %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endif %}
+ {% endblock %}
+
+
+
+ {% include "@molecules/page-title/yds-page-title.twig" with {
+ page_title__heading: profile_meta__heading,
+ page_title__blockname: 'profile-title',
+ }%}
+
+ {% if profile_meta__title_line %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__blockname: profile_meta__base_class,
+ text__content: profile_meta__title_line,
+ text__base_class: 'title-line',
+ } %}
+ {% endif %}
+
+ {% if profile_meta__subtitle_line %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__blockname: profile_meta__base_class,
+ text__content: profile_meta__subtitle_line,
+ text__base_class: 'subtitle-line',
+ } %}
+ {% endif %}
+
+ {% if profile_meta__department %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__blockname: profile_meta__base_class,
+ text__content: profile_meta__department,
+ text__base_class: 'department-line',
+ } %}
+ {% endif %}
+
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/molecules.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/molecules.scss
new file mode 100644
index 000000000..abace6867
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/molecules.scss
@@ -0,0 +1,33 @@
+@forward './accordion/yds-accordion';
+@forward './alert/yds-alert';
+@forward './banner/action/yds-action-banner';
+@forward './callout/yds-callout';
+@forward './cards/reference-card/yds-reference-card';
+@forward './cards/directory-listing-card/yds-directory-listing-card';
+@forward './cards/custom-card/yds-custom-card';
+@forward './embed/yds-embed';
+@forward './image/yds-content-image';
+@forward './link-group/yds-link-group';
+@forward './link-grid/yds-link-grid';
+@forward './link-skip/yds-link-skip';
+@forward './menu/yds-menu';
+@forward './menu/menu-toggle/yds-menu-toggle';
+@forward './meta/basic-meta/yds-basic-meta';
+@forward './meta/event-meta/yds-event-meta';
+@forward './meta/profile-meta/yds-profile-meta';
+@forward './page-title/yds-page-title';
+@forward './pager/yds-pager';
+@forward './wrapped-image/yds-wrapped-image';
+@forward './pull-quote/yds-pull-quote';
+@forward './quick-links/yds-quick-links';
+@forward './search-result/yds-search-result';
+@forward './social-links/yds-social-links';
+@forward './tabs/yds-tabs';
+@forward './text/yds-text-field';
+@forward './text-with-image/yds-text-with-image';
+@forward './video/yds-video';
+@forward './banner/grand-hero/yds-grand-hero';
+@forward './quote-callout/yds-quote-callout';
+@forward './content-spotlight-portrait/yds-content-spotlight-portrait';
+@forward './facts-and-figures/yds-facts-and-figures';
+@forward './tile-item/yds-tile-item';
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/_yds-page-title.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/_yds-page-title.scss
new file mode 100644
index 000000000..6c2ce86cd
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/_yds-page-title.scss
@@ -0,0 +1,24 @@
+@use '../../00-tokens/tokens';
+
+.page-title {
+ @include tokens.spacing-page-inner;
+}
+
+.page-title__heading {
+ @include tokens.h1-yale-new;
+
+ [data-component-width='site'] & {
+ max-width: var(--size-component-layout-width-highlight);
+ }
+}
+
+.page-title__prefix {
+ @include tokens.h2-mallory-compact-book;
+
+ color: var(--color-basic-brown-gray);
+ text-transform: uppercase;
+}
+
+.prefix {
+ margin-top: var(--size-spacing-7);
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/page-title.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/page-title.js
new file mode 100644
index 000000000..ca338b31d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/page-title.js
@@ -0,0 +1,12 @@
+Drupal.behaviors.bannerHeading = {
+ attach(context) {
+ // Find the body element
+ const bodyElement = context.querySelector('body');
+ const pageTitle = context.querySelector('.page-title');
+
+ // If there is no page title or the page title is present but not visible, add an attribute to the body element
+ if (pageTitle === null || !pageTitle.classList.contains('visible')) {
+ bodyElement.setAttribute('page-title-hidden', 'true');
+ }
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/page-title.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/page-title.stories.js
new file mode 100644
index 000000000..91c839a5d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/page-title.stories.js
@@ -0,0 +1,36 @@
+// Twig templates
+import pageTitleTwig from './yds-page-title.twig';
+import dateTimeTwig from '../../01-atoms/date-time/yds-date-time.twig';
+
+// Data files
+// import textData from './text/text.yml';
+
+import './page-title';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Page Title',
+ argTypes: {
+ meta: {
+ name: 'Meta',
+ type: 'string',
+ defaultValue: `By Charlyn Paradis ${dateTimeTwig({
+ date_time__start: '2022-01-25',
+ date_time__format: 'date',
+ })}`,
+ },
+ prefix: {
+ name: 'Page Title Prefix',
+ type: 'string',
+ },
+ },
+};
+
+export const PageTitle = ({ meta, prefix }) =>
+ pageTitleTwig({
+ page_title__heading: 'Davis Team Project Wins Award for Research',
+ page_title__meta: meta,
+ page_title__prefix: prefix,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/yds-page-title.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/yds-page-title.twig
new file mode 100644
index 000000000..19e70e10e
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/page-title/yds-page-title.twig
@@ -0,0 +1,38 @@
+{#
+ # Available Variables:
+ # - page_title__heading
+ # - page_title__prefix
+ # - page_title__meta (optional. Will fill in the `basic-meta` meta type.)
+ # - page_title__display (optional. 'display', 'hidden', or 'visually-hidden')
+ #
+ # Available Blocks
+ # - page_title__meta
+#}
+
+{% set page_title__base_class = 'page-title' %}
+
+{% set page_title__attributes = {
+ 'data-component-width': page_title__width|default('site'),
+ class: bem(page_title__base_class, [], page_title__blockname, page_title__additional_classes),
+} %}
+
+{% if 'hidden' not in [page_title__display] %}
+
+
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '1',
+ heading: page_title__heading,
+ heading__blockname: page_title__base_class,
+ heading__prefix: page_title__prefix,
+ heading__prefix__base_class: page_title__base_class,
+ } %}
+ {% block page_title__meta %}
+ {% if page_title__meta %}
+ {% include "@molecules/meta/basic-meta/yds-basic-meta.twig" with {
+ basic_meta: page_title__meta,
+ } %}
+ {% endif %}
+ {% endblock %}
+
+
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/_yds-pager.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/_yds-pager.scss
new file mode 100644
index 000000000..efeec0993
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/_yds-pager.scss
@@ -0,0 +1,96 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+
+.pager {
+ @include tokens.spacing-page-section;
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.pager__items {
+ @include atoms.list-reset;
+
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--size-spacing-3);
+}
+
+.pager__item {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ &--desktop {
+ @media (max-width: tokens.$break-mobile-max) {
+ display: none;
+ }
+ }
+
+ &--mobile {
+ @media (min-width: tokens.$break-mobile) {
+ display: none;
+ }
+ }
+
+ &--previous {
+ margin-right: var(--size-spacing-6);
+ }
+
+ &--next {
+ margin-left: var(--size-spacing-6);
+ }
+}
+
+.pager__link {
+ display: flex;
+ gap: var(--size-spacing-1);
+ min-height: var(--size-click-target-minimum);
+ min-width: var(--size-click-target-minimum);
+ align-items: center;
+ justify-content: center;
+ color: var(--color-heading);
+ text-decoration: none;
+ border: var(--size-thickness-2) solid transparent;
+ padding: var(--size-spacing-2) var(--size-spacing-2);
+
+ &:focus-visible {
+ color: var(--color-link-base);
+ }
+
+ &:not([class*='--previous']):not([class*='--next']) {
+ border-radius: 100%;
+
+ &:not(.is-active):hover {
+ background-color: var(--color-link-base);
+ border-color: var(--color-link-base);
+ color: white;
+ }
+ }
+
+ &--previous,
+ &--next {
+ &:hover {
+ color: var(--color-link-base);
+ }
+ }
+
+ &.is-active {
+ color: var(--color-basic-brown-gray);
+ border-color: var(--color-basic-brown-gray);
+ }
+}
+
+.pager__icon {
+ height: 0.8em;
+ width: 0.8em;
+
+ &--previous {
+ transform: rotate(90deg);
+ }
+
+ &--next {
+ transform: rotate(-90deg);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/cl-pager.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/cl-pager.js
new file mode 100644
index 000000000..7c0df440f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/cl-pager.js
@@ -0,0 +1,29 @@
+// This js is strictly for Storybook to simulate pagination.
+
+Drupal.behaviors.clPagination = {
+ attach(context) {
+ const items = context.querySelectorAll('.pager__item');
+ const activeClass = 'is-active';
+
+ items.forEach((item) => {
+ item.addEventListener('click', (e) => {
+ e.preventDefault();
+
+ const activeItem = context.querySelector('.is-active');
+ const activeLink = activeItem.querySelector('.pager__link');
+ const link = item.querySelector('a');
+
+ // Remove active class from previously active item.
+ activeItem.classList.remove(activeClass);
+ activeLink.classList.remove(activeClass);
+ // Simulate the item becoming a link.
+ activeLink.style.cursor = 'pointer';
+ // Add active class to the clicked item.
+ item.classList.add(activeClass);
+ link.classList.add(activeClass);
+ // Simulate the item becoming plain text.
+ link.style.cursor = 'text';
+ });
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-first-and-last.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-first-and-last.yml
new file mode 100644
index 000000000..d7322dad8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-first-and-last.yml
@@ -0,0 +1,28 @@
+pager__uid: 1
+current: 5
+items:
+ first:
+ href: '#'
+ last:
+ href: '#'
+ previous:
+ href: '#'
+ next:
+ href: '#'
+ pages:
+ 1:
+ 2:
+ 3:
+ href: '#'
+ 4:
+ href: '#'
+ 5:
+ href: '#'
+ 6:
+ href: '#'
+ 7:
+ href: '#'
+ 8:
+ 9:
+ 10:
+ 11:
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-first.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-first.yml
new file mode 100644
index 000000000..a4889f5b3
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-first.yml
@@ -0,0 +1,20 @@
+pager__uid: 3
+current: 7
+items:
+ first:
+ href: '#'
+ previous:
+ href: '#'
+ pages:
+ 1:
+ 2:
+ 3:
+ href: '#'
+ 4:
+ href: '#'
+ 5:
+ href: '#'
+ 6:
+ href: '#'
+ 7:
+ href: '#'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-last.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-last.yml
new file mode 100644
index 000000000..d2b848e14
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager-last.yml
@@ -0,0 +1,24 @@
+pager__uid: 2
+current: 1
+items:
+ last:
+ href: '#'
+ next:
+ href: '#'
+ pages:
+ 1:
+ href: '#'
+ 2:
+ href: '#'
+ 3:
+ href: '#'
+ 4:
+ href: '#'
+ 5:
+ href: '#'
+ 6:
+ 7:
+ 8:
+ 9:
+ 10:
+ 11:
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager.stories.js
new file mode 100644
index 000000000..b865329fc
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager.stories.js
@@ -0,0 +1,23 @@
+import pager from './yds-pager.twig';
+
+import pagerData from './pager.yml';
+import pagerFirstData from './pager-first.yml';
+import pagerLastData from './pager-last.yml';
+import pagerFirstAndLastData from './pager-first-and-last.yml';
+
+// Demo JS.
+import './cl-pager';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Molecules/Pager' };
+
+export const Basic = () => pager(pagerData);
+
+export const First = () => pager({ ...pagerData, ...pagerFirstData });
+
+export const Last = () => pager({ ...pagerData, ...pagerLastData });
+
+export const FirstAndLast = () =>
+ pager({ ...pagerData, ...pagerFirstAndLastData });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager.yml
new file mode 100644
index 000000000..59faf48d4
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/pager.yml
@@ -0,0 +1,18 @@
+pager__uid: 0
+current: 3
+items:
+ previous:
+ href: '#'
+ next:
+ href: '#'
+ pages:
+ 1:
+ href: '#'
+ 2:
+ href: '#'
+ 3:
+ href: '#'
+ 4:
+ href: '#'
+ 5:
+ href: '#'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/yds-pager.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/yds-pager.twig
new file mode 100644
index 000000000..eaed171a3
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pager/yds-pager.twig
@@ -0,0 +1,79 @@
+{% set pager__base_class = 'pager' %}
+
+{% if items %}
+
+
+
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/_yds-pull-quote.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/_yds-pull-quote.scss
new file mode 100644
index 000000000..103f704b3
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/_yds-pull-quote.scss
@@ -0,0 +1,180 @@
+@use '../../00-tokens/tokens';
+@use '../../00-tokens/functions/map';
+
+$global-quote-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$quote-component-themes: map.deep-get(tokens.$tokens, 'component-themes');
+
+blockquote {
+ margin: 0;
+}
+
+.pull-quote {
+ --color-pull-quote-quote: var(--color-gray-800);
+ --color-pull-quote-attribution: var(--color-basic-brown-gray);
+
+ @include tokens.spacing-page-section;
+
+ // if animation is active
+ [data-site-animation='artistic'] & {
+ &[data-animate-item='enabled'] {
+ @include tokens.animate(
+ $property: 'transform',
+ $duration: var(--animation-speed-slow)
+ );
+ @include tokens.fade-in-up;
+ }
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $quote-component-themes {
+ &[data-component-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-pull-quote-accent: var(--color-pull-quote-accent);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-quote-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-pull-quote-accent: var(--color-slot-one);
+ }
+
+ &[data-component-theme='two'] {
+ --color-pull-quote-accent: var(--color-slot-three);
+ }
+
+ &[data-component-theme='three'] {
+ --color-pull-quote-accent: var(--color-slot-five);
+ }
+}
+
+.pull-quote__figure {
+ --pull-quote-border-height: 100%;
+
+ @media (min-width: tokens.$break-mobile) {
+ max-width: calc(var(--size-component-layout-width-content) - 11rem);
+ }
+
+ [data-pull-quote-style='bar-left'] & {
+ position: relative;
+ padding-left: var(--size-spacing-6);
+
+ @media (min-width: tokens.$break-mobile) {
+ margin-left: var(--size-spacing-7);
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ left: calc(var(--border-thickness-4) * -1);
+ bottom: 0;
+ height: var(--pull-quote-border-height);
+ width: var(--border-thickness-4);
+ background-color: var(--color-pull-quote-accent);
+ }
+ }
+
+ [data-pull-quote-style='bar-right'] & {
+ position: relative;
+ padding-right: var(--size-spacing-6);
+ text-align: right;
+
+ @media (min-width: tokens.$break-mobile) {
+ margin-left: 9rem;
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ right: calc(var(--border-thickness-4) * -1);
+ bottom: 0;
+ height: var(--pull-quote-border-height);
+ width: var(--border-thickness-4);
+ background-color: var(--color-pull-quote-accent);
+ }
+ }
+
+ [data-pull-quote-style='quote-left'] & {
+ position: relative;
+ padding-left: var(--size-spacing-8);
+
+ &::before {
+ content: '“';
+ font-family: var(--font-families-yalenew);
+ position: absolute;
+ top: 0;
+ left: 0;
+ font-size: 4em;
+ line-height: 0.8;
+ color: var(--color-pull-quote-accent);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ margin-left: var(--size-spacing-6);
+ }
+ }
+
+ // if animation is active
+ // prettier-ignore
+ [data-site-animation='artistic'] [data-pull-quote-style='bar-left'][data-animate-item='true'] &,
+ [data-site-animation='artistic'] [data-pull-quote-style='bar-right'][data-animate-item='true'] & {
+ @include tokens.animate($duration: var(--animation-speed-default));
+
+ --pull-quote-border-height: 0;
+
+ &::before {
+ --animation-speed-mid-slow: 400ms;
+
+ height: var(--pull-quote-border-height);
+
+ @include tokens.animate(
+ $property: height,
+ $duration: var(--animation-speed-mid-slow),
+ $delay: 400ms
+ );
+ }
+ }
+
+ // when the animate class is added, animate the quote bar height.
+ // prettier-ignore
+ [data-site-animation='artistic'] [data-pull-quote-style='bar-left'][data-animate-item='true'].animate &,
+ [data-site-animation='artistic'] [data-pull-quote-style='bar-right'][data-animate-item='true'].animate & {
+ --pull-quote-border-height: 100%;
+
+ &::before {
+ @include tokens.expand-height(--pull-quote-border-height);
+ }
+ }
+}
+
+.pull-quote__quote {
+ font: var(--font-style-body-xl);
+ color: var(--color-pull-quote-quote);
+
+ > *:last-child {
+ margin-bottom: 0;
+ }
+}
+
+.pull-quote__attribution {
+ font: var(--font-style-body-default);
+ color: var(--color-pull-quote-attribution);
+ margin-top: 0.4em;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/pull-quote.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/pull-quote.stories.js
new file mode 100644
index 000000000..18e8fccfa
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/pull-quote.stories.js
@@ -0,0 +1,60 @@
+import pullQuoteTwig from './yds-pull-quote.twig';
+
+import pullQuoteData from './pull-quote.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Quotes/Pull Quote',
+ argTypes: {
+ quote: {
+ name: 'Quote',
+ type: 'string',
+ defaultValue: pullQuoteData.pull_quote__quote,
+ },
+ attribution: {
+ name: 'Attribution',
+ type: 'string',
+ defaultValue: pullQuoteData.pull_quote__attribution,
+ },
+ style: {
+ name: 'Style',
+ options: ['bar-left', 'bar-right', 'quote-left'],
+ type: 'select',
+ defaultValue: 'bar-left',
+ },
+ accentColor: {
+ name: 'Component Theme (dial)',
+ options: ['one', 'two', 'three'],
+ type: 'select',
+ defaultValue: 'one',
+ },
+ },
+};
+
+export const pullQuote = ({ style, accentColor, quote, attribution }) => `
+ ${pullQuoteTwig({
+ pull_quote__quote: pullQuoteData.pull_quote__quote,
+ pull_quote__attribution: pullQuoteData.pull_quote__attribution,
+ })}
+ ${pullQuoteTwig({
+ pull_quote__quote: pullQuoteData.pull_quote__quote,
+ pull_quote__style: 'bar-right',
+ })}
+ ${pullQuoteTwig({
+ pull_quote__quote: pullQuoteData.pull_quote__quote,
+ pull_quote__attribution: pullQuoteData.pull_quote__attribution,
+ pull_quote__style: 'quote-left',
+ })}
+
+
Playground
+
Use the StoryBook controls to see the quote below implement the available variations and colors.
+ ${pullQuoteTwig({
+ pull_quote__quote: quote,
+ pull_quote__attribution: attribution,
+ pull_quote__style: style,
+ pull_quote__accent_theme: accentColor,
+ })}
+
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/pull-quote.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/pull-quote.yml
new file mode 100644
index 000000000..ae3163ee1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/pull-quote.yml
@@ -0,0 +1,2 @@
+pull_quote__quote: Yale changed that thinking. It was evident in every class, every conversation, every project, that a business cannot exist in a vacuum, and that a business with the sole purpose of profit, with total disregard for its surroundings, will eventually fizzle out.
+pull_quote__attribution: Annie Nymity
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/yds-pull-quote.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/yds-pull-quote.twig
new file mode 100644
index 000000000..7c4d77766
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/pull-quote/yds-pull-quote.twig
@@ -0,0 +1,40 @@
+{#
+ # Available Props:
+ # - pull_quote__style: bar-left, bar-right, or quote-left
+ # - animate__item: defaults to `enabled`, will only animate if site_animate_components (lever / config) is not `default`
+ #
+ # Available Variables:
+ # - pull_quote__quote (required)
+ # - pull_quote__attribution
+ #}
+
+{% set pull_quote__base_class = 'pull-quote' %}
+{% set pull_quote__style = pull_quote__style|default('bar-left') %}
+
+{# If pull_quote__attributes is not defined, set it to an empty object by default #}
+{% set pull_quote__attributes = pull_quote__attributes|default({}) %}
+
+{% set pull_quote__attributes = pull_quote__attributes|merge({
+ 'data-animate-item': animate__item|default('enabled'),
+}) %}
+
+{% set pull_quote__attributes = pull_quote__attributes|merge({
+ 'data-component-width': pull_quote__width|default('content'),
+ 'data-pull-quote-style': pull_quote__style,
+ 'data-component-theme': pull_quote__accent_theme|default('one'),
+ 'data-component-alignment': pull_quote__alignment|default('center'),
+ class: bem(pull_quote__base_class, pull_quote__modifiers),
+}) %}
+
+ {% block prefix_suffix %}{% endblock %}
+
+
+
+ {{ pull_quote__quote }}
+
+ {% if pull_quote__attribution %}
+ —{{ pull_quote__attribution }}
+ {% endif %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/_yds-quick-links--links.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/_yds-quick-links--links.twig
new file mode 100644
index 000000000..9ef8d3130
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/_yds-quick-links--links.twig
@@ -0,0 +1,10 @@
+{% set quick_links__base_class = 'quick-links' %}
+
+
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: quick_links__link__content|default(link.quick_links__link__content),
+ cta__href: quick_links__link__url|default(link.quick_links__link__url),
+ cta__blockname: quick_links__base_class,
+ cta__style: 'outline',
+ } %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/_yds-quick-links.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/_yds-quick-links.scss
new file mode 100644
index 000000000..f1ed15a5f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/_yds-quick-links.scss
@@ -0,0 +1,232 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+@use '../../00-tokens/functions/map';
+@use '../../01-atoms/controls/text-link/yds-text-link' as link;
+
+// get global themes
+$global-quick-links-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$component-quick-links-themes: map.deep-get(tokens.$tokens, 'component-themes');
+
+.quick-links {
+ @include tokens.spacing-page-section($banner-spacing: true);
+
+ background-color: var(--color-background);
+ color: var(--color-text);
+ position: relative;
+ overflow: hidden;
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-quick-links-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-quick-links-themes {
+ &[data-component-theme='#{$theme}'] {
+ --color-background: var(--color-quick-links-background);
+ --color-text: var(--color-quick-links-text);
+ --color-heading: var(--color-quick-links-heading);
+ --color-action: var(--color-quick-links-action);
+ --color-action-secondary: var(--color-quick-links-action-secondary);
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-quick-links-background: var(--color-slot-one);
+ --color-quick-links-text: var(--color-basic-white);
+ --color-quick-links-heading: var(--color-basic-white);
+ --color-quick-links-action: var(--color-basic-white);
+ --color-quick-links-action-secondary: var(--color-slot-one);
+ --color-link-base: var(--color-slot-eight);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+
+ &[data-component-theme='two'] {
+ --color-quick-links-background: var(--color-slot-four);
+ --color-quick-links-text: var(--color-gray-800);
+ --color-quick-links-heading: var(--color-gray-800);
+ --color-quick-links-action: var(--color-gray-800);
+ --color-quick-links-action-secondary: var(--color-basic-white);
+ --color-link-base: var(--color-slot-seven);
+ }
+
+ &[data-component-theme='three'] {
+ --color-quick-links-background: var(--color-slot-five);
+ --color-quick-links-text: var(--color-basic-white);
+ --color-quick-links-heading: var(--color-basic-white);
+ --color-quick-links-action: var(--color-basic-white);
+ --color-quick-links-action-secondary: var(--color-slot-one);
+ --color-link-base: var(--color-slot-eight);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+}
+
+.quick-links__inner {
+ display: grid;
+ gap: var(--size-spacing-6);
+ align-items: center;
+
+ @media (min-width: tokens.$break-s) {
+ gap: var(--size-spacing-7);
+ }
+
+ @media (min-width: tokens.$break-l) {
+ gap: var(--size-spacing-8);
+ }
+
+ @media (min-width: tokens.$break-xl) {
+ gap: var(--size-spacing-9);
+ }
+
+ [data-quick-links-variation='promotional'] & {
+ padding-block-start: var(--size-spacing-9);
+ padding-block-end: var(--size-spacing-9);
+ }
+
+ [data-quick-links-layout='fluid'] & {
+ @media (min-width: tokens.$break-xl) {
+ grid-template-columns: 1fr 2fr;
+ }
+ }
+}
+
+.quick-links__text {
+ z-index: 1;
+ display: grid;
+ gap: var(--size-spacing-4);
+
+ @media (min-width: tokens.$break-m) {
+ gap: var(--size-spacing-5);
+ }
+
+ @media (min-width: tokens.$break-xl) {
+ gap: var(--size-spacing-6);
+ }
+}
+
+.quick-links__heading {
+ @include tokens.h2-yale-new;
+
+ [data-quick-links-layout='stacked'] & {
+ text-align: center;
+ }
+}
+
+.quick-links__description {
+ [data-quick-links-layout='stacked'] & {
+ text-align: center;
+ }
+
+ > *:last-child {
+ margin-bottom: 0;
+ }
+
+ // in-content link:visited color changes based on theme
+ a {
+ @include link.plain-link;
+ }
+}
+
+.quick-links__links {
+ @include atoms.list-reset;
+
+ position: relative;
+ display: grid;
+ align-items: start;
+ row-gap: var(--size-spacing-6);
+ column-gap: var(--size-spacing-7);
+
+ [data-quick-links-variation='promotional'] & {
+ @media (min-width: tokens.$break-s) {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ @media (min-width: tokens.$break-m) {
+ gap: var(--size-spacing-7) var(--size-spacing-9);
+ }
+
+ @media (min-width: tokens.$break-l) {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+ }
+
+ [data-quick-links-variation='promotional'][data-quick-links-layout='stacked']
+ & {
+ @media (min-width: tokens.$break-xl) {
+ grid-template-columns: 1fr 1fr 1fr 1fr;
+ }
+ }
+
+ [data-quick-links-variation='promotional'][data-quick-links-layout='fluid']
+ & {
+ @media (min-width: tokens.$break-xl) {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ @media (min-width: tokens.$break-2xl) {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+ }
+}
+
+.quick-links__list-item {
+ height: 100%;
+
+ [data-quick-links-variation='promotional'] & {
+ display: grid;
+ }
+}
+
+.quick-links__link {
+ @include atoms.link;
+}
+
+.quick-links__cta {
+ @include atoms.cta;
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.quick-links__image {
+ [data-quick-links-variation='promotional'] & {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-blend-mode: multiply;
+ background-color: var(--color-background);
+ opacity: 0.15;
+
+ img {
+ height: 100%;
+ width: 100%;
+ object-fit: cover;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/quick-links.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/quick-links.stories.js
new file mode 100644
index 000000000..15954613c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/quick-links.stories.js
@@ -0,0 +1,42 @@
+import quickLinksTwig from './yds-quick-links.twig';
+
+import quickLinksData from './quick-links.yml';
+
+import imageData from '../../01-atoms/images/image/image.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Quick-links',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: quickLinksData.quick_links__heading,
+ },
+ description: {
+ name: 'Description',
+ type: 'string',
+ defaultValue: quickLinksData.quick_links__description,
+ },
+ image: {
+ name: 'With image',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ },
+};
+
+export const quickLinks = ({ heading, description, variation, image }) =>
+ quickLinksTwig({
+ ...quickLinksData,
+ ...imageData.responsive_images['16x9'],
+ quick_links__heading: heading,
+ quick_links__description: description,
+ quick_links__variation: variation,
+ quick_links__image: image,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/quick-links.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/quick-links.yml
new file mode 100644
index 000000000..146df38b8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/quick-links.yml
@@ -0,0 +1,15 @@
+quick_links__heading: 'Heading for Quick Links'
+quick_links__description: 'This is a Quick Links description.
'
+quick_links__links:
+ - quick_links__link__url: '#'
+ quick_links__link__content: 'This is a link'
+ - quick_links__link__url: 'https://google.com'
+ quick_links__link__content: 'This is another link'
+ - quick_links__link__url: 'https://google.com/download.pdf'
+ quick_links__link__content: 'This is a very long link that will wrap lines'
+ - quick_links__link__url: '#'
+ quick_links__link__content: 'Link #4'
+ # - quick_links__link__url: '#'
+ # quick_links__link__content: 'This is yet another link'
+ # - quick_links__link__url: '#'
+ # quick_links__link__content: 'Finally, the last link'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/yds-quick-links.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/yds-quick-links.twig
new file mode 100644
index 000000000..cd2747f22
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quick-links/yds-quick-links.twig
@@ -0,0 +1,68 @@
+{#
+ # Available Props:
+ # - quick_links__variation: promotional (default), subtle
+ # - quick_links__image: (boolean) false by default
+ #
+ # Available Variables:
+ # - quick_links__heading
+ # - quick_links__description
+ # - quick_links__links: array of links that each have the following
+ # - quick_links__link__url
+ # - quick_links__link__content
+ #
+ # Available Blocks:
+ # - quick_links__image
+ #}
+
+{% set quick_links__base_class = 'quick-links' %}
+{% set quick_links__variation = quick_links__variation|default('promotional') %}
+
+{% if quick_links__description %}
+ {% set quick_links__layout = 'fluid' %}
+{% endif %}
+
+{% set quick_links__attributes = {
+ 'data-quick-links-variation': quick_links__variation,
+ 'class': bem(quick_links__base_class),
+} %}
+
+{% set quick_links__attributes = quick_links__attributes|merge({
+ 'data-component-width': 'site',
+ 'data-component-theme': quick_links__background_color|default('one'),
+ 'data-quick-links-layout': quick_links__layout|default('stacked'),
+}) %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: quick_links__base_class,
+ heading: quick_links__heading,
+ } %}
+ {% if quick_links__description %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'description',
+ text__blockname: quick_links__base_class,
+ text__content: quick_links__description,
+ } %}
+ {% endif %}
+
+ {% if quick_links__image %}
+
+ {% block quick_links__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+
+ {% endif %}
+
+ {% block quick_links__links %}
+ {% for link in quick_links__links %}
+ {% include "@molecules/quick-links/_yds-quick-links--links.twig" %}
+ {% endfor %}
+ {% endblock %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/_yds-quote-callout.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/_yds-quote-callout.scss
new file mode 100644
index 000000000..e5b4d6cd1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/_yds-quote-callout.scss
@@ -0,0 +1,298 @@
+@use '../../00-tokens/tokens';
+@use '../../00-tokens/functions/map';
+
+$global-quote-callout-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$quote-callout-component-themes: map.deep-get(
+ tokens.$tokens,
+ 'component-themes'
+);
+
+blockquote {
+ margin: 0;
+}
+
+.quote-callout {
+ --color-quote-callout-quote: var(--color-gray-800);
+ --color-quote-callout-attribution: var(--color-basic-brown-gray);
+
+ padding-block-start: var(--size-spacing-10);
+ padding-block-end: var(--size-spacing-10);
+
+ // Or if the spotlight is the only spotlight on the page
+ &[data-spotlights-position='first-and-last'] {
+ @include tokens.spacing-page-section;
+ }
+
+ // We're using JavaScript to evaluate the last and first spotlights in a group of spotlights
+ &[data-spotlights-position='first'] {
+ margin-top: var(--size-spacing-10);
+ }
+
+ &[data-spotlights-position='last'] {
+ margin-bottom: var(--size-spacing-10);
+ }
+
+ // if animation is active
+ [data-site-animation='artistic'] & {
+ &[data-animate-item='enabled'] {
+ @include tokens.animate(
+ $property: 'transform',
+ $duration: var(--animation-speed-slow)
+ );
+ @include tokens.fade-in-up;
+ }
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $quote-callout-component-themes {
+ &[data-component-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--component-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--component-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--component-themes-#{$theme}-slot-eight);
+ --color-quote-callout-accent: var(--color-quote-callout-accent);
+ --color-quote-callout-background: var(--color-quote-callout-background);
+
+ background-color: var(--color-quote-callout-background);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-quote-callout-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-quote-callout-background: var(--color-slot-one);
+ --color-quote-callout-accent: var(--color-slot-eight);
+ --color-quote-callout-quote: var(--color-slot-eight);
+ --color-quote-callout-attribution: var(--color-slot-eight);
+ }
+
+ &[data-component-theme='two'] {
+ --color-quote-callout-background: var(--color-slot-three);
+ --color-quote-callout-accent: var(--color-slot-seven);
+ --color-quote-callout-quote: var(--color-slot-seven);
+ --color-quote-callout-attribution: var(--color-slot-seven);
+ }
+
+ &[data-component-theme='three'] {
+ --color-quote-callout-background: var(--color-slot-five);
+ --color-quote-callout-accent: var(--color-slot-eight);
+ --color-quote-callout-quote: var(--color-slot-eight);
+ --color-quote-callout-attribution: var(--color-slot-eight);
+ }
+}
+
+.quote-callout__figure {
+ --quote-callout-border-height: 100%;
+
+ @media (min-width: tokens.$break-mobile) {
+ max-width: calc(var(--size-component-layout-width-content) - 11rem);
+ }
+
+ // with image
+ [data-quote-callout-style='image'] & {
+ flex: 1 0 calc(70% - var(--size-spacing-8));
+ }
+
+ [data-quote-callout-style='bar'][data-quote-callout-quote-alignment='left']
+ & {
+ position: relative;
+ padding-left: var(--size-spacing-6);
+
+ @media (min-width: tokens.$break-mobile) {
+ margin-left: var(--size-spacing-7);
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ left: calc(var(--border-thickness-4) * -1);
+ bottom: 0;
+ height: var(--quote-callout-border-height);
+ width: var(--border-thickness-4);
+ background-color: var(--color-quote-callout-accent);
+ }
+ }
+
+ [data-quote-callout-style='bar'][data-quote-callout-quote-alignment='right']
+ & {
+ position: relative;
+ padding-right: var(--size-spacing-6);
+ text-align: right;
+
+ @media (min-width: tokens.$break-mobile) {
+ margin-left: calc(var(--size-spacing-13) - 1rem);
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ right: calc(var(--border-thickness-4) * -1);
+ bottom: 0;
+ height: var(--quote-callout-border-height);
+ width: var(--border-thickness-4);
+ background-color: var(--color-quote-callout-accent);
+ }
+ }
+
+ [data-quote-callout-style='quote'][data-quote-callout-quote-alignment='left']
+ & {
+ position: relative;
+ padding-left: var(--size-spacing-8);
+
+ &::before {
+ content: '“';
+ font-family: var(--font-families-yalenew);
+ position: absolute;
+ top: 0;
+ left: 0;
+ font-size: var(--size-spacing-11);
+ line-height: 1;
+ color: var(--color-quote-callout-accent);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ margin-left: var(--size-spacing-6);
+ }
+ }
+
+ [data-quote-callout-style='quote'][data-quote-callout-quote-alignment='right']
+ & {
+ position: relative;
+ padding-left: var(--size-spacing-8);
+ text-align: right;
+
+ @media (min-width: tokens.$break-mobile) {
+ margin-left: calc(var(--size-spacing-13) - 1rem);
+ }
+
+ &::before {
+ content: '“';
+ font-family: var(--font-families-yalenew);
+ position: absolute;
+ top: 0;
+ left: 0;
+ font-size: var(--size-spacing-11);
+ line-height: 1;
+ color: var(--color-quote-callout-accent);
+ }
+ }
+
+ // if animation is active, animate bar variation
+ // prettier-ignore
+ [data-site-animation='artistic'] [data-quote-callout-style='bar'][data-quote-callout-quote-alignment='left'][data-animate-item='true'] &,
+ [data-site-animation='artistic'] [data-quote-callout-style='bar'][data-quote-callout-quote-alignment='right'][data-animate-item='true'] & {
+ @include tokens.animate($duration: var(--animation-speed-default));
+
+ --quote-callout-border-height: 0;
+
+ &::before {
+ --animation-speed-mid-slow: 400ms;
+
+ height: var(--quote-callout-border-height);
+
+ @include tokens.animate(
+ $property: height,
+ $duration: var(--animation-speed-mid-slow),
+ $delay: 400ms
+ );
+ }
+ }
+
+ // when the animate class is added, animate the quote bar height.
+ // prettier-ignore
+ [data-site-animation='artistic'] [data-quote-callout-style='bar'][data-animate-item='true'].animate & {
+ --quote-callout-border-height: 100%;
+
+ &::before {
+ @include tokens.expand-height(--quote-callout-border-height);
+ }
+ }
+}
+
+.quote-callout__inner {
+ // image variaton
+ [data-quote-callout-style='image'] & {
+ display: flex;
+ flex-flow: column nowrap;
+ gap: var(--size-spacing-8);
+
+ @media (min-width: tokens.$break-mobile) {
+ flex-flow: row wrap;
+ }
+ }
+
+ [data-quote-callout-style='image'][data-quote-callout-quote-alignment='right']
+ & {
+ @media (min-width: tokens.$break-mobile) {
+ flex-direction: row-reverse;
+ }
+ }
+
+ @media (max-width: tokens.$break-mobile-max) {
+ padding-inline-start: var(--size-spacing-6);
+ padding-inline-end: var(--size-spacing-6);
+ }
+}
+
+.quote-callout__quote {
+ font: var(--font-style-body-xl);
+ color: var(--color-quote-callout-quote);
+
+ > *:last-child {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+}
+
+.quote-callout__attribution {
+ font: var(--font-style-body-default);
+ color: var(--color-quote-callout-attribution);
+ margin-top: var(--size-spacing-3);
+ display: inline-flex;
+
+ > p {
+ margin: 0;
+ }
+}
+
+.quote-callout__image {
+ width: 100%;
+ max-width: 60%;
+ align-self: flex-start;
+
+ @media (min-width: tokens.$break-mobile) {
+ flex: 1 0 calc(30% - var(--size-spacing-8));
+
+ // push the image down a bit to align with the quote text
+ margin-top: var(--size-spacing-4);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/quote-callout.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/quote-callout.stories.js
new file mode 100644
index 000000000..546ccc48d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/quote-callout.stories.js
@@ -0,0 +1,101 @@
+import quoteCalloutTwig from './yds-quote-callout.twig';
+
+import quoteCalloutData from './quote-callout.yml';
+
+// Image atom component - generic images for demo
+import imageData from '../../01-atoms/images/image/image.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Quotes/Quote Callout',
+ argTypes: {
+ quote: {
+ name: 'Quote',
+ type: 'string',
+ defaultValue: quoteCalloutData.quote_callout__quote,
+ },
+ attribution: {
+ name: 'Attribution',
+ type: 'string',
+ defaultValue: quoteCalloutData.quote_callout__attribution,
+ },
+ style: {
+ name: 'Style',
+ options: ['bar', 'quote'],
+ type: 'select',
+ defaultValue: 'bar',
+ },
+ quoteAlignment: {
+ name: 'Quote Alignment',
+ options: ['left', 'right'],
+ type: 'select',
+ defaultValue: 'left',
+ },
+ accentColor: {
+ name: 'Component Theme (dial)',
+ options: ['one', 'two', 'three'],
+ type: 'select',
+ defaultValue: 'one',
+ },
+ quoteImage: {
+ name: 'Quote Image',
+ options: ['with-image', 'no-image'],
+ type: 'select',
+ defaultValue: 'no-image',
+ },
+ },
+};
+
+export const quoteCallout = ({
+ style,
+ accentColor,
+ quote,
+ attribution,
+ quoteAlignment,
+ quoteImage,
+}) => `
+ ${quoteCalloutTwig({
+ quote_callout__quote: quoteCalloutData.quote_callout__quote,
+ quote_callout__attribution: quoteCalloutData.quote_callout__attribution,
+ })}
+ ${quoteCalloutTwig({
+ quote_callout__quote: quoteCalloutData.quote_callout__quote,
+ quote_callout__style: 'bar',
+ quote_callout__quote_alignment: 'right',
+ })}
+ ${quoteCalloutTwig({
+ quote_callout__quote: quoteCalloutData.quote_callout__quote,
+ quote_callout__attribution: quoteCalloutData.quote_callout__attribution,
+ quote_callout__style: 'quote',
+ quote_callout__quote_alignment: 'left',
+ })}
+ ${quoteCalloutTwig({
+ quote_callout__quote: quoteCalloutData.quote_callout__quote,
+ quote_callout__attribution: quoteCalloutData.quote_callout__attribution,
+ quote_callout__style: 'quote',
+ quote_callout__quote_alignment: 'right',
+ })}
+ ${quoteCalloutTwig({
+ quote_callout__quote: quoteCalloutData.quote_callout__quote,
+ quote_callout__attribution: quoteCalloutData.quote_callout__attribution,
+ quote_callout__style: 'image',
+ quote_callout__quote_alignment: 'left',
+ quote_callout__quote_image: 'with-image',
+ ...imageData.responsive_images['1x1'],
+ })}
+
+
Playground
+
Use the StoryBook controls to see the quote below implement the available variations and colors.
+ ${quoteCalloutTwig({
+ quote_callout__quote: quote,
+ quote_callout__attribution: attribution,
+ quote_callout__style: style,
+ quote_callout__accent_theme: accentColor,
+ quote_callout__quote_alignment: quoteAlignment,
+ quote_callout__quote_image: quoteImage,
+ ...imageData.responsive_images['1x1'],
+ })}
+
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/quote-callout.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/quote-callout.yml
new file mode 100644
index 000000000..b7ba61e01
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/quote-callout.yml
@@ -0,0 +1,2 @@
+quote_callout__quote: Yale changed that thinking. It was evident in every class, every conversation, every project, that a business cannot exist in a vacuum, and that a business with the sole purpose of profit, with total disregard for its surroundings, will eventually fizzle out.
+quote_callout__attribution: Annie Nymity
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/yds-quote-callout.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/yds-quote-callout.twig
new file mode 100644
index 000000000..fbcae2912
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/quote-callout/yds-quote-callout.twig
@@ -0,0 +1,53 @@
+{#
+ # Available Props:
+ # - quote_callout__style: bar, quote
+ # - animate__item: defaults to `enabled`, will only animate if site_animate_components (lever / config) is not `default`
+ #
+ # Available Variables:
+ # - quote_callout__quote (required)
+ # - quote_callout__attribution
+ #}
+
+{% set quote_callout__base_class = 'quote-callout' %}
+{% set quote_callout__style = quote_callout__style|default('bar') %}
+
+{# If quote_callout__attributes is not defined, set it to an empty object by default #}
+{% set quote_callout__attributes = quote_callout__attributes|default({}) %}
+
+{# If quote_callout__quote_image is 'with-image' set data-quote-callout-style = 'image' #}
+{% if quote_callout__quote_image == 'with-image' %}
+ {% set quote_callout__style = 'image' %}
+{% endif %}
+
+{% set quote_callout__attributes = quote_callout__attributes|merge({
+ 'data-animate-item': animate__item|default('enabled'),
+}) %}
+
+{% set quote_callout__attributes = quote_callout__attributes|merge({
+ 'data-component-width': quote_callout__width|default('content'),
+ 'data-quote-callout-style': quote_callout__style,
+ 'data-component-theme': quote_callout__accent_theme|default('one'),
+ 'data-component-alignment': quote_callout__alignment|default('center'),
+ 'data-quote-callout-quote-alignment': quote_callout__quote_alignment|default('left'),
+ class: bem(quote_callout__base_class, quote_callout__modifiers),
+}) %}
+
+ {% block prefix_suffix %}{% endblock %}
+
+ {% if quote_callout__quote_image == 'with-image' %}
+
+ {% block quote_callout__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+
+ {% endif %}
+
+
+ {{ quote_callout__quote }}
+
+ {% if quote_callout__attribution %}
+ —{{ quote_callout__attribution }}
+ {% endif %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/_yds-search-result.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/_yds-search-result.scss
new file mode 100644
index 000000000..21eebb450
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/_yds-search-result.scss
@@ -0,0 +1,52 @@
+@use '../../01-atoms/atoms';
+@use '../../00-tokens/tokens';
+
+.search-results--summary {
+ font-style: italic;
+ color: var(--color-gray-600);
+ margin-bottom: var(--spacing-page-inner);
+}
+
+.search-form--page {
+ display: flex;
+ gap: var(--size-spacing-5);
+ margin-bottom: var(--size-spacing-8);
+}
+
+.search-result {
+ @include atoms.clickable-component-heading-link;
+
+ --color-text-shadow: var(--color-basic-white);
+
+ padding: var(--size-spacing-5) 0;
+ border-bottom: 1px solid var(--color-gray-300);
+
+ @media (min-width: tokens.$break-mobile-max) {
+ max-width: var(--size-component-layout-width-content);
+ }
+
+ &:hover {
+ box-shadow: var(--drop-shadow-level-1-bottom-shadow-only);
+ }
+}
+
+.search-result__heading {
+ @include tokens.h4-yale-new;
+
+ color: var(--color-gray-800);
+}
+
+.search-result__highlighted,
+.search-result__teaser {
+ margin: var(--size-spacing-3) 0;
+}
+
+.search-result__highlighted {
+ strong {
+ color: var(--color-gray-800);
+ }
+}
+
+.search-result__teaser {
+ color: var(--color-gray-600);
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/breadcrumbs.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/breadcrumbs.yml
new file mode 100644
index 000000000..3648ac7db
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/breadcrumbs.yml
@@ -0,0 +1,10 @@
+items:
+ - title: 'Home'
+ url: '#'
+ is_active: true
+ - title: 'Academic Programs'
+ url: '#'
+ is_active: true
+ - title: 'Undergraduate Chemistry'
+ url: '#'
+ is_active: true
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/search-result.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/search-result.yml
new file mode 100644
index 000000000..06384ecee
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/search-result.yml
@@ -0,0 +1,3 @@
+search_result__title: 'Page title'
+search_result__highlighted: '...showing word in page result...'
+search_result__teaser: 'Meta text here if available. Lorem ipsum dolor amet four loko distillery typewriter twee prism. Umami pinterest knausgaard four dollar toast occupy.
'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/yds-search-result.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/yds-search-result.stories.js
new file mode 100644
index 000000000..8c3ea0669
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/yds-search-result.stories.js
@@ -0,0 +1,39 @@
+// Twig templates
+import searchResultTwig from './yds-search-result.twig';
+
+// Data files
+import searchResultData from './search-result.yml';
+import breadcrumbData from './breadcrumbs.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Search Result',
+ argTypes: {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: searchResultData.search_result__title,
+ },
+ highlighted: {
+ name: 'Search Results Highlighted',
+ type: 'string',
+ defaultValue: searchResultData.search_result__highlighted,
+ },
+ teaser: {
+ name: 'Search Results Teaser',
+ type: 'string',
+ defaultValue: searchResultData.search_result__teaser,
+ },
+ },
+};
+
+export const SearchResult = ({ heading, highlighted, teaser }) =>
+ searchResultTwig({
+ search_result__teaser: teaser,
+ search_result__title: heading,
+ search_result__url: '#',
+ search_result__highlighted: highlighted,
+ breadcrumbs__items: breadcrumbData.items,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/yds-search-result.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/yds-search-result.twig
new file mode 100644
index 000000000..b654def53
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/search-result/yds-search-result.twig
@@ -0,0 +1,42 @@
+{#
+ # Available Variables:
+ # - search_result__title
+ # - search_result__url
+ # - search_result__highlighted
+ # - search_result__teaser
+ #}
+
+{% set search_result__base_class = 'search-result' %}
+
+{% set search_result__attributes = {
+ 'class': bem(search_result__base_class),
+} %}
+
+
+
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: search_result__base_class,
+ heading: search_result__title,
+ heading__url: search_result__url,
+ } %}
+
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" with {
+ breadcrumbs__modifiers: search_result__base_class
+ } %}
+ {% if search_result__highlighted %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'highlighted',
+ text__blockname: search_result__base_class,
+ text__content: search_result__highlighted,
+ } %}
+ {% endif %}
+ {% if search_result__teaser %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__base_class: 'teaser',
+ text__blockname: search_result__base_class,
+ text__content: search_result__teaser,
+ } %}
+ {% endif %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/_yds-social-link__content.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/_yds-social-link__content.twig
new file mode 100644
index 000000000..5c9c8162d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/_yds-social-link__content.twig
@@ -0,0 +1,17 @@
+{% set social_link__content %}
+ {# Visually hidden service name (e.g. Facebook) #}
+ {{ icon.name }}
+ {# Visually shown icon #}
+ {% include '@atoms/images/icons/_yds-icon.twig' with {
+ icon__name: icon.icon,
+ icon__decorative: true,
+ icon__blockname: social_links__baseclass,
+ } %}
+{% endset %}
+
+{% include "@atoms/controls/base/yds-control.twig" with {
+ control__blockname: social_links__baseclass,
+ control__url: icon.url,
+ control__content: social_link__content,
+ control__url_type: 'internal'
+} %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/_yds-social-links.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/_yds-social-links.scss
new file mode 100644
index 000000000..e54e3eecb
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/_yds-social-links.scss
@@ -0,0 +1,49 @@
+@use '~@yalesites-org/tokens/build/scss/tokens' as sass-tokens;
+@use '../../00-tokens/functions/map';
+@use '../../01-atoms/atoms';
+
+.social-links {
+ // Create social-links specific color properties
+ --color-social-links-hover: var(--color-link-base);
+
+ // assign color-slots, mapped to global themes set in
+ // components/03-organisms/site-footer/_yds-site-footer.scss
+ [data-footer-theme='one'] & {
+ --color-social-links-hover: var(--color-slot-two);
+ }
+
+ [data-footer-theme='two'] &,
+ [data-footer-theme='three'] & {
+ --color-social-links-hover: var(--color-slot-four);
+ }
+}
+
+.social-links__list {
+ @include atoms.list-reset;
+
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--size-spacing-6);
+
+ [data-footer-variation='mega'] & {
+ justify-content: end;
+ }
+}
+
+.social-links__link {
+ color: var(--color-text);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: var(--size-click-target-minimum);
+ min-width: var(--size-click-target-minimum);
+
+ &:hover {
+ color: var(--color-social-links-hover);
+ }
+}
+
+.social-links__icon {
+ height: 1.5rem;
+ width: 1.5rem;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/social-links.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/social-links.stories.js
new file mode 100644
index 000000000..87e6676af
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/social-links.stories.js
@@ -0,0 +1,12 @@
+import socialLinksTwig from './yds-social-links.twig';
+
+import socialLinksData from './social-links.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Social Links',
+};
+
+export const SocialLinks = () => socialLinksTwig(socialLinksData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/social-links.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/social-links.yml
new file mode 100644
index 000000000..3ba0cfe2b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/social-links.yml
@@ -0,0 +1,19 @@
+icons:
+ - name: X (formally Twitter)
+ icon: x-twitter
+ url: 'https://www.twitter.com'
+ - name: Facebook
+ icon: facebook
+ url: 'https://www.facebook.com'
+ - name: YouTube
+ icon: youtube
+ url: 'https://www.youtube.com'
+ - name: Instagram
+ icon: instagram
+ url: 'https://www.instagram.com'
+ - name: Weibo
+ icon: weibo
+ url: 'https://www.weibo.com'
+ - name: LinkedIn
+ icon: linkedin
+ url: 'https://www.linkedin.com'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/yds-social-links.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/yds-social-links.twig
new file mode 100644
index 000000000..05c841297
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/social-links/yds-social-links.twig
@@ -0,0 +1,24 @@
+{#
+ # Available Variables:
+ # - icons (array)
+ # - url: url the icon links to
+ # - name: Visually hidden text (for screen readers)
+ # - icon: the actual image
+ #}
+
+{% set social_links__baseclass = 'social-links' %}
+
+
+ {# list
#}
+ {# social-links__list #}
+
+ {# For each loop #}
+ {% for icon in icons %}
+ {# list-items #}
+ {# social-links__item #}
+
+ {% include "@molecules/social-links/_yds-social-link__content.twig" %}
+
+ {% endfor %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tab-content.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tab-content.twig
new file mode 100644
index 000000000..ac3906b67
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tab-content.twig
@@ -0,0 +1,22 @@
+{% if key == 0 %}
+ {% set active_class = 'is-active' %}
+{% endif %}
+{% set tabs__container__attributes = {
+ 'class': bem('container', [], tabs__base_class, [active_class]),
+ 'role': 'tabpanel',
+ 'data-component-width': 'content',
+ 'tabindex': '0',
+} %}
+
+
+ {% set tabs__content__attributes = {
+ 'class': bem('content', [], tabs__base_class),
+ 'id': 'tab-' ~ tabs__id ~ '-' ~ key,
+ } %}
+
+ {% block tab__content %}
+ {{ tab__content|default(tab.tab__content) }}
+ {% endblock %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tab-label.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tab-label.twig
new file mode 100644
index 000000000..0bc70a679
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tab-label.twig
@@ -0,0 +1,16 @@
+{% if key == 0 %}
+ {% set aria_selected = 'aria-selected=true' %}
+{% else %}
+ {% set tab_index = 'tabindex="-1"' %}
+{% endif %}
+
+ {% set tabs__link__attributes = {
+ 'class': bem('link', [], tabs__base_class),
+ 'role': 'tab',
+ 'aria-controls': 'tab-' ~ tabs__id ~ '-' ~ key,
+ 'href': '#tab-' ~ tabs__id ~ '-' ~ key,
+ } %}
+
+ {{ tab__label|default(tab.tab__label) }}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tabs.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tabs.scss
new file mode 100644
index 000000000..44cbe9d0c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/_yds-tabs.scss
@@ -0,0 +1,226 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+@use '../../00-tokens/functions/map';
+
+// get global themes
+$global-tab-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$component-tab-themes: map.deep-get(tokens.$tokens, 'component-themes');
+
+.tabs {
+ @include tokens.spacing-page-section;
+ @include tokens.animate(height);
+
+ overflow: hidden;
+ position: relative;
+ border-bottom: var(--size-thickness-1) solid var(--color-gray-500);
+
+ --color-tabs-accent: --color-gray-500;
+ --size-tabs-control: 4rem;
+
+ [data-component-alignment='left'] & {
+ max-width: var(--size-component-layout-width-content);
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-tab-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ }
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-tab-themes {
+ &[data-component-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-tabs-accent: var(--color-tabs-accent);
+ --color-action: var(--color-tabs-action);
+ --color-background: var(--color-tabs-background);
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-tabs-accent: var(--color-slot-one);
+ --color-tabs-action: var(--color-slot-one);
+ --color-tabs-background: var(--color-basic-white);
+ --color-heading: var(--color-gray-700);
+ }
+
+ &[data-component-theme='two'] {
+ --color-tabs-accent: var(--color-slot-two);
+ --color-tabs-action: var(--color-slot-two);
+ --color-tabs-background: var(--color-basic-white);
+ --color-heading: var(--color-gray-700);
+ }
+
+ &[data-component-theme='three'] {
+ --color-tabs-accent: var(--color-slot-five);
+ --color-tabs-action: var(--color-slot-five);
+ --color-tabs-background: var(--color-basic-white);
+ --color-heading: var(--color-gray-700);
+ }
+}
+
+.tabs__tabs {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ height: var(--size-tabs-control);
+
+ &::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ width: 100%;
+ border-bottom: var(--size-thickness-1) solid var(--color-gray-500);
+ }
+}
+
+.tabs__control {
+ @include tokens.animate(opacity);
+ @include atoms.button-reset;
+
+ position: absolute;
+ top: var(--size-thickness-1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: calc(var(--size-tabs-control) - var(--size-thickness-2));
+ height: calc(var(--size-tabs-control) - var(--size-thickness-2));
+ background-color: var(--color-background);
+ opacity: 0;
+ border: var(--size-thickness-1) solid var(--color-gray-700);
+
+ &--left {
+ left: 0;
+ transform: rotate(90deg);
+ z-index: 2;
+
+ [data-overflow='left'] &,
+ [data-overflow='both'] & {
+ opacity: 1;
+ }
+
+ [data-overflow='right'] & {
+ @include tokens.animate-hidden;
+ }
+ }
+
+ &--right {
+ right: 0;
+ transform: rotate(-90deg);
+ z-index: 2;
+
+ [data-overflow='right'] &,
+ [data-overflow='both'] & {
+ opacity: 1;
+ }
+
+ [data-overflow='left'] & {
+ @include tokens.animate-hidden;
+ }
+ }
+
+ &:hover {
+ color: var(--color-link-base);
+ }
+
+ svg {
+ height: 2.5em;
+ width: 2.5em;
+ }
+}
+
+.tabs__nav {
+ @include atoms.list-reset;
+
+ display: flex;
+ overflow: auto;
+ scroll-behavior: smooth;
+ -ms-overflow-style: none; /* IE and Edge */
+ scrollbar-width: none; /* Firefox */
+
+ &::-webkit-scrollbar {
+ display: none;
+ }
+}
+
+.tabs__item {
+ flex-shrink: 0;
+ border-top: var(--size-thickness-1) solid var(--color-gray-300);
+ border-left: var(--size-thickness-1) solid var(--color-gray-300);
+ overflow: hidden;
+
+ &:last-child {
+ border-right: var(--size-thickness-1) solid var(--color-gray-300);
+ }
+}
+
+.tabs__link {
+ display: block;
+ position: relative;
+ text-decoration: none;
+ padding: var(--size-spacing-3) var(--size-spacing-7) var(--size-spacing-5);
+ color: var(--color-gray-700);
+ border-top: var(--size-thickness-6) solid transparent;
+ background-color: var(--color-gray-100);
+ height: 100%;
+
+ &:hover {
+ color: var(--color-link-base);
+ }
+
+ &:focus-visible {
+ outline-offset: -2px;
+ }
+
+ // Active tab.
+ &[aria-selected='true'] {
+ color: var(--color-action);
+ border-color: var(--color-action);
+ background-color: var(--color-basic-white);
+
+ &::before {
+ content: '';
+ position: absolute;
+ width: 100%;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ border-bottom: var(--size-spacing-3) solid var(--color-basic-white);
+ z-index: 1;
+ }
+ }
+}
+
+.tabs__container {
+ position: absolute;
+ width: 100%;
+ padding-block-start: var(--size-spacing-9);
+ padding-block-end: var(--size-spacing-9);
+
+ &:not(.is-active) {
+ @include tokens.animate-hidden;
+
+ opacity: 0;
+ transition: opacity 800ms;
+ }
+
+ &.is-active {
+ opacity: 1;
+ transition: opacity 800ms;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/tabs.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/tabs.stories.js
new file mode 100644
index 000000000..f4c0e2061
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/tabs.stories.js
@@ -0,0 +1,15 @@
+import tabs from './yds-tabs.twig';
+
+import tabData from './tabs.yml';
+
+import './yds-tabs';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Molecules/Tabs' };
+
+export const Tabs = () => `
+ ${tabs(tabData)}
+ ${tabs({ ...tabData, tabs__id: '123' })}
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/tabs.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/tabs.yml
new file mode 100644
index 000000000..f04dfbe4a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/tabs.yml
@@ -0,0 +1,49 @@
+tabs:
+ - tab__label: 'Before registration'
+ tab__content: 'Duis autem vel eum iriure dolor in hendrerit in
vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
'
+ - tab__label: 'During registration'
+ tab__content: 'Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
'
+ - tab__label: 'Year-round'
+ tab__content: 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
'
+ - tab__label: 'Another Tab'
+ tab__content: 'Duis autem vel eum iriure dolor in hendrerit in
vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
'
+ - tab__label: 'Moar Tabs'
+ tab__content: 'Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
'
+ - tab__label: 'This tab list is getting long!!!'
+ tab__content: 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
'
+ - tab__label: 'Before registration'
+ tab__content: 'Duis autem vel eum iriure dolor in hendrerit in
vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
'
+ - tab__label: 'During registration'
+ tab__content: 'Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
'
+ - tab__label: 'Year-round'
+ tab__content: 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
'
+ - tab__label: 'Another Tab'
+ tab__content: 'Duis autem vel eum iriure dolor in hendrerit in
vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
'
+ - tab__label: 'Moar Tabs'
+ tab__content: 'Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
'
+ - tab__label: 'This tab list is getting long!!!'
+ tab__content: 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
'
+ - tab__label: 'Before registration'
+ tab__content: 'Duis autem vel eum iriure dolor in hendrerit in
vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
'
+ - tab__label: 'During registration'
+ tab__content: 'Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
'
+ - tab__label: 'Year-round'
+ tab__content: 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
'
+ - tab__label: 'Another Tab'
+ tab__content: 'Duis autem vel eum iriure dolor in hendrerit in
vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
'
+ - tab__label: 'Moar Tabs'
+ tab__content: 'Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
'
+ - tab__label: 'This tab list is getting long!!!'
+ tab__content: 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
'
+ - tab__label: 'Before registration'
+ tab__content: 'Duis autem vel eum iriure dolor in hendrerit in
vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
'
+ - tab__label: 'During registration'
+ tab__content: 'Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
'
+ - tab__label: 'Year-round'
+ tab__content: 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
'
+ - tab__label: 'Another Tab'
+ tab__content: 'Duis autem vel eum iriure dolor in hendrerit in
vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
'
+ - tab__label: 'Moar Tabs'
+ tab__content: 'Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr , sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
'
+ - tab__label: 'This tab list is getting long!!!'
+ tab__content: 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/yds-tabs.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/yds-tabs.js
new file mode 100644
index 000000000..e5337d1ad
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/yds-tabs.js
@@ -0,0 +1,307 @@
+Drupal.behaviors.tabs = {
+ attach(context) {
+ // Selectors
+ const tabs = context.querySelectorAll('.tabs');
+ // Set an extra value to factor into getFirstVisible().
+ // We need this because we no longer have a gap amount set in CSS for the UL.
+ // If we don't have this the calculation fails after a couple clicks through
+ // a tabset with a lot of tabs.
+ const offsetAmount = 2;
+
+ // Support the case where multiple tab sets are on the same page.
+ tabs.forEach((tabSet) => {
+ const TabSet = tabSet;
+ const tabNav = TabSet.querySelector('.tabs__nav');
+ const tabControls = TabSet.querySelectorAll('.tabs__control');
+ const tabLinks = TabSet.querySelectorAll('.tabs__link');
+ const tabContainers = TabSet.querySelectorAll('.tabs__container');
+ const controlsWidth = TabSet.querySelector(
+ '.tabs__control--left',
+ ).offsetWidth;
+ let activeIndex = 0;
+ let overflowDir;
+
+ /**
+ * getFirstVisible
+ * @description Get the first item that is visible (not overflown).
+ * @returns The value of the left edge of the first fully visible item
+ * plus the width of the controls so that things aren't visually hidden
+ * by the absolutely positioned elements.
+ */
+ function getFirstVisible() {
+ const tabsLeft = TabSet.getBoundingClientRect().left;
+ const tabsItems = TabSet.querySelectorAll('.tabs__item');
+ const visibleItems = [];
+
+ tabsItems.forEach((item) => {
+ if (
+ item.getBoundingClientRect().right >
+ tabsLeft + controlsWidth + offsetAmount
+ ) {
+ visibleItems.push(item);
+ }
+ });
+
+ return visibleItems[1].offsetLeft - controlsWidth;
+ }
+
+ /**
+ * getLastHidden
+ * @description Get the last item that is overflown (not visible).
+ * @returns The value of the left edge of the first partially hidden item
+ * minus the width of the controls so that things aren't visually hidden
+ * by the absolutely positioned elements.
+ */
+ function getLastHidden() {
+ const tabsLeft = TabSet.getBoundingClientRect().left;
+ const tabsItems = TabSet.querySelectorAll('.tabs__item');
+ const hiddenItems = [];
+
+ tabsItems.forEach((item) => {
+ if (item.getBoundingClientRect().left < tabsLeft) {
+ hiddenItems.push(item);
+ }
+ });
+
+ return hiddenItems[hiddenItems.length - 1].offsetLeft - controlsWidth;
+ }
+
+ /**
+ * setOverflow
+ * @description Get the positions of the tabs and the tabs__items to
+ * determine whether an overflow situation is in play.
+ */
+ function setOverflow() {
+ const tabsLeft = TabSet.getBoundingClientRect().left;
+ const tabsRight = TabSet.getBoundingClientRect().right;
+ const firstTabLeft = TabSet.querySelector(
+ '.tabs__item:first-child',
+ ).getBoundingClientRect().left;
+ const lastTabRight = Math.floor(
+ TabSet.querySelector('.tabs__item:last-child').getBoundingClientRect()
+ .right,
+ );
+
+ if (firstTabLeft < tabsLeft) {
+ // If left side of first tab is < left side of tabs.
+ // And right side of last tab is > right side of tabs.
+ if (lastTabRight > tabsRight) {
+ if (overflowDir !== 'both') {
+ overflowDir = 'both';
+ TabSet.setAttribute('data-overflow', 'both');
+ }
+ // If left side of first tab is < left side of tabs.
+ // But right side of last tab is <= right side of tabs.
+ } else if (overflowDir !== 'left') {
+ overflowDir = 'left';
+ TabSet.setAttribute('data-overflow', 'left');
+ }
+ // If left side of first tab is >= left side of tabs.
+ // And right side of last tab is > right side of tabs.
+ } else if (lastTabRight > tabsRight) {
+ if (overflowDir !== 'right') {
+ overflowDir = 'right';
+ TabSet.setAttribute('data-overflow', 'right');
+ }
+ // If left side or first tab is >= left side of tabs.
+ // And right side of last tab is <= right side of tabs.
+ } else {
+ TabSet.setAttribute('data-overflow', 'none');
+ overflowDir = 'none';
+ }
+ }
+
+ /**
+ * mouseNav
+ * @description Support mouse navigation when horizontal scrolling occurs.
+ */
+ function mouseNav(direction) {
+ // If right
+ if (direction === 'right') {
+ tabNav.scrollLeft = getFirstVisible();
+ } else {
+ tabNav.scrollLeft = getLastHidden();
+ }
+ }
+
+ /**
+ * setHeight
+ * @description Sets the height of the tabs wrapper to support animating
+ * the height when switching tabs.
+ */
+ function setHeight() {
+ const navHeight = tabNav.offsetHeight;
+ const containerHeight = tabContainers[Number(activeIndex)].offsetHeight;
+ const totalHeight = navHeight + containerHeight;
+
+ TabSet.style.height = `${totalHeight}px`;
+ }
+
+ /**
+ * goToTab
+ * @description Goes to a specific tab based on index. Returns nothing.
+ * @param {Number} index The index of the tab to go to.
+ */
+ function goToTab(index) {
+ if (index !== activeIndex && index >= 0 && index <= tabLinks.length) {
+ tabLinks[Number(activeIndex)].removeAttribute('aria-selected');
+ tabLinks[Number(activeIndex)].setAttribute('tabindex', '-1');
+ tabLinks[Number(index)].setAttribute('aria-selected', 'true');
+ tabLinks[Number(index)].removeAttribute('tabindex');
+ tabLinks[Number(index)].focus();
+ tabContainers[Number(activeIndex)].classList.remove('is-active');
+ tabContainers[Number(index)].classList.add('is-active');
+ activeIndex = index;
+ setHeight();
+ }
+ }
+
+ /**
+ * ensureVisible
+ * @description Ensure the focused tab is fully visible (not overflown).
+ * @param {HTMLElement} item The focused item.
+ */
+ function ensureVisible(item) {
+ const tabsLeft = TabSet.getBoundingClientRect().left;
+ const tabsRight = TabSet.getBoundingClientRect().right;
+
+ // if right side overflows control, set to left + control.
+ if (
+ Math.floor(item.getBoundingClientRect().right) >
+ tabsRight - controlsWidth
+ ) {
+ // If overflow right or both.
+ if (
+ TabSet.getAttribute('data-overflow') === 'right' ||
+ TabSet.getAttribute('data-overflow') === 'both'
+ ) {
+ tabNav.scrollLeft = item.offsetLeft - controlsWidth;
+ }
+ }
+ // if left side overflows control, set to left + control.
+ else if (
+ Math.floor(item.getBoundingClientRect().left) <
+ tabsLeft + controlsWidth
+ ) {
+ // If overflow left or both.
+ if (
+ TabSet.getAttribute('data-overflow') === 'left' ||
+ TabSet.getAttribute('data-overflow') === 'both'
+ ) {
+ tabNav.scrollLeft = item.offsetLeft - controlsWidth;
+ }
+ }
+ }
+
+ /**
+ * handleClick
+ * @description Handles click event listeners on each of the links in the
+ * tab navigation. Returns nothing.
+ * @param {HTMLElement} link The link to listen for events on.
+ * @param {Number} index The index of that link.
+ */
+ function handleClick(link, index) {
+ link.addEventListener('click', (e) => {
+ e.preventDefault();
+ goToTab(index);
+ });
+ }
+
+ /**
+ * debounce
+ * @description Debounce to only run a function at most once every 200ms.
+ * @param {} func The function to be run after the timeout.
+ */
+ function debounce(func) {
+ let timer;
+ return function debounceFunction(event) {
+ if (timer) clearTimeout(timer);
+ timer = setTimeout(func, 200, event);
+ };
+ }
+
+ /**
+ * linksListeners
+ * @description Support keyboard navigation using the left, right, and
+ * down arrow keys through the `keydown` listener.
+ * Support keyboard and mouse users through the `focus` listener.
+ */
+ tabLinks.forEach((tab, i) => {
+ tab.addEventListener('keydown', (e) => {
+ let dir;
+ if (e.which === 37) {
+ // Left.
+ dir = i - 1;
+ } else if (e.which === 39) {
+ // Right.
+ dir = i + 1;
+ } else if (e.which === 40) {
+ // Down.
+ dir = 'down';
+ } else {
+ // Anything else.
+ dir = null;
+ }
+
+ if (dir !== null) {
+ e.preventDefault();
+ if (dir === 'down') {
+ const activePanel = TabSet.querySelector(
+ '.tabs__container.is-active',
+ );
+ // Focus on the container.
+ activePanel.focus();
+ } else if (tabLinks[dir]) {
+ // Activate the tab.
+ goToTab(dir);
+ }
+ }
+ });
+ // This also applies when clicked.
+ tab.addEventListener('focus', () => {
+ ensureVisible(tab);
+ });
+ });
+
+ /**
+ * init
+ * @description Initializes the component.
+ * Set the height for later animation.
+ * Set overflow properties.
+ * Add click listener to each tab.
+ * Add click listener to overflow controls.
+ * Add scroll listener to tab nav.
+ * Add resize listener to adjust the height when the browser is resized.
+ */
+ setHeight();
+ setOverflow();
+
+ tabLinks.forEach((tab, index) => {
+ handleClick(tab, index);
+ });
+
+ tabControls.forEach((control) => {
+ control.addEventListener('click', (e) => {
+ e.preventDefault();
+
+ if (control.classList.contains('tabs__control--right')) {
+ mouseNav('right');
+ } else {
+ mouseNav('left');
+ }
+ });
+ });
+
+ tabNav.addEventListener('scroll', setOverflow);
+
+ // Resize tab sets when the window is resized.
+ window.addEventListener(
+ 'resize',
+ debounce(function runSetHeight() {
+ setHeight();
+ setOverflow();
+ }),
+ );
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/yds-tabs.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/yds-tabs.twig
new file mode 100644
index 000000000..096f615cc
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tabs/yds-tabs.twig
@@ -0,0 +1,76 @@
+{# @TODO: Look into refactoring this to use the list component, if possible. #}
+{# @LINK: https://yaleits.atlassian.net/browse/YALB-658 #}
+{#
+ # Available Variables:
+ # - tabs__id: unique ID used to differentiate multiple tab sets on a page.
+ # - tabs: Array of tabs with the following properties.
+ # - tab__label: The text of the tab.
+ # - tab__content: The content inside the tabpanel.
+ #}
+
+{% set tabs__base_class = 'tabs' %}
+{% set tabs__id = tabs__id|default(random()) %}
+
+{% set icon_left %}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ icon__blockname: tabs__base_class,
+ icon__modifiers: ['left'],
+ icon__decorative: true,
+ } %}
+{% endset %}
+
+{% set icon_right %}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ icon__blockname: tabs__base_class,
+ icon__modifiers: ['right'],
+ icon__decorative: true,
+ } %}
+{% endset %}
+
+{% set tabs__attributes = {
+ 'class': bem(tabs__base_class),
+ 'data-overflow': 'none',
+ 'data-component-theme': tabs__theme|default('one'),
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__content: icon_left,
+ control__base_class: 'control',
+ control__blockname: tabs__base_class,
+ control__modifiers: ['left'],
+ control__attributes: {
+ 'aria-hidden': 'true',
+ 'tabindex': '-1',
+ },
+ } %}
+
+ {% block tab__label %}
+ {% for key, tab in tabs %}
+ {% include "@molecules/tabs/_yds-tab-label.twig" %}
+ {% endfor %}
+ {% endblock %}
+
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__content: icon_right,
+ control__base_class: 'control',
+ control__blockname: tabs__base_class,
+ control__modifiers: ['right'],
+ control__attributes: {
+ 'aria-hidden': 'true',
+ 'tabindex': '-1',
+ },
+ } %}
+
+ {# Tab Content #}
+ {% block tab__content__container %}
+ {% for key, tab in tabs %}
+ {% include "@molecules/tabs/_yds-tab-content.twig" %}
+ {% endfor %}
+ {% endblock %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/_yds-text-with-image.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/_yds-text-with-image.scss
new file mode 100644
index 000000000..3d5613305
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/_yds-text-with-image.scss
@@ -0,0 +1,207 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+@use '../../00-tokens/functions/map';
+
+// get global themes
+$global-content-spotlight-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$component-content-spotlight-themes: map.deep-get(
+ tokens.$tokens,
+ 'component-themes'
+);
+
+.text-with-image {
+ // used by a element for animated hover underline
+ --color-text-shadow: var(--color-basic-white);
+
+ // if we're not using a component theme, add top and bottom margin
+ // Or if the spotlight is the only spotlight on the page
+ &[data-component-theme='default'],
+ &[data-spotlights-position='first-and-last'] {
+ @include tokens.spacing-page-section;
+ }
+
+ // We're using JavaScript to evaluate the last and first spotlights in a group of spotlights
+ &[data-spotlights-position='first'] {
+ margin-top: var(--size-spacing-10);
+ }
+
+ &[data-spotlights-position='last'] {
+ margin-bottom: var(--size-spacing-10);
+ }
+
+ // if we're using a component theme, add padding and set background-color and color;
+ &:not([data-component-theme='default']) {
+ padding-block-start: var(--size-spacing-10);
+ padding-block-end: var(--size-spacing-10);
+ background-color: var(--color-background);
+ color: var(--color-text);
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $component-content-spotlight-themes {
+ &[data-component-theme='#{$theme}'] {
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--component-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--component-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--component-themes-#{$theme}-slot-eight);
+ --color-spotlight-text-shadow: var(--color-background);
+
+ // override text-shadow color for links in component themes
+ .link,
+ .text-with-image__text {
+ --color-text-shadow: var(--color-spotlight-text-shadow);
+ --color-link-hover: var(--color-link-hover);
+ }
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-content-spotlight-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-background: var(--color-slot-one);
+ --color-text: var(--color-slot-eight);
+ --color-heading: var(--color-slot-eight);
+ --color-link-base: var(--color-slot-eight);
+ --color-link-hover: var(--color-slot-eight);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+
+ &[data-component-theme='two'] {
+ --color-background: var(--color-slot-four);
+ --color-text: var(--color-slot-seven);
+ --color-heading: var(--color-slot-seven);
+ --color-link-base: var(--color-slot-seven);
+ --color-link-hover: var(--color-slot-seven);
+ }
+
+ &[data-component-theme='three'] {
+ --color-background: var(--color-slot-five);
+ --color-text: var(--color-slot-eight);
+ --color-heading: var(--color-slot-eight);
+ --color-link-base: var(--color-slot-eight);
+ --color-link-hover: var(--color-slot-eight);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+}
+
+.text-with-image__inner {
+ display: grid;
+
+ @media (max-width: tokens.$break-mobile-max) {
+ gap: var(--size-spacing-6);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ grid-template: 'primary secondary';
+ gap: var(--size-spacing-8);
+
+ // Focus Options
+ [data-component-focus='equal'] & {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ [data-component-focus='content'][data-image-position='image-left'] &,
+ [data-component-focus='image'][data-image-position='image-right'] & {
+ grid-template-columns: 3fr 5fr;
+ }
+
+ [data-component-focus='image'][data-image-position='image-left'] &,
+ [data-component-focus='content'][data-image-position='image-right'] & {
+ grid-template-columns: 5fr 3fr;
+ }
+ }
+}
+
+.text-with-image__image {
+ @media (min-width: tokens.$break-mobile) {
+ margin-top: var(--size-spacing-2);
+
+ // Layout Options
+ [data-image-position='image-left'] & {
+ grid-area: primary;
+ }
+
+ [data-image-position='image-right'] & {
+ grid-area: secondary;
+ }
+ }
+}
+
+.text-with-image__content {
+ @media (max-width: tokens.$break-mobile-max) {
+ order: 1;
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ // Layout Options
+ [data-image-position='image-left'] & {
+ grid-area: secondary;
+ }
+
+ [data-image-position='image-right'] & {
+ grid-area: primary;
+ }
+ }
+
+ > *:not(:last-child) {
+ margin-bottom: var(--size-spacing-5);
+ }
+}
+
+.text-with-image__overline {
+ @include tokens.h6-mallory-compact-book;
+
+ color: var(--color-gray-500);
+}
+
+.text-with-image__heading {
+ @include tokens.h3-yale-new;
+}
+
+.text-with-image__subheading {
+ @include tokens.h5-mallory-compact-book;
+
+ color: var(--color-text);
+}
+
+.text-with-image__text {
+ color: var(--color-text);
+
+ a {
+ @include atoms.link;
+ }
+
+ > *:last-child {
+ margin-bottom: 0;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/text-with-image.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/text-with-image.stories.js
new file mode 100644
index 000000000..fcc8571e1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/text-with-image.stories.js
@@ -0,0 +1,97 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+// Twig templates
+import textWithImageTwig from './yds-text-with-image.twig';
+
+// Data files
+import imageData from '../../01-atoms/images/image/image.yml';
+import textWithImageData from './text-with-image.yml';
+
+import '../content-spotlight-portrait/content-spotlights';
+
+const colorPairingsData = Object.keys(tokens['component-themes']);
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Content Spotlight',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ componentTheme: {
+ name: 'Component Theme (dial)',
+ type: 'select',
+ options: colorPairingsData,
+ defaultValue: 'default',
+ },
+ width: {
+ name: 'Width',
+ type: 'select',
+ options: ['highlight', 'site'],
+ defaultValue: 'site',
+ },
+ position: {
+ name: 'Image Position',
+ type: 'select',
+ options: ['image-left', 'image-right'],
+ defaultValue: 'image-left',
+ },
+ focus: {
+ name: 'Focus',
+ type: 'select',
+ options: ['image', 'equal'],
+ defaultValue: 'equal',
+ },
+ overline: {
+ name: 'Overline (optional)',
+ type: 'string',
+ defaultValue: null,
+ },
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: textWithImageData.text_with_image__heading,
+ },
+ subheading: {
+ name: 'Subheading (optional)',
+ type: 'string',
+ defaultValue: textWithImageData.text_with_image__subheading,
+ },
+ text: {
+ name: 'Text',
+ type: 'string',
+ defaultValue: textWithImageData.text_with_image__text,
+ },
+ linkContent: {
+ name: 'Link Content (optional)',
+ type: 'string',
+ defaultValue: textWithImageData.text_with_image__link__content,
+ },
+ },
+};
+
+export const ContentSpotlightLandscape = ({
+ width,
+ position,
+ focus,
+ overline,
+ heading,
+ subheading,
+ text,
+ linkContent,
+ componentTheme,
+}) =>
+ textWithImageTwig({
+ ...imageData.responsive_images['3x2'],
+ text_with_image__theme: componentTheme,
+ text_with_image__width: width,
+ text_with_image__position: position,
+ text_with_image__focus: focus,
+ text_with_image__overline: overline,
+ text_with_image__heading: heading,
+ text_with_image__subheading: subheading,
+ text_with_image__text: text,
+ text_with_image__link__content: linkContent,
+ text_with_image__link__url: textWithImageData.text_with_image__link__url,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/text-with-image.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/text-with-image.yml
new file mode 100644
index 000000000..de78b1bf1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/text-with-image.yml
@@ -0,0 +1,6 @@
+text_with_image__overline: 'By Charlyn Paradis'
+text_with_image__heading: 'Admitted Students Envision Themselves as Yale Chemists During Visiting Days'
+text_with_image__subheading: 'Submitted February 28, 2022'
+text_with_image__text: 'Prospective students joined the Yale Chemistry community on Feb. 10 – 11 to learn about the research program and campus life at the much anticipated ‘Visiting Days’ event. See more at Google .
'
+text_with_image__link__content: 'Visiting Days'
+text_with_image__link__url: 'https://google.com'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/yds-text-with-image.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/yds-text-with-image.twig
new file mode 100644
index 000000000..7497caf75
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text-with-image/yds-text-with-image.twig
@@ -0,0 +1,79 @@
+{#
+ # Available Props:
+ # - text_with_image__width: feature (default) or highlight
+ # - text_with_image__position: image-left (default) or image-right
+ # - text_with_image__focus: equal (default), image, or text
+ #
+ # Available variables:
+ # - text_with_image__overline (optional)
+ # - text_with_image__heading
+ # - text_with_image__subheading (optional)
+ # - text_with_image__text
+ # - text_with_image__link__content (optional)
+ # - text_with_image__link__url (optional)
+ #
+ # Available blocks:
+ # - text_with_image__image
+ #}
+
+{% set text_with_image__base_class = 'text-with-image' %}
+
+{% set text_with_image__attributes = {
+ 'data-component-focus': text_with_image__focus|default('equal'),
+ 'data-image-position': text_with_image__position|default('image-left'),
+ 'data-component-width': text_with_image__width|default('site'),
+ 'data-component-theme': text_with_image__theme|default('default'),
+ class: bem(text_with_image__base_class)
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {# Content #}
+
+ {# Overline #}
+ {% if text_with_image__overline %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__content: text_with_image__overline,
+ text__base_class: 'overline',
+ text__blockname: text_with_image__base_class,
+ } %}
+ {% endif %}
+ {# Heading #}
+ {% if text_with_image__heading %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading: text_with_image__heading,
+ heading__level: '2',
+ heading__blockname: text_with_image__base_class,
+ } %}
+ {% endif %}
+ {# Subheading #}
+ {% if text_with_image__subheading %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__content: text_with_image__subheading,
+ text__base_class: 'subheading',
+ text__blockname: text_with_image__base_class,
+ } %}
+ {% endif %}
+ {# Text #}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__content: text_with_image__text,
+ text__blockname: text_with_image__base_class,
+ } %}
+ {# Link #}
+ {% if text_with_image__link__content and text_with_image__link__url %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: text_with_image__link__content,
+ link__url: text_with_image__link__url,
+ } %}
+ {% endif %}
+
+ {# Image #}
+
+ {% block text_with_image__image %}
+ {% include "@atoms/images/image/yds-image.twig" %}
+ {% endblock %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/_yds-text-field.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/_yds-text-field.scss
new file mode 100644
index 000000000..0b7a4fa9b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/_yds-text-field.scss
@@ -0,0 +1,24 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+
+.text-field {
+ @include tokens.spacing-page-inner;
+
+ // used by a element for animated hover underline
+ --color-text-shadow: var(--color-basic-white);
+
+ &[data-component-alignment='left'] {
+ .text {
+ max-width: var(--size-component-layout-width-content);
+ }
+ }
+
+ a {
+ @include atoms.link;
+ }
+
+ // emphasized: intro text variation
+ &[data-component-variation='emphasized'] {
+ @include tokens.body-xl;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/text-field.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/text-field.yml
new file mode 100644
index 000000000..35d679f66
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/text-field.yml
@@ -0,0 +1,34 @@
+text_field__content: 'H2 About YDS
+ “From scholars and researchers to politicians and athletes, we have produced some of the world’s most influential leaders since the school’s inception in 1822. To date, we have put forward more presidents and deans of colleges, universities and seminaries, as well as heads of denominations, than any other divinity school or seminary in the United States. Our faculty, too, have been — and continue to be — among the most prominent religion scholars of their day.”
+ H2 Admissions & Financial Aid
+ H3 Yale Divinity School - Inspiring the Minds That Inspire the World!
+ Yale University Divinity School is a graduate professional school within a world-class research university and is both a rigorous academic institution and an ecumenical community of faith. We stand between the more strictly academic approach of a department of religion and the more practical, parochial orientation of the seminaries. We educate and prepare the scholars, ministers, and leaders of the future. Our faculty are leading scholars in their respective disciplines and their committments to supporting students is academically and programatically unparalleled. Students from a full spectrum of Christian denominations and faiths attend YDS to begin a lifetime of ministry, scholarship, and service to church and world. YDS students take advantage of the full resources of Yale University(link is external) and our extraordinary library system(link is external). Many students take courses across Yale and benefit from the cultural and social life of a world-class university.
+ H4 Tuition and Financial Aid
+ Information on the cost to attend, applying for financial aid, international student financial aid, fees, and more.
+ H4 Application instruction and requirements
+ Guidelines for applicants and information on the materials and fees required in the online application process.
+ H5 Financial planning with iGrad
+ A powerful online organizational tool to assist you in planning for your financial needs now and in the future.
+ H6 How does it work?
+
+ Sign in with your NetID and password to access your iGrad dashboard.
+ The first time you log in, you’ll be directed to an InCommon page where you will select Yale University before being asked to log in. You may select “Remember my selection permanently” to skip the InCommon step for your device in future interactions.
+ Start with a brief financial wellness assessment.
+ View articles and videos to help you build up your financial skill set.
+
+ Inline elements
+ These are some additional inline elements that will be possible within wysiwygs.
+ Strong is used to indicate strong importance
+ This text has added emphasis
+ This text has a strike-through
+ Superscript1 2
+ Subscript for things like H2 O
+ This is what inline code looks like.
+
+ /** This is what a block of code looks like. **/
+ {
+ padding: 0 var(--size-spacing-3);
+ background-color: var(--color-code-background);
+ }
+
+ '
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/typography.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/typography.stories.js
new file mode 100644
index 000000000..173b2901d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/typography.stories.js
@@ -0,0 +1,29 @@
+// Twig templates
+import textFieldTwig from './yds-text-field.twig';
+
+// Data files
+import textData from './text-field.yml';
+
+import '../../01-atoms/typography/text/yds-text';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Text',
+ argTypes: {
+ variation: {
+ name: 'Text Field Variation',
+ options: ['default', 'emphasized'],
+ type: 'select',
+ defaultValue: 'default',
+ },
+ },
+};
+
+export const TextField = ({ variation }) => `
+${textFieldTwig({
+ text_field__content: textData.text_field__content,
+ text_field__variation: variation,
+})}
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/yds-text-field.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/yds-text-field.twig
new file mode 100644
index 000000000..3fbc410d6
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/text/yds-text-field.twig
@@ -0,0 +1,23 @@
+{#
+ # Available Variables:
+ # - text_field__content
+ #}
+
+{% set text_field__base_class = text_field__base_class|default('text-field') %}
+
+{% set text_field__attributes = {
+ 'data-component-width': text_field__width|default('site'),
+ 'data-component-alignment': text_field__alignment|default('center'),
+ 'data-component-variation': text_field__variation|default('default'),
+ class: bem(text_field__base_class, text_field__modifiers, text_field__blockname, text_field__extra_classes),
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__content: text_field__content,
+ } %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/_yds-tile-item.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/_yds-tile-item.scss
new file mode 100644
index 000000000..243ab0b88
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/_yds-tile-item.scss
@@ -0,0 +1,210 @@
+@use '../../00-tokens/tokens';
+@use '../../00-tokens/functions/map';
+@use '../../01-atoms/atoms';
+
+$global-tile-item-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$tile-item-component-themes: map.deep-get(tokens.$tokens, 'component-themes');
+
+.tile__item {
+ display: flex;
+ flex-flow: column nowrap;
+ justify-content: flex-start;
+ position: relative;
+ width: 100%;
+ max-width: 100%;
+ z-index: 0;
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $tile-item-component-themes {
+ &[data-component-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--component-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--component-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--component-themes-#{$theme}-slot-eight);
+ --color-tile-item-theme: var(--color-slot-one);
+ --color-tile-item-content: var(--color-slot-eight);
+ --color-link-base: var(--color-tile-item-content);
+ --color-link-hover: var(--color-tile-item-content);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+
+ background-color: var(--color-tile-item-theme);
+ color: var(--color-tile-item-content);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-tile-item-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-tile-item-theme: var(--color-slot-one);
+ --color-tile-item-content: var(--color-slot-eight);
+ }
+
+ &[data-component-theme='two'] {
+ --color-tile-item-theme: var(--color-slot-two);
+ --color-tile-item-content: var(--color-slot-eight);
+ }
+
+ &[data-component-theme='three'] {
+ --color-tile-item-theme: var(--color-slot-three);
+ --color-tile-item-content: var(--color-slot-seven);
+ }
+
+ &__inner {
+ display: flex;
+ flex-flow: column nowrap;
+ padding: var(--size-spacing-8) var(--size-spacing-6);
+ height: 100%;
+ align-items: flex-start;
+
+ // if the tile item is a link, make the whole tile item clickable
+ [data-component-linked-tile='true'] & {
+ @include atoms.clickable-component-image;
+ }
+
+ [data-component-alignment='right'] & {
+ align-items: flex-end;
+ }
+
+ [data-component-alignment='center'] & {
+ align-items: center;
+ }
+
+ [data-component-tile-style='text-only'][data-component-vertical-alignment='bottom']
+ & {
+ justify-content: flex-end;
+ }
+ }
+}
+
+.tile__item__heading {
+ @include tokens.h1-yale-new;
+
+ position: relative;
+ flex: 0 auto;
+
+ [data-component-vertical-alignment='bottom'] & {
+ flex: 1 auto;
+ }
+}
+
+.tile__item__icon {
+ margin-bottom: var(--size-spacing-2);
+ flex: 0 auto;
+
+ [data-component-vertical-alignment='bottom'] & {
+ flex: 1 auto;
+ }
+}
+
+// svg
+.tile__item__tile__item-icon {
+ max-width: var(--size-spacing-9); // max-width 48px
+ max-height: var(--size-spacing-9); // max-height 48px
+ fill: var(--color-tile-item-content);
+}
+
+.tile__item__content {
+ @include tokens.h4-yale-new;
+
+ flex: 1 auto;
+ text-align: left;
+
+ [data-component-vertical-alignment='bottom'] & {
+ flex: 0 auto;
+ }
+
+ [data-component-alignment='right'] & {
+ text-align: right;
+ }
+
+ [data-component-alignment='center'] & {
+ text-align: center;
+ }
+}
+
+.tile__item__image {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ width: 100%;
+ height: 100%;
+ z-index: -1;
+
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: var(--color-tile-item-theme);
+ opacity: 0.85;
+
+ .tile__item[data-component-linked-tile='true']:hover & {
+ opacity: 0.95;
+ }
+ }
+}
+
+.tile__item__link {
+ @include atoms.plain-link;
+ @include tokens.h4-yale-new;
+
+ [data-component-alignment='center'] & {
+ text-align: center;
+ }
+
+ [data-component-alignment='right'] & {
+ text-align: right;
+ }
+
+ &:hover {
+ color: var(--color-tile-item-content);
+ }
+
+ // when hovering over the tile item, remove the underline on the link
+ .tile__item:hover & {
+ text-decoration: none;
+ }
+}
+
+.tile__item:hover .tile__item__link:visited {
+ color: var(--color-link-visited-hover);
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/tile-item.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/tile-item.stories.js
new file mode 100644
index 000000000..7f31d3c66
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/tile-item.stories.js
@@ -0,0 +1,125 @@
+import tileItemTwig from './yds-tile-item.twig';
+
+import tileItemData from './tile-item.yml';
+
+// Image atom component - generic images for demo
+import imageData from '../../01-atoms/images/image/image.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Tile Item',
+ argTypes: {
+ heading: {
+ name: 'Number',
+ type: 'string',
+ defaultValue: tileItemData.tile__item__heading,
+ },
+ content: {
+ name: 'Content',
+ type: 'string',
+ defaultValue: tileItemData.tile__item__content,
+ },
+ contentLink: {
+ name: 'Content Link',
+ type: 'string',
+ defaultValue: '',
+ },
+ presentationStyle: {
+ name: 'Presentation Style',
+ options: ['heading', 'icon', 'text-only'],
+ type: 'select',
+ defaultValue: 'heading',
+ },
+ alignment: {
+ name: 'Alignment',
+ options: ['left', 'center', 'right'],
+ type: 'select',
+ defaultValue: 'left',
+ },
+ verticalAlignment: {
+ name: 'Vertical Alignment',
+ options: ['top', 'bottom'],
+ type: 'select',
+ defaultValue: 'top',
+ },
+ themeColor: {
+ name: 'Component Theme (dial)',
+ options: ['one', 'two', 'three'],
+ type: 'select',
+ defaultValue: 'one',
+ },
+ image: {
+ name: 'With image',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ },
+};
+
+export const TileItem = ({
+ heading,
+ content,
+ contentLink,
+ presentationStyle,
+ themeColor,
+ alignment,
+ verticalAlignment,
+ image,
+}) => `
+
+
+
+ ${tileItemTwig({
+ tile__item__heading: tileItemData.tile__item__heading,
+ tile__item__content: tileItemData.tile__item__content,
+ tile__item__content_link: 'https://www.yale.edu',
+ tile__item__presentation_style: 'heading',
+ tile__item__alignment: 'left',
+ tile__item__vertical_alignment: 'top',
+ tile__item__bg_image: 'true',
+ ...imageData.responsive_images['1x1'],
+ })}
+ ${tileItemTwig({
+ tile__item__heading: tileItemData.tile__item__heading,
+ tile__item__presentation_style: 'icon',
+ tile__item__alignment: 'right',
+ tile__item__bg_image: 'false',
+ })}
+ ${tileItemTwig({
+ tile__item__heading: tileItemData.tile__item__heading,
+ tile__item__content: tileItemData.tile__item__content,
+ tile__item__content_link: 'https://www.yale.edu',
+ tile__item__vertical_alignment: 'bottom',
+ tile__item__presentation_style: 'heading',
+ tile__item__alignment: 'left',
+ tile__item__bg_image: 'true',
+ ...imageData.responsive_images['1x1'],
+ })}
+
+
+
+
+
Playground
+
Use the StoryBook controls to see the tile item below implement the available variations.
+
+
+
+
+ ${tileItemTwig({
+ tile__item__heading: heading,
+ tile__item__content: content,
+ tile__item__content_link: contentLink,
+ tile__item__alignment: alignment,
+ tile__item__vertical_alignment: verticalAlignment,
+ tile__item__presentation_style: presentationStyle,
+ tile__item__theme: themeColor,
+ tile__item__bg_image: image ? 'true' : 'false',
+ ...imageData.responsive_images['1x1'],
+ })}
+
+
+
+
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/tile-item.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/tile-item.yml
new file mode 100644
index 000000000..390bf30c3
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/tile-item.yml
@@ -0,0 +1,2 @@
+tile__item__heading: '01'
+tile__item__content: This is a tile item with content!
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/yds-tile-item.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/yds-tile-item.twig
new file mode 100644
index 000000000..c76032e65
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/tile-item/yds-tile-item.twig
@@ -0,0 +1,71 @@
+{#
+ # Available Props:
+ # - tile__item__presentation_style: heading, icon, text-only
+ # - tile__item__icon_name: string
+ # - tile__item__alignment: left, center
+ #
+ # Available Variables:
+ # - tile__item__tile__item (required)
+ # - tile__item__content
+ #}
+
+{% set tile__item__base_class = 'tile__item' %}
+{% set tile__item__presentation_style = tile__item__presentation_style|default('basic') %}
+
+{# If tile__item__attributes is not defined, set it to an empty object by default #}
+{% set tile__item__attributes = tile__item__attributes|default({}) %}
+
+{% if tile__item__content_link and tile__item__content %}
+{% set tile__item__attributes = tile__item__attributes|merge({
+ 'data-component-linked-tile': 'true',
+}) %}
+{% endif %}
+
+{% set tile__item__attributes = tile__item__attributes|merge({
+ 'data-component-tile-style': tile__item__presentation_style,
+ 'data-component-alignment': tile__item__alignment|default('left'),
+ 'data-component-vertical-alignment': tile__item__vertical_alignment|default('top'),
+ 'data-component-theme': tile__item__theme|default('one'),
+ 'data-component-has-image': tile__item__bg_image|default('false'),
+ class: bem(tile__item__base_class, tile__item__modifiers),
+}) %}
+
+
+
+ {% if tile__item__presentation_style == 'icon' %}
+ {% block tile__item__icon %}
+
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: tile__item__icon_name|default('sack-dollar-solid'),
+ icon__base_class: 'tile__item-icon',
+ icon__blockname: tile__item__base_class,
+ } %}
+
+ {% endblock %}
+ {% endif %}
+ {% if tile__item__presentation_style == 'heading' %}
+
+ {{ tile__item__heading }}
+
+ {% endif %}
+ {% if tile__item__content_link and tile__item__content %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: tile__item__content,
+ link__url: tile__item__content_link,
+ link__blockname: tile__item__base_class,
+ link__base_class: 'link',
+ } %}
+ {% elseif tile__item__content %}
+
+ {{ tile__item__content }}
+
+ {% endif %}
+ {% if tile__item__bg_image == 'true' %}
+
+ {% block tile__item__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+
+ {% endif %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/_yds-video.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/_yds-video.scss
new file mode 100644
index 000000000..ed5b9dac4
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/_yds-video.scss
@@ -0,0 +1,31 @@
+@use '../../00-tokens/tokens';
+
+.video {
+ @include tokens.spacing-page-section;
+}
+
+.video__inner {
+ display: grid;
+ gap: var(--size-spacing-3);
+}
+
+.video__heading {
+ @include tokens.body-default-condensed;
+
+ margin-bottom: var(--size-spacing-2);
+}
+
+.video__text {
+ @include tokens.body-s;
+
+ > *:last-child {
+ margin-bottom: 0;
+ }
+}
+
+.video__video,
+.video__content {
+ [data-component-alignment='left'] & {
+ max-width: var(--size-component-layout-width-content);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/video.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/video.stories.js
new file mode 100644
index 000000000..78671ab1a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/video.stories.js
@@ -0,0 +1,34 @@
+// Twig templates
+import videoTwig from './yds-video.twig';
+
+// Data files
+import videoData from './video.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Video',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: videoData.video__heading,
+ },
+ text: {
+ name: 'Text',
+ type: 'string',
+ defaultValue: videoData.video__text,
+ },
+ },
+};
+
+export const video = ({ heading, text }) =>
+ videoTwig({
+ ...videoData,
+ video__heading: heading,
+ video__text: text,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/video.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/video.yml
new file mode 100644
index 000000000..049ec1b55
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/video.yml
@@ -0,0 +1,3 @@
+video__heading: 'This Is Where A Video Title Will Go'
+video__text: 'This is where captions for videos will go.
'
+video_embed__content: VIDEO
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/yds-video.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/yds-video.twig
new file mode 100644
index 000000000..fdace5995
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/video/yds-video.twig
@@ -0,0 +1,49 @@
+{#
+ # Available variables:
+ # - video__heading
+ # - video__text
+ #
+ # Available blocks:
+ # - video__video
+ #}
+
+{% set video__base_class = 'video' %}
+{% set video__width = video__width|default('content') %}
+{% set video__alignment = video__alignment|default('left') %}
+
+{% set video__attributes = {
+ 'class': bem(video__base_class, video__modifiers),
+ 'data-component-width': video__width,
+ 'data-component-alignment': video__alignment
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+
+ {% block video__video %}
+ {% include "@atoms/videos/video-embed/yds-video-embed.twig" %}
+ {% endblock %}
+
+ {% if video__heading is not empty or video__text is not empty %}
+
+ {# Heading #}
+ {% if video__heading is not empty %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading: video__heading,
+ heading__level: '2',
+ heading__blockname: video__base_class,
+ } %}
+ {% endif %}
+ {# Text #}
+ {% if video__text %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__content: video__text,
+ text__blockname: video__base_class,
+ } %}
+ {% endif %}
+
+ {% endif %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/_yds-wrapped-image.scss b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/_yds-wrapped-image.scss
new file mode 100644
index 000000000..42d22cedb
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/_yds-wrapped-image.scss
@@ -0,0 +1,122 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+
+$wrapped-image-offset-max: 1550px;
+
+.wrapped-image {
+ @include tokens.spacing-page-inner;
+
+ // used by a element for animated hover underline
+ --color-text-shadow: var(--color-basic-white);
+
+ // Clear the float in case the next component is an image or something.
+ &::after {
+ content: '';
+ display: block;
+ clear: both;
+ }
+
+ &[data-component-width='site'][data-wrapped-image-alignment] {
+ width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+ }
+
+ &[data-wrapped-image-style='offset'] {
+ padding-inline-start: 0;
+ padding-inline-end: 0;
+ }
+}
+
+.wrapped-image__inner {
+ position: relative;
+
+ [data-component-width='site'] & {
+ width: 100%;
+ max-width: var(--size-component-layout-width-site);
+ }
+}
+
+.wrapped-image__text {
+ a {
+ @include atoms.link;
+ }
+}
+
+.wrapped-image__content-wrapper {
+ max-width: var(--size-component-layout-width-content);
+ margin: 0;
+}
+
+.wrapped-image__image {
+ margin-bottom: var(--size-spacing-7);
+
+ @media (min-width: tokens.$break-l) {
+ top: 0;
+ width: 50%;
+ margin-bottom: var(--size-spacing-4);
+
+ // Add top magin to image if left or right aligned,
+ // so that the top of the image aligns with the top of the text.
+ [data-wrapped-image-alignment='left'] &,
+ [data-wrapped-image-alignment='right'] & {
+ margin-top: var(--size-spacing-4);
+ }
+
+ // floated
+ [data-wrapped-image-style='floated'][data-wrapped-image-alignment='left']
+ & {
+ float: left;
+ margin-right: 5%;
+ }
+
+ [data-wrapped-image-style='floated'][data-wrapped-image-alignment='right']
+ & {
+ float: right;
+ margin-left: 5%;
+ }
+
+ // offset
+ [data-wrapped-image-style='offset'][data-wrapped-image-alignment='left'] & {
+ float: left;
+ margin-right: 5%;
+ }
+
+ [data-wrapped-image-style='offset'][data-wrapped-image-alignment='right']
+ & {
+ float: right;
+ margin-left: 5%;
+ }
+ }
+
+ @media (min-width: tokens.$break-l) {
+ [data-wrapped-image-style='offset'][data-wrapped-image-alignment='left'] & {
+ transform: translateX(-2rem);
+ margin-right: 1rem;
+ }
+
+ [data-wrapped-image-style='offset'][data-wrapped-image-alignment='right']
+ & {
+ transform: translateX(2rem);
+ margin-left: 1rem;
+ }
+ }
+
+ @media (min-width: $wrapped-image-offset-max) {
+ [data-wrapped-image-style='offset'][data-wrapped-image-alignment='left'] & {
+ transform: translateX(-20%);
+ margin-right: -5%;
+ }
+
+ [data-wrapped-image-style='offset'][data-wrapped-image-alignment='right']
+ & {
+ transform: translateX(20%);
+ margin-left: -5%;
+ }
+ }
+
+ > *,
+ figure > * {
+ width: 100%;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/wrapped-image.stories.js b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/wrapped-image.stories.js
new file mode 100644
index 000000000..8facad1e0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/wrapped-image.stories.js
@@ -0,0 +1,49 @@
+import wrappedImageTwig from './yds-wrapped-image.twig';
+import textFieldTwig from '../text/yds-text-field.twig';
+
+import imageData from '../../01-atoms/images/image/image.yml';
+import WrappedImageData from './wrapped-image.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Molecules/Wrapped Image',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ caption: {
+ name: 'Caption',
+ type: 'string',
+ defaultValue: 'This is the caption for the 16:9 image above.',
+ },
+ imageAlignment: {
+ name: 'Image Alignment',
+ type: 'select',
+ options: ['left', 'right'],
+ defaultValue: 'left',
+ },
+ imageStyle: {
+ name: 'Image Style',
+ type: 'select',
+ options: ['floated', 'offset'],
+ defaultValue: 'floated',
+ },
+ },
+};
+
+export const WrappedImage = ({ caption, imageAlignment, imageStyle }) => `
+ ${textFieldTwig({
+ text_field__content: WrappedImageData.text_one,
+ text_field__width: 'site',
+ text_field__alignment: 'left',
+ })}
+ ${wrappedImageTwig({
+ ...imageData.responsive_images['3x2'],
+ wrapped_image__caption: caption,
+ wrapped_image__alignment: imageAlignment,
+ wrapped_image__style: imageStyle,
+ wrapped_image__content: WrappedImageData.text_two,
+ })}
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/wrapped-image.yml b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/wrapped-image.yml
new file mode 100644
index 000000000..874e521f0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/wrapped-image.yml
@@ -0,0 +1,2 @@
+text_one: 'The team hypothesizes that cells form distinct types of filaments, activated and inhibited, with unique structures that fine-tune metabolic activity. What’s new about their approach is they will study protein structures by infrared microscopy rather than fluorescence microscopy. They expect these images to reveal a new localized layer of cellular metabolism that could be used to re-engineer metabolic processes. In the future, these complementary time-resolved imaging and cross-linking approaches could be extended to biological studies of macromolecular assemblies and phase-separated membraneless organelles that have been historically difficult to study.
'
+text_two: 'Dr. Davis’s research group at the Kline Chemistry Laboratory uses experiments at multiple scales – in vitro, single cell, and whole organism – to study fundamental and applied problems at the intersection of chemistry, physics, and biology. They develop new quantitative spectroscopic imaging techniques to elucidate the relationship between function and dynamics of proteins and RNA inside living cells.
Caitlin Davis obtained her Ph.D. from Emory University in 2015, where she studied protein folding in the laboratory of Dr. Brian Dyer in the Chemistry Department. She completed her postdoctoral training with Dr. Martin Gruebele at the Center for the Physics of Living Cells at the University of Illinois at Urbana-Champaign, where she developed a method for studying protein thermodynamics and kinetics in differentiated tissues of living zebrafish and she developed a mimic of cytoplasm that can be used to reproduce protein behaviors in vitro. She came to Yale as a faculty member in 2020.
'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/yds-wrapped-image.twig b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/yds-wrapped-image.twig
new file mode 100644
index 000000000..6a7728d0d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/02-molecules/wrapped-image/yds-wrapped-image.twig
@@ -0,0 +1,50 @@
+{#
+ # Available Props:
+ # - wrapped_image__width
+ #
+ # Available Variables:
+ # - wrapped_image__content
+ #
+ # Available Blocks:
+ # - wrapped_image__image
+ #}
+
+{% set wrapped_image__base_class = 'wrapped-image' %}
+
+{% set wrapped_image__attributes = {
+ 'data-component-width': wrapped_image__width|default('site'),
+ 'data-wrapped-image-style': wrapped_image__style|default('floated'),
+ 'data-wrapped-image-alignment': wrapped_image__alignment|default('left'),
+ 'class': bem(wrapped_image__base_class),
+} %}
+
+{% set wrapped_image__image %}
+ {% block wrapped_image__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+{% endset %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+
+ {# Image #}
+
+ {% embed "@atoms/images/image/yds-image.twig" with {
+ figure__caption: wrapped_image__caption,
+ } %}
+ {% block image__image %}
+ {{ wrapped_image__image }}
+ {% endblock %}
+ {% endembed %}
+
+ {# Text #}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text_field__alignment: 'left',
+ text__content: wrapped_image__content,
+ text__blockname: wrapped_image__base_class,
+ } %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/_grid-mixins.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/_grid-mixins.scss
new file mode 100644
index 000000000..775c318fe
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/_grid-mixins.scss
@@ -0,0 +1,113 @@
+@use '../00-tokens/tokens';
+@use '../01-atoms/atoms';
+
+@mixin base {
+ @include atoms.list-reset;
+
+ display: flex;
+ flex-flow: row wrap;
+ gap: var(--grid-gutter);
+ justify-content: flex-start;
+
+ > * {
+ flex-basis: 100%;
+ }
+}
+
+@mixin primary {
+ --grid-gutter: var(--spacing-component-gutter);
+
+ @include base;
+
+ > * {
+ @media (min-width: tokens.$break-m) {
+ flex: 0 1 calc(50% - calc(var(--grid-gutter) / 2));
+ }
+
+ @media (min-width: tokens.$break-l) {
+ flex: 0 1 calc(33.33% - calc(var(--grid-gutter) * 2 / 3));
+ }
+ }
+}
+
+@mixin secondary($media-only: false) {
+ --grid-gutter: var(--spacing-component-gutter-secondary);
+
+ @include base;
+
+ > * {
+ // Media-only grids are always two-up
+ @if $media-only == true {
+ flex: 0 1 calc(50% - calc(var(--grid-gutter) / 2));
+ }
+
+ @media (min-width: tokens.$break-m) {
+ flex: 0 1 calc(33.33% - calc(var(--grid-gutter) * 2 / 3));
+ }
+
+ @media (min-width: tokens.$break-l) {
+ flex: 0 1 calc(25% - calc(var(--grid-gutter) * 3 / 4));
+ }
+ }
+}
+
+@mixin tertiary {
+ --grid-gutter: var(--spacing-component-gutter-secondary);
+
+ @include base;
+
+ > * {
+ // Media-only grids are always two-up
+ flex: 0 1 calc(50% - calc(var(--grid-gutter) / 2));
+ }
+}
+
+@mixin quaternary {
+ --grid-gutter: var(--spacing-component-gutter-secondary);
+
+ @include base;
+
+ > * {
+ @media (min-width: tokens.$break-m) {
+ flex: 0 1 calc(50% - calc(var(--grid-gutter) / 2));
+ }
+ }
+}
+
+@mixin directory-primary {
+ --grid-gutter: var(--spacing-component-gutter);
+
+ @include base;
+
+ > * {
+ @media (min-width: tokens.$break-m) {
+ flex: 0 1 calc(33.33% - calc(var(--grid-gutter) * 2 / 3));
+ }
+
+ @media (min-width: tokens.$break-l) {
+ flex: 0 1 calc(20% - calc(var(--grid-gutter) * 4 / 5));
+ max-width: calc(20% - calc(var(--grid-gutter) * 4 / 5));
+ }
+
+ @media (min-width: tokens.$break-2xl) {
+ flex: 0 1 calc(16.66% - calc(var(--grid-gutter) * 5 / 6));
+ max-width: calc(16.66% - calc(var(--grid-gutter) * 5 / 6));
+ }
+ }
+}
+
+@mixin directory-secondary {
+ --grid-gutter: var(--spacing-component-gutter);
+
+ @include base;
+
+ > * {
+ @media (min-width: tokens.$break-m) {
+ flex: 0 1 calc(50% - calc(var(--grid-gutter) / 2));
+ }
+
+ @media (min-width: tokens.$break-l) {
+ flex: 0 1 calc(25% - calc(var(--grid-gutter) * 3 / 4));
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/_list-mixins.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/_list-mixins.scss
new file mode 100644
index 000000000..4ab38aae4
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/_list-mixins.scss
@@ -0,0 +1,23 @@
+@use '../00-tokens/tokens';
+@use '../01-atoms/atoms';
+
+@mixin primary {
+ --grid-gutter: var(--spacing-component-gutter);
+
+ @include atoms.list-reset;
+
+ display: flex;
+ flex-direction: column;
+ gap: var(--grid-gutter);
+
+ > * {
+ @include tokens.animate(box-shadow);
+
+ padding-bottom: var(--card-collection-spacing);
+ border-bottom: var(--border-thickness-1) solid var(--color-divider-subtle);
+
+ &:hover {
+ box-shadow: var(--drop-shadow-level-1-bottom-shadow-only);
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/_yds-block-wrapper.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/_yds-block-wrapper.scss
new file mode 100644
index 000000000..f1ac6dd2a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/_yds-block-wrapper.scss
@@ -0,0 +1,15 @@
+@use '../../00-tokens/tokens';
+
+.block-wrapper {
+ @include tokens.spacing-page-section;
+
+ margin-top: 0;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+}
+
+.block-wrapper__heading {
+ @include tokens.h4-yale-new;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/block-wrapper.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/block-wrapper.stories.js
new file mode 100644
index 000000000..eaac3f2f6
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/block-wrapper.stories.js
@@ -0,0 +1,23 @@
+import blockWrapperTwig from './yds-block-wrapper.twig';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Block Wrapper',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ blockContent: {
+ name: 'Content',
+ type: 'string',
+ defaultValue:
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sit amet consectetur adipiscing elit duis tristique sollicitudin nibh sit. Convallis convallis tellus id interdum velit laoreet id donec. Feugiat in ante metus dictum at. Massa eget egestas purus viverra accumsan in nisl nisi. Sed tempus urna et pharetra. Non nisi est sit amet. Leo urna molestie at elementum eu facilisis sed odio morbi. Sollicitudin aliquam ultrices sagittis orci a scelerisque purus semper eget. Pharetra massa massa ultricies mi. Elementum curabitur vitae nunc sed velit dignissim sodales ut. Semper feugiat nibh sed pulvinar. Scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. Id interdum velit laoreet id donec ultrices tincidunt arcu non. Mollis nunc sed id semper risus in. Placerat in egestas erat imperdiet sed. Tempor commodo ullamcorper a lacus vestibulum sed arcu non odio. In eu mi bibendum neque. Sit amet venenatis urna cursus eget nunc scelerisque.',
+ },
+ },
+};
+
+export const BlockWrapper = ({ blockContent }) => {
+ return blockWrapperTwig({ block_wrapper__content: blockContent });
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/yds-block-wrapper.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/yds-block-wrapper.twig
new file mode 100644
index 000000000..f70b69f30
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/block-wrapper/yds-block-wrapper.twig
@@ -0,0 +1,23 @@
+{% set block_wrapper__base_class = 'block-wrapper' %}
+
+{% set block_wrapper__attributes = {
+ class: bem(block_wrapper__base_class, block_wrapper__modifiers, block_wrapper__blockname, block_wrapper__extra_classes),
+} %}
+
+
+
+ {% if block_wrapper__label %}
+ {% set block_wrapper__heading__level = 2 %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: block_wrapper__heading__level,
+ heading: block_wrapper__label,
+ heading__blockname: block_wrapper_heading__blockname|default(block_wrapper__base_class),
+ heading__modifiers: block_wrapper_label__modifiers,
+ } %}
+ {% endif %}
+
+ {% block block_wrapper__inner %}
+ {{ block_wrapper__content }}
+ {% endblock %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/_yds-card-collection.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/_yds-card-collection.scss
new file mode 100644
index 000000000..10167fdc1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/_yds-card-collection.scss
@@ -0,0 +1,72 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+@use '../grid-mixins' as grid;
+@use '../list-mixins' as list;
+
+// The collection main wrapper.
+.card-collection {
+ @include tokens.spacing-page-section;
+}
+
+// The collection heading.
+.card-collection__heading {
+ @include tokens.h2-yale-new;
+
+ margin-bottom: var(--spacing-page-section);
+}
+
+// The actual collection of cards.
+.card-collection__cards {
+ --card-collection-spacing: var(--spacing-component-gutter);
+
+ .card-collection--limit & {
+ max-width: var(--size-component-layout-width-content);
+ }
+
+ [data-collection-type='list'] & {
+ @include list.primary;
+ }
+
+ [data-collection-type='grid'] & {
+ align-items: flex-start;
+ }
+
+ [data-collection-type='profile-directory'] & {
+ align-items: flex-start;
+ }
+
+ [data-collection-type='condensed'] & {
+ margin-block-start: 0;
+ padding-inline-start: 0;
+ }
+
+ [data-collection-type='single'] & {
+ padding: 0;
+ }
+
+ [data-collection-type='single'][data-collection-featured='false'] & {
+ padding-block-start: var(--size-spacing-11);
+ }
+
+ [data-collection-type='grid'][data-collection-featured='true'] & {
+ @include grid.primary;
+ }
+
+ [data-collection-type='grid'][data-collection-featured='false'] & {
+ @include grid.secondary;
+ }
+
+ [data-collection-type='grid'][data-component-width='content'] & {
+ @include grid.quaternary;
+ }
+
+ [data-collection-type='profile-directory'][data-collection-featured='false']
+ & {
+ @include grid.directory-primary;
+ }
+
+ [data-collection-type='profile-directory'][data-collection-featured='true']
+ & {
+ @include grid.directory-secondary;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/card-collection.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/card-collection.stories.js
new file mode 100644
index 000000000..09ddd7cf2
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/card-collection.stories.js
@@ -0,0 +1,155 @@
+import cardCollectionTwig from './yds-card-collection.twig';
+import postCardData from '../../02-molecules/cards/reference-card/examples/post-card.yml';
+import eventCardData from '../../02-molecules/cards/reference-card/examples/event-card.yml';
+import directoryCardData from '../../02-molecules/cards/directory-listing-card/yds-directory-listing-card.yml';
+import profileCardData from '../../02-molecules/cards/reference-card/examples/profile-card.yml';
+
+import imageData from '../../01-atoms/images/image/image.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Card Collection',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ collectionType: {
+ name: 'Collection Type',
+ type: 'select',
+ options: ['grid', 'list', 'condensed'],
+ defaultValue: 'grid',
+ },
+ featured: {
+ name: 'Featured',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ },
+};
+
+export const PostCardCollection = ({
+ heading,
+ collectionType,
+ featured,
+ withImages,
+}) => {
+ const items = featured ? [1, 2, 3] : [1, 2, 3, 4];
+
+ return cardCollectionTwig({
+ card_collection__source_type: 'post',
+ card_collection__type: collectionType,
+ card_collection__heading: heading,
+ card_collection__featured: featured ? 'true' : 'false',
+ card_collection__with_images: withImages ? 'true' : 'false',
+ card_collection__cards: items,
+ ...postCardData,
+ ...imageData.responsive_images['3x2'],
+ });
+};
+PostCardCollection.argTypes = {
+ withImages: {
+ name: 'With Images',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: 'Post Card Grid Heading',
+ },
+};
+
+export const EventCardCollection = ({
+ heading,
+ collectionType,
+ featured,
+ withImages,
+}) => {
+ const items = featured ? [1, 2, 3] : [1, 2, 3, 4];
+
+ return cardCollectionTwig({
+ card_collection__source_type: 'event',
+ format: 'Online',
+ card_collection__type: collectionType,
+ card_collection__heading: heading,
+ card_collection__featured: featured ? 'true' : 'false',
+ card_collection__with_images: withImages ? 'true' : 'false',
+ card_collection__cards: items,
+ ...eventCardData,
+ ...imageData.responsive_images['3x2'],
+ });
+};
+EventCardCollection.argTypes = {
+ withImages: {
+ name: 'With Images',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: 'Event Card Grid Heading',
+ },
+};
+
+export const ProfileCardCollection = ({
+ heading,
+ collectionType,
+ featured,
+ withImages,
+}) => {
+ const items = featured ? [1, 2, 3] : [1, 2, 3, 4];
+
+ return cardCollectionTwig({
+ card_collection__source_type: 'profile',
+ card_collection__type: collectionType,
+ card_collection__heading: heading,
+ card_collection__featured: featured ? 'true' : 'false',
+ card_collection__with_images: withImages ? 'true' : 'false',
+ card_collection__cards: items,
+ ...profileCardData,
+ ...imageData.responsive_images['1x1'],
+ });
+};
+ProfileCardCollection.argTypes = {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: 'Profile Card Grid Heading',
+ },
+ withImages: {
+ name: 'With Images',
+ type: 'boolean',
+ defaultValue: true,
+ },
+};
+
+export const DirectoryListingCardCollection = ({ featured, heading }) => {
+ const items = featured ? [1, 2, 3, 4] : [1, 2, 3, 4, 5, 6];
+
+ return cardCollectionTwig({
+ card_collection__source_type: 'directory-listing',
+ card_collection__type: 'profile-directory',
+ card_collection__heading: 'Directory Listing',
+ card_collection__featured: featured ? 'true' : 'false',
+ card_collection__cards: items,
+ directory_listing_card__heading: heading,
+ ...directoryCardData,
+ ...imageData.responsive_images['1x1'],
+ });
+};
+DirectoryListingCardCollection.argTypes = {
+ heading: {
+ name: 'Heading',
+ type: 'string',
+ defaultValue: directoryCardData.directory_listing_card__heading,
+ },
+ collectionType: {
+ name: 'Collection Type',
+ type: 'select',
+ options: ['profile-directory'],
+ defaultValue: 'profile-directory',
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/yds-card-collection.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/yds-card-collection.twig
new file mode 100644
index 000000000..9c9f51493
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/card-collection/yds-card-collection.twig
@@ -0,0 +1,57 @@
+{#
+ # Available Props:
+ # - card_collection__featured: boolean (ish... actually just a string. But should be 'true', or 'false')
+ # - card_collection__type: grid (default) or list
+ # - card_collection__with_images: boolean used to evaluate whether or not to show the image
+ # - card_collection__source_type: if present, it will render the content type in the collection
+ # - animate__item: defaults to `enabled`, will only animate if site_animate_components (lever / config) is not `default`
+ #
+ # Available Variables:
+ # - card_collection__heading
+ #
+ # Available Blocks:
+ # - card_collection__cards
+ #}
+
+{% set card_collection__base_class = 'card-collection' %}
+{% set card_collection__width = card_collection__width|default('site') %}
+
+{% set card_collection__attributes = {
+ 'data-collection-featured': card_collection__featured|default('true'),
+ 'data-collection-type': card_collection__type|default('grid'),
+ 'data-component-width': card_collection__width,
+ class: bem(card_collection__base_class, card_collection__modifiers),
+} %}
+
+{% if card_collection__source_type %}
+ {% set card_collection__attributes = card_collection__attributes|merge({
+ 'data-collection-source': card_collection__source_type,
+ }) %}
+{% endif %}
+
+{% set card_collection__attributes = card_collection__attributes|merge({
+ 'data-animate-item': animate__item|default('enabled'),
+}) %}
+
+
+
+ {% if card_collection__heading is not empty %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: card_collection__base_class,
+ heading: card_collection__heading,
+ } %}
+ {% endif %}
+ {% block card_collection__filters %}
+ {% endblock %}
+
+ {% block card_collection__cards %}
+ {% for card in card_collection__cards %}
+ {% include "@molecules/cards/reference-card/examples/_card--examples.twig" with {
+ reference_card__image: card_collection__with_images,
+ } %}
+ {% endfor %}
+ {% endblock %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/_yds-component-wrapper.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/_yds-component-wrapper.scss
new file mode 100644
index 000000000..bedfc7712
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/_yds-component-wrapper.scss
@@ -0,0 +1,22 @@
+@use '../../00-tokens/tokens';
+
+.component-wrapper {
+ @include tokens.spacing-page-section;
+
+ &--no-top-margin {
+ margin-top: 0;
+ }
+
+ &--no-bottom-margin {
+ margin-bottom: 0;
+ }
+}
+
+.component-wrapper__heading {
+ margin-bottom: var(--spacing-page-section);
+
+ // When a component wrapper contains a view the header should yse yale-new.
+ .ys-view & {
+ @include tokens.h2-yale-new;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/component-wrapper.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/component-wrapper.stories.js
new file mode 100644
index 000000000..cd0a9b17b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/component-wrapper.stories.js
@@ -0,0 +1,25 @@
+import componentWrapperTwig from './yds-component-wrapper.twig';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Component Wrapper',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ componentWidth: {
+ name: 'Component Width',
+ type: 'select',
+ options: ['content', 'highlight', 'site', 'max'],
+ defaultValue: 'content',
+ },
+ },
+};
+
+export const ComponentWrapper = ({ componentWidth }) => {
+ return componentWrapperTwig({
+ component_width: componentWidth,
+ });
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/yds-component-wrapper.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/yds-component-wrapper.twig
new file mode 100644
index 000000000..5b43fc519
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/component-wrapper/yds-component-wrapper.twig
@@ -0,0 +1,27 @@
+{% set component__base_class = 'component-wrapper' %}
+
+{% set component_wrapper__attributes = {
+ class: bem(component__base_class, component__modifiers, component__blockname, component__extra_classes),
+ 'data-component-width': component_wrapper__width|default('site'),
+ 'data-component-alignment': component_wrapper__alignment|default('center'),
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {% if component_wrapper__label is not empty %}
+ {% set component_wrapper__heading__level = 2 %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: component_wrapper__heading__level,
+ heading: component_wrapper__label,
+ heading__blockname: component_heading__blockname|default(component__base_class),
+ heading__modifiers: component_label__modifiers,
+ } %}
+ {% endif %}
+
+ {% block component_wrapper_inner %}
+ {% include "@page-layouts/placeholder/yds-placeholder.twig" %}
+ {% endblock %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/_yds-custom-card-collection.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/_yds-custom-card-collection.scss
new file mode 100644
index 000000000..7b708bac5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/_yds-custom-card-collection.scss
@@ -0,0 +1,38 @@
+@use '../../00-tokens/tokens';
+@use '../../01-atoms/atoms';
+@use '../grid-mixins' as grid;
+
+.custom-card-collection {
+ @include tokens.spacing-page-section;
+}
+
+.custom-card-collection__heading {
+ @include tokens.h2-yale-new;
+
+ margin-bottom: var(--spacing-page-section);
+}
+
+.custom-card-collection__cards {
+ [data-collection-featured='false'] & {
+ --grid-gutter: var(--spacing-component-gutter-secondary);
+
+ @include grid.base;
+
+ > * {
+ @media (min-width: tokens.$break-m) {
+ flex: 0 1 calc(33.33% - calc(var(--grid-gutter) * 2 / 3));
+ }
+ @media (min-width: tokens.$break-l) {
+ flex: 0 1 calc(25% - calc(var(--grid-gutter) * 3 / 4));
+ }
+ }
+ }
+
+ [data-collection-featured='true'] & {
+ @include grid.primary;
+
+ > *:first-child:last-child {
+ flex-grow: 1;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/custom-card-collection.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/custom-card-collection.stories.js
new file mode 100644
index 000000000..dc992c4a8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/custom-card-collection.stories.js
@@ -0,0 +1,77 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+// get global themes as `label` : `key` values to pass into options as array.
+import getGlobalThemes from '../../00-tokens/colors/color-global-themes';
+
+// Custom card collection twig
+import customCardCollectionTwig from './yds-custom-card-collection.twig';
+
+// Custom card default data
+import customCardData from '../../02-molecules/cards/custom-card/custom-card.yml';
+
+// Image atom component - generic images for demo
+import imageData from '../../01-atoms/images/image/image.yml';
+
+// Get global theme options
+const siteGlobalThemeOptions = getGlobalThemes(tokens['global-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Card Collection/Custom Card Collection',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ globalTheme: {
+ name: 'Global Theme (lever)',
+ options: siteGlobalThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ customCardCollectionHeading: {
+ name: 'Collection Heading',
+ type: 'string',
+ defaultValue: 'Custom Card Collection Heading',
+ },
+ featured: {
+ name: 'Featured',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ withImage: {
+ name: 'With Images',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ },
+};
+
+export const customCardCollection = ({
+ heading,
+ snippet,
+ url,
+ customCardCollectionHeading,
+ withImage,
+ featured,
+ globalTheme,
+}) => {
+ const items = featured ? [1, 2, 3] : [1, 2, 3, 4];
+
+ return `
+
+ ${customCardCollectionTwig({
+ site_global__theme: globalTheme,
+ custom_card_collection__heading: customCardCollectionHeading,
+ custom_card__heading: heading,
+ custom_card__snippet: snippet,
+ custom_card__url: url,
+ custom_card__image: withImage ? 'true' : 'false',
+ custom_card_collection__featured: featured ? 'true' : 'false',
+ custom_card_collection__cards: items,
+ ...customCardData,
+ ...imageData.responsive_images['3x2'],
+ })}
+
+ `;
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/yds-custom-card-collection.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/yds-custom-card-collection.twig
new file mode 100644
index 000000000..b9bb65107
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/custom-card-collection/yds-custom-card-collection.twig
@@ -0,0 +1,42 @@
+{#
+ # Available Variables:
+ # - custom_card_collection__heading
+ #
+ # Available Blocks:
+ # - custom_card_collection__cards
+ #}
+
+{% set custom_card_collection__base_class = 'custom-card-collection' %}
+
+{% set custom_card_collection__featured = custom_card_collection__featured == 'true' ? 'true' : 'false' %}
+{% set custom_card_collection__width = custom_card_collection__width|default('site') %}
+
+{% set custom_card_collection__attributes = {
+ 'data-collection-featured': custom_card_collection__featured,
+ 'data-component-width': custom_card_collection__width,
+ 'class': bem(custom_card_collection__base_class),
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {% if custom_card_collection__heading is not empty %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: custom_card_collection__base_class,
+ heading: custom_card_collection__heading,
+ } %}
+ {% endif %}
+
+ {% block custom_card_collection__cards %}
+ {% for card in custom_card_collection__cards %}
+ {% include "@molecules/cards/custom-card/yds-custom-card.twig" with {
+ custom_card_collection__heading: custom_card_collection__heading,
+ }
+ %}
+ {% endfor %}
+ {% endblock %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/_yds-facts-and-figures-group.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/_yds-facts-and-figures-group.scss
new file mode 100644
index 000000000..6721db7f2
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/_yds-facts-and-figures-group.scss
@@ -0,0 +1,212 @@
+@use '../../00-tokens/tokens';
+@use '../../00-tokens/functions/map';
+@use '../../01-atoms/atoms';
+@use '../grid-mixins' as grid;
+
+$global-facts-and-figures-group-themes: map.deep-get(
+ tokens.$tokens,
+ 'global-themes'
+);
+$facts-and-figures-group-component-themes: map.deep-get(
+ tokens.$tokens,
+ 'component-themes'
+);
+
+.facts-and-figures__group {
+ width: 100%;
+ position: relative;
+ padding-block-start: var(--size-spacing-10);
+ padding-block-end: var(--size-spacing-10);
+
+ // Or if the spotlight is the only spotlight on the page
+ &[data-spotlights-position='first-and-last'] {
+ @include tokens.spacing-page-section;
+ }
+
+ // We're using JavaScript to evaluate the last and first spotlights in a group of spotlights
+ &[data-spotlights-position='first'] {
+ margin-top: var(--size-spacing-10);
+ }
+
+ &[data-spotlights-position='last'] {
+ margin-bottom: var(--size-spacing-10);
+ }
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $facts-and-figures-group-component-themes {
+ &[data-component-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-slot-one: var(--component-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--component-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--component-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--component-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--component-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--component-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--component-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--component-themes-#{$theme}-slot-eight);
+ --color-facts-and-figures-theme: var(--color-slot-one);
+ --color-facts-and-figures-content: var(--color-slot-eight);
+
+ background-color: var(--color-facts-and-figures-theme);
+ color: var(--color-facts-and-figures-content);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-facts-and-figures-group-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-component-theme='one'] {
+ --color-facts-and-figures-theme: var(--color-slot-one);
+ --color-facts-and-figures-content: var(--color-slot-eight);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+
+ &[data-component-theme='two'] {
+ --color-facts-and-figures-theme: var(--color-slot-four);
+ --color-facts-and-figures-content: var(--color-slot-seven);
+ }
+
+ &[data-component-theme='three'] {
+ --color-facts-and-figures-theme: var(--color-slot-five);
+ --color-facts-and-figures-content: var(--color-slot-eight);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+}
+
+.facts-and-figures__group__inner {
+ width: 100%;
+ max-width: var(--component-width);
+}
+
+.facts-and-figures__group__wrap {
+ @include grid.base;
+
+ // position relative added to use z-index and make sure the image is behind the content
+ position: relative;
+ z-index: 1;
+
+ --grid-gutter: var(--spacing-component-gutter-secondary);
+
+ > * {
+ @media (min-width: tokens.$break-s) {
+ flex: 0 1 calc(50% - calc(var(--grid-gutter) * 2 / 3));
+ }
+
+ @media (min-width: tokens.$break-m) {
+ flex: 0 1 calc(33.33% - calc(var(--grid-gutter) * 2 / 3));
+ }
+
+ @media (min-width: tokens.$break-l) {
+ flex: 0 1 calc(25% - calc(var(--grid-gutter) * 3 / 4));
+ }
+ }
+
+ [data-component-grid-count='two'] & {
+ > * {
+ @media (min-width: tokens.$break-s) {
+ flex: 0 1 calc(50% - var(--grid-gutter));
+ max-width: calc(50% - var(--grid-gutter));
+ }
+ }
+ }
+
+ [data-component-grid-count='three'] & {
+ > * {
+ @media (min-width: tokens.$break-s) {
+ flex: 0 calc(50% - var(--grid-gutter));
+ }
+
+ @media (min-width: tokens.$break-m) {
+ flex: 1 0 calc(33.33% - var(--grid-gutter));
+ max-width: calc(33.33% - var(--grid-gutter));
+ }
+ }
+ }
+
+ [data-component-grid-count='four'] & {
+ > * {
+ @media (min-width: tokens.$break-s) {
+ flex: 0 calc(50% - var(--grid-gutter));
+ }
+
+ @media (min-width: tokens.$break-m) {
+ flex: 1 0 calc(25% - var(--grid-gutter));
+ }
+
+ @media (min-width: tokens.$break-l) {
+ flex: 1 0 calc(25% - var(--grid-gutter));
+ max-width: calc(25% - var(--grid-gutter));
+ }
+ }
+ }
+}
+
+.facts-and-figures__group__image {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-blend-mode: multiply;
+ background-color: var(--color-facts-and-figures-theme);
+ opacity: 0.15;
+
+ img {
+ height: 100%;
+ width: 100%;
+ object-fit: cover;
+ }
+}
+
+.facts-and-figures__group__content-wrap {
+ position: relative;
+ z-index: 1;
+ margin-bottom: var(--size-spacing-8);
+}
+
+.facts-and-figures__group__heading {
+ @include tokens.h2-yale-new;
+
+ color: var(--color-facts-and-figures-content);
+}
+
+.facts-and-figures__group__content {
+ @include tokens.body-default;
+
+ color: var(--color-facts-and-figures-content);
+}
+
+.facts-and-figures__group__cta {
+ @include atoms.plain-link;
+
+ color: var(--color-facts-and-figures-content);
+
+ &:hover {
+ color: var(--color-facts-and-figures-content);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/facts-and-figures-group.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/facts-and-figures-group.stories.js
new file mode 100644
index 000000000..d104499d9
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/facts-and-figures-group.stories.js
@@ -0,0 +1,123 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+// get global themes as `label` : `key` values to pass into options as array.
+import getGlobalThemes from '../../00-tokens/colors/color-global-themes';
+
+// facts_and_figures__group twig
+import factsAndFiguresGroupTwig from './yds-facts-and-figures-group.twig';
+
+// Stat default data
+import factsAndFiguresGroupData from './facts-and-figures-group.yml';
+
+// Image atom component - generic images for demo
+import imageData from '../../01-atoms/images/image/image.yml';
+
+// Get global theme options
+const siteGlobalThemeOptions = getGlobalThemes(tokens['global-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Facts and Figures Group',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ globalTheme: {
+ name: 'Global Theme (lever)',
+ options: siteGlobalThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ themeColor: {
+ name: 'Component Theme (dial)',
+ options: ['one', 'two', 'three'],
+ type: 'select',
+ defaultValue: 'one',
+ },
+ factsAndFiguresGroupHeading: {
+ name: 'Infographic Group Heading',
+ type: 'string',
+ defaultValue: factsAndFiguresGroupData.facts_and_figures__group__heading,
+ },
+ factsAndFiguresGroupContent: {
+ name: 'Infographic Group Content',
+ type: 'string',
+ defaultValue: factsAndFiguresGroupData.facts_and_figures__group__content,
+ },
+ factsAndFiguresGroupLink: {
+ name: 'Infographic Group Link',
+ type: 'string',
+ defaultValue:
+ factsAndFiguresGroupData.facts_and_figures__group__link__content,
+ },
+ image: {
+ name: 'With image',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ factsAndFiguresGroupIcons: {
+ name: 'Infographic Group Icons',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ presentationStyle: {
+ name: 'Presentation Style',
+ options: ['basic', 'icon-only'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+ fontStyle: {
+ name: 'Font Style',
+ options: ['normal', 'numeric-oldstyle'],
+ type: 'select',
+ defaultValue: 'normal',
+ },
+ columnCount: {
+ name: 'Column Count',
+ options: ['two', 'three', 'four'],
+ type: 'select',
+ defaultValue: 'three',
+ },
+ alignment: {
+ name: 'Alignment',
+ options: ['left', 'center'],
+ type: 'select',
+ defaultValue: 'left',
+ },
+ },
+};
+
+export const FactsAndFiguresGroup = ({
+ factsAndFiguresGroupHeading,
+ factsAndFiguresGroupContent,
+ factsAndFiguresGroupIcons,
+ globalTheme,
+ presentationStyle,
+ fontStyle,
+ columnCount,
+ alignment,
+ themeColor,
+ image,
+}) => {
+ return `
+
+ ${factsAndFiguresGroupTwig({
+ site_global__theme: globalTheme,
+ facts_and_figures__group__heading: factsAndFiguresGroupHeading,
+ facts_and_figures__group__content: factsAndFiguresGroupContent,
+ facts_and_figures__group__has_icon: factsAndFiguresGroupIcons
+ ? 'true'
+ : 'false',
+ facts_and_figures__group__grid_count: columnCount,
+ facts_and_figures__group__alignment: alignment,
+ facts_and_figures__group__presentation_style: presentationStyle,
+ facts_and_figures__group__font_style: fontStyle,
+ facts_and_figures__group__theme: themeColor,
+ facts_and_figures__group__bg_image: image,
+ ...factsAndFiguresGroupData,
+ ...imageData.responsive_images['16x9'],
+ })}
+
+ `;
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/facts-and-figures-group.yml b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/facts-and-figures-group.yml
new file mode 100644
index 000000000..dde2e7efe
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/facts-and-figures-group.yml
@@ -0,0 +1,17 @@
+facts_and_figures__group__heading: 'Facts and Figures Group'
+facts_and_figures__group__content: 'This is a group of facts and figures'
+facts_and_figures__group__link__content: 'This is a link'
+facts_and_figures__group__link__url: 'https://www.bing.com'
+facts_and_figures__group:
+ - facts_and_figures__group__stat: '$52,300'
+ facts_and_figures__group__content: 'Card 1 content goes here.'
+ - facts_and_figures__group__stat: '$100,000'
+ facts_and_figures__group__content: 'Card 2 content goes here.'
+ - facts_and_figures__group__stat: '150%'
+ facts_and_figures__group__content: 'Card 3 content goes here.'
+ - facts_and_figures__group__stat: '200%'
+ facts_and_figures__group__content: 'Card 4 content goes here.'
+ - facts_and_figures__group__stat: '$3,000'
+ facts_and_figures__group__content: 'Card 5 content goes here.'
+ - facts_and_figures__group__stat: '$25,200'
+ facts_and_figures__group__content: 'Card 6 content goes here.'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/yds-facts-and-figures-group.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/yds-facts-and-figures-group.twig
new file mode 100644
index 000000000..8dd7ba3bd
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/facts-and-figures-group/yds-facts-and-figures-group.twig
@@ -0,0 +1,87 @@
+{#
+ # Available Variables:
+ # - facts_and_figures__group__heading
+ # - facts_and_figures__group__bg_image: (boolean) false by default
+
+ # Available Blocks:
+ # - facts_and_figures__group__cards
+ #}
+
+{% set facts_and_figures__group__base_class = 'facts-and-figures__group' %}
+
+{% set facts_and_figures__group__width = facts_and_figures__group__width|default('site') %}
+
+{% if facts_and_figures__collection__type %}
+ {% set facts_and_figures__group__attributes = facts_and_figures__group__attributes|merge({
+ 'dats-facts-and-figures-collection-type': facts_and_figures__collection__type,
+ }) %}
+{% endif %}
+
+{% set facts_and_figures__group__attributes = {
+ 'data-component-width': facts_and_figures__group__width,
+ 'data-component-grid-count': facts_and_figures__group__grid_count|default('four'),
+ 'dats-facts-and-figures-style': facts_and_figures__group__presentation_style|default('basic'),
+ 'dats-facts-and-figures-font-style': facts_and_figures__group__font_style|default('normal'),
+ 'dats-facts-and-figures-has-icon': facts_and_figures__group__has_icon == 'true' ? 'true' : 'false',
+ 'data-component-alignment': facts_and_figures__group__alignment|default('center'),
+ 'data-component-theme': facts_and_figures__group__theme|default('one'),
+ 'class': bem(facts_and_figures__group__base_class),
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {% if facts_and_figures__group__heading is not empty or facts_and_figures__group__content is not empty or facts_and_figures__group__link__url is not empty %}
+
+ {% if facts_and_figures__group__heading is not empty %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: facts_and_figures__group__base_class,
+ heading: facts_and_figures__group__heading,
+ } %}
+ {% endif %}
+ {% if facts_and_figures__group__content is not empty %}
+ {% include "@atoms/typography/text/yds-text.twig" with {
+ text__blockname: facts_and_figures__group__base_class,
+ text__content: facts_and_figures__group__content,
+ text__base_class: 'content',
+ } %}
+ {% endif %}
+ {% if facts_and_figures__group__link__url %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: facts_and_figures__group__link__content|default(facts_and_figures__group__link__content),
+ cta__href: facts_and_figures__group__link__url|default(facts_and_figures__group__link__url),
+ cta__blockname: facts_and_figures__group__base_class,
+ cta__style: 'outline',
+ } %}
+ {% endif %}
+
+ {% endif %}
+
+ {% block facts_and_figures__group__items %}
+ {% for stat in facts_and_figures__group %}
+ {# Set stat attributes based on facts_and_figures__group attributes so all stat items within that facts_and_figures__group group are consistent #}
+ {# facts_and_figures__theme: 'default' is set to default as the theme is set on the facts_and_figures__group component, we don't want the individual stat to have a bg color #}
+ {% include "@molecules/facts-and-figures/yds-facts-and-figures.twig" with {
+ facts_and_figures__stat: stat.facts_and_figures__group__stat,
+ facts_and_figures__content: stat.facts_and_figures__group__content,
+ facts_and_figures__has_icon: facts_and_figures__group__has_icon,
+ facts_and_figures__font_style: facts_and_figures__group__font_style,
+ facts_and_figures__alignment: facts_and_figures__group__alignment,
+ facts_and_figures__presentation_style: facts_and_figures__group__presentation_style,
+ facts_and_figures__theme: 'default',
+ }
+ %}
+ {% endfor %}
+ {% endblock %}
+
+ {% if facts_and_figures__group__bg_image %}
+
+ {% block facts_and_figures__group__image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+
+ {% endif %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/gallery.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/gallery.stories.js
new file mode 100644
index 000000000..60596cb51
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/gallery.stories.js
@@ -0,0 +1,45 @@
+// Twig templates.
+import mediaGridTwig from './media-grid/yds-media-grid.twig';
+
+// Data files.
+import mediaGridData from './media-grid/media-grid.yml';
+
+// JS.
+import './media-grid/yds-media-grid-interactive';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Galleries',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ gridHeading: {
+ name: 'Gallery heading',
+ type: 'string',
+ defaultValue: mediaGridData.media_grid__heading,
+ },
+ },
+};
+
+export const ImageGrid = ({ gridHeading }) => {
+ return mediaGridTwig({
+ ...mediaGridData,
+ media_grid__heading: gridHeading,
+ });
+};
+
+export const InteractiveGrid = ({ gridHeading }) => `
+ ${mediaGridTwig({
+ ...mediaGridData,
+ media_grid__variation: 'interactive',
+ media_grid__heading: gridHeading,
+ })}
+ ${mediaGridTwig({
+ ...mediaGridData,
+ media_grid__variation: 'interactive',
+ media_grid__heading: gridHeading,
+ })}
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-item.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-item.twig
new file mode 100644
index 000000000..e09375522
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-item.twig
@@ -0,0 +1,37 @@
+{#
+ # Available Variables:
+ # - media_grid__variation: basic (default), interactive
+ #
+ # Available Blocks:
+ # - media_grid_item__media
+ #}
+
+{% set media_grid__base_class = 'media-grid' %}
+{% set media_grid__item__element = media_grid__variation == 'interactive' ? 'button' : 'div' %}
+
+
+ <{{ media_grid__item__element }} {{ bem('image', [], media_grid__base_class) }}>
+ {% block media_grid_item__media %}
+ {% include "@atoms/images/image/_responsive-image.twig" with {
+ output_image_tag: item.output_image_tag,
+ image__srcset: item.image__srcset,
+ image__sizes: item.image__sizes,
+ image__src: item.image__src,
+ image__alt: item.image__alt,
+ } %}
+ {% endblock %}
+ {% if media_grid__variation == 'interactive' %}
+ Open this image in a modal
+ {% endif %}
+ {{ media_grid__item__element }}>
+ {% if media_grid__variation == 'interactive' %}
+
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'arrows-maximize',
+ icon__blockname: media_grid__base_class,
+ icon__decorative: true,
+ } %}
+
+
+ {% endif %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal-item--content.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal-item--content.twig
new file mode 100644
index 000000000..092162a7e
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal-item--content.twig
@@ -0,0 +1,51 @@
+{#
+ # Available Variables:
+ # - modal_item__heading
+ # - modal_item__content
+ #}
+
+{% set modal_item__heading = modal_item__heading|default(item.media_grid__modal__heading) %}
+{% set modal_item__content = modal_item__content|default(item.media_grid__modal__text) %}
+{% set media_grid__modal__base_class = 'media-grid-modal' %}
+
+{% set modal_item__content__attributes = [{}] %}
+
+
+{% if modal_item__heading is not empty or modal_item__content is not empty %}
+ {% set media_grid__item__content %}
+
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'circle-plus',
+ icon__decorative: true,
+ icon__blockname: media_grid__modal__base_class,
+ icon__modifiers: ['expand-content'],
+ } %}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'circle-minus',
+ icon__decorative: true,
+ icon__blockname: media_grid__modal__base_class,
+ icon__modifiers: ['collapse-content'],
+ } %}
+
+
+ {# Content Heading #}
+ {% if modal_item__heading is not empty %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading: modal_item__heading,
+ heading__blockname: media_grid__modal__base_class,
+ } %}
+ {% endif %}
+ {# Content Text #}
+ {% if modal_item__content %}
+
+ {{ modal_item__content }}
+
+ {% endif %}
+
+ {% endset %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: media_grid__item__content,
+ text_field__extra_classes: ['no-page-spacing'],
+ } %}
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal-item.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal-item.twig
new file mode 100644
index 000000000..6ee7a0318
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal-item.twig
@@ -0,0 +1,98 @@
+{#
+ # Available Variables:
+ # - media_grid__items: array of items for the modal. Including the following
+ # - media_grid__modal__heading
+ # - media_grid__modal__text
+ #}
+
+{% set media_grid__modal__base_class = 'media-grid-modal' %}
+
+{% set control_prev %}
+ Previous item
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ } %}
+{% endset %}
+
+{% set control_next %}
+ Next item
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ } %}
+{% endset %}
+
+{% set control_close %}
+ Close Gallery
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'xmark',
+ } %}
+{% endset %}
+
+
+
+ {# "Close" control #}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__blockname: media_grid__modal__base_class,
+ control__base_class: 'control',
+ control__modifiers: ['close'],
+ control__content: control_close,
+ } %}
+ {# "Previous" control #}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__blockname: media_grid__modal__base_class,
+ control__base_class: 'control',
+ control__modifiers: ['previous'],
+ control__content: control_prev,
+ } %}
+ {% for item in media_grid__items %}
+ {# Media #}
+
+ {% block media_grid__modal__media %}
+ {% include "@atoms/images/image/_responsive-image.twig" with {
+ output_image_tag: item.output_image_tag,
+ image__srcset: item.image__srcset,
+ image__sizes: item.image__sizes,
+ image__src: item.image__src,
+ image__alt: item.image__alt,
+ } %}
+ {% endblock %}
+
+ {% endfor %}
+ {# Pager #}
+
+ {% for item in media_grid__items %}
+ {% set pager_item__content %}
+
+ View item
+ {{ loop.index }}
+
+ {% endset %}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__blockname: media_grid__modal__base_class,
+ control__base_class: 'pager-item',
+ control__content: pager_item__content,
+ } %}
+ {% endfor %}
+ {# Total pager count. Used for small screens. #}
+
+
+ {{ media_grid__items|length }}
+
+
+
+ {% for item in media_grid__items %}
+
+ {% block media_grid__modal__content %}
+ {% include "@organisms/galleries/media-grid/_yds-media-grid-modal-item--content.twig" %}
+ {% endblock %}
+
+ {% endfor %}
+ {# "Next" control #}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__blockname: media_grid__modal__base_class,
+ control__base_class: 'control',
+ control__modifiers: ['next'],
+ control__content: control_next,
+ } %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal.scss
new file mode 100644
index 000000000..f71e79b88
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid-modal.scss
@@ -0,0 +1,389 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+@use '../../../00-tokens/typography/typography';
+
+$modal-speed: var(--animation-speed-slow);
+
+@mixin media-grid-modal-transition {
+ @include tokens.animate(opacity, $modal-speed);
+}
+
+.media-grid__inner {
+ position: relative;
+ z-index: 1;
+
+ [data-media-grid-modal-state='active'] & {
+ z-index: 0;
+ }
+}
+
+.media-grid__modal {
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background: transparent;
+
+ [data-media-grid-modal-state='inactive'] & {
+ @include tokens.animate-hidden($modal-speed);
+ @include media-grid-modal-transition;
+
+ opacity: 0;
+
+ // when inactive, set the z-index below the `media-grid__inner`
+ // to make sure it doesn't render as an invisible elements over the grid
+ // preventing interaction.
+ z-index: -1;
+ }
+
+ // Show the modal and backdrop when active.
+ [data-media-grid-modal-state='active'] & {
+ @include media-grid-modal-transition;
+
+ opacity: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ // This z-index is crazy high to ensure it shows above admin toolbars.
+ z-index: 600;
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: var(--color-background);
+ opacity: 0.9;
+ }
+
+ // Position modal content relative, to "place it on top of the backdrop".
+ > * {
+ position: relative;
+ }
+
+ svg {
+ max-width: 100%;
+ max-height: 100%;
+ }
+}
+
+.media-grid-modal__item {
+ padding-block-start: var(--size-spacing-site-gutter);
+ padding-block-end: var(--size-spacing-site-gutter);
+ width: 100%;
+ height: 100%;
+ overflow: auto;
+}
+
+.media-grid-modal__inner {
+ display: grid;
+ position: relative;
+
+ // Stylelint is mis-interpreting the `/` below as a division operator, rather
+ // than as a part of the grid-template sizing stuff. So, we need to disable
+ // that check for this chunk of code.
+ /* stylelint-disable scss/operator-no-newline-before */
+ grid-template:
+ '. . control-close' var(--size-click-target-minimum)
+ 'media media media' minmax(auto, 50vh)
+ 'control-previous pager control-next' var(--size-click-target-minimum)
+ 'content content content' minmax(auto, 1fr) / var(
+ --size-click-target-minimum
+ )
+ minmax(0, 1fr) var(--size-click-target-minimum);
+ /* stylelint-enable scss/operator-no-newline-before */
+ gap: var(--size-spacing-5);
+ max-height: 100%;
+
+ @media (min-width: tokens.$break-s) {
+ grid-template:
+ '. media control-close' var(--size-click-target-minimum)
+ 'control-previous media control-next' minmax(auto, 4fr)
+ '. pager .' fit-content(100%)
+ '. content .' minmax(var(--size-click-target-minimum), 1fr) / var(
+ --size-click-target-minimum
+ )
+ minmax(0, 1fr)
+ var(--size-click-target-minimum);
+ gap: var(--spacing-component-gutter-secondary);
+ }
+
+ @media (orientation: landscape) and (max-height: 400px) {
+ grid-template:
+ '. media control-close' var(--size-click-target-minimum)
+ 'control-previous media control-next' minmax(auto, 4fr)
+ '. content .' minmax(var(--size-click-target-minimum), 2fr) / var(
+ --size-click-target-minimum
+ )
+ minmax(0, 1fr)
+ var(--size-click-target-minimum);
+ gap: var(--size-spacing-2);
+ }
+}
+
+.media-grid-modal__media {
+ grid-area: media;
+ width: 100%;
+ max-height: 100%;
+
+ img {
+ height: 100%;
+ width: 100%;
+ object-fit: contain;
+ }
+}
+
+.media-grid-modal__pager {
+ grid-area: pager;
+ display: flex;
+ gap: var(--size-spacing-1);
+ justify-content: center;
+
+ // hide pager for very small screens
+ @media (orientation: landscape) and (max-height: 400px) {
+ display: none;
+ }
+}
+
+.media-grid-modal__pager-item {
+ @include atoms.button-reset;
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: var(--size-click-target-minimum);
+ min-width: var(--size-click-target-minimum);
+
+ // Fix to keep the focus indicator visible. Needed because of the
+ // `overflow: auto` above, which would otherwise cut off the outline.
+ outline-offset: calc(var(--size-thickness-2) * -1);
+
+ &:hover {
+ @media (min-width: tokens.$break-s) {
+ color: var(--color-link-hover);
+ }
+ }
+
+ @media (max-width: (tokens.$break-s - 0.05)) {
+ &:not(.media-grid-modal__pager-item--total):not([data-media-grid-modal-item-active='true']):not([aria-current='true']) {
+ display: none;
+ }
+
+ &[aria-current='true'],
+ &[data-media-grid-modal-item-active='true'] {
+ position: relative;
+
+ &::after {
+ content: '/';
+ position: absolute;
+ right: calc(calc(var(--spacing-component-gutter-secondary) / 4) * -1);
+ }
+ }
+ }
+
+ @media (min-width: tokens.$break-s) {
+ &.media-grid-modal__pager-item--total {
+ display: none;
+ }
+ }
+}
+
+.media-grid-modal__pager-item-content {
+ [aria-current='true'] > & {
+ @media (min-width: tokens.$break-s) {
+ transform: scale(1.45);
+ }
+ }
+}
+
+.media-grid-modal__content-wrapper {
+ display: flex;
+ flex-direction: column;
+ gap: var(--size-spacing-3);
+ width: 100%;
+ max-width: calc(100% - var(--size-click-target-minimum));
+ overflow: hidden;
+
+ &[aria-expanded='true'] {
+ overflow: auto;
+ }
+}
+
+.media-grid-modal__content {
+ overflow: hidden;
+ grid-area: content;
+ position: relative;
+ width: 100%;
+ padding-block-start: var(--size-spacing-6);
+ padding-block-end: var(--size-spacing-6);
+ align-self: flex-end;
+ max-height: var(--modal-content-item-height);
+
+ .text {
+ display: flex;
+ flex-direction: row;
+ justify-content: start;
+ align-items: center;
+ gap: var(--size-spacing-5);
+ }
+
+ &[is-expanded] {
+ background-color: var(--color-gray-800);
+ }
+
+ &[is-expanded='true'] {
+ @include tokens.animate(max-height, var(--animation-speed-slow));
+
+ overflow: auto;
+ z-index: 1;
+
+ .text {
+ justify-content: start;
+ align-items: flex-start;
+ }
+ }
+
+ a {
+ @include atoms.plain-link;
+
+ &:hover {
+ color: var(--color-gray-300);
+ }
+ }
+}
+
+.media-grid-modal__heading {
+ @include tokens.body-l;
+
+ // if the toggle is present, truncate the heading to 1 line
+ [is-expanded='false'] & {
+ @include typography.truncate-text;
+ }
+
+ @media (max-width: (tokens.$break-s - 0.05)) {
+ @include tokens.body-default;
+ }
+
+ @media (orientation: landscape) and (max-height: 400px) {
+ @include tokens.body-default;
+ }
+}
+
+.media-grid-modal__text {
+ @include tokens.body-default-condensed;
+
+ > * {
+ margin-top: 0;
+ }
+
+ [is-expanded='false'] & {
+ @include typography.truncate-text;
+ }
+
+ @media (max-width: (tokens.$break-s - 0.05)) {
+ @include tokens.body-s;
+
+ max-height: 60vh;
+ }
+
+ // small height and landscape
+ @media (orientation: landscape) and (max-height: 400px) {
+ @include tokens.body-s;
+
+ max-height: 20vh;
+ }
+
+ &--has-heading {
+ [is-expanded='false'] & {
+ display: none;
+ }
+ }
+}
+
+.media-grid-modal__control {
+ @include atoms.button-reset;
+
+ height: 100%;
+ display: flex;
+ align-items: center;
+
+ &:hover {
+ color: var(--color-link-hover);
+ }
+
+ svg {
+ height: var(--size-click-target-minimum);
+ width: var(--size-click-target-minimum);
+ }
+
+ &--previous {
+ grid-area: control-previous;
+
+ svg {
+ transform: rotate(90deg);
+ }
+ }
+
+ &--next {
+ grid-area: control-next;
+
+ svg {
+ transform: rotate(-90deg);
+ }
+ }
+
+ &--close {
+ grid-area: control-close;
+ border: var(--size-thickness-1) solid;
+ padding: var(--size-spacing-2);
+ }
+}
+
+[data-media-grid-modal-item]:not([data-media-grid-modal-item-active]) {
+ @include tokens.animate-hidden($modal-speed);
+ @include media-grid-modal-transition;
+
+ opacity: 0;
+}
+
+[data-media-grid-modal-item-active] {
+ @include media-grid-modal-transition;
+
+ opacity: 1;
+}
+
+.media-grid-modal__toggle-caption {
+ display: none;
+ flex: 0 0 var(--size-click-target-minimum);
+ position: relative;
+ padding: 0;
+ cursor: pointer;
+ background-color: transparent;
+ border: none;
+ height: var(--size-click-target-minimum);
+ width: var(--size-click-target-minimum);
+ overflow: hidden;
+
+ svg {
+ fill: var(--color-text);
+ }
+
+ svg.media-grid-modal__icon--collapse-content {
+ display: none;
+ }
+
+ [is-expanded='true'] & {
+ svg.media-grid-modal__icon--expand-content {
+ display: none;
+ }
+
+ svg.media-grid-modal__icon--collapse-content {
+ display: block;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid.scss
new file mode 100644
index 000000000..87314b794
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/_yds-media-grid.scss
@@ -0,0 +1,137 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+@use '../../grid-mixins' as grid;
+
+.media-grid {
+ @include tokens.spacing-page-section;
+}
+
+.media-grid__heading {
+ @include tokens.h2-yale-new;
+
+ margin-bottom: var(--spacing-page-section);
+}
+
+.media-grid__items {
+ @include grid.secondary($media-only: true);
+
+ [data-component-width='content'] & {
+ @include grid.tertiary;
+ }
+}
+
+.media-grid__item {
+ display: flex;
+ aspect-ratio: 3/2;
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 3 / 2) {
+ max-height: 200px;
+
+ &::before {
+ float: left;
+ padding-top: 66.66%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+
+ [data-media-grid-variation='interactive'] & {
+ position: relative;
+ background-color: var(--color-basic-black);
+
+ &:hover > * {
+ cursor: pointer;
+ }
+ }
+}
+
+/*
+ * This is specific to a media grid item that would have no image. In this
+ * case, we display text conveying this to the user, but it must be legible on
+ * the background.
+ */
+button.media-grid__image {
+ color: var(--color-basic-white);
+}
+
+.media-grid__image {
+ @include atoms.button-reset;
+ @include tokens.animate(opacity, var(--animation-speed-default));
+
+ overflow: hidden;
+ opacity: 1;
+ width: 100%;
+
+ [data-media-grid-variation='interactive'] &:focus-visible,
+ [data-media-grid-variation='interactive'] .media-grid__item:hover & {
+ opacity: 0.8;
+ }
+}
+
+.media-grid__maximize {
+ --size-icon: 60%;
+
+ @include tokens.animate(transform, var(--animation-speed-default));
+
+ position: absolute;
+ right: var(--size-spacing-4);
+ bottom: var(--size-spacing-4);
+ background: var(--color-basic-white);
+ width: clamp(1rem, 7.69%, 3rem);
+ aspect-ratio: 1 / 1;
+ border-radius: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transform-origin: bottom right;
+
+ .media-grid__item:hover &,
+ .media-grid__image:focus-visible + & {
+ transform: scale(1.3);
+ }
+
+ svg {
+ height: var(--size-icon);
+ aspect-ratio: 1 / 1;
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 1 / 1) {
+ width: 1.5rem;
+ height: 1.5rem;
+ padding: var(--size-spacing-2);
+
+ &::before {
+ float: left;
+ padding-top: 100%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+ }
+
+ // Safari 14 fix for aspect-ratio
+ @supports not (aspect-ratio: 1 / 1) {
+ &::before {
+ float: left;
+ padding-top: 100%;
+ content: '';
+ }
+
+ &::after {
+ display: block;
+ content: '';
+ clear: both;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/media-grid.yml b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/media-grid.yml
new file mode 100644
index 000000000..454d687aa
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/media-grid.yml
@@ -0,0 +1,62 @@
+media_grid__heading: 'Optional Gallery Heading'
+
+media_grid__items:
+ - media_grid__modal__heading: 'Optional heading for the first image'
+ media_grid__modal__text: 'Optional first caption. Lorem ipsum dolor sit amet, consectetur adipiscing elitp, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. At lectus urna duis convallis convallis. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Purus semper eget duis at tellus at. Magnis dis parturient montes nascetur ridiculus mus. Ipsum a arcu cursus vitae congue. Vel elit scelerisque mauris pellentesque pulvinar pellentesque. Massa tempor nec feugiat nisl. Consequat interdum varius sit amet mattis vulputate. Eget magna fermentum iaculis eu non. Maecenas sed enim ut sem.
'
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/213 320w, https://picsum.photos/480/320 480w, https://picsum.photos/640/427 640w, https://picsum.photos/800/533 800w, https://picsum.photos/960/640 960w, https://picsum.photos/1120/747 1120w, https://picsum.photos/1280/853 1280w, https://picsum.photos/1440/960 1440w, https://picsum.photos/1600/1067 1600w, https://picsum.photos/1760/1173 1760w, https://picsum.photos/1920/1280 1920w, https://picsum.photos/2080/1387 2080w, https://picsum.photos/2240/1493 2240w, https://picsum.photos/2400/1600 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/213'
+ image__alt: 'A 3 by 2 image'
+ - media_grid__modal__heading: 'Optional heading for the second image'
+ media_grid__modal__text: 'Optional second caption. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Purus semper eget duis at tellus at. Magnis dis parturient montes nascetur ridiculus mus. Ipsum a arcu cursus vitae congue. Vel elit scelerisque mauris pellentesque pulvinar pellentesque. Massa tempor nec feugiat nisl. Consequat interdum varius sit amet mattis vulputate. Eget magna fermentum iaculis eu non. Maecenas sed enim ut sem.
'
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320 320w, https://picsum.photos/480 480w, https://picsum.photos/640 640w, https://picsum.photos/800 800w, https://picsum.photos/960 960w, https://picsum.photos/1120 1120w, https://picsum.photos/1280 1280w, https://picsum.photos/1440 1440w, https://picsum.photos/1600 1600w, https://picsum.photos/1760 1760w, https://picsum.photos/1920 1920w, https://picsum.photos/2080 2080w, https://picsum.photos/2240 2240w, https://picsum.photos/2400 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320'
+ image__alt: 'A 1 by 1 image'
+ - media_grid__modal__text: 'Optional third caption. This item has no heading. Lorem ipsum dolor sit amet, consectetur adipiscing elitp, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. At lectus urna duis convallis convallis. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Purus semper eget duis at tellus at. Magnis dis parturient montes nascetur ridiculus mus. Ipsum a arcu cursus vitae congue. Vel elit scelerisque mauris pellentesque pulvinar pellentesque. Massa tempor nec feugiat nisl. Consequat interdum varius sit amet mattis vulputate. Eget magna fermentum iaculis eu non. Maecenas sed enim ut sem.
'
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/512 320w, https://picsum.photos/480/768 480w, https://picsum.photos/640/1024 640w, https://picsum.photos/800/1280 800w, https://picsum.photos/960/1536 960w, https://picsum.photos/1120/1792 1120w, https://picsum.photos/1280/2048 1280w, https://picsum.photos/1440/2304 1440w, https://picsum.photos/1600/2560 1600w, https://picsum.photos/1760/2816 1760w, https://picsum.photos/1920/3072 1920w, https://picsum.photos/2080/3328 2080w, https://picsum.photos/2240/3584 2240w, https://picsum.photos/2400/3840 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/512'
+ image__alt: 'A 1 by 1.6 image'
+ - media_grid__modal__heading: 'Optional heading for the fourth image'
+ media_grid__modal__text: 'Optional fourth caption. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Purus semper eget duis at tellus at. Magnis dis parturient montes nascetur ridiculus mus. Ipsum a arcu cursus vitae congue. Vel elit scelerisque mauris pellentesque pulvinar pellentesque. Massa tempor nec feugiat nisl. Consequat interdum varius sit amet mattis vulputate. Eget magna fermentum iaculis eu non. Maecenas sed enim ut sem.
'
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/240 320w, https://picsum.photos/480/360 480w, https://picsum.photos/640/480 640w, https://picsum.photos/800/600 800w, https://picsum.photos/960/720 960w, https://picsum.photos/1120/840 1120w, https://picsum.photos/1280/960 1280w, https://picsum.photos/1440/1080 1440w, https://picsum.photos/1600/1200 1600w, https://picsum.photos/1760/1320 1760w, https://picsum.photos/1920/1440 1920w, https://picsum.photos/2080/1560 2080w, https://picsum.photos/2240/1680 2240w, https://picsum.photos/2400/1800 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/240'
+ image__alt: 'A 4 by 3 image'
+ - output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/240 320w, https://picsum.photos/480/360 480w, https://picsum.photos/640/480 640w, https://picsum.photos/800/600 800w, https://picsum.photos/960/720 960w, https://picsum.photos/1120/840 1120w, https://picsum.photos/1280/960 1280w, https://picsum.photos/1440/1080 1440w, https://picsum.photos/1600/1200 1600w, https://picsum.photos/1760/1320 1760w, https://picsum.photos/1920/1440 1920w, https://picsum.photos/2080/1560 2080w, https://picsum.photos/2240/1680 2240w, https://picsum.photos/2400/1800 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/240'
+ image__alt: 'A 4 by 3 image'
+ - media_grid__modal__heading: 'Optional heading for the sixth image (with no text)'
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/213 320w, https://picsum.photos/480/320 480w, https://picsum.photos/640/427 640w, https://picsum.photos/800/533 800w, https://picsum.photos/960/640 960w, https://picsum.photos/1120/747 1120w, https://picsum.photos/1280/853 1280w, https://picsum.photos/1440/960 1440w, https://picsum.photos/1600/1067 1600w, https://picsum.photos/1760/1173 1760w, https://picsum.photos/1920/1280 1920w, https://picsum.photos/2080/1387 2080w, https://picsum.photos/2240/1493 2240w, https://picsum.photos/2400/1600 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/213'
+ image__alt: 'A 3 by 2 image'
+ - media_grid__modal__heading: 'Optional heading for the seventh image'
+ media_grid__modal__text: 'Optional seventh caption. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Purus semper eget duis at tellus at. Magnis dis parturient montes nascetur ridiculus mus. Ipsum a arcu cursus vitae congue. Vel elit scelerisque mauris pellentesque pulvinar pellentesque. Massa tempor nec feugiat nisl. Consequat interdum varius sit amet mattis vulputate. Eget magna fermentum iaculis eu non. Maecenas sed enim ut sem.
'
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320 320w, https://picsum.photos/480 480w, https://picsum.photos/640 640w, https://picsum.photos/800 800w, https://picsum.photos/960 960w, https://picsum.photos/1120 1120w, https://picsum.photos/1280 1280w, https://picsum.photos/1440 1440w, https://picsum.photos/1600 1600w, https://picsum.photos/1760 1760w, https://picsum.photos/1920 1920w, https://picsum.photos/2080 2080w, https://picsum.photos/2240 2240w, https://picsum.photos/2400 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320'
+ image__alt: 'A 1 by 1 image'
+ - media_grid__modal__heading: 'Optional heading for the eighth image'
+ media_grid__modal__text: 'Optional eighth caption. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Purus semper eget duis at tellus at. Magnis dis parturient montes nascetur ridiculus mus. Ipsum a arcu cursus vitae congue. Vel elit scelerisque mauris pellentesque pulvinar pellentesque. Massa tempor nec feugiat nisl. Consequat interdum varius sit amet mattis vulputate. Eget magna fermentum iaculis eu non. Maecenas sed enim ut sem.
'
+ output_image_tag: true
+ image__srcset: 'https://picsum.photos/320/512 320w, https://picsum.photos/480/768 480w, https://picsum.photos/640/1024 640w, https://picsum.photos/800/1280 800w, https://picsum.photos/960/1536 960w, https://picsum.photos/1120/1792 1120w, https://picsum.photos/1280/2048 1280w, https://picsum.photos/1440/2304 1440w, https://picsum.photos/1600/2560 1600w, https://picsum.photos/1760/2816 1760w, https://picsum.photos/1920/3072 1920w, https://picsum.photos/2080/3328 2080w, https://picsum.photos/2240/3584 2240w, https://picsum.photos/2400/3840 2400w'
+ image__sizes: '100vw'
+ image__src: 'https://picsum.photos/320/512'
+ image__alt: 'A 1 by 1.6 image'
+ - media_grid__modal__heading: 'Image that does not exist'
+ media_grid__modal__text: 'Optional nineth caption. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Purus semper eget duis at tellus at. Magnis dis parturient montes nascetur ridiculus mus. Ipsum a arcu cursus vitae congue. Vel elit scelerisque mauris pellentesque pulvinar pellentesque. Massa tempor nec feugiat nisl. Consequat interdum varius sit amet mattis vulputate. Eget magna fermentum iaculis eu non. Maecenas sed enim ut sem.
'
+ output_image_tag: true
+ image__srcset: ''
+ image__sizes: '100vw'
+ image__src: ''
+ image__alt: 'No image'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/yds-media-grid-interactive.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/yds-media-grid-interactive.js
new file mode 100644
index 000000000..fd335b509
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/yds-media-grid-interactive.js
@@ -0,0 +1,417 @@
+Drupal.behaviors.mediaGridInteractive = {
+ attach(context) {
+ const mediaGrids = context.querySelectorAll(
+ '.media-grid[data-media-grid-variation="interactive"]',
+ );
+ const focusableElements =
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
+ const body = document.querySelector('body');
+ const activeItemIndicator = 'data-media-grid-modal-item-active';
+ const ariaCurrent = 'aria-current';
+
+ mediaGrids.forEach((grid) => {
+ const items = grid.querySelectorAll('.media-grid__image');
+ const maximizeIcons = grid.querySelectorAll('.media-grid__maximize');
+ const modal = grid.querySelector('.media-grid__modal');
+ const modalMedia = grid.querySelectorAll('.media-grid-modal__media');
+ const controls = grid.querySelectorAll('.media-grid-modal__control');
+ const itemCount = grid.querySelectorAll('[data-media-grid-item]').length;
+ const pagerItems = grid.querySelectorAll(
+ '.media-grid-modal__pager-item:not(.media-grid-modal__pager-item--total)',
+ );
+ let activeIndex;
+ let swipeStartX;
+ let swipeEndX;
+
+ /**
+ * trapKeyboard
+ * @description traps keyboard focus when modal is active.
+ */
+ const trapKeyboard = () => {
+ const focusableModalElements =
+ modal.querySelectorAll(focusableElements);
+ const firstFocusableElement = focusableModalElements[0];
+ const lastFocusableElement =
+ focusableModalElements[focusableModalElements.length - 1];
+
+ // Set initial focus inside modal when opened.
+ firstFocusableElement.focus();
+
+ modal.addEventListener('keydown', (e) => {
+ const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
+
+ if (!isTabPressed) {
+ return;
+ }
+
+ if (e.shiftKey) {
+ if (document.activeElement === firstFocusableElement) {
+ e.preventDefault();
+
+ lastFocusableElement.focus();
+ }
+ } else if (document.activeElement === lastFocusableElement) {
+ e.preventDefault();
+
+ firstFocusableElement.focus();
+ }
+ });
+ };
+
+ /**
+ * toggleModalState
+ * @description toggleModalState toggles modal state.
+ * @param {Enumerator} currentState the current state the modal is in.
+ */
+ const toggleModalState = (currentState) => {
+ const newState = currentState === 'inactive' ? 'active' : 'inactive';
+
+ grid.setAttribute('data-media-grid-modal-state', newState);
+
+ // On close, set focus on the grid item that was just open in the modal.
+ if (newState === 'inactive') {
+ grid
+ .querySelector(`[data-media-grid-item="${activeIndex}"`)
+ .querySelector('button')
+ .focus();
+ body.removeAttribute('data-modal-active');
+ } else if (newState === 'active') {
+ trapKeyboard();
+ body.setAttribute('data-modal-active', 'true');
+ }
+ };
+
+ /**
+ * indicateActivePager
+ * @description visually indicate active pager item.
+ */
+ const indicateActivePager = (index) => {
+ pagerItems.forEach((pagerItem, itemIndex) => {
+ pagerItem.removeAttribute(ariaCurrent);
+
+ if (index - 1 === itemIndex) {
+ pagerItem.setAttribute(ariaCurrent, true);
+ }
+ });
+ };
+
+ /**
+ * showSelectedItem
+ * @description showSelectedItem makes the selected item visible in the modal.
+ * @param {Number} index the item number of the item to show.
+ */
+ const showSelectedItem = (index) => {
+ activeIndex = index;
+
+ const modalItems = grid.querySelectorAll(
+ '[data-media-grid-modal-item]',
+ );
+ const activeModalItem = grid.querySelectorAll(
+ `[data-media-grid-modal-item="${index}"]`,
+ );
+
+ // Hide inactive items.
+ modalItems.forEach((modalItem) => {
+ modalItem.removeAttribute(activeItemIndicator);
+ });
+
+ // Show active item.
+ activeModalItem.forEach((activeItem) => {
+ activeItem.setAttribute(activeItemIndicator, true);
+ });
+
+ // Indicate active pager item.
+ indicateActivePager(activeIndex);
+ };
+
+ /**
+ * toggleCaptions
+ * @description toggleCaptions truncates long captions visible in the modal.
+ */
+
+ // Truncate caption function
+ // Take a string and a maxlength parameter
+ // slice the string starting at 0 and ending at maxLength.
+ function handleCaptionTruncation(captionContent, maxLength) {
+ return captionContent.length > maxLength
+ ? captionContent.slice(0, maxLength)
+ : captionContent;
+ }
+
+ // Get all modal content.
+ const imageCaptions = grid.querySelectorAll('.media-grid-modal__content');
+
+ // Set variables for each modal content/caption.
+ imageCaptions.forEach((imageCaption) => {
+ const captionContent = imageCaption.querySelector(
+ '.media-grid-modal__text',
+ );
+
+ const toggleCaption = imageCaption.querySelector(
+ '.media-grid-modal__toggle-caption',
+ );
+
+ const captionHeading = imageCaption.querySelector(
+ '.media-grid-modal__heading',
+ );
+
+ // Check if captionContent exists.
+ if (captionContent) {
+ // Store the full caption text.
+ // if a captionHeading is present, shorten the amount of characters
+ // for the caption text.
+ const maxLength = 100;
+
+ const fullCaption = captionContent.textContent.trim();
+
+ if (captionHeading) {
+ captionContent.classList.add('media-grid-modal__text--has-heading');
+ imageCaption.classList.add(
+ 'media-grid-modal__content--has-heading',
+ );
+ }
+ // Check the length of the caption and truncate if necessary
+ if (toggleCaption && fullCaption.length > maxLength) {
+ const truncatedCaption = handleCaptionTruncation(
+ fullCaption,
+ maxLength,
+ );
+
+ // set truncated content.
+ captionContent.textContent = `${truncatedCaption}...`;
+
+ // toggleCaption: set default attributes
+ toggleCaption.setAttribute('aria-expanded', 'false');
+ toggleCaption.setAttribute('aria-label', 'expand');
+ toggleCaption.style.setProperty('display', 'inline');
+
+ // imageCaption: set default attributes
+ imageCaption.setAttribute('is-expanded', 'false');
+ imageCaption.style.setProperty(
+ '--modal-content-item-height',
+ `${imageCaption.offsetHeight}px`,
+ );
+
+ // Toggle the full caption when the "circle plus" toggle is clicked
+ if (!body.hasAttribute('gallery-has-click-event')) {
+ toggleCaption.addEventListener('click', function _(e) {
+ e.preventDefault();
+ if (captionContent.textContent === `${truncatedCaption}...`) {
+ toggleCaption.setAttribute('aria-expanded', 'true');
+ toggleCaption.setAttribute('aria-label', 'collapse');
+ captionContent.textContent = fullCaption;
+ imageCaption.setAttribute('is-expanded', 'true');
+ imageCaption.style.setProperty(
+ '--modal-content-item-height',
+ `${imageCaption.scrollHeight}px`,
+ );
+ } else {
+ toggleCaption.setAttribute('aria-expanded', 'false');
+ toggleCaption.setAttribute('aria-label', 'expand');
+ captionContent.textContent = `${truncatedCaption}...`;
+ imageCaption.setAttribute('is-expanded', 'false');
+ imageCaption.style.setProperty(
+ '--modal-content-item-height',
+ `${imageCaption.offsetHeight}px`,
+ );
+ }
+ });
+ }
+ }
+ }
+ });
+
+ /**
+ * handlePagerClick
+ * @description Supports pager navigation.
+ */
+ const handlePagerClick = (index) => {
+ showSelectedItem(index);
+ };
+
+ /**
+ * handleItemClick
+ * @description Active modal on item click.
+ */
+ const handleItemClick = (item) => {
+ const index = Number(
+ item
+ .closest('[data-media-grid-item]')
+ .getAttribute('data-media-grid-item'),
+ );
+ toggleModalState('inactive');
+ showSelectedItem(index);
+ };
+
+ /**
+ * closeModal
+ * @description Close the active modal.
+ */
+ const closeModal = () => {
+ toggleModalState('active');
+ };
+
+ /**
+ * navigateNext
+ * @description Navigate to the next item;
+ */
+ const navigateNext = () => {
+ if (activeIndex === itemCount) {
+ showSelectedItem(1);
+ } else {
+ showSelectedItem(activeIndex + 1);
+ }
+ };
+
+ /**
+ * navigatePrevious
+ * @description Navigate to the next item;
+ */
+ const navigatePrevious = () => {
+ if (activeIndex === 1) {
+ showSelectedItem(itemCount);
+ } else {
+ showSelectedItem(activeIndex - 1);
+ }
+ };
+
+ /**
+ * handleSwipe
+ * @description Support swiping modal items.
+ */
+ const handleSwipe = () => {
+ // If swipe left, navigate to the next item.
+ if (swipeEndX < swipeStartX) {
+ navigateNext();
+ // If swipe right, navigate to the previous item.
+ } else if (swipeEndX > swipeStartX) {
+ navigatePrevious();
+ }
+ };
+
+ // Capture the touch start position for the handleSwipe function.
+ modal.addEventListener('touchstart', (e) => {
+ swipeStartX = e.changedTouches[0].screenX;
+ });
+
+ // Capture the touch end position for the handleSwipe function.
+ modal.addEventListener('touchend', (e) => {
+ swipeEndX = e.changedTouches[0].screenX;
+ handleSwipe();
+ });
+
+ // Click and drag (with a mouse) support.
+ modalMedia.forEach((media) => {
+ const Media = media;
+
+ // Capture the mousedown position for the handleSwipe function.
+ media.addEventListener('mousedown', (e) => {
+ swipeStartX = e.clientX;
+ });
+
+ // Capture the mouseup position for the handleSwipe function.
+ media.addEventListener('mouseup', (e) => {
+ swipeEndX = e.clientX;
+ handleSwipe();
+ });
+
+ // Disable browser default behaviors that apply to dragging images.
+ Media.ondragstart = () => {
+ return false;
+ };
+ });
+
+ // Show modal when an item's image is clicked.
+ items.forEach((item) => {
+ item.addEventListener('click', () => {
+ handleItemClick(item);
+ });
+ });
+
+ // Show modal when an item's maximize icon is clicked.
+ maximizeIcons.forEach((icon) => {
+ icon.addEventListener('click', () => {
+ handleItemClick(icon);
+ });
+ });
+
+ // Navigate to selected pager item.
+ pagerItems.forEach((pagerItem, index) => {
+ pagerItem.addEventListener('click', () => {
+ handlePagerClick(index + 1);
+ });
+ });
+
+ // Handle modal control clicks.
+ controls.forEach((control) => {
+ control.addEventListener('click', () => {
+ switch (true) {
+ // Close modal when the "close" button is clicked.
+ case /--close/.test(control.className):
+ closeModal();
+ break;
+ // Navigate to the previous item.
+ case /--previous/.test(control.className):
+ navigatePrevious();
+ break;
+ // Navigate to the next item.
+ case /--next/.test(control.className):
+ navigateNext();
+ break;
+ default:
+ break;
+ }
+ });
+ });
+
+ // Close modal when the "backdrop" is clicked.
+ grid.addEventListener('click', (e) => {
+ const classesToCheck = [
+ 'media-grid-modal__inner',
+ 'media-grid-modal__item',
+ ];
+
+ if (
+ classesToCheck.some((className) =>
+ e.target.classList.contains(className),
+ )
+ ) {
+ closeModal();
+ }
+ });
+
+ // Handle key presses.
+ grid.addEventListener(
+ 'keydown',
+ (e) => {
+ if (e.defaultPrevented) {
+ return;
+ }
+
+ switch (e.key) {
+ case 'Esc':
+ case 'Escape':
+ // Close modal on escape key press.
+ closeModal();
+ break;
+ case 'Left':
+ case 'ArrowLeft':
+ // Navigate to the previous item.
+ navigatePrevious();
+ break;
+ case 'Right':
+ case 'ArrowRight':
+ // Navigate to the next item.
+ navigateNext();
+ break;
+ default:
+ return;
+ }
+
+ e.preventDefault();
+ },
+ true,
+ );
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/yds-media-grid.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/yds-media-grid.twig
new file mode 100644
index 000000000..f5b48e364
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/galleries/media-grid/yds-media-grid.twig
@@ -0,0 +1,53 @@
+{#
+ # Available Variables:
+ # - media_grid__heading (optional)
+ # - media_grid__variation: basic (default), interactive
+ #
+ # Available Blocks:
+ # - media_grid__items
+ # - media_grid__modal
+ #}
+
+{% set media_grid__base_class = 'media-grid' %}
+
+{% set media_grid__attributes = {
+ 'data-component-width': media_grid__width|default('site'),
+ 'data-media-grid-variation': media_grid__variation|default('basic'),
+ 'class': bem(media_grid__base_class),
+} %}
+
+{% if media_grid__variation == 'interactive' %}
+ {% set media_grid__attributes = media_grid__attributes|merge({
+ 'data-media-grid-modal-state': 'inactive',
+ }) %}
+{% endif %}
+
+{% set media_grid__modal_aria = media_grid__heading.0 ? media_grid__heading.0 : 'Gallery Viewer' %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+ {% if media_grid__heading is not empty %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading__blockname: media_grid__base_class,
+ heading: media_grid__heading,
+ } %}
+ {% endif %}
+
+ {% block media_grid__items %}
+ {% for item in media_grid__items %}
+ {% include "@organisms/galleries/media-grid/_yds-media-grid-item.twig" %}
+ {% endfor %}
+ {% endblock %}
+
+
+ {% if media_grid__variation == 'interactive' %}
+
+ {% block media_grid__modal %}
+ {% include "@organisms/galleries/media-grid/_yds-media-grid-modal-item.twig" %}
+ {% endblock %}
+
+ {% endif %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/layout.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/layout.stories.js
new file mode 100644
index 000000000..5f01b7cb7
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/layout.stories.js
@@ -0,0 +1,17 @@
+// Markup.
+import twoColumnTwig from './two-column/_two-column--example.twig';
+
+// Data files
+import textData from '../../02-molecules/text/text-field.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Layout/Two Column',
+ parameters: {
+ layout: 'fullscreen',
+ },
+};
+
+export const TwoColumn = () => twoColumnTwig(textData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/_two-column--example.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/_two-column--example.twig
new file mode 100644
index 000000000..c2460ec1f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/_two-column--example.twig
@@ -0,0 +1,9 @@
+{% extends "@organisms/layout/two-column/yds-two-column.twig" %}
+ {% block two_column__primary %}
+ {% include "@molecules/text/yds-text-field.twig" %}
+ {% endblock %}
+ {% block two_column__secondary %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: 'Program Information The Undergraduate Handbook A comprehensive guide for prospective and current Chemistry Majors, with a complete description of requirements and opportunities.
View the handbook online
Course List A list of courses and a description of the Chemistry undergraduate program, including information on placement exams, laboratory registration, premedical students, and major requirements
Yale College programs of study
',
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/_yds-two-column.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/_yds-two-column.scss
new file mode 100644
index 000000000..ae8592f29
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/_yds-two-column.scss
@@ -0,0 +1,54 @@
+@use '../../../00-tokens/tokens';
+
+$break-layout-two-column: tokens.$break-2xl;
+$break-layout-two-column-max: $break-layout-two-column - 0.05;
+
+.yds-two-column {
+ @include tokens.spacing-page-section;
+}
+
+.yds-two-column__inner {
+ @media (min-width: $break-layout-two-column) {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ }
+
+ // Flex sets `min-width` of children to `auto` by default... but this breaks
+ // some of our base layout styles (causes horizontal scrolling), so we need to
+ // reset it to `0`.
+ > * {
+ min-width: 0;
+
+ // Then, some of our components that are intended to be "full-page-width"
+ // will expand outside of the layout columns, so we need to set a max-width
+ // on those to keep them contained within the section columns.
+ > * {
+ max-width: 100%;
+ }
+ }
+}
+
+.yds-two-column__primary {
+ @media (max-width: $break-layout-two-column-max) {
+ margin-bottom: var(--spacing-page-inner);
+ }
+
+ @media (min-width: $break-layout-two-column) {
+ flex: 1 0 var(--size-component-layout-width-content);
+ }
+}
+
+.yds-two-column__secondary {
+ @media (max-width: $break-layout-two-column-max) {
+ border-top: var(--thickness-divider) solid var(--color-divider);
+ padding-top: var(--spacing-page-inner);
+ }
+
+ @media (min-width: $break-layout-two-column) {
+ flex: 0 1 calc(37.5rem + var(--spacing-component-gutter));
+ border-left: var(--thickness-divider) solid var(--color-divider);
+ margin-left: calc(var(--spacing-component-gutter) * 2);
+ padding-left: var(--spacing-component-gutter);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/yds-two-column.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/yds-two-column.twig
new file mode 100644
index 000000000..892cb52bd
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/layout/two-column/yds-two-column.twig
@@ -0,0 +1,32 @@
+{#
+ # In this file, we're checking `if directory` in order to determine if the
+ # active environment is a Drupal site. We need to do this because Drupal's
+ # drag-and-drop interface needs specific attributes on the wrapper elements
+ # that would not make sense, or even cause errors in environments like
+ # Storybook.
+ #}
+
+{% set two_column__base_class = 'yds-two-column' %}
+
+
+
+ {% if directory %}
+
+ {% else %}
+
+ {% endif %}
+ {% block two_column__primary %}
+ {{ content.primary }}
+ {% endblock %}
+
+ {% if directory %}
+
+ {% else %}
+
+ {% endif %}
+ {% block two_column__secondary %}
+ {{ content.secondary }}
+ {% endblock %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/_yds-breadcrumbs.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/_yds-breadcrumbs.scss
new file mode 100644
index 000000000..828a843d0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/_yds-breadcrumbs.scss
@@ -0,0 +1,199 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+@use '../../../02-molecules/molecules';
+
+.breadcrumbs__wrapper {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+
+ [data-embedded-components] & {
+ margin-bottom: 0;
+ }
+
+ /* Breadcrumb spacing issue */
+
+ /* https://yaleits.atlassian.net/browse/YSP-427 */
+ // Add margin to the following page-title display types:
+ // - visually-hidden
+ // - hidden (when no page-title div exists after the breadcrumbs__wrapper
+ // Margins borrowed from
+ // components/04-page-layouts/page-layouts.scss:page_layouts.scss:31-39
+ // See 02-molecules/page-title/page-title.js for JS logic (adds page-title-hidden).
+ [page-title-hidden='true'] .main-content & {
+ margin-bottom: var(--size-spacing-10); // 4rem
+
+ @media (max-width: tokens.$break-l) {
+ margin-bottom: var(--size-spacing-8); // 2.5rem large breakpoints
+ }
+
+ @media (max-width: tokens.$break-s) {
+ margin-bottom: var(--size-spacing-7); // 2rem small breakpoints
+ }
+ }
+}
+
+.breadcrumbs__button {
+ @include atoms.button-reset;
+ @include tokens.body-s;
+ @include molecules.menu-link;
+
+ display: none;
+
+ @media (max-width: tokens.$break-mobile-max) {
+ .breadcrumbs__wrapper--collapsible[data-breadcrumbs-overflow='hidden'] & {
+ display: flex;
+ align-items: center;
+ gap: var(--size-spacing-3);
+ }
+ }
+}
+
+.breadcrumbs__icon {
+ transform: rotate(90deg);
+ height: 1em;
+ width: 1em;
+}
+
+.breadcrumbs__inner {
+ position: relative;
+ display: flex;
+}
+
+.breadcrumbs {
+ max-width: 100%;
+}
+
+.breadcrumbs__control {
+ @include tokens.animate(opacity);
+ @include atoms.button-reset;
+
+ position: absolute;
+ top: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: var(--size-click-target-minimum);
+ width: var(--size-click-target-minimum);
+ background-color: var(--color-background);
+ opacity: 0;
+
+ // Don't show controls on small screens when the items are hidden behind the
+ // "expand" button.
+ @media (max-width: tokens.$break-mobile-max) {
+ [data-breadcrumbs-overflow='hidden'] & {
+ display: none;
+ }
+ }
+
+ &--left {
+ left: 0;
+ z-index: -1;
+
+ [data-scroll-indicator='left'] &,
+ [data-scroll-indicator='both'] & {
+ opacity: 1;
+ z-index: 0;
+ }
+
+ [data-scroll-indicator='none'],
+ [data-scroll-indicator='right'] & {
+ @include tokens.animate-hidden;
+ }
+ }
+
+ &--right {
+ right: 0;
+ transform: rotate(-180deg);
+ z-index: -1;
+
+ [data-scroll-indicator='right'] &,
+ [data-scroll-indicator='both'] & {
+ opacity: 1;
+ z-index: 0;
+ }
+
+ [data-scroll-indicator='none'] &,
+ [data-scroll-indicator='left'] & {
+ @include tokens.animate-hidden;
+ }
+ }
+
+ &:hover {
+ color: var(--color-link-base);
+ }
+
+ svg {
+ height: 1.5em;
+ width: 1.5em;
+ }
+}
+
+.breadcrumbs__menu {
+ @include atoms.list-reset;
+
+ display: flex;
+ overflow: auto;
+ scroll-behavior: smooth;
+ -ms-overflow-style: none; /* IE and Edge */
+ scrollbar-width: none; /* Firefox */
+
+ &::-webkit-scrollbar {
+ display: none;
+ }
+
+ .search-result & {
+ flex-wrap: wrap;
+ }
+}
+
+.breadcrumbs__item {
+ @include tokens.body-s;
+
+ position: relative;
+ flex-shrink: 0;
+ display: flex;
+ align-items: center;
+
+ .breadcrumbs--collapsible & {
+ @media (max-width: tokens.$break-mobile-max) {
+ [data-breadcrumbs-overflow='hidden'] & {
+ display: none;
+ }
+ }
+ }
+
+ &:not(:last-child) {
+ margin-right: var(--size-spacing-5);
+ padding-right: var(--size-spacing-5);
+
+ &::after {
+ content: '|';
+ position: absolute;
+ right: 0;
+ transform: skew(-15deg) translateX(50%);
+ }
+ }
+
+ .search-result & {
+ color: var(--color-basic-brown-gray);
+ }
+}
+
+.breadcrumbs__link {
+ @include molecules.menu-link;
+
+ display: flex;
+ align-items: center;
+ min-height: var(--size-click-target-minimum);
+
+ &:focus-visible {
+ outline-offset: -2px;
+ }
+
+ &[aria-current='page'] {
+ color: var(--color-basic-brown-gray);
+ font-weight: var(--font-weights-mallory-book);
+ cursor: default;
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/breadcrumbs.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/breadcrumbs.stories.js
new file mode 100644
index 000000000..165316e61
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/breadcrumbs.stories.js
@@ -0,0 +1,15 @@
+// Markup.
+import breadcrumbsTwig from './yds-breadcrumbs.twig';
+
+// Data.
+import breadcrumbsData from './breadcrumbs.yml';
+
+// JavaScript.
+import './yds-breadcrumbs';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Organisms/Menu/Breadcrumbs' };
+
+export const Breadcrumbs = () => breadcrumbsTwig(breadcrumbsData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/breadcrumbs.yml b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/breadcrumbs.yml
new file mode 100644
index 000000000..1bb098a1a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/breadcrumbs.yml
@@ -0,0 +1,18 @@
+items:
+ - title: 'Home'
+ url: '#'
+ - title: 'Academic Programs'
+ url: '#'
+ - title: 'Undergraduate Chemistry'
+ url: '#'
+ - title: 'Another Level'
+ url: '#'
+ - title: 'Still more levels'
+ url: '#'
+ - title: 'This is a really long breadcrumb'
+ url: '#'
+ - title: 'This one is six levels deep'
+ url: '#'
+ - title: 'Davis Team Project Wins Award for Research'
+ url: '#'
+ is_active: true
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/yds-breadcrumbs.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/yds-breadcrumbs.js
new file mode 100644
index 000000000..f1a8f5f31
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/yds-breadcrumbs.js
@@ -0,0 +1,235 @@
+Drupal.behaviors.breadcrumbs = {
+ attach(context) {
+ // Selectors.
+ const breadcrumbsWrapper = context.querySelector(
+ '.breadcrumbs__wrapper--collapsible',
+ );
+ if (!breadcrumbsWrapper) {
+ return;
+ }
+ const breadcrumbs = context.querySelector('.breadcrumbs--collapsible');
+ const breadcrumbsMenu = context.querySelector('.breadcrumbs__menu');
+ const breadcrumbsControls = context.querySelectorAll(
+ '.breadcrumbs__control',
+ );
+ const breadcrumbsLinks = context.querySelectorAll('.breadcrumbs__link');
+ const breadcrumbsButton = context.querySelector('.breadcrumbs__button');
+ const breadcrumbsInner = context.querySelector('.breadcrumbs__inner');
+ const controlsWidth = context.querySelector(
+ '.breadcrumbs__control--left',
+ ).offsetWidth;
+ let scrollIndicatorDir;
+
+ /**
+ * getFirstVisible
+ * @description Get the first item that is visible (not overflown).
+ * @returns The value of the left edge of the first fully visible item plus
+ * the width of the controls so that things aren't visually hidden by the
+ * absolutely positioned elements.
+ */
+ function getFirstVisible() {
+ const breadcrumbsLeft = breadcrumbs.getBoundingClientRect().left;
+ const breadcrumbsItems =
+ breadcrumbs.querySelectorAll('.breadcrumbs__item');
+ const visibleItems = [];
+
+ breadcrumbsItems.forEach((item) => {
+ if (
+ item.getBoundingClientRect().right >
+ breadcrumbsLeft + controlsWidth
+ ) {
+ visibleItems.push(item);
+ }
+ });
+
+ return visibleItems[1].offsetLeft - controlsWidth;
+ }
+
+ /**
+ * getLastHidden
+ * @description Get the last item that is overflown (not visible).
+ * @returns The value of the left edge of the first partially hidden item
+ * minus the width of the controls so that things aren't visually hidden by
+ * the absolutely positioned elements.
+ */
+ function getLastHidden() {
+ const breadcrumbsLeft = breadcrumbs.getBoundingClientRect().left;
+ const breadcrumbsItems =
+ breadcrumbs.querySelectorAll('.breadcrumbs__item');
+ const hiddenItems = [];
+
+ breadcrumbsItems.forEach((item) => {
+ if (item.getBoundingClientRect().left < breadcrumbsLeft) {
+ hiddenItems.push(item);
+ }
+ });
+
+ // @TODO: if the user clicks the left arrow twice quickly when only the
+ // first item is hidden (and before the arrow can disappear), this line
+ // throws a js error. Not a huge deal, but could probably be refactored to
+ // prevent it from happening.
+ return hiddenItems[hiddenItems.length - 1].offsetLeft - controlsWidth;
+ }
+
+ /**
+ * setOverflow
+ * @description Get the positions of the breadcrumbs to determine whether an
+ * overflow situation is in play.
+ */
+ function setOverflow() {
+ const breadcrumbsLeft = breadcrumbs.getBoundingClientRect().left;
+ const breadcrumbsRight = breadcrumbs.getBoundingClientRect().right;
+ const firstBreadcrumbsLeft = breadcrumbs
+ .querySelector('.breadcrumbs__item:first-child')
+ .getBoundingClientRect().left;
+ const lastBreadcrumbsRight = Math.floor(
+ breadcrumbs
+ .querySelector('.breadcrumbs__item:last-child')
+ .getBoundingClientRect().right,
+ );
+
+ if (firstBreadcrumbsLeft < breadcrumbsLeft) {
+ // If left side of first breadcrumb is < left side of breadcrumbs.
+ // And right side of last breadcrumb is > right side of breadcrumbs.
+ if (lastBreadcrumbsRight > breadcrumbsRight) {
+ if (scrollIndicatorDir !== 'both') {
+ scrollIndicatorDir = 'both';
+ breadcrumbsInner.setAttribute('data-scroll-indicator', 'both');
+ }
+ // If left side of first breadcrumb is < left side of breadcrumbs.
+ // But right side of last breadcrumb is <= right side of breadcrumbs.
+ } else if (scrollIndicatorDir !== 'left') {
+ scrollIndicatorDir = 'left';
+ breadcrumbsInner.setAttribute('data-scroll-indicator', 'left');
+ }
+ // If left side of first breadcrumb is >= left side of breadcrumbs.
+ // And right side of last breadcrumb is > right side of breadcrumbs.
+ } else if (lastBreadcrumbsRight > breadcrumbsRight) {
+ if (scrollIndicatorDir !== 'right') {
+ scrollIndicatorDir = 'right';
+ breadcrumbsInner.setAttribute('data-scroll-indicator', 'right');
+ }
+ // If left side of first breadcrumb is >= left side of breadcrumbs.
+ // And right side of last breadcrumb is <= right side of breadcrumbs.
+ } else {
+ scrollIndicatorDir = 'none';
+ breadcrumbsInner.setAttribute('data-scroll-indicator', 'none');
+ }
+ }
+
+ /**
+ * mouseNav
+ * @description Support mouse navigation when horizontal scrolling occurs.
+ */
+ function mouseNav(direction) {
+ breadcrumbsMenu.scrollLeft =
+ direction === 'right' ? getFirstVisible() : getLastHidden();
+ }
+
+ /**
+ * ensureVisible
+ * @description Ensure the focused tab is fully visible (not overflown).
+ * @param {HTMLElement} item The focused item.
+ */
+ function ensureVisible(item) {
+ const breadcrumbsLeft = breadcrumbs.getBoundingClientRect().left;
+ const breadcrumbsRight = breadcrumbs.getBoundingClientRect().right;
+
+ // if right side overflows control, set to left + control.
+ if (
+ Math.floor(item.getBoundingClientRect().right) >
+ breadcrumbsRight - controlsWidth
+ ) {
+ // If overflow right or both.
+ if (
+ breadcrumbsInner.getAttribute('data-scroll-indicator') === 'right' ||
+ breadcrumbsInner.getAttribute('data-scroll-indicator') === 'both'
+ ) {
+ breadcrumbsMenu.scrollLeft =
+ item.parentElement.offsetLeft - controlsWidth;
+ }
+ }
+ // If left side overflows control, set to left + control.
+ else if (
+ Math.floor(item.getBoundingClientRect().left) <
+ breadcrumbsLeft + controlsWidth
+ ) {
+ // If overflow left or both.
+ if (
+ breadcrumbsInner.getAttribute('data-scroll-indicator') === 'left' ||
+ breadcrumbsInner.getAttribute('data-scroll-indicator') === 'both'
+ ) {
+ breadcrumbsMenu.scrollLeft =
+ item.parentElement.offsetLeft - controlsWidth;
+ }
+ }
+ }
+
+ /**
+ * showAllBreadcrumbs
+ * @description remove breadcrumbs-overflow value.
+ */
+ function showAllBreadcrumbs() {
+ breadcrumbsWrapper.setAttribute('data-breadcrumbs-overflow', 'expanded');
+ breadcrumbsButton.setAttribute('aria-expanded', 'true');
+ }
+
+ // Show all breadcrumbs on mobile.
+ if (breadcrumbsButton) {
+ breadcrumbsButton.addEventListener('click', () => {
+ showAllBreadcrumbs();
+ setOverflow();
+ });
+ }
+
+ /**
+ * debounce
+ * @description Debounce to only run a function at most once every 200ms.
+ * @param {} func The function to be run after the timeout.
+ */
+ function debounce(func) {
+ let timer;
+ return function debounceFunction(event) {
+ if (timer) clearTimeout(timer);
+ timer = setTimeout(func, 200, event);
+ };
+ }
+
+ /**
+ * linksListeners
+ * @description Support focus visualization.
+ */
+ breadcrumbsLinks.forEach((link) => {
+ link.addEventListener('focus', () => {
+ ensureVisible(link);
+ });
+ });
+
+ /**
+ * init
+ */
+ setOverflow();
+
+ breadcrumbsControls.forEach((control) => {
+ control.addEventListener('click', (e) => {
+ e.preventDefault();
+
+ if (control.classList.contains('breadcrumbs__control--right')) {
+ mouseNav('right');
+ } else {
+ mouseNav('left');
+ }
+ });
+ });
+
+ breadcrumbsMenu.addEventListener('scroll', setOverflow);
+
+ // Listen for window resize.
+ window.addEventListener(
+ 'resize',
+ debounce(function resizeListener() {
+ setOverflow();
+ }),
+ );
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/yds-breadcrumbs.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/yds-breadcrumbs.twig
new file mode 100644
index 000000000..fd3dafad1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/breadcrumbs/yds-breadcrumbs.twig
@@ -0,0 +1,88 @@
+{% set breadcrumbs__base_class = 'breadcrumbs' %}
+
+{% set breadcrumbs__items = breadcrumbs__items|default(items) %}
+
+{% set breadcrumbs__modifiers = breadcrumbs__modifiers|default('collapsible') %}
+
+{% set breadcrumbs__attributes = {
+ 'data-breadcrumbs-overflow': 'hidden',
+ 'data-component-width': 'site',
+ class: bem('wrapper', [breadcrumbs__modifiers], breadcrumbs__base_class),
+} %}
+
+{# Get the parent label for the mobile toggle #}
+{% set parent_count = breadcrumbs__items|length - 2 %}
+{% set parent_label = breadcrumbs__items[parent_count].title %}
+
+{% set icon_left %}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ icon__blockname: breadcrumbs__base_class,
+ icon__modifiers: ['left'],
+ icon__decorative: true,
+ } %}
+{% endset %}
+
+{% set icon_right %}
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ icon__blockname: breadcrumbs__base_class,
+ icon__modifiers: ['right'],
+ icon__decorative: true,
+ } %}
+{% endset %}
+
+{# Only show breadbrumbs if there are three or more items. #}
+{% if breadcrumbs__items.2 %}
+
+ {% set control__content %}
+
Show all breadcrumbs
+ {% include "@atoms/images/icons/_yds-icon.twig" with {
+ icon__name: 'angle-down',
+ icon__blockname: breadcrumbs__base_class,
+ icon__decorative: true,
+ } %}
+
{{ parent_label }}
+ {% endset %}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__blockname: breadcrumbs__base_class,
+ aria_expanded: 'false',
+ aria_controls: 'breadcrumbs-inner',
+ } %}
+ {% set breadcrumbs__inner__attributes = {
+ 'class': bem('inner', [], breadcrumbs__base_class),
+ 'data-scroll-indicator': 'none',
+ 'id': 'breadcrumbs-inner',
+ } %}
+
+ {% include "@molecules/menu/yds-menu.twig" with {
+ items: breadcrumbs__items,
+ menu__base_class: breadcrumbs__base_class,
+ menu__name: 'Breadcrumb',
+ menu__contextual: true,
+ menu__list__type: 'ol',
+ menu__modifiers: [breadcrumbs__modifiers]
+ } %}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__content: icon_left,
+ control__base_class: 'control',
+ control__blockname: breadcrumbs__base_class,
+ control__modifiers: ['left'],
+ control__attributes: {
+ 'aria-hidden': 'true',
+ 'tabindex': '-1',
+ },
+ } %}
+ {% include "@atoms/controls/base/yds-control.twig" with {
+ control__content: icon_right,
+ control__base_class: 'control',
+ control__blockname: breadcrumbs__base_class,
+ control__modifiers: ['right'],
+ control__attributes: {
+ 'aria-hidden': 'true',
+ 'tabindex': '-1',
+ },
+ } %}
+
+
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/_yds-primary-nav.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/_yds-primary-nav.scss
new file mode 100644
index 000000000..6a091eed4
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/_yds-primary-nav.scss
@@ -0,0 +1,468 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+
+// @TODO: Move these to a token
+:root {
+ --color-muted: var(--color-gray-600);
+ --color-navigation-border: var(--color-blue-yale);
+ --color-navigation-expanded-item: var(--color-basic-brown-gray);
+ --color-navigation-active-item-link-background: var(--color-blue-shale);
+ --color-navigation-active-item-link-opacity: 0.1;
+}
+
+$menu-sub-max-width: 19rem;
+
+[data-header-theme='two'] {
+ --color-muted: var(--color-gray-600);
+ --color-navigation-border: var(--color-gray-600);
+ --color-navigation-expanded-item: var(--color-gray-600);
+ --color-navigation-active-item-link-background: var(--color-blue-medium);
+ --color-navigation-active-item-link-opacity: 0.13;
+}
+
+[data-header-theme='three'] {
+ --color-muted: var(--color-gray-600);
+ --color-navigation-border: var(--color-gray-600);
+ --color-navigation-expanded-item: var(--color-gray-600);
+ --color-navigation-active-item-link-background: var(--color-blue-medium);
+ --color-navigation-active-item-link-opacity: 0.13;
+}
+
+@mixin primary-nav-item-level-0 {
+ font: var(--font-style-nav-primary-0);
+ color: var(--color-heading);
+ text-align: left;
+ padding: 0 var(--size-spacing-5);
+
+ &[aria-expanded='true'] {
+ color: var(--color-navigation-expanded-item);
+ }
+
+ @media (max-width: tokens.$break-mobile-max) {
+ padding: var(--size-spacing-2) var(--size-spacing-5) var(--size-spacing-2);
+ margin-block-start: var(--size-spacing-3);
+ margin-block-end: var(--size-spacing-3);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ position: relative;
+
+ [data-menu-variation='mega'] & {
+ border: var(--border-thickness-1) solid transparent;
+
+ .primary-nav__item--level-0:first-child & {
+ padding-left: 0;
+ }
+
+ .primary-nav__item--level-0:last-child & {
+ padding-right: 0;
+ }
+ }
+
+ &[aria-expanded='true'] {
+ z-index: 1;
+ border-color: var(--color-navigation-border);
+ border-bottom-color: var(--color-background);
+
+ [data-menu-variation='mega'] & {
+ :first-child > & {
+ padding-left: var(--size-spacing-5);
+ }
+
+ :last-child > & {
+ padding-right: var(--size-spacing-5);
+ }
+ }
+ }
+ }
+}
+
+.primary-nav {
+ position: relative;
+
+ [data-site-header-nav-position='center'] & {
+ display: flex;
+ place-content: center;
+ }
+
+ // add negative left margin for both `mega` and `basic` variations
+ // to align the menu item text with the site name.
+
+ [data-site-header-nav-position='left'] & {
+ @media (min-width: tokens.$break-mobile) {
+ margin-left: calc(var(--size-spacing-5) * -1);
+ }
+ }
+
+ [data-site-header-nav-position='right'] & {
+ @media (min-width: tokens.$break-mobile) {
+ &[data-menu-variation='basic'] {
+ margin-right: calc(var(--size-spacing-5) * -1);
+ }
+ }
+ }
+}
+
+.primary-nav__menu {
+ @include atoms.list-reset;
+
+ &--level-0 {
+ @media (min-width: tokens.$break-mobile) {
+ display: flex;
+ flex-wrap: wrap;
+ }
+
+ [data-menu-variation='basic'] & {
+ @media (min-width: tokens.$break-mobile) {
+ position: relative;
+ }
+ }
+ }
+
+ &--level-1 {
+ @include tokens.animate(max-height, var(--site-header-animation-speed));
+
+ width: 100%;
+ overflow: hidden;
+
+ @media (max-width: tokens.$break-mobile-max) {
+ // prettier-ignore
+ border-left: var(--border-thickness-1) solid var(--color-navigation-border);
+ max-height: var(--open-nav-height);
+ margin-left: var(--size-spacing-6);
+ max-width: calc(100% - var(--size-spacing-6));
+
+ [aria-expanded='true'] ~ & {
+ margin-bottom: var(--size-spacing-6);
+ }
+
+ [aria-expanded='false'] ~ & {
+ @include tokens.animate-hidden(var(--site-header-animation-speed));
+
+ max-height: 0;
+ }
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ position: absolute;
+ background-color: var(--color-background);
+ max-width: $menu-sub-max-width;
+
+ // Subtract enough to place it just behind an "open" toggle and hide the
+ // top border. To give it the "tab" effect.
+ top: calc(100% - var(--border-thickness-1));
+
+ [aria-expanded='false'] ~ & {
+ visibility: hidden;
+ }
+ }
+
+ [data-menu-variation='mega'] & {
+ @media (min-width: tokens.$break-mobile) {
+ border: var(--border-thickness-1) solid var(--color-navigation-border);
+ border-bottom-width: var(--border-thickness-4);
+ padding: var(--size-spacing-7) var(--size-spacing-site-gutter);
+ width: calc(100vw - calc(var(--size-spacing-site-gutter) * 2));
+ max-width: var(--size-component-layout-width-site);
+ column-count: 3;
+
+ [data-site-header-nav-position='center'] &,
+ [data-site-header-nav-position='left'] & {
+ left: 0;
+ }
+
+ // increase max-width if mega menu is left-aligned
+ // to align the menu item text with the site name.
+ [data-site-header-nav-position='left'] & {
+ width: calc(100vw - var(--size-spacing-site-gutter) * 1.2);
+ }
+
+ [data-site-header-nav-position='right'] & {
+ right: 0;
+ }
+ }
+
+ @media (min-width: tokens.$break-2xl) {
+ column-count: 4;
+
+ [data-site-header-nav-position='left'] & {
+ max-width: calc(
+ var(--size-component-layout-width-site) + var(--size-spacing-5)
+ );
+ }
+ }
+ }
+
+ [data-menu-variation='basic'] & {
+ @media (min-width: tokens.$break-mobile) {
+ column-count: 1;
+ box-shadow: var(--drop-shadow-level-1-bottom-shadow-only);
+ }
+ }
+ }
+
+ &--level-2 {
+ margin-left: var(--size-spacing-6);
+ }
+}
+
+// basic menu variation: border application
+@media (min-width: tokens.$break-mobile) {
+ .primary-nav__toggle {
+ [data-menu-variation='basic'] :not(:last-child) > & {
+ border-left: var(--border-thickness-4) solid transparent;
+
+ &[aria-expanded='true'] {
+ // prettier-ignore
+ border-left: var(--border-thickness-4) solid var(--color-navigation-border);
+ }
+ }
+
+ [data-menu-variation='basic'] :last-child > & {
+ border-right: var(--border-thickness-4) solid transparent;
+
+ &[aria-expanded='true'] {
+ border-right: var(--border-thickness-4) solid
+ var(--color-navigation-border);
+ }
+ }
+ }
+
+ .primary-nav__menu--level-1 {
+ [data-menu-variation='basic'] & {
+ padding-top: var(--size-spacing-4);
+ }
+
+ [data-menu-variation='basic'] :not(:last-child) > & {
+ // prettier-ignore
+ border-left: var(--border-thickness-4) solid var(--color-navigation-border);
+ }
+
+ [data-menu-variation='basic'] :last-child > & {
+ right: 0;
+
+ // prettier-ignore
+ border-right: var(--border-thickness-4) solid var(--color-navigation-border);
+ }
+ }
+}
+
+.primary-nav__item {
+ &--level-0:not(:last-child) {
+ @media (max-width: tokens.$break-mobile-max) {
+ border-bottom: var(--border-thickness-1) solid var(--color-gray-200);
+ }
+ }
+
+ &--level-1 {
+ @media (min-width: tokens.$break-mobile) {
+ display: block;
+ break-inside: avoid-column;
+ }
+ }
+
+ &--level-2 {
+ margin-bottom: var(--size-spacing-5);
+ }
+
+ &--explore-bar {
+ [data-menu-variation='mega'] & {
+ @media (min-width: tokens.$break-mobile) {
+ display: flex;
+ column-span: all;
+ justify-content: space-between;
+ align-items: center;
+ position: relative;
+ padding-bottom: var(--size-spacing-2);
+ border-bottom: var(--border-thickness-1) solid
+ var(--color-navigation-border);
+ margin-bottom: var(--size-spacing-6);
+ }
+ }
+ }
+}
+
+.primary-nav__heading {
+ [data-menu-variation='mega'] & {
+ // hide heading on mobile
+ display: none;
+
+ @media (min-width: tokens.$break-mobile) {
+ @include tokens.h5-mallory-compact-medium;
+
+ display: block;
+ padding: var(--size-spacing-2) var(--size-spacing-5) var(--size-spacing-2)
+ calc(var(--size-spacing-2) + var(--size-spacing-1));
+ flex: 1 auto;
+ color: var(--color-heading);
+ }
+ }
+}
+
+.primary-nav__link {
+ display: block;
+ text-decoration: none;
+
+ &:focus-visible {
+ outline-offset: -2px;
+ }
+
+ &:hover {
+ color: var(--menu-link-color);
+ text-decoration: underline;
+ }
+
+ &--level-0 {
+ @include primary-nav-item-level-0;
+
+ &.primary-nav__link--with-sub {
+ display: none;
+
+ // always show first level in simple menu
+ // even if they have child items which won't display
+ [data-menu-variation='focus'] & {
+ display: block;
+ }
+ }
+ }
+
+ [data-menu-variation='mega']
+ // Targets the explore link to the right of a dropdown menu.
+ // Only it should be capitalized.
+ &.primary-nav__link--level-1.primary-nav__link--with-icon.primary-nav__link--explore-bar {
+ @media (min-width: tokens.$break-mobile) {
+ @include tokens.h6-mallory-compact-medium;
+ }
+ }
+
+ &--level-1 {
+ font: var(--font-style-nav-primary-1);
+ color: var(--color-heading);
+ margin-bottom: var(--size-spacing-3);
+
+ [data-menu-variation='mega'] & {
+ padding: var(--size-spacing-2) var(--size-spacing-5) var(--size-spacing-2)
+ calc(var(--size-spacing-2) + var(--size-spacing-1));
+ }
+
+ [data-menu-variation='basic'] & {
+ padding: var(--size-spacing-5) var(--size-spacing-6) var(--size-spacing-4);
+ position: relative;
+ margin-bottom: var(--size-spacing-0);
+
+ // basic menu items have a bottom border
+ &::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: var(--size-spacing-5);
+ right: var(--size-spacing-5);
+ height: var(--border-thickness-1);
+ background-color: var(--color-gray-200);
+ }
+
+ :last-child > & {
+ margin-bottom: 0;
+ }
+
+ :first-child > & {
+ padding-top: 0;
+ }
+ }
+
+ // remove last child's bottom border
+ [data-menu-variation='basic'] :last-child > &::after {
+ content: unset;
+ }
+ }
+
+ &--level-2 {
+ font: var(--font-style-nav-primary-2);
+ color: var(--color-muted);
+ padding: var(--size-spacing-2) var(--size-spacing-5) var(--size-spacing-2)
+ calc(var(--size-spacing-2) + var(--size-spacing-1));
+ }
+
+ // this is used for the explore bar link
+ &--with-icon.primary-nav__link--explore-bar {
+ [data-menu-variation='mega'] & {
+ font: var(--font-style-nav-primary-1);
+ color: var(--color-heading);
+ margin-bottom: var(--size-spacing-3);
+ padding: var(--size-spacing-2) var(--size-spacing-5) var(--size-spacing-2)
+ calc(var(--size-spacing-2) + var(--size-spacing-1));
+ z-index: 1;
+
+ &:hover {
+ color: var(--menu-link-color);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ flex: 0 1 auto;
+ margin-bottom: 0;
+ color: inherit;
+ }
+ }
+ }
+}
+
+// Active trail styles.
+.primary-nav__link.primary-nav__link--active {
+ color: var(--menu-link-color);
+ text-decoration: underline;
+ text-decoration-thickness: var(--border-thickness-2);
+}
+
+.primary-nav__link:not(.primary-nav__link--level-0):not(.primary-nav__link--explore-bar).primary-nav__link--active {
+ position: relative;
+ border-left: var(--border-thickness-4) solid var(--color-navigation-border);
+
+ &::before {
+ content: ' ';
+ display: block;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ opacity: var(--color-navigation-active-item-link-opacity);
+ background-color: var(--color-navigation-active-item-link-background);
+ }
+
+ @media (max-width: tokens.$break-mobile-max) {
+ // prettier-ignore
+ border-left: var(--border-thickness-2) solid var(--color-navigation-border);
+ }
+}
+
+.primary-nav__toggle {
+ @include atoms.button-reset;
+
+ display: flex;
+ align-items: center;
+ width: 100%;
+ gap: var(--size-spacing-3);
+
+ &:focus-visible {
+ outline-offset: -2px;
+ }
+
+ &:hover {
+ color: var(--menu-link-color);
+ }
+
+ &--level-0 {
+ @include primary-nav-item-level-0;
+ }
+}
+
+.primary-nav__toggle-icon {
+ @include tokens.animate;
+
+ height: 1em;
+ width: 1em;
+
+ .primary-nav__toggle[aria-expanded='true'] > & {
+ transform: rotate(180deg);
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/primary-nav.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/primary-nav.stories.js
new file mode 100644
index 000000000..3a752c84c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/primary-nav.stories.js
@@ -0,0 +1,42 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+// Markup.
+import primaryNavTwig from './yds-primary-nav.twig';
+
+// Data.
+import primaryNavData from './primary-nav.yml';
+
+// JavaScript
+import './yds-primary-nav';
+
+const siteHeaderThemeOptions = Object.keys(tokens['site-header-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Menu/Primary Nav',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ siteHeaderTheme: {
+ name: 'Site Header Theme',
+ options: siteHeaderThemeOptions,
+ type: 'select',
+ defaultValue: 'white',
+ },
+ menuVariation: {
+ name: 'Menu Variation',
+ options: ['basic', 'mega', 'focus'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+ },
+};
+
+export const PrimaryNav = ({ siteHeaderTheme, menuVariation }) => `
+
+ ${primaryNavTwig({ ...primaryNavData, menu__variation: menuVariation })}
+
+`;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/primary-nav.yml b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/primary-nav.yml
new file mode 100644
index 000000000..9ed3d14de
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/primary-nav.yml
@@ -0,0 +1,93 @@
+items:
+ - title: 'About YDS'
+ url: '#'
+ below:
+ - title: 'About YDS'
+ list__item__is_heading: true
+ heading_cta: 'Explore All'
+ url: '#'
+ - title: "Dean's Office"
+ url: '#'
+ - title: 'Virtual Backgrounds with a lot more text entered to test max-width'
+ url: '#'
+ - title: 'Partners on the Quad'
+ url: '#'
+ - title: 'Inclusivity'
+ url: '#'
+ below:
+ - title: 'Combating Racism'
+ url: '#'
+ is_active: true
+ - title: 'Changing Faces of YDS'
+ url: '#'
+ - title: 'Strategic Plan'
+ url: '#'
+ below:
+ - title: 'Bridging Faith Traditions'
+ url: '#'
+ - title: 'Cultivating Community in a Living-Building Residential Complex'
+ url: '#'
+ - title: 'Forging a Diverse Learning Community'
+ url: '#'
+ - title: 'Fostering Transformative Christian Leadership'
+ url: '#'
+ - title: 'Freeing Students from Debt and for Vocation'
+ url: '#'
+ - title: 'Sustainability'
+ url: 'https://google.com'
+ - title: 'Staff Directory'
+ url: '#'
+ is_active: true
+ - title: 'Mission & History'
+ url: 'https://google.com/download.pdf'
+ below:
+ - title: 'The YDS Shield'
+ url: '#'
+ - title: 'Art on Campus'
+ url: 'https://google.com'
+ - title: 'Who is that bulldog'
+ url: '#'
+ - title: 'YDS Bulletin & Policies'
+ url: '#'
+ - title: 'Living Village Project'
+ url: '#'
+ - title: 'Academics'
+ url: '#'
+ is_active: true
+ - title: 'Admission & Aid'
+ url: '#'
+ below:
+ - title: 'Admission & Aid'
+ list__item__is_heading: true
+ heading_cta: 'Explore All'
+ url: '#'
+ - title: 'Strategic Plan'
+ url: '#'
+ below:
+ - title: 'Bridging Faith Traditions'
+ url: '#'
+ - title: 'Cultivating Community in a Living-Building Residential Complex'
+ url: '#'
+ - title: 'Forging a Diverse Learning Community'
+ url: '#'
+ - title: 'Fostering Transformative Christian Leadership'
+ url: '#'
+ - title: 'Freeing Students from Debt and for Vocation'
+ url: '#'
+ - title: 'Sustainability'
+ url: '#'
+ - title: 'Staff Directory'
+ url: '#'
+ - title: 'Mission & History'
+ url: '#'
+ below:
+ - title: 'The YDS Shield'
+ url: '#'
+ - title: 'Art on Campus'
+ url: '#'
+ - title: 'Who is that bulldog'
+ url: '#'
+ - title: 'Life at YDS'
+ url: '#'
+ - title: 'Faculty & Research'
+ url: '#'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/yds-primary-nav.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/yds-primary-nav.js
new file mode 100644
index 000000000..743871b09
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/yds-primary-nav.js
@@ -0,0 +1,89 @@
+Drupal.behaviors.primaryNav = {
+ attach(context) {
+ // Selectors
+ const primaryNav = context.querySelector('.primary-nav');
+ const primaryNavToggles = context.querySelectorAll(
+ '.primary-nav__toggle--level-0',
+ );
+
+ // Function to show a menu.
+ const show = (toggle) => {
+ const nav = toggle.nextElementSibling;
+
+ toggle.setAttribute('aria-expanded', true);
+ nav.style.setProperty('--open-nav-height', `${nav.scrollHeight}px`);
+ };
+
+ // Function to hide a menu.
+ const hide = (toggle) => {
+ toggle.setAttribute('aria-expanded', false);
+ };
+
+ // Function to hide all menus.
+ const hideAll = () => {
+ primaryNavToggles.forEach((toggle) => {
+ hide(toggle);
+ });
+ };
+
+ // Function to close dropdown when tabbing out of the expended menu.
+ function tabOut(toggle, menu) {
+ const parent = toggle.parentElement;
+ const menuLinks = menu.querySelectorAll('.primary-nav__link');
+ const lastItem = menuLinks[menuLinks.length - 1];
+
+ // Function to close an expanded menu when a user tabs out of it.
+ parent.addEventListener('keydown', (e) => {
+ const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
+
+ // If the key pressed isn't "tab" return early.
+ if (!isTabPressed) {
+ return;
+ }
+
+ if (e.shiftKey) {
+ if (document.activeElement === toggle) {
+ // Close when shift-tabbing from the toggle element.
+ hide(toggle);
+ }
+ } else if (document.activeElement === lastItem) {
+ // Close when tabbing from the last nested item to a new top-level item.
+ hide(toggle);
+ }
+ });
+ }
+
+ // Function to toggle the open/closed state of the main menu.
+ function toggleMenuState(target) {
+ const ariaButtonState =
+ target.getAttribute('aria-expanded') === 'true' ? 'false' : 'true';
+
+ // If opening an item, close all nav items.
+ if (ariaButtonState === 'true') {
+ hideAll();
+ show(target);
+
+ // Pass the expanded menu and related toggle to the tabOut function.
+ tabOut(target, target.nextElementSibling);
+ } else {
+ // Set the button aria attribute.
+ hide(target);
+ }
+ }
+
+ // Show/Hide menu on toggle click.
+ primaryNavToggles.forEach((button) => {
+ button.addEventListener('click', () => {
+ toggleMenuState(button);
+ });
+ });
+
+ window.addEventListener('click', (e) => {
+ if (primaryNav) {
+ if (!primaryNav.contains(e.target)) {
+ hideAll();
+ }
+ }
+ });
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/yds-primary-nav.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/yds-primary-nav.twig
new file mode 100644
index 000000000..f4c12bd12
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/primary-nav/yds-primary-nav.twig
@@ -0,0 +1,10 @@
+{% set primary_nav__base_class = 'primary-nav' %}
+
+{# Menu #}
+{% include "@molecules/menu/yds-menu.twig" with {
+ menu__base_class: primary_nav__base_class,
+ menu__name: 'primary',
+ items: primary_nav__items|default(items),
+ menu__level__toggle: true,
+ menu__variation: menu__variation,
+} %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/_utility-nav--menu.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/_utility-nav--menu.twig
new file mode 100644
index 000000000..f22168d97
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/_utility-nav--menu.twig
@@ -0,0 +1,7 @@
+{% set utility_nav__base_class = 'utility-nav' %}
+
+{% include "@molecules/menu/yds-menu.twig" with {
+ menu__base_class: utility_nav__base_class,
+ menu__name: 'Utility',
+ items: utility_nav__items|default(items),
+} %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/_yds-utility-nav.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/_yds-utility-nav.scss
new file mode 100644
index 000000000..a73d2f0d9
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/_yds-utility-nav.scss
@@ -0,0 +1,132 @@
+@use '../../../00-tokens/tokens';
+@use '../../../01-atoms/atoms';
+@use '../../../02-molecules/molecules';
+
+.utility-bar {
+ --utility-bar-gap: var(--size-spacing-7);
+
+ @include tokens.body-s;
+
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--utility-bar-gap);
+
+ @media (max-width: tokens.$break-mobile-max) {
+ --utility-bar-gap: var(--size-spacing-6);
+
+ flex-direction: column;
+ align-items: center;
+ }
+}
+
+.utility-nav {
+ display: flex;
+ align-items: center;
+}
+
+.utility-nav__menu {
+ @include atoms.list-reset;
+
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--utility-bar-gap);
+
+ @media (max-width: tokens.$break-mobile-max) {
+ width: 100%;
+ flex-direction: column;
+ align-items: center;
+ }
+}
+
+.utility-nav__link {
+ @include molecules.menu-link;
+}
+
+.utility-nav__cta {
+ @include atoms.cta;
+
+ @media (max-width: tokens.$break-mobile-max) {
+ align-self: center;
+ width: 100%;
+ max-width: 25rem;
+ }
+}
+
+// @TODO: Temporary styles until the search is 'officially' created
+// @LINK: https://yaleits.atlassian.net/browse/YALB-424.
+.utility-nav__search {
+ display: flex;
+ align-items: center;
+ gap: var(--size-spacing-3);
+
+ &:focus-within {
+ @include tokens.focus-styles;
+ }
+
+ input {
+ background: transparent;
+ color: inherit;
+ min-height: var(--size-click-target-minimum);
+ border: var(--border-thickness-2) solid;
+ border-radius: var(--radius-20);
+ width: 100%;
+ max-width: 11rem;
+
+ &::placeholder {
+ color: inherit;
+ font-weight: var(--font-weights-mallory-book);
+
+ @media (max-width: tokens.$break-mobile-max) {
+ text-align: center;
+ }
+ }
+
+ &:hover {
+ &::placeholder {
+ color: var(--color-link-hover);
+ }
+ }
+
+ &:focus-visible {
+ outline: none;
+
+ &::placeholder {
+ color: var(--color-gray-300);
+ font-style: italic;
+ font-weight: var(--font-weights-mallory-book);
+ text-align: left;
+ }
+ }
+
+ @media (max-width: tokens.$break-mobile-max) {
+ max-width: 25rem;
+ }
+ }
+
+ .form-item {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ }
+
+ .form-item label {
+ display: flex; // get the svg to vertically center.
+ grid-area: 1/-1; // force the icon label inside the input.
+ margin-left: var(--size-spacing-5);
+ margin-right: var(--size-spacing-5);
+ align-items: center;
+ justify-content: flex-end;
+ }
+
+ .form-item input {
+ padding-left: var(--size-spacing-4);
+ padding-right: var(--size-spacing-4);
+ grid-area: 1/3;
+ }
+}
+
+// @TODO: Probably temporary? We'll see how the search plays out.
+// @LINK: https://yaleits.atlassian.net/browse/YALB-424.
+.utility-nav__icon--search {
+ height: 1rem;
+ width: 1rem;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/utility-nav.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/utility-nav.stories.js
new file mode 100644
index 000000000..82edfd4e3
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/utility-nav.stories.js
@@ -0,0 +1,12 @@
+// Markup.
+import utilityNavTwig from './yds-utility-nav.twig';
+
+// Data.
+import utilityNavData from './utility-nav.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Organisms/Menu/Utility Nav' };
+
+export const UtilityNav = () => utilityNavTwig(utilityNavData);
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/utility-nav.yml b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/utility-nav.yml
new file mode 100644
index 000000000..ec4a40358
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/utility-nav.yml
@@ -0,0 +1,11 @@
+items:
+ - title: 'About'
+ url: '#'
+ - title: 'Events'
+ url: 'https://google.com'
+ - title: 'Post'
+ url: 'https://google.com/download.pdf'
+utility_nav__link__content: 'Apply Now'
+utility_nav__link__url: '#'
+utility_nav__search: true
+utility_nav__cta__theme: 'one'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/yds-utility-nav.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/yds-utility-nav.twig
new file mode 100644
index 000000000..8aa16a431
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/menu/utility-nav/yds-utility-nav.twig
@@ -0,0 +1,46 @@
+{% set utility_nav__base_class = 'utility-nav' %}
+
+{% set screen_size = screen_size|default('mobile') %}
+
+
+ {# Menu #}
+
+ {% if drupal_utility_nav %}
+ {{ drupal_utility_nav }}
+ {% else %}
+ {% include "@organisms/menu/utility-nav/_utility-nav--menu.twig" %}
+ {% endif %}
+
+ {# Search #}
+ {% if utility_nav__search %}
+
+
+
+ {% endif %}
+ {# Link #}
+ {% if utility_nav__link__content and utility_nav__link__url %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__blockname: utility_nav__base_class,
+ cta__content: utility_nav__link__content,
+ cta__href: utility_nav__link__url,
+ cta__component_theme: utility_nav__cta__theme|default('none'),
+ cta__radius: 'pill',
+ } %}
+ {% endif %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/organisms.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/organisms.scss
new file mode 100644
index 000000000..33254a885
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/organisms.scss
@@ -0,0 +1,14 @@
+@forward './card-collection/yds-card-collection';
+@forward './component-wrapper/yds-component-wrapper';
+@forward './block-wrapper/yds-block-wrapper';
+@forward './custom-card-collection/yds-custom-card-collection';
+@forward './galleries/media-grid/yds-media-grid';
+@forward './galleries/media-grid/yds-media-grid-modal';
+@forward './layout/two-column/yds-two-column';
+@forward './menu/breadcrumbs/yds-breadcrumbs';
+@forward './menu/primary-nav/yds-primary-nav';
+@forward './menu/utility-nav/yds-utility-nav';
+@forward './site-footer/yds-site-footer';
+@forward './site-header/yds-site-header';
+@forward './facts-and-figures-group/yds-facts-and-figures-group';
+@forward './tiles/yds-tiles';
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer--examples.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer--examples.twig
new file mode 100644
index 000000000..9756e567b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer--examples.twig
@@ -0,0 +1,9 @@
+
+ {% for theme, value in _context.themes %}
+
+ {% include "./yds-site-footer.twig" with {
+ site_footer__theme: theme,
+ } %}
+
+ {% endfor %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer-basic.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer-basic.twig
new file mode 100644
index 000000000..1fdb6fecd
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer-basic.twig
@@ -0,0 +1,52 @@
+{# Default Footer #}
+{# Primary #}
+
+ {# Branding #}
+
+
+ {% block site_footer__text %}
+ {% include "@page-layouts/placeholder/yds-placeholder.twig" with {
+ placeholder: 'Text',
+ placeholder__type: 'element',
+ } %}
+ {% endblock %}
+
+ {# Columns #}
+
+ {% block site_footer__columns %}
+ {% include "@page-layouts/placeholder/yds-placeholder.twig" with {
+ placeholder: 'Columns',
+ placeholder__type: 'element',
+ } %}
+ {% endblock %}
+
+
+{# Secondary #}
+
+ {# Social #}
+
+ {% block site_footer__social %}
+ {% include "@molecules/social-links/yds-social-links.twig" %}
+ {% endblock %}
+
+ {# Meta #}
+
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: 'Accessibility at Yale',
+ link__url: "https://usability.yale.edu/web-accessibility/accessibility-yale",
+ link__style: 'no-underline',
+ link__modifiers: ['footer-link'],
+ } %}
+ |
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: 'Privacy Policy',
+ link__url: "https://privacy.yale.edu/resources/privacy-statement",
+ link__style: 'no-underline',
+ link__modifiers: ['footer-link'],
+ } %}
+ |
+ Copyright © {{ 'now'|date('Y') }} Yale University. All rights reserved.
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer-mega.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer-mega.twig
new file mode 100644
index 000000000..97567bf84
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_site-footer-mega.twig
@@ -0,0 +1,81 @@
+{# Mega Footer #}
+
+{# Primary #}
+
+ {# Branding #}
+
+
+ {% block site_footer__logos %}
+ {% include "@page-layouts/placeholder/yds-placeholder.twig" with {
+ placeholder: 'logo',
+ placeholder__type: 'element',
+ } %}
+ {% include "@page-layouts/placeholder/yds-placeholder.twig" with {
+ placeholder: 'logo',
+ placeholder__type: 'element',
+ } %}
+ {% endblock %}
+
+
+
+ {% block site_footer__yale_logo %}
+ {% include "@page-layouts/placeholder/yds-placeholder.twig" with {
+ placeholder: 'Yale logo',
+ placeholder__type: 'element',
+ } %}
+ {% endblock %}
+
+
+ {# WYSIWYG #}
+
+ {% block site_footer__content %}
+ {% include "@page-layouts/placeholder/yds-placeholder.twig" with {
+ placeholder: 'Content',
+ placeholder__type: 'element',
+ } %}
+ {% endblock %}
+
+ {# Columns #}
+
+
+ {% block site_footer__two_columns %}
+ {% include "@molecules/link-group/yds-link-group.twig" with {
+ link_group__heading_one: 'Links Column One',
+ link_group__links_one: [{link_group__link__url: '#', link_group__link__content: 'Link one'}, {link_group__link__url: '#', link_group__link__content: 'Link two'}, {link_group__link__url: '#', link_group__link__content: 'Link three'}, {link_group__link__url: '#', link_group__link__content: 'Link four'}],
+ link_group__links_two: [{link_group__link__url: '#', link_group__link__content: 'Link one in column two'}, {link_group__link__url: '#', link_group__link__content: 'Link two in column two'}, {link_group__link__url: '#', link_group__link__content: 'Link three in column two'}, {link_group__link__url: '#', link_group__link__content: 'Link four in column two with a very, very, very long title'}],
+ } %}
+ {% endblock %}
+
+
+
+{# Secondary #}
+
+ {# Social #}
+
+ {% block site_footer__social_links %}
+ {% include "@molecules/social-links/yds-social-links.twig" %}
+ {% endblock %}
+
+ {# YALE Logo #}
+
+ {# Meta #}
+
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: 'Accessibility at Yale',
+ link__url: "https://usability.yale.edu/web-accessibility/accessibility-yale",
+ link__style: 'no-underline',
+ link__modifiers: ['footer-link'],
+ } %}
+ |
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: 'Privacy Policy',
+ link__url: "https://privacy.yale.edu/resources/privacy-statement",
+ link__style: 'no-underline',
+ link__modifiers: ['footer-link'],
+ } %}
+ |
+ Copyright © {{ 'now'|date('Y') }} Yale University. All rights reserved.
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_yds-site-footer.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_yds-site-footer.scss
new file mode 100644
index 000000000..04c39120d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/_yds-site-footer.scss
@@ -0,0 +1,343 @@
+@use '~@yalesites-org/tokens/build/scss/tokens';
+@use '../../00-tokens/functions/map';
+@use '../../00-tokens/typography/typography';
+
+$break-site-footer: tokens.$break-s;
+$break-site-footer-max: $break-site-footer - 0.05;
+$site-footer-themes: map.deep-get(tokens.$tokens, site-footer-themes);
+$site-footer-border-thickness: map.deep-get(tokens.$tokens, border, thickness);
+$global-footer-themes: map.deep-get(tokens.$tokens, 'global-themes');
+
+.site-footer {
+ padding: var(--size-spacing-7) var(--size-spacing-site-gutter);
+ margin-top: auto; // for sticky footer to work
+
+ // prettier-ignore
+ border-top: var(--site-footer-border-thickness) solid var(--color-site-footer-border-color);
+
+ --color-text: var(--color-site-footer-text-color);
+ --color-link-base: var(--color-text);
+ --color-link-hover: var(--color-text);
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $site-footer-themes {
+ &[data-footer-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-site-footer-border-color: var(--site-footer-themes-#{$theme}-border-color);
+
+ // prettier-ignore
+ --color-site-footer-background-color: var(--site-footer-themes-#{$theme}-background-color);
+
+ // prettier-ignore
+ --color-site-footer-text-color: var(--site-footer-themes-#{$theme}-text-color);
+
+ // prettier-ignore
+ --color-text-shadow: var(--color-site-footer-background-color);
+
+ // prettier-ignore
+ --color-site-footer-heading: var(--site-footer-themes-#{$theme}-text-color);
+
+ // re-map general variables to name spaced variables.
+ --color-slot-one: var(--site-footer-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--site-footer-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--site-footer-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--site-footer-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--site-footer-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--site-footer-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--site-footer-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--site-footer-themes-#{$theme}-slot-eight);
+
+ background-color: var(--color-site-footer-background-color);
+ color: var(--color-site-footer-text-color);
+ border-color: var(--color-site-footer-border-color);
+
+ // set hover for footer links to override the variable from
+ // components/01-atoms/controls/text-link/_yds-text-link.scss
+ .link--footer-link {
+ --color-link-hover: var(--color-text);
+ }
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-footer-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-footer-theme='one'] {
+ --color-site-footer-yale-branding: var(--color-gray-800);
+ --color-site-footer-border-color: var(--color-slot-one);
+ --color-site-footer-background-color: var(--color-basic-white);
+ --color-site-footer-text-color: var(--color-site-footer-heading);
+ }
+
+ &[data-footer-theme='two'] {
+ --color-site-footer-yale-branding: var(--color-basic-white);
+ --color-site-footer-border-color: var(--color-slot-five);
+ --color-site-footer-background-color: var(--color-gray-800);
+ --color-site-footer-text-color: var(--color-basic-white);
+ --color-site-footer-divider-color: var(--color-basic-white);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+
+ &[data-footer-theme='three'] {
+ --color-site-footer-yale-branding: var(--color-basic-white);
+ --color-site-footer-border-color: var(--color-slot-three);
+ --color-site-footer-background-color: var(--color-blue-yale);
+ --color-site-footer-divider-color: var(--color-basic-white);
+ --color-site-footer-text-color: var(--color-basic-white);
+ --color-link-visited-base: var(--color-link-visited-light);
+ --color-link-visited-hover: var(--color-link-visited-light-hover);
+ }
+
+ // Footer accents
+ // Set border colors for each accent
+ &[data-footer-accent='one'] {
+ --color-site-footer-border-color: var(--color-slot-one);
+ }
+
+ &[data-footer-accent='two'] {
+ --color-site-footer-border-color: var(--color-slot-two);
+ }
+
+ &[data-footer-accent='three'] {
+ --color-site-footer-border-color: var(--color-slot-three);
+ }
+
+ &[data-footer-accent='four'] {
+ --color-site-footer-border-color: var(--color-slot-four);
+ }
+
+ &[data-footer-accent='five'] {
+ --color-site-footer-border-color: var(--color-slot-five);
+ }
+
+ &[data-footer-accent='six'] {
+ --color-site-footer-border-color: var(--color-slot-six);
+ }
+
+ &[data-footer-accent='seven'] {
+ --color-site-footer-border-color: var(--color-slot-seven);
+ }
+
+ &[data-footer-accent='eight'] {
+ --color-site-footer-border-color: var(--color-slot-eight);
+ }
+
+ // Border top thickness
+ @each $thickness, $value in $site-footer-border-thickness {
+ &[data-site-footer-border-thickness='#{$thickness}'] {
+ --site-footer-border-thickness: var(--border-thickness-#{$thickness});
+ }
+ }
+}
+
+.site-footer__inner {
+ display: flex;
+ flex-direction: column;
+ gap: var(--size-spacing-7);
+}
+
+.site-footer__primary {
+ display: flex;
+ flex-flow: column wrap;
+ gap: var(--size-spacing-6);
+ justify-content: space-between;
+
+ @media (min-width: tokens.$break-l) {
+ flex-direction: row;
+ }
+
+ [data-footer-variation='mega'] & {
+ @media (min-width: tokens.$break-l) {
+ display: grid;
+ grid-template-areas: 'logos content columns';
+ grid-template-columns: 18rem 1fr 1fr;
+ }
+ }
+}
+
+.site-footer__secondary {
+ display: flex;
+ flex-flow: column wrap;
+ gap: var(--size-spacing-6);
+ justify-content: space-between;
+
+ @media (min-width: $break-site-footer) {
+ flex-direction: row-reverse;
+ }
+
+ [data-footer-variation='mega'] & {
+ border-top: var(--thickness-divider) solid
+ var(--color-site-footer-border-color);
+ padding-top: var(--size-spacing-8);
+
+ @media (min-width: $break-site-footer) {
+ flex-direction: row;
+ }
+ }
+}
+
+// add social icon svg hover colors based on theme.
+// remove cta theme
+.site-footer__branding {
+ display: flex;
+ flex-direction: column;
+ gap: var(--size-spacing-3);
+
+ [data-footer-variation='mega'] & {
+ @media (min-width: $break-site-footer) {
+ flex-direction: row;
+ justify-content: space-between;
+ gap: var(--size-spacing-5);
+ }
+
+ @media (min-width: tokens.$break-l) {
+ flex-direction: column;
+ justify-content: flex-start;
+ flex: 1 1 30%;
+ }
+ }
+}
+
+.site-footer__logo {
+ font-family: YaleMarks, sans-serif;
+ font-size: 2.5rem;
+ line-height: 1;
+
+ @media (min-width: $break-site-footer) {
+ font-size: 3rem;
+ }
+}
+
+.site-footer__site-branding {
+ color: var(--color-text);
+ text-decoration: none;
+}
+
+.site-footer__meta {
+ @include typography.body-xs;
+
+ display: flex;
+ flex-flow: column wrap;
+ align-items: flex-start;
+ gap: var(--size-spacing-3);
+
+ @media (min-width: $break-site-footer) {
+ flex-direction: row;
+ align-items: flex-end;
+ }
+
+ [data-footer-variation='mega'] & {
+ margin-bottom: var(--size-spacing-3);
+
+ @media (min-width: tokens.$break-m) {
+ margin-left: auto;
+ }
+ }
+
+ [data-footer-variation='basic'] & {
+ margin-right: auto;
+ }
+}
+
+.site-footer__divider {
+ @media (max-width: $break-site-footer-max) {
+ display: none;
+ }
+}
+
+/*
+// mega footer styles only
+*/
+.site-footer__logo-group {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: var(--size-spacing-5);
+}
+
+// Yale school logo
+.site-footer__yale-logo {
+ [data-footer-variation='mega'] & {
+ flex-basis: 50%;
+ gap: var(--size-spacing-6);
+ }
+}
+
+// WYSIWYG
+.site-footer__content {
+ [data-footer-variation='mega'] & {
+ @include typography.body-s-condensed;
+
+ flex: 1 1 30%;
+
+ @media (min-width: tokens.$break-l) {
+ grid-area: content;
+ padding-inline-start: var(--size-spacing-8);
+ padding-inline-end: var(--size-spacing-8);
+
+ > p {
+ margin-top: 0;
+ }
+ }
+ }
+}
+
+// Link Columns
+.site-footer__columns {
+ [data-footer-variation='mega'] & {
+ flex: 1 1 30%;
+ display: flex;
+ flex-direction: column;
+ gap: var(--size-spacing-6);
+ }
+}
+
+.site-footer__columns-inner {
+ @media (min-width: tokens.$break-l) {
+ display: grid;
+ grid-template-areas: 'top' 'bottom';
+ grid-template-columns: 1fr 1fr;
+ }
+
+ [data-footer-variation='mega'] & {
+ display: flex;
+ flex: 1 auto;
+ flex-direction: column;
+ gap: var(--size-spacing-3);
+ }
+}
+
+// Social
+.site-footer__social {
+ [data-footer-variation='mega'] & {
+ flex: 0 0 100%;
+ align-self: flex-end;
+
+ @media (max-width: $break-site-footer-max) {
+ order: 3;
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/site-footer.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/site-footer.stories.js
new file mode 100644
index 000000000..cdf7aca37
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/site-footer.stories.js
@@ -0,0 +1,113 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+import getGlobalThemes from '../../00-tokens/colors/color-global-themes';
+
+import siteFooterTwig from './yds-site-footer.twig';
+import siteFooterExamples from './_site-footer--examples.twig';
+
+import socialLinksData from '../../02-molecules/social-links/social-links.yml';
+
+const siteFooterThemes = { themes: tokens['site-footer-themes'] };
+const siteGlobalThemes = { themes: tokens['global-themes'] };
+const borderThicknessOptions = Object.keys(tokens.border.thickness);
+const siteFooterThemeOptions = Object.keys(tokens['site-footer-themes']);
+const siteGlobalThemeOptions = getGlobalThemes(tokens['global-themes']);
+const siteFooterAccents = [
+ 'one',
+ 'two',
+ 'three',
+ 'four',
+ 'five',
+ 'six',
+ 'seven',
+ 'eight',
+];
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Site/Footer',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ borderThickness: {
+ options: borderThicknessOptions,
+ type: 'select',
+ defaultValue: '8',
+ },
+ },
+};
+
+export const Footer = ({
+ borderThickness,
+ siteFooterTheme,
+ siteFooterVariation,
+ siteFooterAccent,
+}) =>
+ siteFooterTwig({
+ ...socialLinksData,
+ ...siteFooterAccents,
+ site_footer__border_thickness: borderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ site_footer__variation: siteFooterVariation,
+ });
+
+Footer.argTypes = {
+ siteFooterTheme: {
+ options: siteFooterThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteFooterAccent: {
+ name: 'Footer Accent Color (dial)',
+ options: siteFooterAccents,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteFooterVariation: {
+ name: 'Footer Variation (dial)',
+ options: ['basic', 'mega'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+};
+
+export const FooterExamples = ({
+ borderThickness,
+ globalTheme,
+ siteFooterVariation,
+ siteFooterAccent,
+}) =>
+ siteFooterExamples({
+ ...socialLinksData,
+ ...siteFooterThemes,
+ ...siteGlobalThemes,
+ ...siteFooterAccents,
+ site_global__theme: globalTheme,
+ site_footer__accent: siteFooterAccent,
+ site_footer__border_thickness: borderThickness,
+ site_footer__variation: siteFooterVariation,
+ });
+
+FooterExamples.argTypes = {
+ globalTheme: {
+ name: 'Global Theme (lever)',
+ options: siteGlobalThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteFooterAccent: {
+ name: 'Footer Accent Color (dial)',
+ options: siteFooterAccents,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteFooterVariation: {
+ name: 'Footer Variation (dial)',
+ options: ['basic', 'mega'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/yds-site-footer.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/yds-site-footer.twig
new file mode 100644
index 000000000..8999e0a35
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-footer/yds-site-footer.twig
@@ -0,0 +1,34 @@
+{#
+ # Available Props:
+ # - site_footer__theme
+ # - site_footer__border_thickness
+ #
+ # Available Blocks
+ # - site_footer__logo
+ # - site_footer__text
+ # - site_footer__columns
+ # - site_footer__social
+ #}
+
+{% set site_footer__base_class = 'site-footer' %}
+
+{% set site_footer__attributes = {
+ 'data-component-width': 'site',
+ 'data-site-footer-border-thickness': site_footer__border_thickness|default('0'),
+ 'data-footer-theme': site_footer__theme|default('one'),
+ 'data-footer-accent': site_footer__accent|default('one'),
+ 'data-footer-variation': site_footer__variation|default('basic'),
+ class: bem(site_footer__base_class),
+} %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header--examples.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header--examples.twig
new file mode 100644
index 000000000..4178a6ffd
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header--examples.twig
@@ -0,0 +1,9 @@
+
+ {% for theme, value in _context.themes %}
+
+ {% include "./yds-site-header.twig" with {
+ site_header__theme: theme,
+ } %}
+
+ {% endfor %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header--secondary.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header--secondary.twig
new file mode 100644
index 000000000..c0444bf06
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header--secondary.twig
@@ -0,0 +1,14 @@
+
+ {# Yale Branding #}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: 'Yale University',
+ link__url: 'https://www.yale.edu',
+ link__base_class: 'yale-branding',
+ link__blockname: site_header__base_class,
+ link__url_type: 'internal',
+ } %}
+ {# Utility Nav #}
+
+ {% include "@organisms/menu/utility-nav/yds-utility-nav.twig" %}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header-default.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header-default.twig
new file mode 100644
index 000000000..60607b0fa
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header-default.twig
@@ -0,0 +1,13 @@
+{# Secondary should come first on "desktop" sized screens #}
+
+ {% include "@organisms/site-header/_site-header--secondary.twig" with {
+ screen_size: 'desktop'
+ }%}
+
+ {{ site_header__primary }}
+{# Secondary should come second on "mobile" sized screens #}
+
+ {% include "@organisms/site-header/_site-header--secondary.twig" with {
+ screen_size: 'mobile'
+ }%}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header-simple.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header-simple.twig
new file mode 100644
index 000000000..0296beec1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_site-header-simple.twig
@@ -0,0 +1 @@
+{{ site_header__primary }}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_yds-site-header.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_yds-site-header.scss
new file mode 100644
index 000000000..834211be8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/_yds-site-header.scss
@@ -0,0 +1,519 @@
+@use '../../00-tokens/functions/map';
+@use '../../00-tokens/tokens';
+
+$site-header-themes: map.deep-get(tokens.$tokens, site-header-themes);
+$site-header-border-thickness: map.deep-get(tokens.$tokens, border, thickness);
+$site-header-layout: map.deep-get(tokens.$tokens, 'site-header-layout');
+$global-site-themes: map.deep-get(tokens.$tokens, 'global-themes');
+$site-max-width: 84rem;
+$background-image-max-width: 100rem;
+$site-name-as-logo-width: 25rem; // 400px
+$site-name-as-logo-height: 12.5rem; // 200px
+$site-name-as-logo-height-sm: 6.25rem; // 100px
+
+:root {
+ --site-header-animation-speed: var(--animation-speed-slow);
+}
+
+// Mixin for the small branding typography.
+@mixin branding-small {
+ font: var(--font-style-branding-yale);
+ color: var(--color-site-header-yale-branding);
+}
+
+// Department/site name on mobile
+@mixin branding-small-mobile {
+ font: var(--font-style-branding-site-mobile);
+ color: var(--color-site-header-yale-branding);
+}
+
+.site-header {
+ // prettier-ignore
+ --site-header-border-bottom: var(--site-header-border-thickness) solid var(--color-site-header-border-color);
+
+ // prettier-ignore
+ --site-header-mobile-border-bottom: var(--site-header-mobile-border-thickness, var(--site-header-border-thickness)) solid var(--color-site-header-border-color);
+ --color-text-shadow: var(--color-basic-white);
+
+ position: relative;
+ z-index: 2;
+
+ // Component themes defaults: iterate over each component theme to establish
+ // default variables.
+ @each $theme, $value in $site-header-themes {
+ &[data-header-theme='#{$theme}'] {
+ // prettier-ignore
+ --color-site-header-yale-branding: var(--site-header-themes-#{$theme}-yale-branding);
+
+ // prettier-ignore
+ --color-site-header-site-branding: var(--site-header-themes-#{$theme}-site-branding);
+
+ // prettier-ignore
+ --color-site-header-border-color: var(--site-header-themes-#{$theme}-border-color);
+
+ // prettier-ignore
+ --color-site-header-divider-color: var(--site-header-themes-#{$theme}-divider-color);
+
+ // re-map general variables to name spaced variables.
+ --color-slot-one: var(--site-header-themes-#{$theme}-slot-one);
+ --color-slot-two: var(--site-header-themes-#{$theme}-slot-two);
+ --color-slot-three: var(--site-header-themes-#{$theme}-slot-three);
+ --color-slot-four: var(--site-header-themes-#{$theme}-slot-four);
+ --color-slot-five: var(--site-header-themes-#{$theme}-slot-five);
+ --color-slot-six: var(--site-header-themes-#{$theme}-slot-six);
+ --color-slot-seven: var(--site-header-themes-#{$theme}-slot-seven);
+ --color-slot-eight: var(--site-header-themes-#{$theme}-slot-eight);
+ --color-action: var(--color-site-header-theme-action);
+ --color-action-secondary: var(--color-site-header-theme-action-secondary);
+
+ // prettier-ignore
+ --color-site-header-background: var(--site-header-themes-#{$theme}-background);
+ --color-text: var(--color-site-header-text);
+ --color-heading: var(--color-site-header-text);
+ --color-link-base: var(--color-site-header-text);
+ --color-link-hover: var(--color-site-header-link-hover);
+ --menu-link-color: var(--color-site-header-link-hover);
+ --color-navigation-border: var(--color-site-header-border-color);
+ --color-background: var(--color-site-header-background);
+
+ // set default background and text colors.
+ background-color: var(--color-site-header-background);
+ color: var(--color-site-header-text);
+ border-color: var(--color-site-header-border-color);
+ }
+ }
+
+ // Global themes: set color slots for each theme
+ // This establishes `--color-slot-` variables name-spaced to the selector
+ // in which it is used. We can map component-level variables to global-level
+ // `--color-slot-` variables.
+ @each $globalTheme, $value in $global-site-themes {
+ [data-global-theme='#{$globalTheme}'] & {
+ --color-slot-one: var(--global-themes-#{$globalTheme}-colors-slot-one);
+ --color-slot-two: var(--global-themes-#{$globalTheme}-colors-slot-two);
+ --color-slot-three: var(
+ --global-themes-#{$globalTheme}-colors-slot-three
+ );
+ --color-slot-four: var(--global-themes-#{$globalTheme}-colors-slot-four);
+ --color-slot-five: var(--global-themes-#{$globalTheme}-colors-slot-five);
+ --color-slot-six: var(--global-themes-#{$globalTheme}-colors-slot-six);
+ --color-slot-seven: var(
+ --global-themes-#{$globalTheme}-colors-slot-seven
+ );
+ --color-slot-eight: var(
+ --global-themes-#{$globalTheme}-colors-slot-eight
+ );
+ }
+ }
+
+ // Component theme overrides: set specific component themes overrides
+ /// define component name spaced variables and map them to global theme slots.
+ &[data-header-theme='one'] {
+ --color-site-header-border-color: var(--color-slot-one);
+ --color-site-header-background: var(--color-basic-white);
+ --color-site-header-text: var(--color-gray-800);
+ --color-site-header-link-hover: var(--color-slot-two);
+ --color-site-header-theme-action: var(--color-slot-two);
+ --color-site-header-theme-action-secondary: var(--color-basic-white);
+ --color-muted: var(--color-gray-600);
+ --color-navigation-expanded-item: var(--color-gray-600);
+ }
+
+ &[data-header-theme='two'] {
+ --color-site-header-border-color: var(--color-slot-three);
+ --color-site-header-background: var(--color-gray-800);
+ --color-site-header-text: var(--color-basic-white);
+ --color-site-header-link-hover: var(--color-slot-four);
+ --color-site-header-yale-branding: var(--color-basic-white);
+ --color-site-header-theme-action: var(--color-slot-four);
+ --color-site-header-theme-action-secondary: var(--color-gray-800);
+ --color-muted: var(--color-gray-300);
+ --color-navigation-expanded-item: var(--color-gray-300);
+ }
+
+ &[data-header-theme='three'] {
+ --color-site-header-border-color: var(--color-slot-three);
+ --color-site-header-background: var(--color-blue-yale);
+ --color-site-header-divider-color: var(--color-basic-white);
+ --color-site-header-text: var(--color-basic-white);
+ --color-site-header-link-hover: var(--color-slot-four);
+ --color-site-header-yale-branding: var(--color-basic-white);
+ --color-site-header-theme-action: var(--color-slot-four);
+ --color-site-header-theme-action-secondary: var(--color-slot-one);
+ --color-muted: var(--color-gray-300);
+ --color-navigation-expanded-item: var(--color-gray-300);
+ }
+
+ // Header accents
+ // Set border colors for each accent
+ &[data-header-accent='one'] {
+ --color-site-header-border-color: var(--color-slot-one);
+ }
+
+ &[data-header-accent='two'] {
+ --color-site-header-border-color: var(--color-slot-two);
+ }
+
+ &[data-header-accent='three'] {
+ --color-site-header-border-color: var(--color-slot-three);
+ }
+
+ &[data-header-accent='four'] {
+ --color-site-header-border-color: var(--color-slot-four);
+ }
+
+ &[data-header-accent='five'] {
+ --color-site-header-border-color: var(--color-slot-five);
+ }
+
+ &[data-header-accent='six'] {
+ --color-site-header-border-color: var(--color-slot-six);
+ }
+
+ &[data-header-accent='seven'] {
+ --color-site-header-border-color: var(--color-slot-seven);
+ }
+
+ &[data-header-accent='eight'] {
+ --color-site-header-border-color: var(--color-slot-eight);
+ }
+
+ // Border bottom thickness
+ @each $thickness, $value in $site-header-border-thickness {
+ &[data-site-header-border-thickness='#{$thickness}'] {
+ --site-header-border-thickness: var(--border-thickness-#{$thickness});
+
+ @if $thickness == '0' {
+ // prettier-ignore
+ --site-header-mobile-border-thickness: var(--border-thickness-hairline);
+ } @else if $thickness == '8' or $thickness == '6' {
+ --site-header-mobile-border-thickness: var(--border-thickness-4);
+ }
+ }
+ }
+
+ @media (max-width: tokens.$break-mobile-max) {
+ padding: 0;
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ border-bottom: var(--site-header-border-bottom);
+ }
+
+ &[data-site-header-with-background-image] {
+ background-color: transparent;
+ border-bottom: unset;
+
+ @media (min-width: tokens.$break-mobile) {
+ display: grid;
+ grid-template: 'header';
+ width: 100%;
+ max-width: 100%;
+ }
+
+ @media (min-width: $background-image-max-width) {
+ max-width: 150rem; // 2400px
+ padding: 0;
+ margin: 0 auto;
+ }
+ }
+}
+
+.site-header__mobile-header {
+ position: relative;
+ z-index: 1;
+ display: flex;
+ gap: var(--size-spacing-6);
+ justify-content: space-between;
+ align-items: center;
+ padding: var(--size-spacing-4) var(--size-spacing-site-gutter);
+ background-color: var(--color-background);
+ border-bottom: var(--site-header-border-bottom);
+ margin-inline-start: calc(var(--size-spacing-site-gutter) * -1);
+ margin-inline-end: calc(var(--size-spacing-site-gutter) * -1);
+
+ @media (min-width: tokens.$break-mobile) {
+ display: none;
+ }
+}
+
+.site-header__menu-wrapper {
+ display: flex;
+ flex-direction: column;
+
+ @media (max-width: tokens.$break-mobile-max) {
+ @include tokens.animate(transform, var(--site-header-animation-speed));
+
+ position: absolute;
+ left: 0;
+ background: var(--color-background);
+ max-height: calc(100vh - var(--header-height-mobile));
+ width: 100vw;
+ max-width: 100%;
+ overflow: auto;
+ border-bottom: var(--site-header-mobile-border-bottom);
+ transform: translateY(-100%);
+
+ [data-main-menu-state='loaded'] & {
+ visibility: hidden;
+ transform: translateY(-100%);
+
+ & svg.primary-nav__toggle-icon {
+ display: none;
+ }
+ }
+
+ [data-main-menu-state='closed'] & {
+ @include tokens.animate-hidden(var(--site-header-animation-speed));
+
+ transform: translateY(-100%);
+ }
+
+ [data-main-menu-state='open'] & {
+ transform: translateY(0%);
+ }
+
+ // when it's a simple menu with an image we need to set a min-height
+ [data-site-header-type='focus'][data-site-header-with-background-image] & {
+ min-height: var(--header-height-mobile);
+ }
+ }
+}
+
+.site-header__menu-secondary {
+ &--desktop {
+ @media (max-width: tokens.$break-mobile-max) {
+ display: none;
+ }
+ }
+
+ &--mobile {
+ @media (min-width: tokens.$break-mobile) {
+ display: none;
+ }
+ }
+}
+
+.site-header__secondary {
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--size-spacing-6);
+ justify-content: space-between;
+ align-items: center;
+ padding: var(--size-spacing-4) 0;
+
+ @media (max-width: tokens.$break-mobile-max) {
+ padding: var(--size-spacing-6) var(--size-spacing-site-gutter);
+ border-top: var(--site-header-mobile-border-bottom);
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ // prettier-ignore
+ border-bottom: var(--border-thickness-hairline) solid var(--color-site-header-divider-color);
+ }
+}
+
+.site-header__primary {
+ display: flex;
+ flex-flow: var(--site-header-flex-direction) wrap;
+ gap: var(--size-spacing-6);
+ padding: var(--size-spacing-7) 0 var(--size-spacing-6);
+ justify-content: var(--site-header-layout-justify);
+ align-items: var(--site-header-layout-align);
+
+ // Primary nav position
+ @each $layout, $value in $site-header-layout {
+ [data-site-header-nav-position='#{$layout}'] & {
+ // prettier-ignore
+ --site-header-flex-direction: var(--site-header-layout-#{$layout}-flex-direction);
+
+ // prettier-ignore
+ --site-header-layout-justify: var(--site-header-layout-#{$layout}-justify);
+ --site-header-layout-align: var(--site-header-layout-#{$layout}-align);
+ }
+ }
+
+ @media (max-width: tokens.$break-mobile-max) {
+ padding: var(--size-spacing-3) var(--size-spacing-site-gutter);
+ }
+}
+
+.site-header__yale-branding {
+ @include branding-small;
+
+ text-decoration: none;
+
+ @media (max-width: tokens.$break-mobile-max) {
+ display: none;
+ }
+}
+
+.site-header__utility-nav {
+ margin-left: auto;
+
+ @media (max-width: tokens.$break-mobile-max) {
+ width: 100%;
+ }
+}
+
+.site-header__site-branding {
+ font: var(--font-style-branding-site);
+ color: var(--color-site-header-site-branding);
+ text-decoration: none;
+
+ &--primary {
+ @media (max-width: tokens.$break-mobile-max) {
+ display: none;
+ }
+ }
+
+ // if right alignment, limit the branding width
+ @media (min-width: tokens.$break-mobile) {
+ [data-site-header-nav-position='right'] & {
+ max-width: 36.5%;
+ }
+ }
+
+ &--mobile {
+ @include branding-small-mobile;
+
+ max-width: 80%;
+ }
+}
+
+.site-header__primary-nav {
+ @media (max-width: tokens.$break-mobile-max) {
+ width: 100%;
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ [data-site-header-nav-position='center'] & {
+ width: 100%;
+ }
+
+ [data-site-header-nav-position='right'] & {
+ margin-left: auto;
+ }
+
+ [data-site-header-type='focus'] & {
+ align-self: center;
+ }
+ }
+}
+
+.site-header__overlay {
+ position: fixed;
+ z-index: 1;
+ left: 0;
+ top: 0;
+ height: 0;
+ width: 100vw;
+ background-color: rgb(0 0 0 / 70%);
+ opacity: 0;
+
+ // The animate mixin doesn't support multiple transitions.
+ @media (prefers-reduced-motion: no-preference) {
+ transition: opacity calc(var(--site-header-animation-speed) / 2) ease-in-out
+ calc(var(--site-header-animation-speed) / 2),
+ height 0ms ease-in-out var(--site-header-animation-speed);
+ }
+
+ @media (max-width: tokens.$break-mobile-max) {
+ [data-main-menu-state='open'] ~ & {
+ @include tokens.animate(opacity, var(--site-header-animation-speed));
+
+ height: 100vh;
+ opacity: 1;
+ }
+ }
+}
+
+.site-header__inner {
+ [data-site-header-type='focus'][data-site-header-with-background-image] & {
+ @media (min-width: tokens.$break-mobile) {
+ grid-area: container;
+ z-index: 2;
+ width: 100%;
+ max-width: 84rem;
+ }
+ }
+}
+
+// Image
+.site-header__image {
+ position: relative;
+
+ // pull image into the site margins, full-bleed
+ margin-left: calc(var(--size-spacing-site-gutter) * -1);
+ margin-right: calc(var(--size-spacing-site-gutter) * -1);
+
+ [data-main-menu-state='open'] & {
+ z-index: -1;
+ opacity: 0.1;
+ }
+
+ // make image width and height take up the full screen at resolutions
+ // greater than mobile
+ @media (min-width: tokens.$break-mobile) {
+ > * {
+ object-fit: cover;
+ height: 100vh;
+ width: 100vw;
+ }
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ grid-area: container;
+ z-index: 0;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ background-image: linear-gradient(
+ var(--color-site-header-background) 15%,
+ transparent 100%
+ );
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+
+ @media (min-width: $site-max-width) {
+ background-image: linear-gradient(
+ var(--color-site-header-background) 10%,
+ transparent 100%
+ );
+ }
+ }
+ }
+}
+
+// Site Name is Logo/SVG
+.site-header__site-branding-logo {
+ [data-site-header-site-name-is-image] & {
+ &--desktop {
+ > * {
+ height: auto;
+ max-height: $site-name-as-logo-height; // 200px
+ max-width: $site-name-as-logo-width; // 400px
+ }
+
+ @media (max-width: tokens.$break-mobile-max) {
+ display: none;
+ }
+ }
+
+ &--mobile {
+ > * {
+ width: 100%;
+ max-width: $site-name-as-logo-width; // 400px
+ max-height: $site-name-as-logo-height-sm; // 100px
+ }
+
+ @media (min-width: tokens.$break-mobile) {
+ display: none;
+ }
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/site-header.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/site-header.stories.js
new file mode 100644
index 000000000..1eeb93db9
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/site-header.stories.js
@@ -0,0 +1,160 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+// get global themes as `label` : `key` values to pass into options as array.
+import getGlobalThemes from '../../00-tokens/colors/color-global-themes';
+
+import siteHeaderTwig from './yds-site-header.twig';
+import siteHeaderExamples from './_site-header--examples.twig';
+
+import utilityNavData from '../menu/utility-nav/utility-nav.yml';
+import primaryNavData from '../menu/primary-nav/primary-nav.yml';
+import imageData from '../../01-atoms/images/image/image.yml';
+
+import '../../02-molecules/menu/menu-toggle/yds-menu-toggle';
+
+// JavaScript to handle size
+import './yds-site-header';
+
+const siteHeaderThemes = { themes: tokens['site-header-themes'] };
+const siteGlobalThemes = { themes: tokens['global-themes'] };
+const borderThicknessOptions = Object.keys(tokens.border.thickness);
+const siteHeaderThemeOptions = Object.keys(tokens['site-header-themes']);
+const siteGlobalThemeOptions = getGlobalThemes(tokens['global-themes']);
+const siteHeaderAccents = [
+ 'one',
+ 'two',
+ 'three',
+ 'four',
+ 'five',
+ 'six',
+ 'seven',
+ 'eight',
+];
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Site/Header',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ borderThickness: {
+ name: 'Navigation Border Thickness',
+ options: borderThicknessOptions,
+ type: 'select',
+ defaultValue: '8',
+ },
+ primaryNavPosition: {
+ name: 'Navigation Position',
+ options: ['left', 'center', 'right'],
+ type: 'select',
+ defaultValue: 'left',
+ },
+ menuVariation: {
+ name: 'Menu Variation',
+ options: ['basic', 'mega', 'focus'],
+ type: 'select',
+ defaultValue: 'basic',
+ },
+ siteHeaderImage: {
+ name: 'Header With Image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ siteHeaderSiteNameImage: {
+ name: 'Site Name is an Image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ },
+};
+
+export const Header = ({
+ borderThickness,
+ primaryNavPosition,
+ siteHeaderTheme,
+ menuVariation,
+ siteHeaderImage,
+ siteHeaderSiteNameImage,
+ siteHeaderAccent,
+}) =>
+ siteHeaderTwig({
+ ...imageData.responsive_images['16x9'],
+ site_name: 'Department of Chemistry',
+ site_header__border_thickness: borderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_header__menu__variation: menuVariation,
+ site_header__background_image: siteHeaderImage,
+ site_header__site_name_is_image: siteHeaderSiteNameImage,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ });
+
+Header.argTypes = {
+ siteHeaderTheme: {
+ name: 'Header Theme (dial)',
+ options: siteHeaderThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteHeaderAccent: {
+ name: 'Header Accent Color (dial)',
+ options: siteHeaderAccents,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteHeaderImage: {
+ name: 'With image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+};
+
+export const HeaderExamples = ({
+ borderThickness,
+ primaryNavPosition,
+ menuVariation,
+ globalTheme,
+ siteHeaderAccent,
+ siteHeaderImage,
+ siteHeaderSiteNameImage,
+}) =>
+ siteHeaderExamples({
+ ...siteGlobalThemes,
+ ...siteHeaderThemes,
+ ...siteHeaderAccents,
+ ...imageData.responsive_images['16x9'],
+ site_name: 'Department of Chemistry',
+ site_global__theme: globalTheme,
+ site_header__accent: siteHeaderAccent,
+ site_header__border_thickness: borderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__menu__variation: menuVariation,
+ site_header__background_image: siteHeaderImage,
+ site_header__site_name_is_image: siteHeaderSiteNameImage,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ });
+
+HeaderExamples.argTypes = {
+ globalTheme: {
+ name: 'Global Theme (lever)',
+ options: siteGlobalThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteHeaderAccent: {
+ name: 'Header Accent Color (dial)',
+ options: siteHeaderAccents,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ siteHeaderImage: {
+ name: 'Header With Image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/yds-site-header.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/yds-site-header.js
new file mode 100644
index 000000000..0b99441fa
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/yds-site-header.js
@@ -0,0 +1,47 @@
+Drupal.behaviors.siteHeader = {
+ attach(context) {
+ const body = context.querySelector('body');
+ const header = context.querySelector('.site-header');
+
+ /**
+ * debounce
+ * @description Debounce to only run a function at most once every 200ms.
+ * @param {} func The function to be run after the timeout.
+ */
+ const debounce = (func) => {
+ let timer;
+ return function debounceFunction(event) {
+ if (timer) clearTimeout(timer);
+ timer = setTimeout(func, 200, event);
+ };
+ };
+
+ /**
+ * setHeaderHeight
+ * @description Set the `--site-header-height` variable.
+ */
+ const setHeaderHeight = () => {
+ if (!header || !header.offsetHeight) {
+ return;
+ }
+
+ body.style.setProperty(
+ '--site-header-height',
+ `${header.offsetHeight || 0}px`,
+ );
+ };
+
+ // Determine, and set the site header height variable on page load.
+ window.addEventListener('load', () => {
+ setHeaderHeight();
+ });
+
+ // Update the site header height variable when the window is resized.
+ window.addEventListener(
+ 'resize',
+ debounce(function runSetHeight() {
+ setHeaderHeight();
+ }),
+ );
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/yds-site-header.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/yds-site-header.twig
new file mode 100644
index 000000000..7fa4a54a6
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/site-header/yds-site-header.twig
@@ -0,0 +1,161 @@
+{#
+ # Available Props:
+ # - site_header__theme
+ # - site_header__border_thickness
+ # - site_header__nav_position
+ #
+ # Available Variables
+ # - site_name
+ #
+ # Available Blocks
+ # - site_header__primary_nav
+ #}
+
+{% set site_header__base_class = 'site-header' %}
+
+{% set site_header__hamburger = 'no' %}
+
+{% if utility_nav__items or primary_nav__items %}
+ {% set site_header__hamburger = 'yes' %}
+{% endif %}
+
+{% set site_header__attributes = {
+ 'data-main-menu-state': 'loaded',
+ 'data-component-width': 'site',
+ 'data-site-header-nav-position': site_header__nav_position|default('right'),
+ 'data-site-header-border-thickness': site_header__border_thickness|default('8'),
+ 'data-header-theme': site_header__theme|default('one'),
+ 'data-header-accent': site_header__accent|default('one'),
+ class: bem(site_header__base_class),
+} %}
+
+{# If the header uses a logo as its site_name instead of text #}
+{% if site_header__site_name_is_image %}
+ {% set site_header__attributes = site_header__attributes|merge({
+ 'data-site-header-site-name-is-image': '1',
+ }) %}
+{% endif %}
+
+{# If header is simple, set header-type attribute
+ set default nav position to right
+ #}
+{% if site_header__menu__variation == 'focus' %}
+ {% set site_header__type = 'focus' %}
+ {% set site_header__attributes = site_header__attributes|merge({
+ 'data-site-header-type': 'focus',
+ 'data-site-header-nav-position': 'right',
+ }) %}
+
+ {% if site_header__background_image %}
+ {% set site_header__attributes = site_header__attributes|merge({
+ 'data-site-header-with-background-image': '1',
+ }) %}
+ {% endif %}
+{% endif %}
+
+{# Primary #}
+{% set site_header__primary %}
+
+ {% if site_header__site_name_is_image %}
+ {% embed "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: site_name,
+ link__url: '/',
+ link__base_class: 'site-branding-logo',
+ link__modifiers: ['desktop'],
+ link__blockname: site_header__base_class,
+ } %}
+ {% block link__content %}
+ {# isSiteHeaderLogo is variable set in Drupal #}
+ {% if isSiteHeaderLogo %}
+ {{ site_header__site_name_is_image|raw }}
+ {% else %}
+ {# Render example SVG in Storybook #}
+
+
+
+
+
+
+ {% endif %}
+ {% endblock %}
+ {% endembed %}
+ {% else %}
+ {# Site Branding #}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: site_name,
+ link__url: '/',
+ link__base_class: 'site-branding',
+ link__modifiers: ['primary'],
+ link__blockname: site_header__base_class,
+ } %}
+ {% endif %}
+ {# Primary Nav #}
+
+ {% block site_header__primary_nav %}
+ {% include "@organisms/menu/primary-nav/yds-primary-nav.twig" with {
+ menu__variation: site_header__menu__variation,
+ } %}
+ {% endblock %}
+
+
+{% endset %}
+
+
+
+
+ {# Yale Branding #}
+ {% if site_header__site_name_is_image %}
+ {% embed "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: site_name,
+ link__url: '/',
+ link__base_class: 'site-branding-logo',
+ link__modifiers: ['mobile'],
+ link__blockname: site_header__base_class,
+ } %}
+ {% block link__content %}
+ {% if isSiteHeaderLogo %}
+ {{ site_header__site_name_is_image|raw }}
+ {% else %}
+ {# Render example SVG in Storybook #}
+
+
+
+
+
+
+ {% endif %}
+ {% endblock %}
+ {% endembed %}
+ {% else %}
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: site_name,
+ link__url: '/',
+ link__base_class: 'site-branding',
+ link__modifiers: ['mobile'],
+ link__blockname: site_header__base_class,
+ } %}
+ {% endif %}
+ {# Mobile Menu Toggle #}
+ {% if site_header__hamburger == 'yes' %}
+ {% include "@molecules/menu/menu-toggle/yds-menu-toggle.twig" %}
+ {% endif %}
+
+
+ {# If header type is simple, load the simple component #}
+ {% if site_header__type == 'focus' %}
+ {% include "@organisms/site-header/_site-header-simple.twig" %}
+ {% else %}
+ {% include "@organisms/site-header/_site-header-default.twig" %}
+ {% endif %}
+
+
+ {% if site_header__background_image and site_header__type == 'focus' %}
+
+ {% block site_header__background_image %}
+ {% include "@atoms/images/image/_responsive-image.twig" %}
+ {% endblock %}
+
+ {% endif %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/_yds-tiles.scss b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/_yds-tiles.scss
new file mode 100644
index 000000000..527c9251e
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/_yds-tiles.scss
@@ -0,0 +1,98 @@
+@use '../../00-tokens/tokens';
+@use '../../00-tokens/functions/map';
+@use '../../01-atoms/atoms';
+@use '../grid-mixins' as grid;
+
+.tiles {
+ width: 100%;
+ position: relative;
+ padding-block-start: var(--size-spacing-10);
+ padding-block-end: var(--size-spacing-10);
+
+ // Or if the spotlight is the only spotlight on the page
+ &[data-spotlights-position='first-and-last'] {
+ @include tokens.spacing-page-section;
+ }
+
+ // We're using JavaScript to evaluate the last and first spotlights in a group of spotlights
+ &[data-spotlights-position='first'] {
+ margin-top: var(--size-spacing-10);
+ }
+
+ &[data-spotlights-position='last'] {
+ margin-bottom: var(--size-spacing-10);
+ }
+
+ // If the tiles component comes after a component in the first position, remove the top padding
+ [data-component-theme='default'][data-spotlights-position='first'] + & {
+ padding-block-start: 0;
+ }
+}
+
+.tiles__inner {
+ width: 100%;
+ max-width: var(--component-width);
+}
+
+.tiles__wrap {
+ @include grid.base;
+
+ // position relative added to use z-index and make sure the image is behind the content
+ position: relative;
+ z-index: 1;
+
+ --grid-gutter: var(--spacing-component-gutter-secondary);
+
+ > * {
+ @media (min-width: tokens.$break-s) {
+ flex: 0 1 calc(50% - calc(var(--grid-gutter) * 2 / 3));
+ }
+
+ @media (min-width: tokens.$break-m) {
+ flex: 0 1 calc(33.33% - calc(var(--grid-gutter) * 2 / 3));
+ }
+
+ @media (min-width: tokens.$break-l) {
+ flex: 0 1 calc(25% - calc(var(--grid-gutter) * 3 / 4));
+ }
+ }
+
+ [data-component-grid-count='two'] & {
+ > * {
+ @media (min-width: tokens.$break-s) {
+ flex: 0 1 calc(50% - var(--grid-gutter));
+ max-width: calc(50% - var(--grid-gutter));
+ }
+ }
+ }
+
+ [data-component-grid-count='three'] & {
+ > * {
+ @media (min-width: tokens.$break-s) {
+ flex: 0 calc(50% - var(--grid-gutter));
+ }
+
+ @media (min-width: tokens.$break-m) {
+ flex: 1 0 calc(33.33% - var(--grid-gutter));
+ max-width: calc(33.33% - var(--grid-gutter));
+ }
+ }
+ }
+
+ [data-component-grid-count='four'] & {
+ > * {
+ @media (min-width: tokens.$break-s) {
+ flex: 0 calc(50% - var(--grid-gutter));
+ }
+
+ @media (min-width: tokens.$break-m) {
+ flex: 1 0 calc(25% - var(--grid-gutter));
+ }
+
+ @media (min-width: tokens.$break-l) {
+ flex: 1 0 calc(25% - var(--grid-gutter));
+ max-width: calc(25% - var(--grid-gutter));
+ }
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/tiles.stories.js b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/tiles.stories.js
new file mode 100644
index 000000000..56b964c0a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/tiles.stories.js
@@ -0,0 +1,86 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+// get global themes as `label` : `key` values to pass into options as array.
+import getGlobalThemes from '../../00-tokens/colors/color-global-themes';
+
+// tiles twig
+import tilesTwig from './yds-tiles.twig';
+
+// Stat default data
+import tilesData from './tiles.yml';
+
+// Image atom component - generic images for demo
+import imageData from '../../01-atoms/images/image/image.yml';
+
+// Get global theme options
+const siteGlobalThemeOptions = getGlobalThemes(tokens['global-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Organisms/Tiles',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ globalTheme: {
+ name: 'Global Theme (lever)',
+ options: siteGlobalThemeOptions,
+ type: 'select',
+ defaultValue: 'one',
+ },
+ presentationStyle: {
+ name: 'Presentation Style',
+ options: ['heading', 'icon', 'text-only'],
+ type: 'select',
+ defaultValue: 'heading',
+ },
+ alignment: {
+ name: 'Alignment',
+ options: ['left', 'center', 'right'],
+ type: 'select',
+ defaultValue: 'left',
+ },
+ verticalAlignment: {
+ name: 'Vertical Alignment',
+ options: ['top', 'bottom'],
+ type: 'select',
+ defaultValue: 'top',
+ },
+ columnCount: {
+ name: 'Column Count',
+ options: ['two', 'three', 'four'],
+ type: 'select',
+ defaultValue: 'three',
+ },
+ image: {
+ name: 'With image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ },
+};
+
+export const Tiles = ({
+ globalTheme,
+ presentationStyle,
+ alignment,
+ verticalAlignment,
+ columnCount,
+ image,
+}) => {
+ return `
+
+ ${tilesTwig({
+ site_global__theme: globalTheme,
+ tiles__alignment: alignment,
+ tiles__vertical_alignment: verticalAlignment,
+ tiles__presentation_style: presentationStyle,
+ tiles__grid_count: columnCount,
+ tiles__with__image: image ? 'true' : 'false',
+ ...tilesData,
+ ...imageData.responsive_images['1x1'],
+ })}
+
+ `;
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/tiles.yml b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/tiles.yml
new file mode 100644
index 000000000..6b9c71c52
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/tiles.yml
@@ -0,0 +1,21 @@
+tiles:
+ - tile__item__heading: '$52,300'
+ tile__item__content: 'Card 1 content goes here.'
+ tile__item__theme: 'one'
+ - tile__item__heading: '$100,000'
+ tile__item__content: 'Card 2 content goes here.'
+ tile__item__theme: 'two'
+ - tile__item__heading: '150%'
+ tile__item__content: 'Card 3 content goes here.'
+ tile__item__theme: 'one'
+ tile__item__content_link: 'https://www.yale.edu/'
+ - tile__item__heading: '200%'
+ tile__item__content: 'Card 4 content goes here.'
+ tile__item__theme: 'three'
+ tile__item__content_link: '#'
+ - tile__item__heading: '$3,000'
+ tile__item__content: 'Card 5 content goes here.'
+ tile__item__theme: 'two'
+ - tile__item__heading: '$25,200'
+ tile__item__content: 'Card 6 content goes here.'
+ tile__item__theme: 'one'
diff --git a/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/yds-tiles.twig b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/yds-tiles.twig
new file mode 100644
index 000000000..0a676b53c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/03-organisms/tiles/yds-tiles.twig
@@ -0,0 +1,49 @@
+{#
+ # Available Variables:
+ # - tiles__width
+ # - tiles__presentation_style: 'heading' (default), 'icon', 'text-only'
+ # - tiles__alignment: 'left' (default) or 'right'
+ # - tiles__vertical_alignment: 'top' (default) or 'bottom'
+ # - tiles__theme: 'one' (default), 'two', 'three'
+ # Available Blocks:
+ # - tiles__items
+ #}
+
+{% set tiles__base_class = 'tiles' %}
+
+{% set tiles__width = tiles__width|default('site') %}
+
+{% set tiles__attributes = {
+ 'data-component-width': tiles__width,
+ 'data-component-tile-style': tiles__presentation_style|default('heading'),
+ 'data-component-alignment': tiles__alignment|default('left'),
+ 'data-component-vertical-alignment': tiles__vertical_alignment|default('left'),
+ 'data-component-grid-count': tiles__grid_count|default('three'),
+ 'data-component-tiles-have-images': tiles__with__image|default('false'),
+ 'class': bem(tiles__base_class),
+} %}
+
+
+ {% block prefix_suffix %}
+ {% endblock %}
+
+
+ {% block tiles__items %}
+ {% for tile in tiles %}
+ {# Set tile attributes based on tiles attributes so all tile items within that tiles group are consistent #}
+ {# tiles__theme: 'default' is set to default as the theme is set on the tiles component, we don't want the individual tile to have a bg color #}
+ {% include "@molecules/tile-item/yds-tile-item.twig" with {
+ tile__item__heading: tile.tile__item__heading,
+ tile__item__content: tile.tile__item__content,
+ tile__item__content_link: tile.tile__item__content_link,
+ tile__item__alignment: tiles__alignment,
+ tile__item__presentation_style: tiles__presentation_style,
+ tile__item__theme: tile.tile__item__theme,
+ tile__item__bg_image: tiles__with__image,
+ }
+ %}
+ {% endfor %}
+ {% endblock %}
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/_yds-base.twig b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/_yds-base.twig
new file mode 100644
index 000000000..d426dabe0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/_yds-base.twig
@@ -0,0 +1,42 @@
+{# If layout__attributes is not defined, set it to an empty object by default #}
+{% set layout__attributes = layout__attributes|default({}) %}
+
+{% set layout__attributes = layout__attributes|merge({
+ class: bem('layout-container'),
+}) %}
+
+{% if site_global__theme %}
+ {% set layout__attributes = layout__attributes|merge({
+ 'data-global-theme': site_global__theme,
+ }) %}
+{% endif %}
+
+{% if site_animate_components %}
+ {% set layout__attributes = layout__attributes|merge({
+ 'data-site-animation': site_animate_components,
+ }) %}
+{% endif %}
+
+
+ {# Page Header #}
+ {% block page__header %}
+ {% include "@organisms/site-header/yds-site-header.twig" %}
+ {% endblock %}
+ {# System #}
+ {% block page__system %}{% endblock %}
+ {# Skip link that points to this id is in html.html.twig #}
+
+
+ {# Main Content #}
+ {% block page__content %}
+ {% include "@page-layouts/placeholder/yds-placeholder.twig" with {
+ placeholder: 'Main Content',
+ } %}
+ {% endblock %}
+
+
+ {# Page Footer #}
+ {% block page__footer %}
+ {% include "@organisms/site-footer/yds-site-footer.twig" %}
+ {% endblock %}
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/cl-page-args.js b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/cl-page-args.js
new file mode 100644
index 000000000..0d073a88a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/cl-page-args.js
@@ -0,0 +1,69 @@
+const argTypes = {
+ siteName: {
+ name: 'Site Name',
+ type: 'string',
+ defaultValue: 'Department of Chemistry',
+ },
+ utilityNavLinkContent: {
+ name: 'Header: Utility nav link text',
+ type: 'string',
+ defaultValue: null,
+ },
+ utilityNavSearch: {
+ name: 'Header: Search',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ pageTitle: {
+ name: 'Page Title',
+ type: 'string',
+ defaultValue: 'Davis Team Project Wins Award for Research',
+ },
+ meta: {
+ name: 'Meta',
+ type: 'string',
+ defaultValue: `
By Charlyn Paradis January 25, 2022 `,
+ },
+};
+
+export const eventArgTypes = {
+ startDate: {
+ name: 'Start Date/Time',
+ type: 'string',
+ defaultValue: '2022-04-01T08:00',
+ },
+ endDate: {
+ name: 'End Date/Time',
+ type: 'string',
+ defaultValue: '2022-04-01T11:30',
+ },
+ format: {
+ name: 'Format',
+ control: 'check',
+ options: ['In-person', 'Online'],
+ defaultValue: 'In-person',
+ },
+ address: {
+ name: 'Address',
+ type: 'string',
+ defaultValue:
+ 'Address 1 (Building name)
Address 2
City, ST ZIP | Map',
+ },
+ ctaText: {
+ name: 'CTA Text',
+ type: 'string',
+ defaultValue: 'CTA for event',
+ },
+ allDay: {
+ name: 'All Day',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ pageTitle: {
+ name: 'Page Title',
+ type: 'string',
+ defaultValue: 'Davis Team Project Wins Award for Research',
+ },
+};
+
+export default argTypes;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/page-layouts.scss b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/page-layouts.scss
new file mode 100644
index 000000000..511f23f8a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/page-layouts.scss
@@ -0,0 +1,69 @@
+@use '../00-tokens/tokens';
+
+// @LINK: https://yaleits.atlassian.net/browse/YALB-814
+// @TODO: These two methods of "freezing" the body could probably be
+// consolidated. The menu one could probably add and remove the attribute based
+// on screen size, and then remove the media query here. And the modal active
+// one could probably be refactored to just use the `[data-body-frozen]`
+// attribute.
+
+// "Freeze" the body when a modal is open to prevent background scrolling.
+body[data-modal-active='true'] {
+ overflow: hidden;
+}
+
+// "Freeze" the body on large screens when the mobile menu is open.
+body[data-body-frozen] {
+ @media (max-width: tokens.$break-mobile-max) {
+ overflow: hidden;
+ }
+}
+
+// The first item inside the `.main-content` area should have some space between
+// it and the site header (size-spacing-6 and 9 below) - unless it is designated
+// as `$flush-top` above. Then it will have no top-margin separating it from the
+// site header.
+.main-content > *:first-child {
+ margin-top: var(--main-content-top-margin, var(--size-spacing-6));
+}
+
+.main-content .page-title {
+ margin-top: var(--size-spacing-10); // 4rem
+
+ @media (max-width: tokens.$break-l) {
+ margin-top: var(--size-spacing-8); // 2.5rem large breakpoints
+ }
+
+ @media (max-width: tokens.$break-s) {
+ margin-top: var(--size-spacing-7); // 2rem small breakpoints
+ }
+}
+
+// Subtract to have a negative numbers so that the margin-top of the page
+// title does not affect the spacing when there are breadcrumbs.
+.main-content .breadcrumbs__wrapper {
+ // Subtract 2rem to the 4rem
+ margin-bottom: calc(var(--size-spacing-7) - var(--size-spacing-10));
+
+ // Subtract 1.5rem to the 2.5rem
+ @media (max-width: tokens.$break-l) {
+ margin-bottom: calc(1.5rem - var(--size-spacing-8));
+ }
+
+ // Subtract 1rem to the 2rem
+ @media (max-width: tokens.$break-s) {
+ margin-bottom: calc(var(--size-spacing-5) - var(--size-spacing-7));
+ }
+}
+
+// The last item inside the `.main-content` area should have some space between
+// it and the site footer (size-spacing-12 below) - unless it is designated as
+// `$flush-bottom` above. Then it will have no bottom-margin separating it from
+// the site footer.
+.main-content > *:last-child {
+ margin-bottom: var(--main-content-bottom-margin, var(--size-spacing-13));
+}
+
+body {
+ --site-header-height: 4.8125rem; // 77px / 16
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/page-layouts.stories.js b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/page-layouts.stories.js
new file mode 100644
index 000000000..dcd416f2b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/page-layouts.stories.js
@@ -0,0 +1,43 @@
+import argTypes from './cl-page-args';
+
+import fullWidthTwig from './yds-full-width.twig';
+
+import utilityNavData from '../03-organisms/menu/utility-nav/utility-nav.yml';
+import primaryNavData from '../03-organisms/menu/primary-nav/primary-nav.yml';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Page Layouts/Page Layouts',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes,
+};
+
+export const fullWidth = ({
+ siteName,
+ headerBorderThickness,
+ primaryNavPosition,
+ siteHeaderTheme,
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterTheme,
+ footerBorderThickness,
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+}) =>
+ fullWidthTwig({
+ site_name: siteName,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ utility_nav__items: utilityNavData.items,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ primary_nav__items: primaryNavData.items,
+ menu__variation: menuVariation,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/cl-placeholder.scss b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/cl-placeholder.scss
new file mode 100644
index 000000000..01d5b3a0b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/cl-placeholder.scss
@@ -0,0 +1,23 @@
+.placeholder {
+ border: var(--border-thickness-4) dashed;
+
+ &[data-placeholder-type='component'] {
+ padding: var(--size-spacing-9);
+ }
+
+ &[data-placeholder-type='element'] {
+ padding: var(--size-spacing-2);
+ }
+
+ &__content {
+ width: var(--layout-width-100);
+ display: flex;
+ place-content: var(--layout-flex-position-center);
+ text-align: center;
+ overflow-wrap: anywhere;
+
+ [data-placeholder-type='component'] & {
+ font: var(--font-style-heading-h2-mallory-compact-book);
+ }
+ }
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/placeholder.stories.js b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/placeholder.stories.js
new file mode 100644
index 000000000..98a608402
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/placeholder.stories.js
@@ -0,0 +1,8 @@
+import placeHolderTwig from './yds-placeholder.twig';
+
+/**
+ * Storybook Definition.
+ */
+export default { title: 'Page Layouts/Utility' };
+
+export const placeHolder = () => placeHolderTwig();
diff --git a/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/yds-placeholder.twig b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/yds-placeholder.twig
new file mode 100644
index 000000000..161214f5f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/placeholder/yds-placeholder.twig
@@ -0,0 +1,17 @@
+{#
+ # Available Props:
+ # - placeholder__type: component (default) or element
+ #}
+
+{% set placeholder__base_class = 'placeholder' %}
+
+{% set placeholder__attributes = {
+ class: bem(placeholder__base_class),
+ 'data-placeholder-type': placeholder__type|default('component'),
+} %}
+
+
+
+ {{ placeholder|default('Placeholder') }}
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/yds-full-width.twig b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/yds-full-width.twig
new file mode 100644
index 000000000..dcb4c1384
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/04-page-layouts/yds-full-width.twig
@@ -0,0 +1 @@
+{% extends "@page-layouts/_yds-base.twig" %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/_intro-content-examples.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/_intro-content-examples.twig
new file mode 100644
index 000000000..f9ea3e6b9
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/_intro-content-examples.twig
@@ -0,0 +1,57 @@
+{% if intro_content == 'image' %}
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__width: 'site',
+ content_image__alignment: 'left',
+ }
+ %}
+{% elseif intro_content == 'image--highlight' %}
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__width: 'highlight',
+ content_image__alignment: 'left',
+ } %}
+{% elseif intro_content == 'image--site' %}
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__width: 'site',
+ content_image__alignment: 'left',
+ } %}
+{% elseif intro_content == 'image--content' %}
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__width: 'content',
+ } %}
+{% elseif intro_content == 'wrapped-image' %}
+ {% include "@molecules/wrapped-image/yds-wrapped-image.twig" with {
+ wrapped_image__width: 'site',
+ wrapped_image__alignment: 'left',
+ wrapped_image__content: '
Dr. Davis’s research group at the Kline Chemistry Laboratory uses experiments at multiple scales – in vitro, single cell, and whole organism – to study fundamental and applied problems at the intersection of chemistry, physics, and biology. They develop new quantitative spectroscopic imaging techniques to elucidate the relationship between function and dynamics of proteins and RNA inside living cells.
Caitlin Davis obtained her Ph.D. from Emory University in 2015, where she studied protein folding in the laboratory of Dr. Brian Dyer in the Chemistry Department. She completed her postdoctoral training with Dr. Martin Gruebele at the Center for the Physics of Living Cells at the University of Illinois at Urbana-Champaign, where she developed a method for studying protein thermodynamics and kinetics in differentiated tissues of living zebrafish and she developed a mimic of cytoplasm that can be used to reproduce protein behaviors in vitro. She came to Yale as a faculty member in 2020.
',
+ } %}
+{% elseif intro_content == 'text-with-image--focus-content' %}
+ {% include "@molecules/text-with-image/yds-text-with-image.twig" with {
+ text_with_image__focus: 'content',
+ }%}
+{% elseif intro_content == 'text-with-image--focus-image' %}
+ {% include "@molecules/text-with-image/yds-text-with-image.twig" with {
+ text_with_image__focus: 'image',
+ } %}
+{% elseif intro_content == 'text-with-image--focus-equal' %}
+ {% include "@molecules/text-with-image/yds-text-with-image.twig" with {
+ text_with_image__focus: 'equal',
+ } %}
+{% elseif intro_content == 'collection-featured' %}
+ {% include "@organisms/card-collection/yds-card-collection.twig" with {
+ card_collection__source_type: 'post',
+ card_collection__type: 'grid',
+ card_collection__featured: 'true',
+ card_collection__with_images: 'true',
+ card_collection__cards: [1, 2, 3],
+ animate__item: 'enabled',
+ } %}
+{% elseif intro_content == 'collection-secondary' %}
+ {% include "@organisms/card-collection/yds-card-collection.twig" with {
+ card_collection__source_type: 'post',
+ card_collection__type: 'grid',
+ card_collection__featured: 'false',
+ card_collection__with_images: 'true',
+ card_collection__cards: [1, 2, 3, 4],
+ animate__item: 'enabled',
+ } %}
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/_event-collection--example.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/_event-collection--example.twig
new file mode 100644
index 000000000..62c83e19b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/_event-collection--example.twig
@@ -0,0 +1,47 @@
+{% if variation == 'featured' %}
+ {% include "@organisms/card-collection/yds-card-collection.twig" with {
+ card_collection__source_type: 'event',
+ card_collection__type: 'grid',
+ animate__item: 'enabled',
+ card_collection__cards: [
+ {},
+ {},
+ {},
+ {},
+ {},
+ {},
+ ]
+ } %}
+{% elseif variation == 'secondary' %}
+ {% include "@organisms/card-collection/yds-card-collection.twig" with {
+ card_collection__source_type: 'event',
+ card_collection__type: 'grid',
+ card_collection__featured: 'false',
+ animate__item: 'enabled',
+ card_collection__cards: [
+ {},
+ {},
+ {},
+ {},
+ ]
+ } %}
+{% elseif variation == 'list' %}
+ {% include "@organisms/card-collection/yds-card-collection.twig" with {
+ card_collection__source_type: 'event',
+ card_collection__type: 'list',
+ animate__item: 'enabled',
+ card_collection__cards: [
+ {},
+ {},
+ {},
+ {},
+ {},
+ {},
+ {},
+ {},
+ {},
+ {},
+ ]
+ } %}
+ {% include "@molecules/pager/yds-pager.twig" %}
+{% endif %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-grid.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-grid.twig
new file mode 100644
index 000000000..5de8657e2
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-grid.twig
@@ -0,0 +1,32 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__header %}
+ {% include "@organisms/site-header/yds-site-header.twig" %}
+ {% endblock %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" with {
+ breadcrumbs__items: [
+ {title: 'Home', url: '#'},
+ {title: 'Events', url: '#'},
+ {title: page_title__heading, url: '#', is_active: true},
+ ],
+ } %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
This documentary examines the status of women during the transformation of Afghanistan from a totalitarian Taliban theocracy to a democratic country. It tells a story of Suraya Parlika, an Afghan woman who dared to enter public politics, which is eminently a territory of men. It also contains “black chronicle” of crimes from different provinces of Afghanistan, which was perpetrated by men against not only activists but also against women in their family, wives and daughters. Often just because they were determined to acquire a basic education.
',
+ } %}
+ {% include "@page-examples/events/_event-collection--example.twig" with {
+ variation: 'featured',
+ } %}
+ {% include "@atoms/divider/yds-divider.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
The political arena either on the local or national level is a territory where the presence of active women, despite constitutional guarantees, is considered an oddity. Especially when brave women with unveiled face don’t remain silent, but try to stimulate an open discussion in public space: a discussion on disproportions between the laws and the (in)compliance with them in terms of everyday life, on an open and latent discrimination of women, or on particular crimes of men against the women who try to live their life more dignified.
Part of a trilogy of documentaries by Afghan Director Sahraa Karimi screened from Tuesday 29th to Thursday 31st March, 2022.
',
+ } %}
+ {% include "@atoms/divider/yds-divider.twig" %}
+ {% include "@page-examples/events/_event-collection--example.twig" with {
+ variation: 'secondary',
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-list.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-list.twig
new file mode 100644
index 000000000..c8d06bd88
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-list.twig
@@ -0,0 +1,22 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__header %}
+ {% include "@organisms/site-header/yds-site-header.twig" %}
+ {% endblock %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" with {
+ breadcrumbs__items: [
+ {title: 'Home', url: '#'},
+ {title: 'Events', url: '#'},
+ {title: page_title__heading, url: '#', is_active: true},
+ ],
+ } %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
This documentary examines the status of women during the transformation of Afghanistan from a totalitarian Taliban theocracy to a democratic country. It tells a story of Suraya Parlika, an Afghan woman who dared to enter public politics, which is eminently a territory of men. It also contains “black chronicle” of crimes from different provinces of Afghanistan, which was perpetrated by men against not only activists but also against women in their family, wives and daughters. Often just because they were determined to acquire a basic education.
',
+ } %}
+ {% include "@page-examples/events/_event-collection--example.twig" with {
+ variation: 'list',
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-page.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-page.twig
new file mode 100644
index 000000000..7a80706e3
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/event-page.twig
@@ -0,0 +1,49 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__header %}
+ {% include "@organisms/site-header/yds-site-header.twig" %}
+ {% endblock %}
+ {% block page__content %}
+ {% if show_breadcrumbs %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" with {
+ breadcrumbs__items: [
+ {title: 'Home', url: '#'},
+ {title: 'Events', url: '#'},
+ {title: page_title__heading, url: '#', is_active: true},
+ ],
+ } %}
+ {% endif %}
+
+ {% include "@molecules/meta/event-meta/yds-event-meta.twig" %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__width: 'content',
+ text_field__alignment: 'center',
+ text_field__content: '
This documentary examines the status of women during the transformation of Afghanistan from a totalitarian Taliban theocracy to a democratic country. It tells a story of Suraya Parlika, an Afghan woman who dared to enter public politics, which is eminently a territory of men. It also contains “black chronicle” of crimes from different provinces of Afghanistan, which was perpetrated by men against not only activists but also against women in their family, wives and daughters. Often just because they were determined to acquire a basic education.
',
+ } %}
+ {% include "@molecules/image/yds-content-image.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__width: 'content',
+ text_field__alignment: 'center',
+ text_field__content: '
The political arena either on the local or national level is a territory where the presence of active women, despite constitutional guarantees, is considered an oddity. Especially when brave women with unveiled face don’t remain silent, but try to stimulate an open discussion in public space: a discussion on disproportions between the laws and the (in)compliance with them in terms of everyday life, on an open and latent discrimination of women, or on particular crimes of men against the women who try to live their life more dignified.
Part of a trilogy of documentaries by Afghan Director Sahraa Karimi screened from Tuesday 29th to Thursday 31st March, 2022.
',
+ } %}
+ {% include "@atoms/divider/yds-divider.twig" with {
+ divider__component_width: 'content',
+ animate__item: 'enabled',
+ }%}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__width: 'content',
+ text_field__alignment: 'center',
+ text_field__content: '
+
Speaker
+
Dr. Sarhaa Karimi, filmmaker
+
Sahraa Karimi is an Afghan film director and the first woman to head the Afghan Film Organization (Afghan Film). She has directed 30 short films, 3 documentary features and one fiction film “Hava, Maryam, Ayesha (2019), which had the world premiere at the 76th Venice Film Festival in the same year. Her documentary Afghan Women Behind the Wheel (2009) received some twenty awards from film festivals around the world. Karimi has a PhD from the Film and Television Faculty of the Academy of Music and Performing Arts in Bratislava, Slovakia. After graduating, she returned to Afghanistan and helped open Kapila Multimedia House to promote independent Afghan filmmakers. She fled Afghanistan during the 2021 fall of Kabul.
+
Moderator
+
Charlie Musser, Professor of American Studies, Film & Media Studies, and Theater Studies.
+
Sponsors
+
The Poynter Fellowship in Journalism; The Public Humanities Program at Yale, The Program on Refugees, Forced Displacement, and Humanitarian Responses (PRFDHR); The Council on Middle Eastern Studies (CMES), Timothy Dwight College, The Beinecke Library, The Center for Collaborative Arts and Media (CCAM); The Film and Media Studies Program, Yale University.
+
Contact
+
Program on Refugees, Forced Displacement, and Humanitarian Responses
+
refugees@yale.edu
+ ',
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/events.stories.js b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/events.stories.js
new file mode 100644
index 000000000..f0a6b8a47
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/events/events.stories.js
@@ -0,0 +1,247 @@
+// Shared Storybook args.
+import argTypes, { eventArgTypes } from '../../04-page-layouts/cl-page-args';
+
+// Twig files.
+import eventPageTwig from './event-page.twig';
+import eventGridPageTwig from './event-grid.twig';
+import eventListPageTwig from './event-list.twig';
+
+// Data files.
+import utilityNavData from '../../03-organisms/menu/utility-nav/utility-nav.yml';
+import primaryNavData from '../../03-organisms/menu/primary-nav/primary-nav.yml';
+import breadcrumbData from '../../03-organisms/menu/breadcrumbs/breadcrumbs.yml';
+import imageData from '../../01-atoms/images/image/image.yml';
+import pagerData from '../../02-molecules/pager/pager-last.yml';
+import socialLinksData from '../../02-molecules/social-links/social-links.yml';
+
+// JavaScript.
+import '../../00-tokens/layout/yds-layout';
+
+// Utility to convert dates to unix timestamps
+const toUnixTimeStamp = (date) => {
+ return Math.floor(Date.parse(date) / 1000);
+};
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Page Examples/Events',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ ...argTypes,
+ ...eventArgTypes,
+ eventPageTitle: {
+ name: 'Page Title',
+ type: 'string',
+ defaultValue:
+ 'Parlika (2016) film screening + Q&A with film director Sahraa Karimi',
+ },
+ showBreadcrumbs: {
+ name: 'Breadcrumbs',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ },
+};
+
+export const EventPage = ({
+ siteName,
+ eventPageTitle,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+ startDate,
+ endDate,
+ format,
+ address,
+ ctaText,
+ showBreadcrumbs,
+}) =>
+ eventPageTwig({
+ site_name: siteName,
+ event_title__heading: eventPageTitle,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__variation: siteFooterVariation,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ ...imageData.responsive_images['4x3'],
+ event_meta__date_start: toUnixTimeStamp(startDate),
+ event_meta__date_end: toUnixTimeStamp(endDate),
+ event_meta__format: format,
+ event_meta__address: address,
+ event_meta__cta_primary__content: ctaText,
+ event_meta__cta_primary__href: '#',
+ event_meta__cta_secondary__content: 'Add to calendar',
+ event_meta__cta_secondary__href: '#',
+ ...socialLinksData,
+ show_breadcrumbs: showBreadcrumbs,
+ });
+EventPage.argTypes = {
+ pageTitle: {
+ table: {
+ disable: true,
+ },
+ },
+ meta: {
+ table: {
+ disable: true,
+ },
+ },
+};
+
+export const EventGrid = ({
+ siteName,
+ pageTitle,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+}) =>
+ eventGridPageTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: null,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ ...imageData.responsive_images['3x2'],
+ reference_card__heading:
+ 'BINYA! A celebration of the legacy of Binyavanga Wainaina at Yale',
+ reference_card__snippet:
+ 'A panel celebrating the legacy of author Binyavanga Wainaina.',
+ reference_card__url: 'https://google.com',
+ reference_card__date: '2022-03-30 13:00',
+ format: 'Online',
+ ...socialLinksData,
+ });
+EventGrid.argTypes = {
+ meta: {
+ table: {
+ disable: true,
+ },
+ },
+};
+
+export const EventList = ({
+ siteName,
+ pageTitle,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+}) =>
+ eventListPageTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: null,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ ...imageData.responsive_images['3x2'],
+ reference_card__heading:
+ 'BINYA! A celebration of the legacy of Binyavanga Wainaina at Yale',
+ reference_card__snippet:
+ 'A panel celebrating the legacy of author Binyavanga Wainaina.',
+ reference_card__url: '#',
+ reference_card__date: '2022-03-30 13:00',
+ format: 'Online',
+ ...pagerData,
+ ...socialLinksData,
+ });
+EventList.argTypes = {
+ meta: {
+ table: {
+ disable: true,
+ },
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/accordion-page.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/accordion-page.twig
new file mode 100644
index 000000000..0b46717c3
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/accordion-page.twig
@@ -0,0 +1,64 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__header %}
+ {% include "@molecules/alert/yds-alert.twig" %}
+ {% include "@organisms/site-header/yds-site-header.twig" %}
+ {% endblock %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+ {% include "@molecules/accordion/yds-accordion.twig" with {
+ accordion__alignment: 'left',
+ accordion__width: 'site',
+ accordion__items: [
+ {
+ accordion__item__heading: accordion__item__heading,
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Books',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Courses',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Events',
+ accordion__item__content: accordion__item__content
+ },
+ ]
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
The undergraduate program in Chemistry at Yale reflects the position of chemistry as the foundation of all the molecular sciences. Students are equipped with the technical skills to appreciate the scientific basis for previous discoveries and develop the fundamental expertise required to make future breakthroughs. Under the tutelage of world-leading researchers, students are exposed to a broad range of topics in chemistry. The development of technical skills through lecture classes is complemented with hands-on experience in state-of-the-art chemistry laboratories.
Many students also perform independent laboratory research under the guidance of a faculty mentor. This rigorous training prepares students for professional careers in a diverse array of fields by teaching them how to apply the scientific method, providing them with skills in quantitative reasoning, and exposing them to scientific research.
After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
',
+ } %}
+ {% include "@molecules/accordion/yds-accordion.twig" with {
+ accordion__alignment: 'left',
+ accordion__width: 'site',
+ accordion__heading: 'Another Accordion Group',
+ accordion__items: [
+ {
+ accordion__item__heading: 'Catalog',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Admissions',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Financial Aid',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Application Process',
+ accordion__item__content: accordion__item__content
+ },
+ ]
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/miscellaneous-page.stories.js b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/miscellaneous-page.stories.js
new file mode 100644
index 000000000..62da9a5ee
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/miscellaneous-page.stories.js
@@ -0,0 +1,127 @@
+// Shared Storybook args.
+import argTypes from '../../04-page-layouts/cl-page-args';
+
+// Twig files.
+import accordionPageTwig from './accordion-page.twig';
+import qualtricsPageTwig from './qualtrics-embed.twig';
+
+// Data files.
+import utilityNavData from '../../03-organisms/menu/utility-nav/utility-nav.yml';
+import primaryNavData from '../../03-organisms/menu/primary-nav/primary-nav.yml';
+import breadcrumbData from '../../03-organisms/menu/breadcrumbs/breadcrumbs.yml';
+import imageData from '../../01-atoms/images/image/image.yml';
+import textWithImageData from '../../02-molecules/text-with-image/text-with-image.yml';
+import accordionData from '../../02-molecules/accordion/accordion.yml';
+import alertData from '../../02-molecules/alert/alert.yml';
+import socialLinksData from '../../02-molecules/social-links/social-links.yml';
+
+// JavaScript.
+import '../../00-tokens/layout/yds-layout';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Page Examples/Miscellaneous',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes,
+};
+
+export const AccordionPage = ({
+ siteName,
+ pageTitle,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+}) =>
+ accordionPageTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: null,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ ...imageData.responsive_images['16x9'],
+ ...textWithImageData,
+ ...accordionData,
+ ...alertData,
+ ...socialLinksData,
+ });
+
+export const QualtricsPage = ({
+ siteName,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+}) =>
+ qualtricsPageTwig({
+ site_name: siteName,
+ page_title__heading: 'Example Page with a Qualtrics form',
+ page_title__meta: null,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ ...socialLinksData,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/qualtrics-embed.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/qualtrics-embed.twig
new file mode 100644
index 000000000..dfa7713c7
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/miscellaneous/qualtrics-embed.twig
@@ -0,0 +1,13 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__header %}
+ {% include "@molecules/alert/yds-alert.twig" %}
+ {% include "@organisms/site-header/yds-site-header.twig" %}
+ {% endblock %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% include "@molecules/embed/yds-embed.twig" with {
+ embed__src: 'https://yalesurvey.ca1.qualtrics.com/jfe/form/SV_cDezt2JVsNok77o',
+ embed__title: 'Example Qualtics Form',
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post-article.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post-article.twig
new file mode 100644
index 000000000..ecf02484f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post-article.twig
@@ -0,0 +1,86 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__header %}
+ {% include "@organisms/site-header/yds-site-header.twig" %}
+ {% endblock %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" with {
+ breadcrumbs__items: [
+ {title: 'Home', url: '#'},
+ {title: 'Chem Post', url: '#'},
+ {title: page_title__heading, url: '#', is_active: true},
+ ],
+ } %}
+ {% include "@molecules/page-title/yds-page-title.twig" with {
+ page_title__width: 'content',
+ }%}
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__width: 'content',
+ content_image__alignment: 'center',
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__width: 'content',
+ text_field__alignment: 'center',
+ text_field__content: '
Caitlin Davis, assistant professor of chemistry, has received a 2021 Scialog Collaborative Innovation Award to pursue research into the structure and function of enzyme filaments that regulate cell metabolism. Understanding cell processes is important as their alteration instigates the growth and spread of disease inside the body.
The award, from the Research Corporation for Science Advancement (RCSA) and the Gordon and Betty Moore Foundation, is part of RCSA’s Scialog Chemical Machinery of the Cell initiative to advance the fundamental understanding of chemical machinery and reactions in the intact cell. Teams of early career researchers who had not previously collaborated competed for seed funding for high-risk, high-reward projects to pursue novel lines of research.
',
+ } %}
+ {% include "@molecules/image/yds-content-image.twig" with {
+ image__srcset: image__srcset__1,
+ image__sizes: image__sizes__1,
+ image__alt: image__alt__1,
+ image__src: image__src__1,
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__width: 'content',
+ text_field__alignment: 'center',
+ text_field__content: '
Davis and her teammate Lars Plate, assistant professor of chemistry and biological sciences at Vanderbilt University, were two of 21 researchers to receive the award. They will work together on their project, “ Structure-Function of Enzyme Filaments: Regulators of Cell Metabolism in Space and Time.”
',
+ } %}
+ {% include "@molecules/pull-quote/yds-pull-quote.twig" with {
+ animate__item: 'enabled',
+ pull_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__width: 'content',
+ text_field__alignment: 'center',
+ text_field__content: '
“Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells,” said Davis. “Unraveling these interactions will improve disease diagnoses and therapies that target metabolic networks in developmental disorders, premature aging, and cancers.
The overarching challenge of this research is that the relationship between molecular filament structures at the nanoscale and cellular self-assembly at the microscale remains largely unknown. Adding to the difficulty is that experimental tools do not currently exist to characterize filaments inside cells with high structural specificity or to quantify the effect of filamentation on enzyme function.
“The problem is a lot of imaging research that’s done uses fluorescent proteins or fluorescent molecules to tag the protein that you’re looking at, and anything that you do to perturb the protein can affect what’s going on inside cells,” said Davis. “So, if you add a tag onto it, then you’re changing the environment.”
This is where the expertise of Davis and Plate come together. The Plate lab will provide proficiency in chemical biology and proteomics methods to map the dynamics of protein interactions during the metabolon assembly, while the Davis lab will contribute the infrared imaging to monitor structural changes in live cells.
Davis explained by using infrared spectroscopy, which is a label-free approach and therefore minimally invasive, researchers can see what’s going on with proteins without changing anything inside the cell. Lars is designing a very small tag to use in the infrared to attract the protein and prove that it is the protein interest.
The team hypothesizes that cells form distinct types of filaments, activated and inhibited, with unique structures that fine-tune metabolic activity. What’s new about their approach is they will study protein structures by infrared microscopy rather than fluorescence microscopy. They expect these images to reveal a new localized layer of cellular metabolism that could be used to re-engineer metabolic processes. In the future, these complementary time-resolved imaging and cross-linking approaches could be extended to biological studies of macromolecular assemblies and phase-separated membraneless organelles that have been historically difficult to study.
',
+ } %}
+ {% include "@molecules/wrapped-image/yds-wrapped-image.twig" with {
+ wrapped_image__content: '
Dr. Davis’s research group at the Kline Chemistry Laboratory uses experiments at multiple scales – in vitro, single cell, and whole organism – to study fundamental and applied problems at the intersection of chemistry, physics, and biology. They develop new quantitative spectroscopic imaging techniques to elucidate the relationship between function and dynamics of proteins and RNA inside living cells.
Caitlin Davis obtained her Ph.D. from Emory University in 2015, where she studied protein folding in the laboratory of Dr. Brian Dyer in the Chemistry Department. She completed her postdoctoral training with Dr. Martin Gruebele at the Center for the Physics of Living Cells at the University of Illinois at Urbana-Champaign, where she developed a method for studying protein thermodynamics and kinetics in differentiated tissues of living zebrafish and she developed a mimic of cytoplasm that can be used to reproduce protein behaviors in vitro. She came to Yale as a faculty member in 2020.
',
+ wrapped_image__caption: '
This is a random image. Doesn\'t it look great?
',
+ image__srcset: image__srcset__wrapped,
+ image__sizes: image__sizes__wrapped,
+ image__alt: image__alt__wrapped,
+ image__src: image__src__wrapped,
+ wrapped_image__width: 'content',
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__width: 'content',
+ text_field__alignment: 'center',
+ text_field__content: '
Research Corporation for Science Advancement is a private foundation that funds basic research in the physical sciences (astronomy, chemistry, physics, and related fields) at colleges and universities through its Cottrell Scholar and Scialog programs.
The Gordon and Betty Moore Foundation fosters pathbreaking scientific discovery, environmental conservation, patient care improvements, and preservation of the special character of the San Francisco Bay Area.
Learn more about the Davis Lab .
',
+ } %}
+
+ {% include "@organisms/card-collection/yds-card-collection.twig" with {
+ card_collection__source_type: 'events',
+ card_collection__type: 'grid',
+ card_collection__width: 'content',
+ animate__item: 'enabled',
+ card_collection__cards:[
+ {
+ reference_card__date: '2022-03-30 13:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.",
+ reference_card__url: '#',
+ },
+ {
+ reference_card__date: '2022-03-30 13:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.",
+ reference_card__url: '#',
+ },
+ {
+ reference_card__date: '2022-03-30 13:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.",
+ reference_card__url: '#',
+ },
+ ]
+ }%}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post-grid.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post-grid.twig
new file mode 100644
index 000000000..1335c60ad
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post-grid.twig
@@ -0,0 +1,64 @@
+
+
+
+
Post Card Grid Heading - Static HTML grid of cards
+
+
+
+
+ March 30, 2022
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Eu ultrices vitae auctor eu augue. Gravida arcu ac tortor dignissim convallis. Sapien pellentesque habitant morbi tristique senectus et. Tincidunt augue interdum velit euismod in pellentesque. Et netus et malesuada fames ac turpis. Purus gravida quis blandit turpis cursus in hac habitasse. Amet tellus cras adipiscing enim eu turpis egestas.
+
+
+
+
+
+
+
+
+
+ March 30, 2022
+
+
+
+
+ Et malesuada fames ac turpis egestas. Velit ut tortor pretium viverra suspendisse potenti nullam. Quis ipsum suspendisse ultrices gravida dictum fusce ut placerat orci.
+
+
+
+
+
+
+
+
+
+ March 30, 2022
+
+
+
+ Purus in mollis nunc sed id semper. Neque laoreet suspendisse interdum consectetur libero. Nibh venenatis cras sed felis. Volutpat diam ut venenatis tellus in metus vulputate eu scelerisque. Neque viverra justo nec ultrices dui sapien eget mi. Tempor orci dapibus ultrices in. Volutpat odio facilisis mauris sit amet massa vitae tortor.
+
+
+
+
+
+
+
+
+
+
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post.stories.js b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post.stories.js
new file mode 100644
index 000000000..563fccb2b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/post/post.stories.js
@@ -0,0 +1,93 @@
+// Shared Storybook args.
+import argTypes from '../../04-page-layouts/cl-page-args';
+
+// Twig files.
+import postArticleTwig from './post-article.twig';
+import postGridTwig from './post-grid.twig';
+
+// Data files.
+import utilityNavData from '../../03-organisms/menu/utility-nav/utility-nav.yml';
+import primaryNavData from '../../03-organisms/menu/primary-nav/primary-nav.yml';
+import breadcrumbData from '../../03-organisms/menu/breadcrumbs/breadcrumbs.yml';
+import imageData from '../../01-atoms/images/image/image.yml';
+import socialLinksData from '../../02-molecules/social-links/social-links.yml';
+import referenceCardData from '../../02-molecules/cards/reference-card/examples/post-card.yml';
+
+// JavaScript.
+import '../../00-tokens/layout/yds-layout';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Page Examples/Post',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes,
+};
+
+export const PostArticle = ({
+ siteName,
+ pageTitle,
+ meta,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+}) =>
+ postArticleTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: meta,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ ...imageData.responsive_images['16x9'],
+ image__srcset__1: imageData.responsive_images['4x3'].image__srcset,
+ image__sizes__1: imageData.responsive_images['4x3'].image__sizes,
+ image__alt__1: imageData.responsive_images['4x3'].image__alt,
+ image__src__1: imageData.responsive_images['4x3'].image__src,
+ image__srcset__wrapped: imageData.responsive_images['3x2'].image__srcset,
+ image__sizes__wrapped: imageData.responsive_images['3x2'].image__sizes,
+ image__alt__wrapped: imageData.responsive_images['3x2'].image__alt,
+ image__src__wrapped: imageData.responsive_images['3x2'].image__src,
+ ...socialLinksData,
+ ...referenceCardData,
+ });
+
+export const postGridCustom = ({
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+}) =>
+ postGridTwig({
+ site_animate_components: allowAnimatedItems,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/profiles/profile.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/profiles/profile.twig
new file mode 100644
index 000000000..302fe6bb1
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/profiles/profile.twig
@@ -0,0 +1,154 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+{% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+
+{% if profile_meta__image_orientation == 'portrait' %}
+ {% include "@molecules/meta/profile-meta/yds-profile-meta.twig" with {
+ profile_meta__heading: 'Person Namerton',
+ profile_meta__title_line: 'Profile Title',
+ profile_meta__subtitle_line: 'Profile Subtitle',
+ profile_meta__department: 'Department name',
+ profile_meta__image_orientation: profile_meta__image_orientation,
+ profile_meta__image_alignment: profile_meta__image_alignment,
+ profile_meta__image_style: profile_meta__image_style,
+ image__srcset: image__srcset__1,
+ image__sizes: image__sizes__1,
+ image__alt: image__alt__1,
+ image__src: image__src__1,
+ } %}
+ {% else %}
+ {% include "@molecules/meta/profile-meta/yds-profile-meta.twig" with {
+ profile_meta__heading: 'Person Namerton',
+ profile_meta__title_line: 'Profile Title',
+ profile_meta__subtitle_line: 'Profile Subtitle',
+ profile_meta__department: 'Department name',
+ profile_meta__image_orientation: profile_meta__image_orientation,
+ profile_meta__image_alignment: profile_meta__image_alignment,
+ profile_meta__image_style: profile_meta__image_style,
+ } %}
+{% endif %}
+ {% embed "@organisms/layout/two-column/yds-two-column.twig" %}
+ {% block two_column__primary %}
+ {# -- text, image, video, quote, button link, divider, accordion, tabs #}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sit amet consectetur adipiscing elit duis tristique sollicitudin nibh sit. Convallis convallis tellus id interdum velit laoreet id donec. Feugiat in ante metus dictum at. Massa eget egestas purus viverra accumsan in nisl nisi. Sed tempus urna et pharetra. Non nisi est sit amet. Leo urna molestie at elementum eu facilisis sed odio morbi. Sollicitudin aliquam ultrices sagittis orci a scelerisque purus semper eget. Pharetra massa massa ultricies mi. Elementum curabitur vitae nunc sed velit dignissim sodales ut. Semper feugiat nibh sed pulvinar. Scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. Id interdum velit laoreet id donec ultrices tincidunt arcu non. Mollis nunc sed id semper risus in. Placerat in egestas erat imperdiet sed. Tempor commodo ullamcorper a lacus vestibulum sed arcu non odio. In eu mi bibendum neque. Sit amet venenatis urna cursus eget nunc scelerisque.
',
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sit amet consectetur adipiscing elit duis tristique sollicitudin nibh sit. Convallis convallis tellus id interdum velit laoreet id donec. Feugiat in ante metus dictum at. Massa eget egestas purus viverra accumsan in nisl nisi. Sed tempus urna et pharetra. Non nisi est sit amet. Leo urna molestie at elementum eu facilisis sed odio morbi. Sollicitudin aliquam ultrices sagittis orci a scelerisque purus semper eget. Pharetra massa massa ultricies mi. Elementum curabitur vitae nunc sed velit dignissim sodales ut. Semper feugiat nibh sed pulvinar. Scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. Id interdum velit laoreet id donec ultrices tincidunt arcu non. Mollis nunc sed id semper risus in. Placerat in egestas erat imperdiet sed. Tempor commodo ullamcorper a lacus vestibulum sed arcu non odio. In eu mi bibendum neque. Sit amet venenatis urna cursus eget nunc scelerisque.
',
+ } %}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ animate__item: 'enabled',
+ }%}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
Section Heading Sit amet consectetur adipiscing elit duis tristique sollicitudin nibh sit. Convallis convallis tellus id interdum velit laoreet id donec. Feugiat in ante metus dictum at. Massa eget egestas purus viverra accumsan in nisl nisi. Sed tempus urna et pharetra. Non nisi est sit amet. Leo urna molestie at elementum eu facilisis sed odio morbi. Sollicitudin aliquam ultrices sagittis orci a scelerisque purus semper eget. Pharetra massa massa ultricies mi. Elementum curabitur vitae nunc sed velit dignissim sodales ut. Semper feugiat nibh sed pulvinar. Scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. Id interdum velit laoreet id donec ultrices tincidunt arcu non. Mollis nunc sed id semper risus in. Placerat in egestas erat imperdiet sed. Tempor commodo ullamcorper a lacus vestibulum sed arcu non odio. In eu mi bibendum neque. Sit amet venenatis urna cursus eget nunc scelerisque.
',
+ } %}
+
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: 'Button link',
+ cta__href: 'javascript:;',
+ cta__blockname: callout__base_class,
+ cta__component_theme: 'one',
+ } %}
+
+ {% include "@molecules/pull-quote/yds-pull-quote.twig" with {
+ animate__item: 'enabled',
+ pull_quote__alignment: 'left',
+ pull_quote__width: 'site',
+ pull_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ animate__item: 'enabled',
+ }%}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
Section Heading Feugiat in ante metus dictum at. Massa eget egestas purus viverra accumsan in nisl nisi. Sed tempus urna et pharetra. Non nisi est sit amet. Leo urna molestie at elementum eu facilisis sed odio morbi. Sollicitudin aliquam ultrices sagittis orci a scelerisque purus semper eget. Pharetra massa massa ultricies mi. Elementum curabitur vitae nunc sed velit dignissim sodales ut. Semper feugiat nibh sed pulvinar. Scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. Id interdum velit laoreet id donec ultrices tincidunt arcu non. Mollis nunc sed id semper risus in. Placerat in egestas erat imperdiet sed. Tempor commodo ullamcorper a lacus vestibulum sed arcu non odio. In eu mi bibendum neque. Sit amet venenatis urna cursus eget nunc scelerisque.
',
+ } %}
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ } %}
+ {% block component_wrapper_inner %}
+ {% include "@molecules/tabs/yds-tabs.twig" %}
+ {% endblock %}
+ {% endembed %}
+
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
Section Heading Feugiat in ante metus dictum at. Massa eget egestas purus viverra accumsan in nisl nisi. Sed tempus urna et pharetra. Non nisi est sit amet. Leo urna molestie at elementum eu facilisis sed odio morbi. Sollicitudin aliquam ultrices sagittis orci a scelerisque purus semper eget. Pharetra massa massa ultricies mi. Elementum curabitur vitae nunc sed velit dignissim sodales ut. Semper feugiat nibh sed pulvinar. Scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. Id interdum velit laoreet id donec ultrices tincidunt arcu non. Mollis nunc sed id semper risus in. Placerat in egestas erat imperdiet sed. Tempor commodo ullamcorper a lacus vestibulum sed arcu non odio. In eu mi bibendum neque. Sit amet venenatis urna cursus eget nunc scelerisque.
',
+ } %}
+
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__width:'site',
+ content_image__alignment: 'left',
+ }%}
+
+ {% include "@molecules/accordion/yds-accordion.twig" with {
+ accordion__heading: 'Accordion Group - left align',
+ accordion__width: 'site',
+ accordion__alignment: 'left',
+ accordion__items: [
+ {
+ accordion__item__heading: accordion__item__heading,
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Books',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Courses',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Events',
+ accordion__item__content: accordion__item__content
+ },
+ ]
+ } %}
+ {% endblock %}
+
+ {% block two_column__secondary %}
+
+ {% embed "@organisms/block-wrapper/yds-block-wrapper.twig" with {
+ block_wrapper__label: 'Contact Info',
+ block_wrapper__heading__level: 3,
+ }%}
+ {% block block_wrapper__inner %}
+ {% include "@atoms/controls/text-copy-button/yds-text-copy-button.twig" with {
+ text_copy_button__pre_text: 'person.name@yale.edu',
+ text_copy_button__content: '(copy)',
+ text_copy_button__extra_class: ['copy-trigger'],
+ } %}
+
+ {% include "@atoms/controls/text-link/yds-text-link.twig" with {
+ link__content: '(203) 593-0486',
+ link__url: 'tel:(203) 593-0486',
+ link__style: ['no-underline'],
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
Building Name, Room 120
Street Name
City, ST 86753',
+ } %}
+ {% endblock %}
+
+ {% endembed %}
+
+ {% embed "@organisms/block-wrapper/yds-block-wrapper.twig" with {
+ block_wrapper__label: 'Section Heading',
+ block_wrapper__heading__level: 3,
+ }%}
+ {% block block_wrapper__inner %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
Lorem ipsum dolor sit amet, consectetur adipiscing elit Feugiat in ante metus dictum Massa eget egestas purus viverra accumsan in nisl nisi Sed tempus urna et pharetra ',
+ } %}
+ {% endblock %}
+ {% endembed %}
+
+ {% endblock %}
+ {% endembed %}
+
+{% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/profiles/profiles.stories.js b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/profiles/profiles.stories.js
new file mode 100644
index 000000000..b729805a5
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/profiles/profiles.stories.js
@@ -0,0 +1,112 @@
+// Shared Storybook args.
+import argTypes from '../../04-page-layouts/cl-page-args';
+
+// Twig files.
+import profilePageTwig from './profile.twig';
+
+// Data files.
+import utilityNavData from '../../03-organisms/menu/utility-nav/utility-nav.yml';
+import primaryNavData from '../../03-organisms/menu/primary-nav/primary-nav.yml';
+import breadcrumbData from '../../03-organisms/menu/breadcrumbs/breadcrumbs.yml';
+import imageData from '../../01-atoms/images/image/image.yml';
+import textWithImageData from '../../02-molecules/text-with-image/text-with-image.yml';
+import referenceCardData from '../../02-molecules/cards/reference-card/examples/post-card.yml';
+import socialLinksData from '../../02-molecules/social-links/social-links.yml';
+import videoData from '../../02-molecules/video/video.yml';
+import accordionData from '../../02-molecules/accordion/accordion.yml';
+import tabData from '../../02-molecules/tabs/tabs.yml';
+
+// JavaScript.
+import '../../00-tokens/layout/yds-layout';
+import '../../01-atoms/controls/text-link/yds-text-link';
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Page Examples/Profiles',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ ...argTypes,
+ profileImageOrientation: {
+ name: 'Profile Image Orientation',
+ type: 'select',
+ options: ['landscape', 'portrait'],
+ defaultValue: 'landscape',
+ },
+ profileImageAlignment: {
+ name: 'Profile Image Alignment',
+ type: 'select',
+ options: ['left', 'right'],
+ defaultValue: 'right',
+ },
+ profileImageStyle: {
+ name: 'Profile Image Style',
+ type: 'select',
+ options: ['inline', 'outdent'],
+ defaultValue: 'inline',
+ },
+ },
+};
+
+export const ProfilePage = ({
+ siteName,
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+ profileImageOrientation,
+ profileImageAlignment,
+ profileImageStyle,
+}) =>
+ profilePageTwig({
+ site_name: siteName,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ profile_meta__image_orientation: profileImageOrientation,
+ profile_meta__image_style: profileImageStyle,
+ profile_meta__image_alignment: profileImageAlignment,
+ ...imageData.responsive_images['3x2'],
+ image__srcset__1: imageData.responsive_images['2x3'].image__srcset,
+ image__sizes__1: imageData.responsive_images['2x3'].image__sizes,
+ image__alt__1: imageData.responsive_images['2x3'].image__alt,
+ image__src__1: imageData.responsive_images['2x3'].image__src,
+ ...textWithImageData,
+ ...referenceCardData,
+ ...socialLinksData,
+ ...videoData,
+ ...accordionData,
+ ...tabData,
+ });
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-short.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-short.twig
new file mode 100644
index 000000000..b722f4e0f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-short.twig
@@ -0,0 +1,11 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+{% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% include "@page-examples/_intro-content-examples.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+
+{% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-spotlights.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-spotlights.twig
new file mode 100644
index 000000000..57be86a9b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-spotlights.twig
@@ -0,0 +1,150 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Headings in the same Text Block
+
Bacon ipsum dolor amet t-bone shankle rump corned beef. Buffalo tri-tip pork belly meatball andouille shoulder. Sausage cow capicola, boudin venison drumstick kielbasa hamburger short loin. Brisket pancetta kielbasa, pastrami picanha short loin alcatra ribeye pig burgdoggen andouille pork chop fatback. Buffalo turducken burgdoggen bresaola, chuck landjaeger biltong hamburger shank andouille. Shank kevin jowl, picanha venison doner sirloin boudin. Shank brisket boudin flank hamburger drumstick turducken tri-tip corned beef t-bone pancetta spare ribs.
+
Heading 3
+
Bacon ipsum dolor amet t-bone shankle rump corned beef. Buffalo tri-tip pork belly meatball andouille shoulder. Sausage cow capicola, boudin venison drumstick kielbasa hamburger short loin. Brisket pancetta kielbasa, pastrami picanha short loin alcatra ribeye pig burgdoggen andouille pork chop fatback.
+
Heading 4
+
Shank kevin jowl, picanha venison doner sirloin boudin. Shank brisket boudin flank hamburger drumstick turducken tri-tip corned beef t-bone pancetta spare ribs.
+
Another H2
+
Buffalo turducken burgdoggen bresaola, chuck landjaeger biltong hamburger shank andouille. Shank kevin jowl, picanha venison doner sirloin boudin. Shank brisket boudin flank hamburger drumstick turducken tri-tip corned beef t-bone pancetta spare ribs.
+ '
+ } %}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'inline',
+ content_spotlight_portrait__theme: 'one',
+ }%}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'inline',
+ content_spotlight_portrait__position: 'image-right',
+ content_spotlight_portrait__theme: 'two',
+ }%}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'offset',
+ content_spotlight_portrait__theme: 'one',
+ }%}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'offset',
+ content_spotlight_portrait__position: 'image-right',
+ content_spotlight_portrait__theme: 'two',
+ }%}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'offset',
+ content_spotlight_portrait__position: 'image-left',
+ content_spotlight_portrait__theme: 'default',
+ }%}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'offset',
+ content_spotlight_portrait__position: 'image-right',
+ content_spotlight_portrait__theme: 'default',
+ }%}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'inline',
+ content_spotlight_portrait__position: 'image-left',
+ content_spotlight_portrait__theme: 'default',
+ }%}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'inline',
+ content_spotlight_portrait__position: 'image-right',
+ content_spotlight_portrait__theme: 'default',
+ }%}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'inline',
+ content_spotlight_portrait__position: 'image-left',
+ content_spotlight_portrait__theme: 'one',
+ }%}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
New Text Block
+
People will want to chunk out text content by sections, often kicking off with a heading, to make it easier to maintain. E.g. rearranging sections of the page, dropping in CTAs, etc. The spacing isn’t the same using this approach, though.
+ '
+ }%}
+
+ {% include "@molecules/wrapped-image/yds-wrapped-image.twig" with {
+ wrapped_image__width: 'site',
+ wrapped_image__alignment: 'right',
+ wrapped_image__content: '
Heading 3 Dr. Davis’s research group at the Kline Chemistry Laboratory uses experiments at multiple scales – in vitro, single cell, and whole organism – to study fundamental and applied problems at the intersection of chemistry, physics, and biology. They develop new quantitative spectroscopic imaging techniques to elucidate the relationship between function and dynamics of proteins and RNA inside living cells.
Caitlin Davis obtained her Ph.D. from Emory University in 2015, where she studied protein folding in the laboratory of Dr. Brian Dyer in the Chemistry Department. She completed her postdoctoral training with Dr. Martin Gruebele at the Center for the Physics of Living Cells at the University of Illinois at Urbana-Champaign, where she developed a method for studying protein thermodynamics and kinetics in differentiated tissues of living zebrafish and she developed a mimic of cytoplasm that can be used to reproduce protein behaviors in vitro. She came to Yale as a faculty member in 2020.
',
+ } %}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ divider__component_width: 'site',
+ animate__item: 'enabled',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
New Text Block
+
People will want to chunk out text content by sections, often kicking off with a heading, to make it easier to maintain. E.g. rearranging sections of the page, dropping in CTAs, etc. The spacing isn’t the same using this approach, though.
+ '
+ }%}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ divider__component_width: 'site',
+ animate__item: 'enabled',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
The undergraduate program in Chemistry at Yale reflects the position of chemistry as the foundation of all the molecular sciences. Students are equipped with the technical skills to appreciate the scientific basis for previous discoveries and develop the fundamental expertise required to make future breakthroughs. Under the tutelage of world-leading researchers, students are exposed to a broad range of topics in chemistry. The development of technical skills through lecture classes is complemented with hands-on experience in state-of-the-art chemistry laboratories.
Heading 2 Many students also perform independent laboratory research under the guidance of a faculty mentor. This rigorous training prepares students for professional careers in a diverse array of fields by teaching them how to apply the scientific method, providing them with skills in quantitative reasoning, and exposing them to scientific research.
Heading 3 After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
The following headings are here only on this page to showcase them inside a text block .
Heading 4 After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
Heading 5 After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
Heading 6 After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
',
+ } %}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ divider__component_width: 'site',
+ animate__item: 'enabled',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Program Information The Undergraduate Handbook A comprehensive guide for prospective and current Chemistry Majors, with a complete description of requirements and opportunities.
View the handbook online
Course List A list of courses and a description of the Chemistry undergraduate program, including information on placement exams, laboratory registration, premedical students, and major requirements
Yale College programs of study
',
+ } %}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'inline',
+ content_spotlight_portrait__position: 'image-right',
+ content_spotlight_portrait__theme: 'default',
+ }%}
+
+ {% include "@molecules/content-spotlight-portrait/yds-content-spotlight-portrait.twig" with {
+ content_spotlight_portrait__style: 'inline',
+ content_spotlight_portrait__position: 'image-left',
+ content_spotlight_portrait__theme: 'one',
+ }%}
+
+ {% include "@molecules/callout/yds-callout.twig" with {
+ callout__alignment: 'left',
+ callouts: [
+ {
+ callout__heading: 'Degree Programs',
+ callout__text: 'Designed for those who intend to pursue graduate and those who wish to immediately enter a career in which broad scientific training is beneficial.',
+ callout__link__content: 'Programs',
+ callout__link__url: '#',
+ },
+ {
+ callout__heading: 'Preference Selection',
+ callout__text: 'Preference Selection system is now open and will close again on Monday, January 10, 2022.',
+ callout__link__content: 'Select preferences',
+ callout__link__url: '#',
+ },
+ ],
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-banner-left-align.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-banner-left-align.twig
new file mode 100644
index 000000000..74c89978d
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-banner-left-align.twig
@@ -0,0 +1,226 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+{% block page__content %}
+ {% if banner_type == 'action' %}
+ {% include "@molecules/banner/action/yds-action-banner.twig" with {
+ banner__width: 'site',
+ }%}
+ {% else %}
+ {% include "@molecules/banner/grand-hero/yds-grand-hero.twig" with {
+ grand_hero__width: 'site',
+ grand_hero__heading: banner__heading,
+ grand_hero__snippet: banner__snippet,
+ grand_hero__link__content: banner__link__content,
+ grand_hero__link__url: banner__link__url,
+
+ } %}
+ {% endif %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% include "@page-examples/_intro-content-examples.twig" %}
+
+ {% include "@molecules/text-with-image/yds-text-with-image.twig" with {
+ text_with_image__focus: 'equal',
+ text_with_image__position: 'image-left',
+ }%}
+
+ {% include "@molecules/text-with-image/yds-text-with-image.twig" with {
+ text_with_image__focus: 'equal',
+ text_with_image__position: 'image-right',
+ }%}
+
+ {% include "@molecules/wrapped-image/yds-wrapped-image.twig" with {
+ wrapped_image__width: 'site',
+ wrapped_image__alignment: 'left',
+ wrapped_image__content: '
Dr. Davis’s research group at the Kline Chemistry Laboratory uses experiments at multiple scales – in vitro, single cell, and whole organism – to study fundamental and applied problems at the intersection of chemistry, physics, and biology. They develop new quantitative spectroscopic imaging techniques to elucidate the relationship between function and dynamics of proteins and RNA inside living cells.
Caitlin Davis obtained her Ph.D. from Emory University in 2015, where she studied protein folding in the laboratory of Dr. Brian Dyer in the Chemistry Department. She completed her postdoctoral training with Dr. Martin Gruebele at the Center for the Physics of Living Cells at the University of Illinois at Urbana-Champaign, where she developed a method for studying protein thermodynamics and kinetics in differentiated tissues of living zebrafish and she developed a mimic of cytoplasm that can be used to reproduce protein behaviors in vitro. She came to Yale as a faculty member in 2020.
',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+
+ {% include "@molecules/pull-quote/yds-pull-quote.twig" with {
+ pull_quote__alignment: 'left',
+ pull_quote__width: 'site',
+ pull_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ }%}
+ {% block component_wrapper_inner %}
+ {% include "@molecules/tabs/yds-tabs.twig" %}
+ {% endblock %}
+ {% endembed %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+
+ {% include "@molecules/pull-quote/yds-pull-quote.twig" with {
+ pull_quote__width: 'site',
+ pull_quote__alignment: 'left',
+ pull_quote__style: 'bar-right',
+ pull_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__width:'site',
+ content_image__alignment: 'left',
+ }%}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
The undergraduate program in Chemistry at Yale reflects the position of chemistry as the foundation of all the molecular sciences. Students are equipped with the technical skills to appreciate the scientific basis for previous discoveries and develop the fundamental expertise required to make future breakthroughs. Under the tutelage of world-leading researchers, students are exposed to a broad range of topics in chemistry. The development of technical skills through lecture classes is complemented with hands-on experience in state-of-the-art chemistry laboratories.
Many students also perform independent laboratory research under the guidance of a faculty mentor. This rigorous training prepares students for professional careers in a diverse array of fields by teaching them how to apply the scientific method, providing them with skills in quantitative reasoning, and exposing them to scientific research.
After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
',
+ } %}
+ {% include "@molecules/video/yds-video.twig" with {
+ video__width: 'site',
+ video__alignment: 'left',
+ }%}
+
+ {% include "@organisms/custom-card-collection/yds-custom-card-collection.twig" with {
+ custom_card_collection__heading: 'Custom Cards',
+ custom_card_collection__featured: false,
+ animate__item: 'enabled',
+ custom_card_collection__cards:[
+ {},
+ {},
+ {},
+ {},
+ ]
+ }%}
+
+ {% include "@atoms/divider/yds-divider.twig" %}
+
+ {% include "@organisms/card-collection/yds-card-collection.twig" with {
+ card_collection__source_type: 'post',
+ animate__item: 'enabled',
+ card_collection__cards:[
+ {
+ reference_card__date: '2022-03-30 13:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.",
+ reference_card__url: '#',
+ },
+ {
+ reference_card__date: '2022-04-01 14:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem mollis aliquam ut porttitor leo a diam sollicitudin. Habitasse platea dictumst quisque sagittis purus sit amet. Purus sit amet volutpat consequat mauris nunc. Eget duis at tellus at urna.",
+ reference_card__url: '#',
+ },
+ {
+ reference_card__date: '2022-03-30 15:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.",
+ reference_card__url: '#',
+ },
+ ]
+ }%}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ animate__item: 'enabled',
+ }%}
+
+ {% include "@molecules/quick-links/yds-quick-links.twig" %}
+
+
+ {% include "@molecules/accordion/yds-accordion.twig" with {
+ accordion__heading: 'Accordion Group - left align',
+ accordion__width: 'site',
+ accordion__alignment: 'left',
+ accordion__items: [
+ {
+ accordion__item__heading: accordion__item__heading,
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Books',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Courses',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Events',
+ accordion__item__content: accordion__item__content
+ },
+ ]
+ } %}
+
+ {% include "@organisms/galleries/media-grid/yds-media-grid.twig" with {
+ media_grid__variation: 'interactive',
+ media_grid__width: 'site',
+ }%}
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ component_wrapper__label: 'Contact',
+ } %}
+ {% block component_wrapper_inner %}
+
+
+ Name
+
+
+
+ Email Address
+
+
+
+ Subject
+
+
+
+ Textarea
+
+
+
+
+
+
+ {% endblock %}
+ {% endembed %}
+
+ {% include "@molecules/quote-callout/yds-quote-callout.twig" with {
+ animate__item: 'enabled',
+ standalone_quote__width: 'site',
+ standalone_quote__alignment: 'left',
+ standalone_quote__style: 'bar',
+ standalone_quote__quote_alignment: 'left',
+ standalone_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Program Information The Undergraduate Handbook A comprehensive guide for prospective and current Chemistry Majors, with a complete description of requirements and opportunities.
View the handbook online
Course List A list of courses and a description of the Chemistry undergraduate program, including information on placement exams, laboratory registration, premedical students, and major requirements
Yale College programs of study
',
+ } %}
+ {% include "@molecules/callout/yds-callout.twig" with {
+ callouts: [
+ {
+ callout__heading: 'Degree Programs',
+ callout__text: 'Designed for those who intend to pursue graduate and those who wish to immediately enter a career in which broad scientific training is beneficial.',
+ callout__link__content: 'Programs',
+ callout__link__url: '#',
+ },
+ {
+ callout__heading: 'Preference Selection',
+ callout__text: 'Preference Selection system is now open and will close again on Monday, January 10, 2022.',
+ callout__link__content: 'Select preferences',
+ callout__link__url: '#',
+ },
+ ],
+ } %}
+{% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-banner.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-banner.twig
new file mode 100644
index 000000000..d9dd2a00f
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-banner.twig
@@ -0,0 +1,211 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+{% block page__content %}
+ {% if banner_type == 'action' %}
+ {% include "@molecules/banner/action/yds-action-banner.twig" with {
+ banner__width: 'site',
+ }%}
+ {% else %}
+ {% include "@molecules/banner/grand-hero/yds-grand-hero.twig" with {
+ grand_hero__width: 'site',
+ grand_hero__heading: banner__heading,
+ grand_hero__snippet: banner__snippet,
+ grand_hero__link__content: banner__link__content,
+ grand_hero__link__url: banner__link__url,
+ } %}
+ {% endif %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% include "@page-examples/_intro-content-examples.twig" %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__variation: 'emphasized',
+ text_field__content: '
Research Introduction : emphasized text . A comprehensive guide for prospective and current Chemistry Majors, with a complete description of requirements and opportunities.
',
+ } %}
+
+ {% include "@molecules/wrapped-image/yds-wrapped-image.twig" with {
+ wrapped_image__width: 'site',
+ wrapped_image__alignment: 'left',
+ wrapped_image__content: '
Dr. Davis’s research group at the Kline Chemistry Laboratory uses experiments at multiple scales – in vitro, single cell, and whole organism – to study fundamental and applied problems at the intersection of chemistry, physics, and biology. They develop new quantitative spectroscopic imaging techniques to elucidate the relationship between function and dynamics of proteins and RNA inside living cells.
Caitlin Davis obtained her Ph.D. from Emory University in 2015, where she studied protein folding in the laboratory of Dr. Brian Dyer in the Chemistry Department. She completed her postdoctoral training with Dr. Martin Gruebele at the Center for the Physics of Living Cells at the University of Illinois at Urbana-Champaign, where she developed a method for studying protein thermodynamics and kinetics in differentiated tissues of living zebrafish and she developed a mimic of cytoplasm that can be used to reproduce protein behaviors in vitro. She came to Yale as a faculty member in 2020.
',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+
+ {% include "@molecules/pull-quote/yds-pull-quote.twig" with {
+ animate__item: 'enabled',
+ pull_quote__width: 'site',
+ pull_quote__alignment: 'left',
+ pull_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ } %}
+ {% block component_wrapper_inner %}
+ {% include "@molecules/tabs/yds-tabs.twig" %}
+ {% endblock %}
+ {% endembed %}
+
+ {% include "@molecules/pull-quote/yds-pull-quote.twig" with {
+ animate__item: 'enabled',
+ pull_quote__width: 'site',
+ pull_quote__alignment: 'left',
+ pull_quote__style: 'bar-right',
+ pull_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__width:'site',
+ content_image__alignment: 'left',
+ }%}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__width: 'site',
+ text_field__alignment: 'left',
+ text_field__content: '
The undergraduate program in Chemistry at Yale reflects the position of chemistry as the foundation of all the molecular sciences. Students are equipped with the technical skills to appreciate the scientific basis for previous discoveries and develop the fundamental expertise required to make future breakthroughs. Under the tutelage of world-leading researchers, students are exposed to a broad range of topics in chemistry. The development of technical skills through lecture classes is complemented with hands-on experience in state-of-the-art chemistry laboratories.
Many students also perform independent laboratory research under the guidance of a faculty mentor. This rigorous training prepares students for professional careers in a diverse array of fields by teaching them how to apply the scientific method, providing them with skills in quantitative reasoning, and exposing them to scientific research.
After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
',
+ } %}
+
+ {% include "@molecules/video/yds-video.twig" with {
+ video__width: 'site',
+ video__alignment: 'left',
+ }%}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ animate__item: 'enabled',
+ }%}
+
+ {% include "@organisms/custom-card-collection/yds-custom-card-collection.twig" with {
+ custom_card_collection__heading: 'Custom Cards',
+ custom_card_collection__featured: false,
+ animate__item: 'enabled',
+ custom_card_collection__cards:[
+ {},
+ {},
+ {},
+ {},
+ ]
+ }%}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ animate__item: 'enabled',
+ }%}
+
+ {% include "@organisms/card-collection/yds-card-collection.twig" with {
+ card_collection__source_type: 'post',
+ animate__item: 'enabled',
+ card_collection__cards:[
+ {
+ reference_card__date: '2022-03-30 13:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.",
+ reference_card__url: '#',
+ },
+ {
+ reference_card__date: '2022-03-30 13:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.",
+ reference_card__url: '#',
+ },
+ {
+ reference_card__date: '2022-03-30 13:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.",
+ reference_card__url: '#',
+ },
+ ]
+ }%}
+
+ {% include "@molecules/accordion/yds-accordion.twig" with {
+ accordion__heading: 'Accordion Group',
+ accordion__width: 'site',
+ accordion__alignment: 'left',
+ accordion__items: [
+ {
+ accordion__item__heading: accordion__item__heading,
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Books',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Courses',
+ accordion__item__content: accordion__item__content
+ },
+ {
+ accordion__item__heading: 'Events',
+ accordion__item__content: accordion__item__content
+ },
+ ]
+ } %}
+
+ {% include "@organisms/galleries/media-grid/yds-media-grid.twig" with {
+ media_grid__variation: 'interactive',
+ media_grid__width: 'site',
+ }%}
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__label: 'Contact',
+ } %}
+ {% block component_wrapper_inner %}
+
+
+ Name
+
+
+
+ Email Address
+
+
+
+ Subject
+
+
+
+ Textarea
+
+
+
+
+
+
+ {% endblock %}
+ {% endembed %}
+
+ {% include "@molecules/quote-callout/yds-quote-callout.twig" with {
+ animate__item: 'enabled',
+ standalone_quote__width: 'site',
+ standalone_quote__alignment: 'left',
+ standalone_quote__style: 'bar',
+ standalone_quote__quote_alignment: 'left',
+ standalone_quote__quote: 'Our platform will transform our ability to study metabolic filaments and, coupled with biochemical and biophysical tools, manipulate enzyme structures and metabolic activity in cells.',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__width: 'site',
+ text_field__alignment: 'left',
+ text_field__content: '
Program Information The Undergraduate Handbook A comprehensive guide for prospective and current Chemistry Majors, with a complete description of requirements and opportunities.
View the handbook online
Course List A list of courses and a description of the Chemistry undergraduate program, including information on placement exams, laboratory registration, premedical students, and major requirements
Yale College programs of study
',
+ } %}
+ {% include "@molecules/callout/yds-callout.twig" with {
+ callouts: [
+ {
+ callout__heading: 'Degree Programs',
+ callout__text: 'Designed for those who intend to pursue graduate and those who wish to immediately enter a career in which broad scientific training is beneficial.',
+ callout__link__content: 'Programs',
+ callout__link__url: '#',
+ },
+ {
+ callout__heading: 'Preference Selection',
+ callout__text: 'Preference Selection system is now open and will close again on Monday, January 10, 2022.',
+ callout__link__content: 'Select preferences',
+ callout__link__url: '#',
+ },
+ ],
+ } %}
+{% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-quicklinks.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-quicklinks.twig
new file mode 100644
index 000000000..5f4bbff5a
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-quicklinks.twig
@@ -0,0 +1,16 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+ {% include "@molecules/quick-links/yds-quick-links.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
The undergraduate program in Chemistry at Yale reflects the position of chemistry as the foundation of all the molecular sciences. Students are equipped with the technical skills to appreciate the scientific basis for previous discoveries and develop the fundamental expertise required to make future breakthroughs. Under the tutelage of world-leading researchers, students are exposed to a broad range of topics in chemistry. The development of technical skills through lecture classes is complemented with hands-on experience in state-of-the-art chemistry laboratories.
Many students also perform independent laboratory research under the guidance of a faculty mentor. This rigorous training prepares students for professional careers in a diverse array of fields by teaching them how to apply the scientific method, providing them with skills in quantitative reasoning, and exposing them to scientific research.
After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
',
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-sidebar.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-sidebar.twig
new file mode 100644
index 000000000..ef453ae70
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-sidebar.twig
@@ -0,0 +1,53 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% embed "@organisms/layout/two-column/yds-two-column.twig" %}
+ {% block two_column__primary %}
+ {% include "@page-examples/_intro-content-examples.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+ {% include "@molecules/image/yds-content-image.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
The undergraduate program in Chemistry at Yale reflects the position of chemistry as the foundation of all the molecular sciences. Students are equipped with the technical skills to appreciate the scientific basis for previous discoveries and develop the fundamental expertise required to make future breakthroughs. Under the tutelage of world-leading researchers, students are exposed to a broad range of topics in chemistry. The development of technical skills through lecture classes is complemented with hands-on experience in state-of-the-art chemistry laboratories.
Many students also perform independent laboratory research under the guidance of a faculty mentor. This rigorous training prepares students for professional careers in a diverse array of fields by teaching them how to apply the scientific method, providing them with skills in quantitative reasoning, and exposing them to scientific research.
After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
',
+ } %}
+ {% endblock %}
+ {% block two_column__secondary %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: '
Program Information The Undergraduate Handbook A comprehensive guide for prospective and current Chemistry Majors, with a complete description of requirements and opportunities.
View the handbook online
Course List A list of courses and a description of the Chemistry undergraduate program, including information on placement exams, laboratory registration, premedical students, and major requirements
Yale College programs of study
',
+ } %}
+ {# {% include "@organisms/card-collection/yds-card-collection.twig" with {
+ card_collection__source_type: 'events',
+ card_collection__type: 'single',
+ card_collection__width: 'site',
+ card_collection__featured: 'true',
+ animate__item: 'enabled',
+ card_collection__cards:[
+ {
+ reference_card__date: '2022-03-30 13:00',
+ reference_card__heading: 'Wu Tsai Institute postdocs bridge disciplines in the study of cognition',
+ reference_card__snippet: "The Wu Tsai Institute's first postdoc cohort will study human cognition, working at the intersections of different fields of research.",
+ reference_card__url: '#',
+ }
+ ]
+ }%} #}
+ {% endblock %}
+ {% endembed %}
+ {% include "@molecules/callout/yds-callout.twig" with {
+ callouts: [
+ {
+ callout__heading: 'Degree Programs',
+ callout__text: 'Designed for those who intend to pursue graduate and those who wish to immediately enter a career in which broad scientific training is beneficial.',
+ callout__link__content: 'Programs',
+ callout__link__url: '#',
+ },
+ {
+ callout__heading: 'Preference Selection',
+ callout__text: 'Preference Selection system is now open and will close again on Monday, January 10, 2022.',
+ callout__link__content: 'Select preferences',
+ callout__link__url: '#',
+ },
+ ],
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-video.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-video.twig
new file mode 100644
index 000000000..c5450fb4b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page-with-video.twig
@@ -0,0 +1,46 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" %}
+ {% include "@page-examples/_intro-content-examples.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__alignment: 'left',
+ content_image__width: 'site',
+ } %}
+ {% include "@molecules/video/yds-video.twig" with {
+ video__alignment: 'left',
+ video__width: 'site',
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
The undergraduate program in Chemistry at Yale reflects the position of chemistry as the foundation of all the molecular sciences. Students are equipped with the technical skills to appreciate the scientific basis for previous discoveries and develop the fundamental expertise required to make future breakthroughs. Under the tutelage of world-leading researchers, students are exposed to a broad range of topics in chemistry. The development of technical skills through lecture classes is complemented with hands-on experience in state-of-the-art chemistry laboratories.
Many students also perform independent laboratory research under the guidance of a faculty mentor. This rigorous training prepares students for professional careers in a diverse array of fields by teaching them how to apply the scientific method, providing them with skills in quantitative reasoning, and exposing them to scientific research.
After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
',
+ } %}
+ {% include "@atoms/divider/yds-divider.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__width: 'site',
+ text_field__content: '
Program Information The Undergraduate Handbook A comprehensive guide for prospective and current Chemistry Majors, with a complete description of requirements and opportunities.
View the handbook online
Course List A list of courses and a description of the Chemistry undergraduate program, including information on placement exams, laboratory registration, premedical students, and major requirements
Yale College programs of study
',
+ } %}
+ {% include "@molecules/callout/yds-callout.twig" with {
+ callouts: [
+ {
+ callout__heading: 'Degree Programs',
+ callout__text: 'Designed for those who intend to pursue graduate and those who wish to immediately enter a career in which broad scientific training is beneficial.',
+ callout__link__content: 'Programs',
+ callout__link__url: '#',
+ },
+ {
+ callout__heading: 'Preference Selection',
+ callout__text: 'Preference Selection system is now open and will close again on Monday, January 10, 2022.',
+ callout__link__content: 'Select preferences',
+ callout__link__url: '#',
+ },
+ ],
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page.stories.js b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page.stories.js
new file mode 100644
index 000000000..c0b04cd28
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page.stories.js
@@ -0,0 +1,537 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+
+// Shared Storybook args.
+import argTypes from '../../04-page-layouts/cl-page-args';
+
+// Twig files.
+import standardPageTwig from './standard-page.twig';
+import standardPageBannerTwig from './standard-page-with-banner.twig';
+import standardPageSidebarTwig from './standard-page-with-sidebar.twig';
+import standardPageQuickLinksTwig from './standard-page-with-quicklinks.twig';
+import standardPageShortTwig from './standard-page-short.twig';
+import standardPageSpotlightsTwig from './standard-page-spotlights.twig';
+
+// Data files.
+import utilityNavData from '../../03-organisms/menu/utility-nav/utility-nav.yml';
+import primaryNavData from '../../03-organisms/menu/primary-nav/primary-nav.yml';
+import breadcrumbData from '../../03-organisms/menu/breadcrumbs/breadcrumbs.yml';
+import imageData from '../../01-atoms/images/image/image.yml';
+import textWithImageData from '../../02-molecules/text-with-image/text-with-image.yml';
+import bannerData from '../../02-molecules/banner/banner.yml';
+import grandHeroData from '../../02-molecules/banner/grand-hero.yml';
+import referenceCardData from '../../02-molecules/cards/reference-card/examples/post-card.yml';
+import customCardData from '../../02-molecules/cards/custom-card/custom-card.yml';
+import socialLinksData from '../../02-molecules/social-links/social-links.yml';
+import quickLinksData from '../../02-molecules/quick-links/quick-links.yml';
+import videoData from '../../02-molecules/video/video.yml';
+import accordionData from '../../02-molecules/accordion/accordion.yml';
+import tabData from '../../02-molecules/tabs/tabs.yml';
+import mediaGridData from '../../03-organisms/galleries/media-grid/media-grid.yml';
+import contentSpotlightPortraitData from '../../02-molecules/content-spotlight-portrait/content-spotlight-portrait.yml';
+
+// JavaScript.
+import '../../00-tokens/layout/yds-layout';
+
+const colorPairingsData = Object.keys(tokens['component-themes']);
+
+/**
+ * Storybook Definition.
+ */
+export default {
+ title: 'Page Examples/Standard Pages',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ ...argTypes,
+ introContent: {
+ name: 'Intro Content',
+ options: [
+ 'none',
+ 'image',
+ 'wrapped-image',
+ 'text-with-image--focus-image',
+ 'text-with-image--focus-equal',
+ 'collection-featured',
+ 'collection-secondary',
+ ],
+ type: 'select',
+ defaultValue: 'none',
+ },
+ calloutBackground: {
+ name: 'Callout Theme (dial)',
+ type: 'select',
+ options: ['one', 'two', 'three'],
+ defaultValue: 'one',
+ },
+ pageTitleDisplay: {
+ name: 'Page Title Display',
+ type: 'select',
+ options: ['visible', 'hidden', 'visually-hidden'],
+ defaultValue: 'visible',
+ },
+ },
+};
+
+// Basic page
+export const Basic = ({
+ siteName,
+ pageTitle,
+ pageTitleDisplay,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+ introContent,
+ calloutBackground,
+}) =>
+ standardPageTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: null,
+ page_title__display: pageTitleDisplay,
+ page_title__additional_classes: [pageTitleDisplay],
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ intro_content: introContent,
+ callout__background_color: calloutBackground,
+ ...textWithImageData,
+ ...referenceCardData,
+ ...socialLinksData,
+ ...imageData.responsive_images['4x3'],
+ });
+
+// Short page
+export const BasicShort = ({
+ siteName,
+ pageTitle,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+ introContent,
+ calloutBackground,
+}) =>
+ standardPageShortTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: null,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ ...imageData.responsive_images['4x3'],
+ intro_content: introContent,
+ callout__background_color: calloutBackground,
+ ...textWithImageData,
+ ...referenceCardData,
+ ...socialLinksData,
+ });
+
+// Spotlight page
+export const BasicSpotlights = ({
+ siteName,
+ pageTitle,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+ calloutBackground,
+}) =>
+ standardPageSpotlightsTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: null,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ callout__background_color: calloutBackground,
+ ...textWithImageData,
+ ...referenceCardData,
+ ...socialLinksData,
+ ...contentSpotlightPortraitData,
+ ...imageData.responsive_images['2x3'],
+ });
+
+// With Banner
+export const WithBanner = ({
+ siteName,
+ pageTitle,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ introContent,
+ calloutBackground,
+ heading,
+ snippet,
+ linkContent,
+ contentLayout,
+ bgColor,
+ linkStyle,
+ bannerType,
+ videoHeading,
+ videoCaption,
+ grandHeroOverlayVariation,
+ grandHeroSize,
+ grandHeroWithVideo,
+}) =>
+ standardPageBannerTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: null,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ intro_content: introContent,
+ callout__background_color: calloutBackground,
+ ...textWithImageData,
+ ...referenceCardData,
+ ...customCardData,
+ banner_type: bannerType,
+ banner__heading: heading,
+ banner__snippet: snippet,
+ banner__link__content: linkContent,
+ banner__link__url: bannerData.banner__link__url,
+ banner__link__style: linkStyle,
+ banner__content__layout: contentLayout,
+ banner__content__background: bgColor,
+ grand_hero__heading: heading,
+ grand_hero__snippet: snippet,
+ grand_hero__link__content: linkContent,
+ grand_hero__link__url: grandHeroData.grand_hero__link__url,
+ grand_hero__content__background: bgColor,
+ grand_hero__overlay_variation: grandHeroOverlayVariation,
+ grand_hero__size: grandHeroSize,
+ grand_hero__video: grandHeroWithVideo ? 'true' : 'false',
+ ...imageData.responsive_images['16x9'],
+ ...socialLinksData,
+ ...videoData,
+ video__heading: videoHeading,
+ video__text: videoCaption,
+ ...accordionData,
+ ...tabData,
+ ...mediaGridData,
+ });
+WithBanner.argTypes = {
+ bannerType: {
+ name: 'Banner Type',
+ type: 'select',
+ options: ['action', 'grand-hero'],
+ defaultValue: 'grand-hero',
+ },
+ contentLayout: {
+ name: 'Banner Content Layout',
+ type: 'select',
+ options: ['bottom', 'left', 'right'],
+ defaultValue: 'bottom',
+ },
+ bgColor: {
+ name: 'Banner Content Background Color Theme (dial)',
+ type: 'select',
+ options: colorPairingsData,
+ defaultValue: 'one',
+ },
+ heading: {
+ name: 'Banner Heading',
+ type: 'string',
+ defaultValue: bannerData.banner__heading,
+ },
+ snippet: {
+ name: 'Banner Snippet',
+ type: 'string',
+ defaultValue: bannerData.banner__snippet,
+ },
+ linkContent: {
+ name: 'Banner Link Content',
+ type: 'string',
+ defaultValue: bannerData.banner__link__content,
+ },
+ linkStyle: {
+ name: 'Link Style',
+ type: 'select',
+ options: ['cta', 'text-link'],
+ defaultValue: 'cta',
+ },
+ grandHeroOverlayVariation: {
+ name: 'Grand Hero Content Overlay',
+ type: 'select',
+ options: ['contained', 'full'],
+ defaultValue: 'full',
+ },
+ grandHeroSize: {
+ name: 'Grand Hero Content Size',
+ type: 'select',
+ options: ['reduced', 'full'],
+ defaultValue: 'full',
+ },
+ grandHeroWithVideo: {
+ name: 'Grand Hero With Video',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ videoHeading: {
+ name: 'Video Heading',
+ type: 'string',
+ defaultValue: videoData.video__heading,
+ },
+ videoCaption: {
+ name: 'Video Caption',
+ type: 'string',
+ defaultValue: videoData.video__text,
+ },
+ ...accordionData,
+};
+
+// With sidebar
+export const WithSidebar = ({
+ siteName,
+ pageTitle,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+ introContent,
+ calloutBackground,
+}) =>
+ standardPageSidebarTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: null,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ ...imageData.responsive_images['16x9'],
+ intro_content: introContent,
+ callout__background_color: calloutBackground,
+ ...textWithImageData,
+ ...referenceCardData,
+ ...socialLinksData,
+ });
+
+// With quick links
+export const WithQuickLinks = ({
+ siteName,
+ pageTitle,
+ allowAnimatedItems = localStorage.getItem('yds-cl-twig-animate-items'),
+ globalTheme = localStorage.getItem('yds-cl-twig-global-theme'),
+ menuVariation = localStorage.getItem('yds-cl-twig-menu-variation'),
+ headerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-header-border-thickness',
+ ),
+ primaryNavPosition = localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ siteHeaderTheme = localStorage.getItem('yds-cl-twig-site-header-theme'),
+ siteHeaderAccent = localStorage.getItem('yds-cl-twig-site-header-accent'),
+ utilityNavLinkContent,
+ utilityNavSearch,
+ siteFooterVariation = localStorage.getItem(
+ 'yds-cl-twig-site-footer-variation',
+ ),
+ siteFooterTheme = localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ siteFooterAccent = localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ footerBorderThickness = localStorage.getItem(
+ 'yds-cl-twig-footer-border-thickness',
+ ),
+ heading,
+ description,
+ image,
+ variation,
+}) =>
+ standardPageQuickLinksTwig({
+ site_name: siteName,
+ page_title__heading: pageTitle,
+ page_title__meta: null,
+ site_animate_components: allowAnimatedItems,
+ site_global__theme: globalTheme,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ utility_nav__items: utilityNavData.items,
+ primary_nav__items: primaryNavData.items,
+ site_header__menu__variation: menuVariation,
+ utility_nav__link__content: utilityNavLinkContent,
+ utility_nav__link__url: '#',
+ utility_nav__search: utilityNavSearch,
+ breadcrumbs__items: breadcrumbData.items,
+ ...imageData.responsive_images['16x9'],
+ ...referenceCardData,
+ ...socialLinksData,
+ quick_links__heading: heading,
+ quick_links__description: description,
+ quick_links__image: image,
+ quick_links__variation: variation,
+ quick_links__links: quickLinksData.quick_links__links,
+ });
+WithQuickLinks.argTypes = {
+ heading: {
+ name: 'Quick Links Heading',
+ type: 'string',
+ defaultValue: quickLinksData.quick_links__heading,
+ },
+ description: {
+ name: 'Quick Links Description',
+ type: 'string',
+ defaultValue: quickLinksData.quick_links__description,
+ },
+ image: {
+ name: 'With image',
+ type: 'boolean',
+ defaultValue: true,
+ },
+ variation: {
+ name: 'Quick Links Variation',
+ type: 'select',
+ options: ['promotional', 'subtle'],
+ defaultValue: 'promotional',
+ },
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page.twig b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page.twig
new file mode 100644
index 000000000..48db90668
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/05-page-examples/standard-pages/standard-page.twig
@@ -0,0 +1,89 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__content %}
+ {% include "@organisms/menu/breadcrumbs/yds-breadcrumbs.twig" %}
+ {% include "@molecules/page-title/yds-page-title.twig" with {
+ page_title__display: page_title__display,
+ page_title__additional_classes: page_title__additional_classes,
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Headings in the same Text Block
+
Bacon ipsum dolor amet t-bone shankle rump corned beef. Buffalo tri-tip pork belly meatball andouille shoulder. Sausage cow capicola, boudin venison drumstick kielbasa hamburger short loin. Brisket pancetta kielbasa, pastrami picanha short loin alcatra ribeye pig burgdoggen andouille pork chop fatback. Buffalo turducken burgdoggen bresaola, chuck landjaeger biltong hamburger shank andouille. Shank kevin jowl, picanha venison doner sirloin boudin. Shank brisket boudin flank hamburger drumstick turducken tri-tip corned beef t-bone pancetta spare ribs.
+
Heading 3
+
Bacon ipsum dolor amet t-bone shankle rump corned beef. Buffalo tri-tip pork belly meatball andouille shoulder. Sausage cow capicola, boudin venison drumstick kielbasa hamburger short loin. Brisket pancetta kielbasa, pastrami picanha short loin alcatra ribeye pig burgdoggen andouille pork chop fatback.
+
Heading 4
+
Shank kevin jowl, picanha venison doner sirloin boudin. Shank brisket boudin flank hamburger drumstick turducken tri-tip corned beef t-bone pancetta spare ribs.
+
Another H2
+
Buffalo turducken burgdoggen bresaola, chuck landjaeger biltong hamburger shank andouille. Shank kevin jowl, picanha venison doner sirloin boudin. Shank brisket boudin flank hamburger drumstick turducken tri-tip corned beef t-bone pancetta spare ribs.
+ '
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
New Text Block
+
People will want to chunk out text content by sections, often kicking off with a heading, to make it easier to maintain. E.g. rearranging sections of the page, dropping in CTAs, etc. The spacing isn’t the same using this approach, though.
+ '
+ } %}
+
+ {% include "@molecules/wrapped-image/yds-wrapped-image.twig" with {
+ wrapped_image__width: 'site',
+ wrapped_image__alignment: 'right',
+ wrapped_image__content: '
Heading 3 Dr. Davis’s research group at the Kline Chemistry Laboratory uses experiments at multiple scales – in vitro, single cell, and whole organism – to study fundamental and applied problems at the intersection of chemistry, physics, and biology. They develop new quantitative spectroscopic imaging techniques to elucidate the relationship between function and dynamics of proteins and RNA inside living cells.
Caitlin Davis obtained her Ph.D. from Emory University in 2015, where she studied protein folding in the laboratory of Dr. Brian Dyer in the Chemistry Department. She completed her postdoctoral training with Dr. Martin Gruebele at the Center for the Physics of Living Cells at the University of Illinois at Urbana-Champaign, where she developed a method for studying protein thermodynamics and kinetics in differentiated tissues of living zebrafish and she developed a mimic of cytoplasm that can be used to reproduce protein behaviors in vitro. She came to Yale as a faculty member in 2020.
',
+ } %}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ divider__component_width: 'site',
+ animate__item: 'enabled',
+ } %}
+
+ {% include "@page-examples/_intro-content-examples.twig" %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Chemistry has been responsible for some of the most significant improvements in our quality of life over the last century.
The discovery of antibiotics and other pharmaceuticals, the advent of computers, and the development of industrial methods to produce fertilizer, all have required fundamental advances in chemistry. Chemistry is increasingly playing a central role in the development of alternative-energy vectors to replace fossil fuels, the realization of practical quantum computers, the discovery of new methods to treat and prevent diseases, and the adoption of more sustainable industrial processes.
',
+ } %}
+ {% include "@molecules/image/yds-content-image.twig" with {
+ content_image__alignment: 'left',
+ content_image__width: 'site',
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
The undergraduate program in Chemistry at Yale reflects the position of chemistry as the foundation of all the molecular sciences. Students are equipped with the technical skills to appreciate the scientific basis for previous discoveries and develop the fundamental expertise required to make future breakthroughs. Under the tutelage of world-leading researchers, students are exposed to a broad range of topics in chemistry. The development of technical skills through lecture classes is complemented with hands-on experience in state-of-the-art chemistry laboratories.
Heading 2 Many students also perform independent laboratory research under the guidance of a faculty mentor. This rigorous training prepares students for professional careers in a diverse array of fields by teaching them how to apply the scientific method, providing them with skills in quantitative reasoning, and exposing them to scientific research.
Heading 3 After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
The following headings are here only on this page to showcase them inside a text block .
Heading 4 After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
Heading 5 After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
Heading 6 After graduation, students with a B.A. or B.S. degree often pursue work or further studies in chemistry, biochemistry, or health-related disciplines, but also find their broad scientific training beneficial in energy research, policy, environment, business management, and law. As the problems of contemporary society involve ever more complex scientific issues, degree programs in the sciences become increasingly appropriate for students wishing to pursue careers in public policy, government, or public service.
',
+ } %}
+
+ {% include "@atoms/divider/yds-divider.twig" with {
+ divider__component_width: 'site',
+ animate__item: 'enabled',
+ } %}
+
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__alignment: 'left',
+ text_field__content: '
Program Information The Undergraduate Handbook A comprehensive guide for prospective and current Chemistry Majors, with a complete description of requirements and opportunities.
View the handbook online
Course List A list of courses and a description of the Chemistry undergraduate program, including information on placement exams, laboratory registration, premedical students, and major requirements
Yale College programs of study
',
+ } %}
+
+ {% include "@molecules/text-with-image/yds-text-with-image.twig" with {
+ text_with_image__focus: 'content',
+ } %}
+
+ {% include "@molecules/callout/yds-callout.twig" with {
+ callout__alignment: 'left',
+ callouts: [
+ {
+ callout__heading: 'Degree Programs',
+ callout__text: 'Designed for those who intend to pursue graduate and those who wish to immediately enter a career in which broad scientific training is beneficial.',
+ callout__link__content: 'Programs',
+ callout__link__url: '#',
+ },
+ {
+ callout__heading: 'Preference Selection',
+ callout__text: 'Preference Selection system is now open and will close again on Monday, January 10, 2022.',
+ callout__link__content: 'Select preferences',
+ callout__link__url: '#',
+ },
+ ],
+ } %}
+
+ {% include "@molecules/text-with-image/yds-text-with-image.twig" with {
+ text_with_image__focus: 'content',
+ } %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/_settings/_config.css b/node_modules/@yalesites-org/component-library-twig/components/_settings/_config.css
new file mode 100644
index 000000000..afa6418d0
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/_settings/_config.css
@@ -0,0 +1,49 @@
+/* stylelint-disable comment-empty-line-before */
+:root {
+ /***********
+ ** Colors **
+ ***********/
+ --color-action: var(--color-theme-action, var(--color-cta-primary));
+ --color-accent: var(--color-theme-accent, var(--color-blue-athens));
+ --color-divider: var(--color-theme-divider, var(--color-gray-500));
+ --color-divider-subtle: var(--color-gray-300);
+ /* prettier-ignore */
+ --color-pull-quote-accent: var(--color-theme-pull-quote-accent, var(--color-blue-yale));
+
+ /**********
+ ** Radii **
+ ***********/
+ --cta-radius-soft: var(--radius-4);
+
+ /************
+ ** Spacing **
+ ************/
+ /* The `--spacing-component-gutter` variable is used by components like the
+ * card grid where there are multiple sub-components that should be evenly
+ * spaced. */
+ --spacing-component-gutter: var(--size-spacing-9);
+ --spacing-component-gutter-secondary: var(--size-spacing-7);
+ /* `--spacing-page-inner` is used between "body text-like" components. While
+ * `--spacing-page outer` is */
+ --spacing-page-inner: var(--size-spacing-7);
+ --spacing-page-outer: var(--size-spacing-10);
+
+ /**************
+ ** Thickness **
+ **************/
+ --thickness-divider-thick: var(--size-thickness-2);
+ --thickness-divider-thin: var(--size-thickness-1);
+ /* prettier-ignore */
+ --thickness-divider: var(--thickness-theme-divider, var(--thickness-divider-thin));
+
+ /*************
+ ** Position **
+ *************/
+ --position-divider: var(--position-theme-divider, center);
+
+ /**********
+ ** Width **
+ **********/
+ --width-divider: var(--width-theme-divider, var(--layout-width-100));
+}
+/* stylelint-enable comment-empty-line-before */
diff --git a/node_modules/@yalesites-org/component-library-twig/components/_settings/config.js b/node_modules/@yalesites-org/component-library-twig/components/_settings/config.js
new file mode 100644
index 000000000..13cc91161
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/_settings/config.js
@@ -0,0 +1,40 @@
+// Function to check whether localStorage is both supported and available.
+// See: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#testing_for_availability
+const storageAvailable = (type) => {
+ let storage;
+ try {
+ storage = window[type];
+ const x = '__storage_test__';
+ storage.setItem(x, x);
+ storage.removeItem(x);
+ return true;
+ } catch (e) {
+ return (
+ e instanceof DOMException &&
+ // everything except Firefox
+ (e.code === 22 ||
+ // Firefox
+ e.code === 1014 ||
+ // test name field too, because code might not be present
+ // everything except Firefox
+ e.name === 'QuotaExceededError' ||
+ // Firefox
+ e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
+ // acknowledge QuotaExceededError only if there's something already stored
+ storage &&
+ storage.length !== 0
+ );
+ }
+};
+
+const setAttributes = (dataAttributes) => {
+ if (storageAvailable('localStorage')) {
+ Object.keys(dataAttributes).forEach((key) => {
+ if (dataAttributes[key] !== null) {
+ localStorage.setItem(key, dataAttributes[key]);
+ }
+ });
+ }
+};
+
+export default setAttributes;
diff --git a/node_modules/@yalesites-org/component-library-twig/components/_settings/config.stories.js b/node_modules/@yalesites-org/component-library-twig/components/_settings/config.stories.js
new file mode 100644
index 000000000..8e0f4b109
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/_settings/config.stories.js
@@ -0,0 +1,251 @@
+import tokens from '@yalesites-org/tokens/build/json/tokens.json';
+import setAttributes from './config';
+import getGlobalThemes from '../00-tokens/colors/color-global-themes';
+
+// Twig files.
+import configTwig from './config.twig';
+import ctaTwig from '../01-atoms/controls/cta/yds-cta.twig';
+
+// Data files.
+import primaryNavData from '../03-organisms/menu/primary-nav/primary-nav.yml';
+import tabsData from '../02-molecules/tabs/tabs.yml';
+import imageData from '../01-atoms/images/image/image.yml';
+
+const layoutOptions = ['left', 'center'];
+const thicknessOptions = Object.keys(tokens.border.thickness);
+const widths = Object.keys(tokens.layout.width);
+const borderThicknessOptions = Object.keys(tokens.border.thickness);
+const siteHeaderThemeOptions = Object.keys(tokens['site-header-themes']);
+const siteFooterThemeOptions = Object.keys(tokens['site-footer-themes']);
+const siteGlobalThemeOptions = getGlobalThemes(tokens['global-themes']);
+const siteAnimationOptions = ['artistic', 'default'];
+const siteFooterVariations = ['basic', 'mega'];
+
+// Storing the header/footer accent colors here for now instead of adding them to our Tokens repository. These may move
+// in the future.
+const themesOneToEight = [
+ 'one',
+ 'two',
+ 'three',
+ 'four',
+ 'five',
+ 'six',
+ 'seven',
+ 'eight',
+];
+const siteHeaderAccents = themesOneToEight;
+const siteFooterAccents = themesOneToEight;
+
+export default {
+ title: 'Config',
+ parameters: {
+ layout: 'fullscreen',
+ },
+ argTypes: {
+ globalTheme: {
+ name: 'Site: Global Theme (lever)',
+ options: siteGlobalThemeOptions,
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-global-theme'),
+ },
+ allowAnimatedItems: {
+ name: 'Site: Animation Theme',
+ options: siteAnimationOptions,
+ type: 'select',
+ defaultValue: 'default',
+ },
+ thickness: {
+ name: 'Site: Line thickness',
+ options: thicknessOptions,
+ type: 'select',
+ defaultValue: 'hairline',
+ },
+ dividerColor: {
+ name: 'Site: Line color',
+ options: ['gray-500', 'blue-yale', 'basic-brown-gray'],
+ type: 'select',
+ defaultValue: 'gray-500',
+ },
+ dividerWidth: {
+ name: 'Site: Divider width',
+ options: [...widths],
+ type: 'select',
+ defaultValue: '100',
+ },
+ dividerPosition: {
+ name: 'Site: Divider position',
+ options: layoutOptions,
+ type: 'select',
+ defaultValue: 'center',
+ },
+ actionColor: {
+ name: 'Action Color',
+ options: ['blue-yale', 'basic-black'],
+ type: 'select',
+ defaultValue: 'blue-yale',
+ },
+ menuVariation: {
+ name: 'Site: Menu Variation',
+ options: ['mega', 'basic', 'focus'],
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-menu-variation'),
+ },
+ primaryNavPosition: {
+ name: 'Site: Navigation Position',
+ options: ['left', 'center', 'right'],
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-primary-nav-position'),
+ },
+ siteHeaderTheme: {
+ name: 'Header: Theme',
+ options: siteHeaderThemeOptions,
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-site-header-theme'),
+ },
+ siteHeaderAccent: {
+ name: 'Header: Accent Color (dial)',
+ options: siteHeaderAccents,
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-site-header-accent'),
+ },
+ siteHeaderImage: {
+ name: 'Header: With Image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ siteHeaderSiteNameImage: {
+ name: 'Header: Site Name Is An Image',
+ type: 'boolean',
+ defaultValue: false,
+ },
+ headerBorderThickness: {
+ name: 'Header: Border Thickness',
+ options: borderThicknessOptions,
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-header-border-thickness'),
+ },
+ siteFooterVariation: {
+ name: 'Footer: Variation',
+ options: siteFooterVariations,
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-site-footer-variation'),
+ },
+ siteFooterTheme: {
+ name: 'Footer: Theme',
+ options: siteFooterThemeOptions,
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-site-footer-theme'),
+ },
+ siteFooterAccent: {
+ name: 'Footer: Accent Color (dial)',
+ options: siteFooterAccents,
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-site-footer-accent'),
+ },
+ footerBorderThickness: {
+ name: 'Footer: Border thickness',
+ options: borderThicknessOptions,
+ type: 'select',
+ defaultValue: localStorage.getItem('yds-cl-twig-footer-border-thickness'),
+ },
+ },
+};
+
+const intro = `
+
The controls on this page will affect various components across the component library, and are represented on various stories, like example pages. For example, the "Line thickness" option affects the "Divider" and the "Two Column" components, and may affect more in the future.
+${ctaTwig({
+ cta__content: 'Reset attributes',
+ cta__attributes: { onClick: 'resetAttributes();' },
+ cta__component_theme: 'one',
+})}
+`;
+
+export const GlobalConfig = ({
+ dividerPosition,
+ thickness,
+ dividerColor,
+ dividerWidth,
+ actionColor,
+ primaryNavPosition,
+ siteHeaderTheme,
+ siteHeaderAccent,
+ siteHeaderImage,
+ siteHeaderSiteNameImage,
+ headerBorderThickness,
+ siteFooterTheme,
+ siteFooterAccent,
+ footerBorderThickness,
+ menuVariation,
+ globalTheme,
+ allowAnimatedItems,
+ siteFooterVariation,
+}) => {
+ const root = document.documentElement;
+ const customProperties = {
+ '--thickness-theme-divider': `var(--size-thickness-${thickness})`,
+ '--width-theme-divider': `var(--layout-width-${dividerWidth})`,
+ '--color-theme-divider': `var(--color-${dividerColor})`,
+ '--position-theme-divider': `var(--layout-flex-position-${dividerPosition})`,
+ '--color-theme-action': `var(--color-${actionColor})`,
+ };
+ const dataAttributes = {
+ 'yds-cl-twig-global-theme': globalTheme,
+ 'yds-cl-twig-menu-variation': menuVariation,
+ 'yds-cl-twig-primary-nav-position': primaryNavPosition,
+ 'yds-cl-twig-site-header-theme': siteHeaderTheme,
+ 'yds-cl-twig-site-header-accent': siteHeaderAccent,
+ 'yds-cl-twig-header-border-thickness': headerBorderThickness,
+ 'yds-cl-twig-site-footer-theme': siteFooterTheme,
+ 'yds-cl-twig-site-footer-accent': siteFooterAccent,
+ 'yds-cl-twig-footer-border-thickness': footerBorderThickness,
+ 'yds-cl-twig-animate-items': allowAnimatedItems,
+ 'yds-cl-twig-site-footer-variation': siteFooterVariation,
+ };
+
+ // Set properties that are stored as custom properties to the root element.
+ // @TODO: Ideally these would also live in local storage so that they persist
+ // page refreshes.
+ Object.entries(customProperties).forEach((entry) => {
+ const [key, value] = entry;
+ root.style.setProperty(key, value);
+ });
+
+ // Set properties that are stored as data-attributes to localStorage.
+ setAttributes(dataAttributes);
+
+ return `
+
+
+ ${configTwig({
+ site_name: 'Global Settings',
+ config_page__intro: intro,
+ site_animate_components: allowAnimatedItems,
+ primary_nav__items: primaryNavData.items,
+ site_global__theme: globalTheme,
+ site_header__menu__variation: menuVariation,
+ site_header__background_image: siteHeaderImage,
+ site_header__site_name_is_image: siteHeaderSiteNameImage,
+ site_header__border_thickness: headerBorderThickness,
+ site_header__nav_position: primaryNavPosition,
+ site_header__theme: siteHeaderTheme,
+ site_header__accent: siteHeaderAccent,
+ site_footer__variation: siteFooterVariation,
+ site_footer__border_thickness: footerBorderThickness,
+ site_footer__theme: siteFooterTheme,
+ site_footer__accent: siteFooterAccent,
+ ...tabsData,
+ ...imageData.responsive_images['16x9'],
+ })}
+ `;
+};
diff --git a/node_modules/@yalesites-org/component-library-twig/components/_settings/config.twig b/node_modules/@yalesites-org/component-library-twig/components/_settings/config.twig
new file mode 100644
index 000000000..99ef87e41
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/_settings/config.twig
@@ -0,0 +1,48 @@
+{% extends "@page-layouts/yds-full-width.twig" %}
+ {% block page__content %}
+ {% include "@molecules/page-title/yds-page-title.twig" with {
+ page_title__heading: 'How to Use Global Settings',
+ } %}
+ {% include "@molecules/text/yds-text-field.twig" with {
+ text_field__content: config_page__intro,
+ text_field__width: 'site',
+ text_field__alignment: 'left',
+ } %}
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ }%}
+ {% block component_wrapper_inner %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading: 'Divider',
+ } %}
+ {% endblock %}
+ {% endembed %}
+
+ {% include "@atoms/divider/yds-divider.twig" %}
+
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ }%}
+ {% block component_wrapper_inner %}
+ {% include "@atoms/typography/headings/yds-heading.twig" with {
+ heading__level: '2',
+ heading: 'Action Color',
+ } %}
+ {% include "@atoms/controls/cta/yds-cta.twig" with {
+ cta__content: 'Test CTA',
+ cta__component_theme: 'one',
+ } %}
+ {% endblock %}
+ {% endembed %}
+ {% embed "@organisms/component-wrapper/yds-component-wrapper.twig" with {
+ component_wrapper__width: 'site',
+ component_wrapper__alignment: 'left',
+ }%}
+ {% block component_wrapper_inner %}
+ {% include "@molecules/tabs/yds-tabs.twig" %}
+ {% endblock %}
+ {% endembed %}
+ {% endblock %}
diff --git a/node_modules/@yalesites-org/component-library-twig/components/style.scss b/node_modules/@yalesites-org/component-library-twig/components/style.scss
new file mode 100644
index 000000000..12a4a3d77
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/components/style.scss
@@ -0,0 +1,27 @@
+// Libraries.
+@use '~normalize.css/normalize';
+
+// Config.
+@use '_settings/config';
+
+// Components.
+@use '01-atoms/atoms';
+@use '02-molecules/molecules';
+@use '03-organisms/organisms';
+@use '04-page-layouts/page-layouts';
+
+// Tokens.
+@import '~@yalesites-org/tokens/build/css/tokens.css';
+
+// ys_links
+@import '../lib/ys_link/css/ys-link.css';
+
+html {
+ box-sizing: border-box;
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: inherit;
+}
diff --git a/node_modules/@yalesites-org/component-library-twig/dist/css.js b/node_modules/@yalesites-org/component-library-twig/dist/css.js
new file mode 100644
index 000000000..2f2003de8
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/dist/css.js
@@ -0,0 +1 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=85)}({85:function(e,t,r){"use strict";r.r(t)}});
\ No newline at end of file
diff --git a/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/fontawesome.css b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/fontawesome.css
new file mode 100644
index 000000000..739f7b393
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/fontawesome.css
@@ -0,0 +1,12940 @@
+/*!
+ * Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license (Commercial License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+.fa {
+ font-family: var(--fa-style-family, "Font Awesome 6 Pro");
+ font-weight: var(--fa-style, 900); }
+
+.fa,
+.fa-classic,
+.fa-sharp,
+.fas,
+.fa-solid,
+.far,
+.fa-regular,
+.fal,
+.fa-light,
+.fat,
+.fa-thin,
+.fad,
+.fa-duotone,
+.fass,
+.fa-sharp-solid,
+.fab,
+.fa-brands {
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ display: var(--fa-display, inline-block);
+ font-style: normal;
+ font-variant: normal;
+ line-height: 1;
+ text-rendering: auto; }
+
+.fas,
+.fa-classic,
+.fa-solid,
+.far,
+.fa-regular,
+.fal,
+.fa-light,
+.fat,
+.fa-thin {
+ font-family: 'Font Awesome 6 Pro'; }
+
+.fab,
+.fa-brands {
+ font-family: 'Font Awesome 6 Brands'; }
+
+.fad,
+.fa-classic.fa-duotone,
+.fa-duotone {
+ font-family: 'Font Awesome 6 Duotone'; }
+
+.fass,
+.fa-sharp {
+ font-family: 'Font Awesome 6 Sharp';
+ font-weight: 900; }
+
+.fa-1x {
+ font-size: 1em; }
+
+.fa-2x {
+ font-size: 2em; }
+
+.fa-3x {
+ font-size: 3em; }
+
+.fa-4x {
+ font-size: 4em; }
+
+.fa-5x {
+ font-size: 5em; }
+
+.fa-6x {
+ font-size: 6em; }
+
+.fa-7x {
+ font-size: 7em; }
+
+.fa-8x {
+ font-size: 8em; }
+
+.fa-9x {
+ font-size: 9em; }
+
+.fa-10x {
+ font-size: 10em; }
+
+.fa-2xs {
+ font-size: 0.625em;
+ line-height: 0.1em;
+ vertical-align: 0.225em; }
+
+.fa-xs {
+ font-size: 0.75em;
+ line-height: 0.08333em;
+ vertical-align: 0.125em; }
+
+.fa-sm {
+ font-size: 0.875em;
+ line-height: 0.07143em;
+ vertical-align: 0.05357em; }
+
+.fa-lg {
+ font-size: 1.25em;
+ line-height: 0.05em;
+ vertical-align: -0.075em; }
+
+.fa-xl {
+ font-size: 1.5em;
+ line-height: 0.04167em;
+ vertical-align: -0.125em; }
+
+.fa-2xl {
+ font-size: 2em;
+ line-height: 0.03125em;
+ vertical-align: -0.1875em; }
+
+.fa-fw {
+ text-align: center;
+ width: 1.25em; }
+
+.fa-ul {
+ list-style-type: none;
+ margin-left: var(--fa-li-margin, 2.5em);
+ padding-left: 0; }
+ .fa-ul > li {
+ position: relative; }
+
+.fa-li {
+ left: calc(var(--fa-li-width, 2em) * -1);
+ position: absolute;
+ text-align: center;
+ width: var(--fa-li-width, 2em);
+ line-height: inherit; }
+
+.fa-border {
+ border-color: var(--fa-border-color, #eee);
+ border-radius: var(--fa-border-radius, 0.1em);
+ border-style: var(--fa-border-style, solid);
+ border-width: var(--fa-border-width, 0.08em);
+ padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
+
+.fa-pull-left {
+ float: left;
+ margin-right: var(--fa-pull-margin, 0.3em); }
+
+.fa-pull-right {
+ float: right;
+ margin-left: var(--fa-pull-margin, 0.3em); }
+
+.fa-beat {
+ -webkit-animation-name: fa-beat;
+ animation-name: fa-beat;
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
+ animation-delay: var(--fa-animation-delay, 0s);
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
+ animation-direction: var(--fa-animation-direction, normal);
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
+ animation-duration: var(--fa-animation-duration, 1s);
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+ animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-bounce {
+ -webkit-animation-name: fa-bounce;
+ animation-name: fa-bounce;
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
+ animation-delay: var(--fa-animation-delay, 0s);
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
+ animation-direction: var(--fa-animation-direction, normal);
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
+ animation-duration: var(--fa-animation-duration, 1s);
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
+ animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
+
+.fa-fade {
+ -webkit-animation-name: fa-fade;
+ animation-name: fa-fade;
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
+ animation-delay: var(--fa-animation-delay, 0s);
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
+ animation-direction: var(--fa-animation-direction, normal);
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
+ animation-duration: var(--fa-animation-duration, 1s);
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+ animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-beat-fade {
+ -webkit-animation-name: fa-beat-fade;
+ animation-name: fa-beat-fade;
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
+ animation-delay: var(--fa-animation-delay, 0s);
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
+ animation-direction: var(--fa-animation-direction, normal);
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
+ animation-duration: var(--fa-animation-duration, 1s);
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+ animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-flip {
+ -webkit-animation-name: fa-flip;
+ animation-name: fa-flip;
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
+ animation-delay: var(--fa-animation-delay, 0s);
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
+ animation-direction: var(--fa-animation-direction, normal);
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
+ animation-duration: var(--fa-animation-duration, 1s);
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+ animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-shake {
+ -webkit-animation-name: fa-shake;
+ animation-name: fa-shake;
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
+ animation-delay: var(--fa-animation-delay, 0s);
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
+ animation-direction: var(--fa-animation-direction, normal);
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
+ animation-duration: var(--fa-animation-duration, 1s);
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+ animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin {
+ -webkit-animation-name: fa-spin;
+ animation-name: fa-spin;
+ -webkit-animation-delay: var(--fa-animation-delay, 0s);
+ animation-delay: var(--fa-animation-delay, 0s);
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
+ animation-direction: var(--fa-animation-direction, normal);
+ -webkit-animation-duration: var(--fa-animation-duration, 2s);
+ animation-duration: var(--fa-animation-duration, 2s);
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+ animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin-reverse {
+ --fa-animation-direction: reverse; }
+
+.fa-pulse,
+.fa-spin-pulse {
+ -webkit-animation-name: fa-spin;
+ animation-name: fa-spin;
+ -webkit-animation-direction: var(--fa-animation-direction, normal);
+ animation-direction: var(--fa-animation-direction, normal);
+ -webkit-animation-duration: var(--fa-animation-duration, 1s);
+ animation-duration: var(--fa-animation-duration, 1s);
+ -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+ -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
+ animation-timing-function: var(--fa-animation-timing, steps(8)); }
+
+@media (prefers-reduced-motion: reduce) {
+ .fa-beat,
+ .fa-bounce,
+ .fa-fade,
+ .fa-beat-fade,
+ .fa-flip,
+ .fa-pulse,
+ .fa-shake,
+ .fa-spin,
+ .fa-spin-pulse {
+ -webkit-animation-delay: -1ms;
+ animation-delay: -1ms;
+ -webkit-animation-duration: 1ms;
+ animation-duration: 1ms;
+ -webkit-animation-iteration-count: 1;
+ animation-iteration-count: 1;
+ transition-delay: 0s;
+ transition-duration: 0s; } }
+
+@-webkit-keyframes fa-beat {
+ 0%, 90% {
+ -webkit-transform: scale(1);
+ transform: scale(1); }
+ 45% {
+ -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+ transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@keyframes fa-beat {
+ 0%, 90% {
+ -webkit-transform: scale(1);
+ transform: scale(1); }
+ 45% {
+ -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+ transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@-webkit-keyframes fa-bounce {
+ 0% {
+ -webkit-transform: scale(1, 1) translateY(0);
+ transform: scale(1, 1) translateY(0); }
+ 10% {
+ -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+ transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+ 30% {
+ -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+ transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+ 50% {
+ -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+ transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+ 57% {
+ -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+ transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+ 64% {
+ -webkit-transform: scale(1, 1) translateY(0);
+ transform: scale(1, 1) translateY(0); }
+ 100% {
+ -webkit-transform: scale(1, 1) translateY(0);
+ transform: scale(1, 1) translateY(0); } }
+
+@keyframes fa-bounce {
+ 0% {
+ -webkit-transform: scale(1, 1) translateY(0);
+ transform: scale(1, 1) translateY(0); }
+ 10% {
+ -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+ transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+ 30% {
+ -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+ transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+ 50% {
+ -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+ transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+ 57% {
+ -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+ transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+ 64% {
+ -webkit-transform: scale(1, 1) translateY(0);
+ transform: scale(1, 1) translateY(0); }
+ 100% {
+ -webkit-transform: scale(1, 1) translateY(0);
+ transform: scale(1, 1) translateY(0); } }
+
+@-webkit-keyframes fa-fade {
+ 50% {
+ opacity: var(--fa-fade-opacity, 0.4); } }
+
+@keyframes fa-fade {
+ 50% {
+ opacity: var(--fa-fade-opacity, 0.4); } }
+
+@-webkit-keyframes fa-beat-fade {
+ 0%, 100% {
+ opacity: var(--fa-beat-fade-opacity, 0.4);
+ -webkit-transform: scale(1);
+ transform: scale(1); }
+ 50% {
+ opacity: 1;
+ -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+ transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@keyframes fa-beat-fade {
+ 0%, 100% {
+ opacity: var(--fa-beat-fade-opacity, 0.4);
+ -webkit-transform: scale(1);
+ transform: scale(1); }
+ 50% {
+ opacity: 1;
+ -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+ transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@-webkit-keyframes fa-flip {
+ 50% {
+ -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+ transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@keyframes fa-flip {
+ 50% {
+ -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+ transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@-webkit-keyframes fa-shake {
+ 0% {
+ -webkit-transform: rotate(-15deg);
+ transform: rotate(-15deg); }
+ 4% {
+ -webkit-transform: rotate(15deg);
+ transform: rotate(15deg); }
+ 8%, 24% {
+ -webkit-transform: rotate(-18deg);
+ transform: rotate(-18deg); }
+ 12%, 28% {
+ -webkit-transform: rotate(18deg);
+ transform: rotate(18deg); }
+ 16% {
+ -webkit-transform: rotate(-22deg);
+ transform: rotate(-22deg); }
+ 20% {
+ -webkit-transform: rotate(22deg);
+ transform: rotate(22deg); }
+ 32% {
+ -webkit-transform: rotate(-12deg);
+ transform: rotate(-12deg); }
+ 36% {
+ -webkit-transform: rotate(12deg);
+ transform: rotate(12deg); }
+ 40%, 100% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); } }
+
+@keyframes fa-shake {
+ 0% {
+ -webkit-transform: rotate(-15deg);
+ transform: rotate(-15deg); }
+ 4% {
+ -webkit-transform: rotate(15deg);
+ transform: rotate(15deg); }
+ 8%, 24% {
+ -webkit-transform: rotate(-18deg);
+ transform: rotate(-18deg); }
+ 12%, 28% {
+ -webkit-transform: rotate(18deg);
+ transform: rotate(18deg); }
+ 16% {
+ -webkit-transform: rotate(-22deg);
+ transform: rotate(-22deg); }
+ 20% {
+ -webkit-transform: rotate(22deg);
+ transform: rotate(22deg); }
+ 32% {
+ -webkit-transform: rotate(-12deg);
+ transform: rotate(-12deg); }
+ 36% {
+ -webkit-transform: rotate(12deg);
+ transform: rotate(12deg); }
+ 40%, 100% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); } }
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg); } }
+
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg); } }
+
+.fa-rotate-90 {
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg); }
+
+.fa-rotate-180 {
+ -webkit-transform: rotate(180deg);
+ transform: rotate(180deg); }
+
+.fa-rotate-270 {
+ -webkit-transform: rotate(270deg);
+ transform: rotate(270deg); }
+
+.fa-flip-horizontal {
+ -webkit-transform: scale(-1, 1);
+ transform: scale(-1, 1); }
+
+.fa-flip-vertical {
+ -webkit-transform: scale(1, -1);
+ transform: scale(1, -1); }
+
+.fa-flip-both,
+.fa-flip-horizontal.fa-flip-vertical {
+ -webkit-transform: scale(-1, -1);
+ transform: scale(-1, -1); }
+
+.fa-rotate-by {
+ -webkit-transform: rotate(var(--fa-rotate-angle, none));
+ transform: rotate(var(--fa-rotate-angle, none)); }
+
+.fa-stack {
+ display: inline-block;
+ height: 2em;
+ line-height: 2em;
+ position: relative;
+ vertical-align: middle;
+ width: 2.5em; }
+
+.fa-stack-1x,
+.fa-stack-2x {
+ left: 0;
+ position: absolute;
+ text-align: center;
+ width: 100%;
+ z-index: var(--fa-stack-z-index, auto); }
+
+.fa-stack-1x {
+ line-height: inherit; }
+
+.fa-stack-2x {
+ font-size: 2em; }
+
+.fa-inverse {
+ color: var(--fa-inverse, #fff); }
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+readers do not read off random characters that represent icons */
+.fa-0::before {
+ content: "\30"; }
+
+.fa-1::before {
+ content: "\31"; }
+
+.fa-2::before {
+ content: "\32"; }
+
+.fa-3::before {
+ content: "\33"; }
+
+.fa-4::before {
+ content: "\34"; }
+
+.fa-5::before {
+ content: "\35"; }
+
+.fa-6::before {
+ content: "\36"; }
+
+.fa-7::before {
+ content: "\37"; }
+
+.fa-8::before {
+ content: "\38"; }
+
+.fa-9::before {
+ content: "\39"; }
+
+.fa-fill-drip::before {
+ content: "\f576"; }
+
+.fa-arrows-to-circle::before {
+ content: "\e4bd"; }
+
+.fa-circle-chevron-right::before {
+ content: "\f138"; }
+
+.fa-chevron-circle-right::before {
+ content: "\f138"; }
+
+.fa-wagon-covered::before {
+ content: "\f8ee"; }
+
+.fa-line-height::before {
+ content: "\f871"; }
+
+.fa-bagel::before {
+ content: "\e3d7"; }
+
+.fa-transporter-7::before {
+ content: "\e2a8"; }
+
+.fa-at::before {
+ content: "\40"; }
+
+.fa-rectangles-mixed::before {
+ content: "\e323"; }
+
+.fa-phone-arrow-up-right::before {
+ content: "\e224"; }
+
+.fa-phone-arrow-up::before {
+ content: "\e224"; }
+
+.fa-phone-outgoing::before {
+ content: "\e224"; }
+
+.fa-trash-can::before {
+ content: "\f2ed"; }
+
+.fa-trash-alt::before {
+ content: "\f2ed"; }
+
+.fa-circle-l::before {
+ content: "\e114"; }
+
+.fa-head-side-goggles::before {
+ content: "\f6ea"; }
+
+.fa-head-vr::before {
+ content: "\f6ea"; }
+
+.fa-text-height::before {
+ content: "\f034"; }
+
+.fa-user-xmark::before {
+ content: "\f235"; }
+
+.fa-user-times::before {
+ content: "\f235"; }
+
+.fa-face-hand-yawn::before {
+ content: "\e379"; }
+
+.fa-gauge-simple-min::before {
+ content: "\f62d"; }
+
+.fa-tachometer-slowest::before {
+ content: "\f62d"; }
+
+.fa-stethoscope::before {
+ content: "\f0f1"; }
+
+.fa-coffin::before {
+ content: "\f6c6"; }
+
+.fa-message::before {
+ content: "\f27a"; }
+
+.fa-comment-alt::before {
+ content: "\f27a"; }
+
+.fa-salad::before {
+ content: "\f81e"; }
+
+.fa-bowl-salad::before {
+ content: "\f81e"; }
+
+.fa-info::before {
+ content: "\f129"; }
+
+.fa-robot-astromech::before {
+ content: "\e2d2"; }
+
+.fa-ring-diamond::before {
+ content: "\e5ab"; }
+
+.fa-fondue-pot::before {
+ content: "\e40d"; }
+
+.fa-theta::before {
+ content: "\f69e"; }
+
+.fa-face-hand-peeking::before {
+ content: "\e481"; }
+
+.fa-square-user::before {
+ content: "\e283"; }
+
+.fa-down-left-and-up-right-to-center::before {
+ content: "\f422"; }
+
+.fa-compress-alt::before {
+ content: "\f422"; }
+
+.fa-explosion::before {
+ content: "\e4e9"; }
+
+.fa-file-lines::before {
+ content: "\f15c"; }
+
+.fa-file-alt::before {
+ content: "\f15c"; }
+
+.fa-file-text::before {
+ content: "\f15c"; }
+
+.fa-wave-square::before {
+ content: "\f83e"; }
+
+.fa-ring::before {
+ content: "\f70b"; }
+
+.fa-building-un::before {
+ content: "\e4d9"; }
+
+.fa-dice-three::before {
+ content: "\f527"; }
+
+.fa-tire-pressure-warning::before {
+ content: "\f633"; }
+
+.fa-wifi-fair::before {
+ content: "\f6ab"; }
+
+.fa-wifi-2::before {
+ content: "\f6ab"; }
+
+.fa-calendar-days::before {
+ content: "\f073"; }
+
+.fa-calendar-alt::before {
+ content: "\f073"; }
+
+.fa-mp3-player::before {
+ content: "\f8ce"; }
+
+.fa-anchor-circle-check::before {
+ content: "\e4aa"; }
+
+.fa-tally-4::before {
+ content: "\e297"; }
+
+.fa-rectangle-history::before {
+ content: "\e4a2"; }
+
+.fa-building-circle-arrow-right::before {
+ content: "\e4d1"; }
+
+.fa-volleyball::before {
+ content: "\f45f"; }
+
+.fa-volleyball-ball::before {
+ content: "\f45f"; }
+
+.fa-sun-haze::before {
+ content: "\f765"; }
+
+.fa-text-size::before {
+ content: "\f894"; }
+
+.fa-ufo::before {
+ content: "\e047"; }
+
+.fa-fork::before {
+ content: "\f2e3"; }
+
+.fa-utensil-fork::before {
+ content: "\f2e3"; }
+
+.fa-arrows-up-to-line::before {
+ content: "\e4c2"; }
+
+.fa-mobile-signal::before {
+ content: "\e1ef"; }
+
+.fa-barcode-scan::before {
+ content: "\f465"; }
+
+.fa-sort-down::before {
+ content: "\f0dd"; }
+
+.fa-sort-desc::before {
+ content: "\f0dd"; }
+
+.fa-folder-arrow-down::before {
+ content: "\e053"; }
+
+.fa-folder-download::before {
+ content: "\e053"; }
+
+.fa-circle-minus::before {
+ content: "\f056"; }
+
+.fa-minus-circle::before {
+ content: "\f056"; }
+
+.fa-face-icicles::before {
+ content: "\e37c"; }
+
+.fa-shovel::before {
+ content: "\f713"; }
+
+.fa-door-open::before {
+ content: "\f52b"; }
+
+.fa-films::before {
+ content: "\e17a"; }
+
+.fa-right-from-bracket::before {
+ content: "\f2f5"; }
+
+.fa-sign-out-alt::before {
+ content: "\f2f5"; }
+
+.fa-face-glasses::before {
+ content: "\e377"; }
+
+.fa-nfc::before {
+ content: "\e1f7"; }
+
+.fa-atom::before {
+ content: "\f5d2"; }
+
+.fa-soap::before {
+ content: "\e06e"; }
+
+.fa-icons::before {
+ content: "\f86d"; }
+
+.fa-heart-music-camera-bolt::before {
+ content: "\f86d"; }
+
+.fa-microphone-lines-slash::before {
+ content: "\f539"; }
+
+.fa-microphone-alt-slash::before {
+ content: "\f539"; }
+
+.fa-closed-captioning-slash::before {
+ content: "\e135"; }
+
+.fa-calculator-simple::before {
+ content: "\f64c"; }
+
+.fa-calculator-alt::before {
+ content: "\f64c"; }
+
+.fa-bridge-circle-check::before {
+ content: "\e4c9"; }
+
+.fa-sliders-up::before {
+ content: "\f3f1"; }
+
+.fa-sliders-v::before {
+ content: "\f3f1"; }
+
+.fa-location-minus::before {
+ content: "\f609"; }
+
+.fa-map-marker-minus::before {
+ content: "\f609"; }
+
+.fa-pump-medical::before {
+ content: "\e06a"; }
+
+.fa-fingerprint::before {
+ content: "\f577"; }
+
+.fa-ski-boot::before {
+ content: "\e3cc"; }
+
+.fa-standard-definition::before {
+ content: "\e28a"; }
+
+.fa-rectangle-sd::before {
+ content: "\e28a"; }
+
+.fa-h1::before {
+ content: "\f313"; }
+
+.fa-hand-point-right::before {
+ content: "\f0a4"; }
+
+.fa-magnifying-glass-location::before {
+ content: "\f689"; }
+
+.fa-search-location::before {
+ content: "\f689"; }
+
+.fa-message-bot::before {
+ content: "\e3b8"; }
+
+.fa-forward-step::before {
+ content: "\f051"; }
+
+.fa-step-forward::before {
+ content: "\f051"; }
+
+.fa-face-smile-beam::before {
+ content: "\f5b8"; }
+
+.fa-smile-beam::before {
+ content: "\f5b8"; }
+
+.fa-light-ceiling::before {
+ content: "\e016"; }
+
+.fa-message-exclamation::before {
+ content: "\f4a5"; }
+
+.fa-comment-alt-exclamation::before {
+ content: "\f4a5"; }
+
+.fa-bowl-scoop::before {
+ content: "\e3de"; }
+
+.fa-bowl-shaved-ice::before {
+ content: "\e3de"; }
+
+.fa-square-x::before {
+ content: "\e286"; }
+
+.fa-utility-pole-double::before {
+ content: "\e2c4"; }
+
+.fa-flag-checkered::before {
+ content: "\f11e"; }
+
+.fa-chevrons-up::before {
+ content: "\f325"; }
+
+.fa-chevron-double-up::before {
+ content: "\f325"; }
+
+.fa-football::before {
+ content: "\f44e"; }
+
+.fa-football-ball::before {
+ content: "\f44e"; }
+
+.fa-user-vneck::before {
+ content: "\e461"; }
+
+.fa-school-circle-exclamation::before {
+ content: "\e56c"; }
+
+.fa-crop::before {
+ content: "\f125"; }
+
+.fa-angles-down::before {
+ content: "\f103"; }
+
+.fa-angle-double-down::before {
+ content: "\f103"; }
+
+.fa-users-rectangle::before {
+ content: "\e594"; }
+
+.fa-people-roof::before {
+ content: "\e537"; }
+
+.fa-square-arrow-right::before {
+ content: "\f33b"; }
+
+.fa-arrow-square-right::before {
+ content: "\f33b"; }
+
+.fa-location-plus::before {
+ content: "\f60a"; }
+
+.fa-map-marker-plus::before {
+ content: "\f60a"; }
+
+.fa-lightbulb-exclamation-on::before {
+ content: "\e1ca"; }
+
+.fa-people-line::before {
+ content: "\e534"; }
+
+.fa-beer-mug-empty::before {
+ content: "\f0fc"; }
+
+.fa-beer::before {
+ content: "\f0fc"; }
+
+.fa-crate-empty::before {
+ content: "\e151"; }
+
+.fa-diagram-predecessor::before {
+ content: "\e477"; }
+
+.fa-transporter::before {
+ content: "\e042"; }
+
+.fa-calendar-circle-user::before {
+ content: "\e471"; }
+
+.fa-arrow-up-long::before {
+ content: "\f176"; }
+
+.fa-long-arrow-up::before {
+ content: "\f176"; }
+
+.fa-person-carry-box::before {
+ content: "\f4cf"; }
+
+.fa-person-carry::before {
+ content: "\f4cf"; }
+
+.fa-fire-flame-simple::before {
+ content: "\f46a"; }
+
+.fa-burn::before {
+ content: "\f46a"; }
+
+.fa-person::before {
+ content: "\f183"; }
+
+.fa-male::before {
+ content: "\f183"; }
+
+.fa-laptop::before {
+ content: "\f109"; }
+
+.fa-file-csv::before {
+ content: "\f6dd"; }
+
+.fa-menorah::before {
+ content: "\f676"; }
+
+.fa-union::before {
+ content: "\f6a2"; }
+
+.fa-chevrons-left::before {
+ content: "\f323"; }
+
+.fa-chevron-double-left::before {
+ content: "\f323"; }
+
+.fa-circle-heart::before {
+ content: "\f4c7"; }
+
+.fa-heart-circle::before {
+ content: "\f4c7"; }
+
+.fa-truck-plane::before {
+ content: "\e58f"; }
+
+.fa-record-vinyl::before {
+ content: "\f8d9"; }
+
+.fa-bring-forward::before {
+ content: "\f856"; }
+
+.fa-square-p::before {
+ content: "\e279"; }
+
+.fa-face-grin-stars::before {
+ content: "\f587"; }
+
+.fa-grin-stars::before {
+ content: "\f587"; }
+
+.fa-sigma::before {
+ content: "\f68b"; }
+
+.fa-camera-movie::before {
+ content: "\f8a9"; }
+
+.fa-bong::before {
+ content: "\f55c"; }
+
+.fa-clarinet::before {
+ content: "\f8ad"; }
+
+.fa-truck-flatbed::before {
+ content: "\e2b6"; }
+
+.fa-spaghetti-monster-flying::before {
+ content: "\f67b"; }
+
+.fa-pastafarianism::before {
+ content: "\f67b"; }
+
+.fa-arrow-down-up-across-line::before {
+ content: "\e4af"; }
+
+.fa-leaf-heart::before {
+ content: "\f4cb"; }
+
+.fa-house-building::before {
+ content: "\e1b1"; }
+
+.fa-cheese-swiss::before {
+ content: "\f7f0"; }
+
+.fa-spoon::before {
+ content: "\f2e5"; }
+
+.fa-utensil-spoon::before {
+ content: "\f2e5"; }
+
+.fa-jar-wheat::before {
+ content: "\e517"; }
+
+.fa-envelopes-bulk::before {
+ content: "\f674"; }
+
+.fa-mail-bulk::before {
+ content: "\f674"; }
+
+.fa-file-circle-exclamation::before {
+ content: "\e4eb"; }
+
+.fa-bow-arrow::before {
+ content: "\f6b9"; }
+
+.fa-cart-xmark::before {
+ content: "\e0dd"; }
+
+.fa-hexagon-xmark::before {
+ content: "\f2ee"; }
+
+.fa-times-hexagon::before {
+ content: "\f2ee"; }
+
+.fa-xmark-hexagon::before {
+ content: "\f2ee"; }
+
+.fa-circle-h::before {
+ content: "\f47e"; }
+
+.fa-hospital-symbol::before {
+ content: "\f47e"; }
+
+.fa-merge::before {
+ content: "\e526"; }
+
+.fa-pager::before {
+ content: "\f815"; }
+
+.fa-cart-minus::before {
+ content: "\e0db"; }
+
+.fa-address-book::before {
+ content: "\f2b9"; }
+
+.fa-contact-book::before {
+ content: "\f2b9"; }
+
+.fa-pan-frying::before {
+ content: "\e42c"; }
+
+.fa-grid::before {
+ content: "\e195"; }
+
+.fa-grid-3::before {
+ content: "\e195"; }
+
+.fa-football-helmet::before {
+ content: "\f44f"; }
+
+.fa-hand-love::before {
+ content: "\e1a5"; }
+
+.fa-trees::before {
+ content: "\f724"; }
+
+.fa-strikethrough::before {
+ content: "\f0cc"; }
+
+.fa-page::before {
+ content: "\e428"; }
+
+.fa-k::before {
+ content: "\4b"; }
+
+.fa-diagram-previous::before {
+ content: "\e478"; }
+
+.fa-gauge-min::before {
+ content: "\f628"; }
+
+.fa-tachometer-alt-slowest::before {
+ content: "\f628"; }
+
+.fa-folder-grid::before {
+ content: "\e188"; }
+
+.fa-eggplant::before {
+ content: "\e16c"; }
+
+.fa-ram::before {
+ content: "\f70a"; }
+
+.fa-landmark-flag::before {
+ content: "\e51c"; }
+
+.fa-lips::before {
+ content: "\f600"; }
+
+.fa-pencil::before {
+ content: "\f303"; }
+
+.fa-pencil-alt::before {
+ content: "\f303"; }
+
+.fa-backward::before {
+ content: "\f04a"; }
+
+.fa-caret-right::before {
+ content: "\f0da"; }
+
+.fa-comments::before {
+ content: "\f086"; }
+
+.fa-paste::before {
+ content: "\f0ea"; }
+
+.fa-file-clipboard::before {
+ content: "\f0ea"; }
+
+.fa-desktop-arrow-down::before {
+ content: "\e155"; }
+
+.fa-code-pull-request::before {
+ content: "\e13c"; }
+
+.fa-pumpkin::before {
+ content: "\f707"; }
+
+.fa-clipboard-list::before {
+ content: "\f46d"; }
+
+.fa-pen-field::before {
+ content: "\e211"; }
+
+.fa-blueberries::before {
+ content: "\e2e8"; }
+
+.fa-truck-ramp-box::before {
+ content: "\f4de"; }
+
+.fa-truck-loading::before {
+ content: "\f4de"; }
+
+.fa-note::before {
+ content: "\e1ff"; }
+
+.fa-arrow-down-to-square::before {
+ content: "\e096"; }
+
+.fa-user-check::before {
+ content: "\f4fc"; }
+
+.fa-cloud-xmark::before {
+ content: "\e35f"; }
+
+.fa-vial-virus::before {
+ content: "\e597"; }
+
+.fa-book-blank::before {
+ content: "\f5d9"; }
+
+.fa-book-alt::before {
+ content: "\f5d9"; }
+
+.fa-golf-flag-hole::before {
+ content: "\e3ac"; }
+
+.fa-message-arrow-down::before {
+ content: "\e1db"; }
+
+.fa-comment-alt-arrow-down::before {
+ content: "\e1db"; }
+
+.fa-face-unamused::before {
+ content: "\e39f"; }
+
+.fa-sheet-plastic::before {
+ content: "\e571"; }
+
+.fa-circle-9::before {
+ content: "\e0f6"; }
+
+.fa-blog::before {
+ content: "\f781"; }
+
+.fa-user-ninja::before {
+ content: "\f504"; }
+
+.fa-pencil-slash::before {
+ content: "\e215"; }
+
+.fa-bowling-pins::before {
+ content: "\f437"; }
+
+.fa-person-arrow-up-from-line::before {
+ content: "\e539"; }
+
+.fa-down-right::before {
+ content: "\e16b"; }
+
+.fa-scroll-torah::before {
+ content: "\f6a0"; }
+
+.fa-torah::before {
+ content: "\f6a0"; }
+
+.fa-blinds-open::before {
+ content: "\f8fc"; }
+
+.fa-fence::before {
+ content: "\e303"; }
+
+.fa-up::before {
+ content: "\f357"; }
+
+.fa-arrow-alt-up::before {
+ content: "\f357"; }
+
+.fa-broom-ball::before {
+ content: "\f458"; }
+
+.fa-quidditch::before {
+ content: "\f458"; }
+
+.fa-quidditch-broom-ball::before {
+ content: "\f458"; }
+
+.fa-drumstick::before {
+ content: "\f6d6"; }
+
+.fa-square-v::before {
+ content: "\e284"; }
+
+.fa-face-awesome::before {
+ content: "\e409"; }
+
+.fa-gave-dandy::before {
+ content: "\e409"; }
+
+.fa-dial-off::before {
+ content: "\e162"; }
+
+.fa-toggle-off::before {
+ content: "\f204"; }
+
+.fa-face-smile-horns::before {
+ content: "\e391"; }
+
+.fa-box-archive::before {
+ content: "\f187"; }
+
+.fa-archive::before {
+ content: "\f187"; }
+
+.fa-grapes::before {
+ content: "\e306"; }
+
+.fa-person-drowning::before {
+ content: "\e545"; }
+
+.fa-dial-max::before {
+ content: "\e15e"; }
+
+.fa-circle-m::before {
+ content: "\e115"; }
+
+.fa-calendar-image::before {
+ content: "\e0d4"; }
+
+.fa-circle-caret-down::before {
+ content: "\f32d"; }
+
+.fa-caret-circle-down::before {
+ content: "\f32d"; }
+
+.fa-arrow-down-9-1::before {
+ content: "\f886"; }
+
+.fa-sort-numeric-desc::before {
+ content: "\f886"; }
+
+.fa-sort-numeric-down-alt::before {
+ content: "\f886"; }
+
+.fa-face-grin-tongue-squint::before {
+ content: "\f58a"; }
+
+.fa-grin-tongue-squint::before {
+ content: "\f58a"; }
+
+.fa-shish-kebab::before {
+ content: "\f821"; }
+
+.fa-spray-can::before {
+ content: "\f5bd"; }
+
+.fa-alarm-snooze::before {
+ content: "\f845"; }
+
+.fa-scarecrow::before {
+ content: "\f70d"; }
+
+.fa-truck-monster::before {
+ content: "\f63b"; }
+
+.fa-gift-card::before {
+ content: "\f663"; }
+
+.fa-w::before {
+ content: "\57"; }
+
+.fa-code-pull-request-draft::before {
+ content: "\e3fa"; }
+
+.fa-square-b::before {
+ content: "\e264"; }
+
+.fa-elephant::before {
+ content: "\f6da"; }
+
+.fa-earth-africa::before {
+ content: "\f57c"; }
+
+.fa-globe-africa::before {
+ content: "\f57c"; }
+
+.fa-rainbow::before {
+ content: "\f75b"; }
+
+.fa-circle-notch::before {
+ content: "\f1ce"; }
+
+.fa-tablet-screen-button::before {
+ content: "\f3fa"; }
+
+.fa-tablet-alt::before {
+ content: "\f3fa"; }
+
+.fa-paw::before {
+ content: "\f1b0"; }
+
+.fa-message-question::before {
+ content: "\e1e3"; }
+
+.fa-cloud::before {
+ content: "\f0c2"; }
+
+.fa-trowel-bricks::before {
+ content: "\e58a"; }
+
+.fa-square-3::before {
+ content: "\e258"; }
+
+.fa-face-flushed::before {
+ content: "\f579"; }
+
+.fa-flushed::before {
+ content: "\f579"; }
+
+.fa-hospital-user::before {
+ content: "\f80d"; }
+
+.fa-microwave::before {
+ content: "\e01b"; }
+
+.fa-tent-arrow-left-right::before {
+ content: "\e57f"; }
+
+.fa-cart-circle-arrow-up::before {
+ content: "\e3f0"; }
+
+.fa-trash-clock::before {
+ content: "\e2b0"; }
+
+.fa-gavel::before {
+ content: "\f0e3"; }
+
+.fa-legal::before {
+ content: "\f0e3"; }
+
+.fa-sprinkler-ceiling::before {
+ content: "\e44c"; }
+
+.fa-browsers::before {
+ content: "\e0cb"; }
+
+.fa-trillium::before {
+ content: "\e588"; }
+
+.fa-music-slash::before {
+ content: "\f8d1"; }
+
+.fa-truck-ramp::before {
+ content: "\f4e0"; }
+
+.fa-binoculars::before {
+ content: "\f1e5"; }
+
+.fa-microphone-slash::before {
+ content: "\f131"; }
+
+.fa-box-tissue::before {
+ content: "\e05b"; }
+
+.fa-circle-c::before {
+ content: "\e101"; }
+
+.fa-star-christmas::before {
+ content: "\f7d4"; }
+
+.fa-chart-bullet::before {
+ content: "\e0e1"; }
+
+.fa-motorcycle::before {
+ content: "\f21c"; }
+
+.fa-tree-christmas::before {
+ content: "\f7db"; }
+
+.fa-tire-flat::before {
+ content: "\f632"; }
+
+.fa-sunglasses::before {
+ content: "\f892"; }
+
+.fa-badge::before {
+ content: "\f335"; }
+
+.fa-message-pen::before {
+ content: "\f4a4"; }
+
+.fa-comment-alt-edit::before {
+ content: "\f4a4"; }
+
+.fa-message-edit::before {
+ content: "\f4a4"; }
+
+.fa-bell-concierge::before {
+ content: "\f562"; }
+
+.fa-concierge-bell::before {
+ content: "\f562"; }
+
+.fa-pen-ruler::before {
+ content: "\f5ae"; }
+
+.fa-pencil-ruler::before {
+ content: "\f5ae"; }
+
+.fa-chess-rook-piece::before {
+ content: "\f448"; }
+
+.fa-chess-rook-alt::before {
+ content: "\f448"; }
+
+.fa-square-root::before {
+ content: "\f697"; }
+
+.fa-album-collection-circle-plus::before {
+ content: "\e48e"; }
+
+.fa-people-arrows::before {
+ content: "\e068"; }
+
+.fa-people-arrows-left-right::before {
+ content: "\e068"; }
+
+.fa-face-angry-horns::before {
+ content: "\e368"; }
+
+.fa-mars-and-venus-burst::before {
+ content: "\e523"; }
+
+.fa-tombstone::before {
+ content: "\f720"; }
+
+.fa-square-caret-right::before {
+ content: "\f152"; }
+
+.fa-caret-square-right::before {
+ content: "\f152"; }
+
+.fa-scissors::before {
+ content: "\f0c4"; }
+
+.fa-cut::before {
+ content: "\f0c4"; }
+
+.fa-list-music::before {
+ content: "\f8c9"; }
+
+.fa-sun-plant-wilt::before {
+ content: "\e57a"; }
+
+.fa-toilets-portable::before {
+ content: "\e584"; }
+
+.fa-hockey-puck::before {
+ content: "\f453"; }
+
+.fa-mustache::before {
+ content: "\e5bc"; }
+
+.fa-hyphen::before {
+ content: "\2d"; }
+
+.fa-table::before {
+ content: "\f0ce"; }
+
+.fa-user-chef::before {
+ content: "\e3d2"; }
+
+.fa-message-image::before {
+ content: "\e1e0"; }
+
+.fa-comment-alt-image::before {
+ content: "\e1e0"; }
+
+.fa-users-medical::before {
+ content: "\f830"; }
+
+.fa-sensor-triangle-exclamation::before {
+ content: "\e029"; }
+
+.fa-sensor-alert::before {
+ content: "\e029"; }
+
+.fa-magnifying-glass-arrow-right::before {
+ content: "\e521"; }
+
+.fa-tachograph-digital::before {
+ content: "\f566"; }
+
+.fa-digital-tachograph::before {
+ content: "\f566"; }
+
+.fa-face-mask::before {
+ content: "\e37f"; }
+
+.fa-pickleball::before {
+ content: "\e435"; }
+
+.fa-star-sharp-half::before {
+ content: "\e28c"; }
+
+.fa-users-slash::before {
+ content: "\e073"; }
+
+.fa-clover::before {
+ content: "\e139"; }
+
+.fa-meat::before {
+ content: "\f814"; }
+
+.fa-reply::before {
+ content: "\f3e5"; }
+
+.fa-mail-reply::before {
+ content: "\f3e5"; }
+
+.fa-star-and-crescent::before {
+ content: "\f699"; }
+
+.fa-empty-set::before {
+ content: "\f656"; }
+
+.fa-house-fire::before {
+ content: "\e50c"; }
+
+.fa-square-minus::before {
+ content: "\f146"; }
+
+.fa-minus-square::before {
+ content: "\f146"; }
+
+.fa-helicopter::before {
+ content: "\f533"; }
+
+.fa-bird::before {
+ content: "\e469"; }
+
+.fa-compass::before {
+ content: "\f14e"; }
+
+.fa-square-caret-down::before {
+ content: "\f150"; }
+
+.fa-caret-square-down::before {
+ content: "\f150"; }
+
+.fa-heart-half-stroke::before {
+ content: "\e1ac"; }
+
+.fa-heart-half-alt::before {
+ content: "\e1ac"; }
+
+.fa-file-circle-question::before {
+ content: "\e4ef"; }
+
+.fa-laptop-code::before {
+ content: "\f5fc"; }
+
+.fa-joystick::before {
+ content: "\f8c5"; }
+
+.fa-grill-fire::before {
+ content: "\e5a4"; }
+
+.fa-rectangle-vertical-history::before {
+ content: "\e237"; }
+
+.fa-swatchbook::before {
+ content: "\f5c3"; }
+
+.fa-prescription-bottle::before {
+ content: "\f485"; }
+
+.fa-bars::before {
+ content: "\f0c9"; }
+
+.fa-navicon::before {
+ content: "\f0c9"; }
+
+.fa-keyboard-left::before {
+ content: "\e1c3"; }
+
+.fa-people-group::before {
+ content: "\e533"; }
+
+.fa-hourglass-end::before {
+ content: "\f253"; }
+
+.fa-hourglass-3::before {
+ content: "\f253"; }
+
+.fa-heart-crack::before {
+ content: "\f7a9"; }
+
+.fa-heart-broken::before {
+ content: "\f7a9"; }
+
+.fa-face-beam-hand-over-mouth::before {
+ content: "\e47c"; }
+
+.fa-droplet-percent::before {
+ content: "\f750"; }
+
+.fa-humidity::before {
+ content: "\f750"; }
+
+.fa-square-up-right::before {
+ content: "\f360"; }
+
+.fa-external-link-square-alt::before {
+ content: "\f360"; }
+
+.fa-face-kiss-beam::before {
+ content: "\f597"; }
+
+.fa-kiss-beam::before {
+ content: "\f597"; }
+
+.fa-corn::before {
+ content: "\f6c7"; }
+
+.fa-roller-coaster::before {
+ content: "\e324"; }
+
+.fa-photo-film-music::before {
+ content: "\e228"; }
+
+.fa-radar::before {
+ content: "\e024"; }
+
+.fa-sickle::before {
+ content: "\f822"; }
+
+.fa-film::before {
+ content: "\f008"; }
+
+.fa-coconut::before {
+ content: "\e2f6"; }
+
+.fa-ruler-horizontal::before {
+ content: "\f547"; }
+
+.fa-shield-cross::before {
+ content: "\f712"; }
+
+.fa-cassette-tape::before {
+ content: "\f8ab"; }
+
+.fa-square-terminal::before {
+ content: "\e32a"; }
+
+.fa-people-robbery::before {
+ content: "\e536"; }
+
+.fa-lightbulb::before {
+ content: "\f0eb"; }
+
+.fa-caret-left::before {
+ content: "\f0d9"; }
+
+.fa-comment-middle::before {
+ content: "\e149"; }
+
+.fa-trash-can-list::before {
+ content: "\e2ab"; }
+
+.fa-block::before {
+ content: "\e46a"; }
+
+.fa-circle-exclamation::before {
+ content: "\f06a"; }
+
+.fa-exclamation-circle::before {
+ content: "\f06a"; }
+
+.fa-school-circle-xmark::before {
+ content: "\e56d"; }
+
+.fa-arrow-right-from-bracket::before {
+ content: "\f08b"; }
+
+.fa-sign-out::before {
+ content: "\f08b"; }
+
+.fa-face-frown-slight::before {
+ content: "\e376"; }
+
+.fa-circle-chevron-down::before {
+ content: "\f13a"; }
+
+.fa-chevron-circle-down::before {
+ content: "\f13a"; }
+
+.fa-sidebar-flip::before {
+ content: "\e24f"; }
+
+.fa-unlock-keyhole::before {
+ content: "\f13e"; }
+
+.fa-unlock-alt::before {
+ content: "\f13e"; }
+
+.fa-temperature-list::before {
+ content: "\e299"; }
+
+.fa-cloud-showers-heavy::before {
+ content: "\f740"; }
+
+.fa-headphones-simple::before {
+ content: "\f58f"; }
+
+.fa-headphones-alt::before {
+ content: "\f58f"; }
+
+.fa-sitemap::before {
+ content: "\f0e8"; }
+
+.fa-pipe-section::before {
+ content: "\e438"; }
+
+.fa-space-station-moon-construction::before {
+ content: "\e034"; }
+
+.fa-space-station-moon-alt::before {
+ content: "\e034"; }
+
+.fa-circle-dollar-to-slot::before {
+ content: "\f4b9"; }
+
+.fa-donate::before {
+ content: "\f4b9"; }
+
+.fa-memory::before {
+ content: "\f538"; }
+
+.fa-face-sleeping::before {
+ content: "\e38d"; }
+
+.fa-road-spikes::before {
+ content: "\e568"; }
+
+.fa-fire-burner::before {
+ content: "\e4f1"; }
+
+.fa-squirrel::before {
+ content: "\f71a"; }
+
+.fa-arrow-up-to-line::before {
+ content: "\f341"; }
+
+.fa-arrow-to-top::before {
+ content: "\f341"; }
+
+.fa-flag::before {
+ content: "\f024"; }
+
+.fa-face-cowboy-hat::before {
+ content: "\e36e"; }
+
+.fa-hanukiah::before {
+ content: "\f6e6"; }
+
+.fa-chart-scatter-3d::before {
+ content: "\e0e8"; }
+
+.fa-square-code::before {
+ content: "\e267"; }
+
+.fa-feather::before {
+ content: "\f52d"; }
+
+.fa-volume-low::before {
+ content: "\f027"; }
+
+.fa-volume-down::before {
+ content: "\f027"; }
+
+.fa-xmark-to-slot::before {
+ content: "\f771"; }
+
+.fa-times-to-slot::before {
+ content: "\f771"; }
+
+.fa-vote-nay::before {
+ content: "\f771"; }
+
+.fa-box-taped::before {
+ content: "\f49a"; }
+
+.fa-box-alt::before {
+ content: "\f49a"; }
+
+.fa-comment-slash::before {
+ content: "\f4b3"; }
+
+.fa-swords::before {
+ content: "\f71d"; }
+
+.fa-cloud-sun-rain::before {
+ content: "\f743"; }
+
+.fa-album::before {
+ content: "\f89f"; }
+
+.fa-circle-n::before {
+ content: "\e118"; }
+
+.fa-compress::before {
+ content: "\f066"; }
+
+.fa-wheat-awn::before {
+ content: "\e2cd"; }
+
+.fa-wheat-alt::before {
+ content: "\e2cd"; }
+
+.fa-ankh::before {
+ content: "\f644"; }
+
+.fa-hands-holding-child::before {
+ content: "\e4fa"; }
+
+.fa-asterisk::before {
+ content: "\2a"; }
+
+.fa-key-skeleton-left-right::before {
+ content: "\e3b4"; }
+
+.fa-comment-lines::before {
+ content: "\f4b0"; }
+
+.fa-luchador-mask::before {
+ content: "\f455"; }
+
+.fa-luchador::before {
+ content: "\f455"; }
+
+.fa-mask-luchador::before {
+ content: "\f455"; }
+
+.fa-square-check::before {
+ content: "\f14a"; }
+
+.fa-check-square::before {
+ content: "\f14a"; }
+
+.fa-shredder::before {
+ content: "\f68a"; }
+
+.fa-book-open-cover::before {
+ content: "\e0c0"; }
+
+.fa-book-open-alt::before {
+ content: "\e0c0"; }
+
+.fa-sandwich::before {
+ content: "\f81f"; }
+
+.fa-peseta-sign::before {
+ content: "\e221"; }
+
+.fa-square-parking-slash::before {
+ content: "\f617"; }
+
+.fa-parking-slash::before {
+ content: "\f617"; }
+
+.fa-train-tunnel::before {
+ content: "\e454"; }
+
+.fa-heading::before {
+ content: "\f1dc"; }
+
+.fa-header::before {
+ content: "\f1dc"; }
+
+.fa-ghost::before {
+ content: "\f6e2"; }
+
+.fa-face-anguished::before {
+ content: "\e369"; }
+
+.fa-hockey-sticks::before {
+ content: "\f454"; }
+
+.fa-abacus::before {
+ content: "\f640"; }
+
+.fa-film-simple::before {
+ content: "\f3a0"; }
+
+.fa-film-alt::before {
+ content: "\f3a0"; }
+
+.fa-list::before {
+ content: "\f03a"; }
+
+.fa-list-squares::before {
+ content: "\f03a"; }
+
+.fa-tree-palm::before {
+ content: "\f82b"; }
+
+.fa-square-phone-flip::before {
+ content: "\f87b"; }
+
+.fa-phone-square-alt::before {
+ content: "\f87b"; }
+
+.fa-cart-plus::before {
+ content: "\f217"; }
+
+.fa-gamepad::before {
+ content: "\f11b"; }
+
+.fa-border-center-v::before {
+ content: "\f89d"; }
+
+.fa-circle-dot::before {
+ content: "\f192"; }
+
+.fa-dot-circle::before {
+ content: "\f192"; }
+
+.fa-clipboard-medical::before {
+ content: "\e133"; }
+
+.fa-face-dizzy::before {
+ content: "\f567"; }
+
+.fa-dizzy::before {
+ content: "\f567"; }
+
+.fa-egg::before {
+ content: "\f7fb"; }
+
+.fa-up-to-line::before {
+ content: "\f34d"; }
+
+.fa-arrow-alt-to-top::before {
+ content: "\f34d"; }
+
+.fa-house-medical-circle-xmark::before {
+ content: "\e513"; }
+
+.fa-watch-fitness::before {
+ content: "\f63e"; }
+
+.fa-clock-nine-thirty::before {
+ content: "\e34d"; }
+
+.fa-campground::before {
+ content: "\f6bb"; }
+
+.fa-folder-plus::before {
+ content: "\f65e"; }
+
+.fa-jug::before {
+ content: "\f8c6"; }
+
+.fa-futbol::before {
+ content: "\f1e3"; }
+
+.fa-futbol-ball::before {
+ content: "\f1e3"; }
+
+.fa-soccer-ball::before {
+ content: "\f1e3"; }
+
+.fa-snow-blowing::before {
+ content: "\f761"; }
+
+.fa-paintbrush::before {
+ content: "\f1fc"; }
+
+.fa-paint-brush::before {
+ content: "\f1fc"; }
+
+.fa-lock::before {
+ content: "\f023"; }
+
+.fa-arrow-down-from-line::before {
+ content: "\f345"; }
+
+.fa-arrow-from-top::before {
+ content: "\f345"; }
+
+.fa-gas-pump::before {
+ content: "\f52f"; }
+
+.fa-signal-bars-slash::before {
+ content: "\f694"; }
+
+.fa-signal-alt-slash::before {
+ content: "\f694"; }
+
+.fa-monkey::before {
+ content: "\f6fb"; }
+
+.fa-rectangle-pro::before {
+ content: "\e235"; }
+
+.fa-pro::before {
+ content: "\e235"; }
+
+.fa-house-night::before {
+ content: "\e010"; }
+
+.fa-hot-tub-person::before {
+ content: "\f593"; }
+
+.fa-hot-tub::before {
+ content: "\f593"; }
+
+.fa-blanket::before {
+ content: "\f498"; }
+
+.fa-map-location::before {
+ content: "\f59f"; }
+
+.fa-map-marked::before {
+ content: "\f59f"; }
+
+.fa-house-flood-water::before {
+ content: "\e50e"; }
+
+.fa-comments-question-check::before {
+ content: "\e14f"; }
+
+.fa-tree::before {
+ content: "\f1bb"; }
+
+.fa-arrows-cross::before {
+ content: "\e0a2"; }
+
+.fa-backpack::before {
+ content: "\f5d4"; }
+
+.fa-square-small::before {
+ content: "\e27e"; }
+
+.fa-folder-arrow-up::before {
+ content: "\e054"; }
+
+.fa-folder-upload::before {
+ content: "\e054"; }
+
+.fa-bridge-lock::before {
+ content: "\e4cc"; }
+
+.fa-crosshairs-simple::before {
+ content: "\e59f"; }
+
+.fa-sack-dollar::before {
+ content: "\f81d"; }
+
+.fa-pen-to-square::before {
+ content: "\f044"; }
+
+.fa-edit::before {
+ content: "\f044"; }
+
+.fa-square-sliders::before {
+ content: "\f3f0"; }
+
+.fa-sliders-h-square::before {
+ content: "\f3f0"; }
+
+.fa-car-side::before {
+ content: "\f5e4"; }
+
+.fa-message-middle-top::before {
+ content: "\e1e2"; }
+
+.fa-comment-middle-top-alt::before {
+ content: "\e1e2"; }
+
+.fa-lightbulb-on::before {
+ content: "\f672"; }
+
+.fa-knife::before {
+ content: "\f2e4"; }
+
+.fa-utensil-knife::before {
+ content: "\f2e4"; }
+
+.fa-share-nodes::before {
+ content: "\f1e0"; }
+
+.fa-share-alt::before {
+ content: "\f1e0"; }
+
+.fa-wave-sine::before {
+ content: "\f899"; }
+
+.fa-heart-circle-minus::before {
+ content: "\e4ff"; }
+
+.fa-circle-w::before {
+ content: "\e12c"; }
+
+.fa-circle-calendar::before {
+ content: "\e102"; }
+
+.fa-calendar-circle::before {
+ content: "\e102"; }
+
+.fa-hourglass-half::before {
+ content: "\f252"; }
+
+.fa-hourglass-2::before {
+ content: "\f252"; }
+
+.fa-microscope::before {
+ content: "\f610"; }
+
+.fa-sunset::before {
+ content: "\f767"; }
+
+.fa-sink::before {
+ content: "\e06d"; }
+
+.fa-calendar-exclamation::before {
+ content: "\f334"; }
+
+.fa-truck-container-empty::before {
+ content: "\e2b5"; }
+
+.fa-hand-heart::before {
+ content: "\f4bc"; }
+
+.fa-bag-shopping::before {
+ content: "\f290"; }
+
+.fa-shopping-bag::before {
+ content: "\f290"; }
+
+.fa-arrow-down-z-a::before {
+ content: "\f881"; }
+
+.fa-sort-alpha-desc::before {
+ content: "\f881"; }
+
+.fa-sort-alpha-down-alt::before {
+ content: "\f881"; }
+
+.fa-mitten::before {
+ content: "\f7b5"; }
+
+.fa-reply-clock::before {
+ content: "\e239"; }
+
+.fa-reply-time::before {
+ content: "\e239"; }
+
+.fa-person-rays::before {
+ content: "\e54d"; }
+
+.fa-right::before {
+ content: "\f356"; }
+
+.fa-arrow-alt-right::before {
+ content: "\f356"; }
+
+.fa-circle-f::before {
+ content: "\e10e"; }
+
+.fa-users::before {
+ content: "\f0c0"; }
+
+.fa-face-pleading::before {
+ content: "\e386"; }
+
+.fa-eye-slash::before {
+ content: "\f070"; }
+
+.fa-flask-vial::before {
+ content: "\e4f3"; }
+
+.fa-police-box::before {
+ content: "\e021"; }
+
+.fa-cucumber::before {
+ content: "\e401"; }
+
+.fa-head-side-brain::before {
+ content: "\f808"; }
+
+.fa-hand::before {
+ content: "\f256"; }
+
+.fa-hand-paper::before {
+ content: "\f256"; }
+
+.fa-person-biking-mountain::before {
+ content: "\f84b"; }
+
+.fa-biking-mountain::before {
+ content: "\f84b"; }
+
+.fa-utensils-slash::before {
+ content: "\e464"; }
+
+.fa-print-magnifying-glass::before {
+ content: "\f81a"; }
+
+.fa-print-search::before {
+ content: "\f81a"; }
+
+.fa-folder-bookmark::before {
+ content: "\e186"; }
+
+.fa-om::before {
+ content: "\f679"; }
+
+.fa-pi::before {
+ content: "\f67e"; }
+
+.fa-flask-round-potion::before {
+ content: "\f6e1"; }
+
+.fa-flask-potion::before {
+ content: "\f6e1"; }
+
+.fa-face-shush::before {
+ content: "\e38c"; }
+
+.fa-worm::before {
+ content: "\e599"; }
+
+.fa-house-circle-xmark::before {
+ content: "\e50b"; }
+
+.fa-plug::before {
+ content: "\f1e6"; }
+
+.fa-calendar-circle-exclamation::before {
+ content: "\e46e"; }
+
+.fa-square-i::before {
+ content: "\e272"; }
+
+.fa-chevron-up::before {
+ content: "\f077"; }
+
+.fa-face-saluting::before {
+ content: "\e484"; }
+
+.fa-gauge-simple-low::before {
+ content: "\f62c"; }
+
+.fa-tachometer-slow::before {
+ content: "\f62c"; }
+
+.fa-face-persevering::before {
+ content: "\e385"; }
+
+.fa-circle-camera::before {
+ content: "\e103"; }
+
+.fa-camera-circle::before {
+ content: "\e103"; }
+
+.fa-hand-spock::before {
+ content: "\f259"; }
+
+.fa-spider-web::before {
+ content: "\f719"; }
+
+.fa-circle-microphone::before {
+ content: "\e116"; }
+
+.fa-microphone-circle::before {
+ content: "\e116"; }
+
+.fa-book-arrow-up::before {
+ content: "\e0ba"; }
+
+.fa-popsicle::before {
+ content: "\e43e"; }
+
+.fa-command::before {
+ content: "\e142"; }
+
+.fa-blinds::before {
+ content: "\f8fb"; }
+
+.fa-stopwatch::before {
+ content: "\f2f2"; }
+
+.fa-saxophone::before {
+ content: "\f8dc"; }
+
+.fa-square-2::before {
+ content: "\e257"; }
+
+.fa-field-hockey-stick-ball::before {
+ content: "\f44c"; }
+
+.fa-field-hockey::before {
+ content: "\f44c"; }
+
+.fa-arrow-up-square-triangle::before {
+ content: "\f88b"; }
+
+.fa-sort-shapes-up-alt::before {
+ content: "\f88b"; }
+
+.fa-face-scream::before {
+ content: "\e38b"; }
+
+.fa-square-m::before {
+ content: "\e276"; }
+
+.fa-camera-web::before {
+ content: "\f832"; }
+
+.fa-webcam::before {
+ content: "\f832"; }
+
+.fa-comment-arrow-down::before {
+ content: "\e143"; }
+
+.fa-lightbulb-cfl::before {
+ content: "\e5a6"; }
+
+.fa-window-frame-open::before {
+ content: "\e050"; }
+
+.fa-face-kiss::before {
+ content: "\f596"; }
+
+.fa-kiss::before {
+ content: "\f596"; }
+
+.fa-bridge-circle-xmark::before {
+ content: "\e4cb"; }
+
+.fa-period::before {
+ content: "\2e"; }
+
+.fa-face-grin-tongue::before {
+ content: "\f589"; }
+
+.fa-grin-tongue::before {
+ content: "\f589"; }
+
+.fa-up-to-dotted-line::before {
+ content: "\e457"; }
+
+.fa-thought-bubble::before {
+ content: "\e32e"; }
+
+.fa-raygun::before {
+ content: "\e025"; }
+
+.fa-flute::before {
+ content: "\f8b9"; }
+
+.fa-acorn::before {
+ content: "\f6ae"; }
+
+.fa-video-arrow-up-right::before {
+ content: "\e2c9"; }
+
+.fa-grate-droplet::before {
+ content: "\e194"; }
+
+.fa-seal-exclamation::before {
+ content: "\e242"; }
+
+.fa-chess-bishop::before {
+ content: "\f43a"; }
+
+.fa-message-sms::before {
+ content: "\e1e5"; }
+
+.fa-coffee-beans::before {
+ content: "\e13f"; }
+
+.fa-hat-witch::before {
+ content: "\f6e7"; }
+
+.fa-face-grin-wink::before {
+ content: "\f58c"; }
+
+.fa-grin-wink::before {
+ content: "\f58c"; }
+
+.fa-clock-three-thirty::before {
+ content: "\e357"; }
+
+.fa-ear-deaf::before {
+ content: "\f2a4"; }
+
+.fa-deaf::before {
+ content: "\f2a4"; }
+
+.fa-deafness::before {
+ content: "\f2a4"; }
+
+.fa-hard-of-hearing::before {
+ content: "\f2a4"; }
+
+.fa-alarm-clock::before {
+ content: "\f34e"; }
+
+.fa-eclipse::before {
+ content: "\f749"; }
+
+.fa-face-relieved::before {
+ content: "\e389"; }
+
+.fa-road-circle-check::before {
+ content: "\e564"; }
+
+.fa-dice-five::before {
+ content: "\f523"; }
+
+.fa-octagon-minus::before {
+ content: "\f308"; }
+
+.fa-minus-octagon::before {
+ content: "\f308"; }
+
+.fa-square-rss::before {
+ content: "\f143"; }
+
+.fa-rss-square::before {
+ content: "\f143"; }
+
+.fa-face-zany::before {
+ content: "\e3a4"; }
+
+.fa-tricycle::before {
+ content: "\e5c3"; }
+
+.fa-land-mine-on::before {
+ content: "\e51b"; }
+
+.fa-square-arrow-up-left::before {
+ content: "\e263"; }
+
+.fa-i-cursor::before {
+ content: "\f246"; }
+
+.fa-salt-shaker::before {
+ content: "\e446"; }
+
+.fa-stamp::before {
+ content: "\f5bf"; }
+
+.fa-file-plus::before {
+ content: "\f319"; }
+
+.fa-draw-square::before {
+ content: "\f5ef"; }
+
+.fa-toilet-paper-under-slash::before {
+ content: "\e2a1"; }
+
+.fa-toilet-paper-reverse-slash::before {
+ content: "\e2a1"; }
+
+.fa-stairs::before {
+ content: "\e289"; }
+
+.fa-drone-front::before {
+ content: "\f860"; }
+
+.fa-drone-alt::before {
+ content: "\f860"; }
+
+.fa-glass-empty::before {
+ content: "\e191"; }
+
+.fa-dial-high::before {
+ content: "\e15c"; }
+
+.fa-user-helmet-safety::before {
+ content: "\f82c"; }
+
+.fa-user-construction::before {
+ content: "\f82c"; }
+
+.fa-user-hard-hat::before {
+ content: "\f82c"; }
+
+.fa-i::before {
+ content: "\49"; }
+
+.fa-hryvnia-sign::before {
+ content: "\f6f2"; }
+
+.fa-hryvnia::before {
+ content: "\f6f2"; }
+
+.fa-arrow-down-left-and-arrow-up-right-to-center::before {
+ content: "\e092"; }
+
+.fa-pills::before {
+ content: "\f484"; }
+
+.fa-face-grin-wide::before {
+ content: "\f581"; }
+
+.fa-grin-alt::before {
+ content: "\f581"; }
+
+.fa-tooth::before {
+ content: "\f5c9"; }
+
+.fa-basketball-hoop::before {
+ content: "\f435"; }
+
+.fa-objects-align-bottom::before {
+ content: "\e3bb"; }
+
+.fa-v::before {
+ content: "\56"; }
+
+.fa-sparkles::before {
+ content: "\f890"; }
+
+.fa-squid::before {
+ content: "\e450"; }
+
+.fa-leafy-green::before {
+ content: "\e41d"; }
+
+.fa-circle-arrow-up-right::before {
+ content: "\e0fc"; }
+
+.fa-calendars::before {
+ content: "\e0d7"; }
+
+.fa-bangladeshi-taka-sign::before {
+ content: "\e2e6"; }
+
+.fa-bicycle::before {
+ content: "\f206"; }
+
+.fa-hammer-war::before {
+ content: "\f6e4"; }
+
+.fa-circle-d::before {
+ content: "\e104"; }
+
+.fa-spider-black-widow::before {
+ content: "\f718"; }
+
+.fa-staff-snake::before {
+ content: "\e579"; }
+
+.fa-rod-asclepius::before {
+ content: "\e579"; }
+
+.fa-rod-snake::before {
+ content: "\e579"; }
+
+.fa-staff-aesculapius::before {
+ content: "\e579"; }
+
+.fa-pear::before {
+ content: "\e20c"; }
+
+.fa-head-side-cough-slash::before {
+ content: "\e062"; }
+
+.fa-triangle::before {
+ content: "\f2ec"; }
+
+.fa-apartment::before {
+ content: "\e468"; }
+
+.fa-truck-medical::before {
+ content: "\f0f9"; }
+
+.fa-ambulance::before {
+ content: "\f0f9"; }
+
+.fa-pepper::before {
+ content: "\e432"; }
+
+.fa-piano::before {
+ content: "\f8d4"; }
+
+.fa-gun-squirt::before {
+ content: "\e19d"; }
+
+.fa-wheat-awn-circle-exclamation::before {
+ content: "\e598"; }
+
+.fa-snowman::before {
+ content: "\f7d0"; }
+
+.fa-user-alien::before {
+ content: "\e04a"; }
+
+.fa-shield-check::before {
+ content: "\f2f7"; }
+
+.fa-mortar-pestle::before {
+ content: "\f5a7"; }
+
+.fa-road-barrier::before {
+ content: "\e562"; }
+
+.fa-chart-candlestick::before {
+ content: "\e0e2"; }
+
+.fa-briefcase-blank::before {
+ content: "\e0c8"; }
+
+.fa-school::before {
+ content: "\f549"; }
+
+.fa-igloo::before {
+ content: "\f7ae"; }
+
+.fa-bracket-round::before {
+ content: "\28"; }
+
+.fa-parenthesis::before {
+ content: "\28"; }
+
+.fa-joint::before {
+ content: "\f595"; }
+
+.fa-horse-saddle::before {
+ content: "\f8c3"; }
+
+.fa-mug-marshmallows::before {
+ content: "\f7b7"; }
+
+.fa-filters::before {
+ content: "\e17e"; }
+
+.fa-bell-on::before {
+ content: "\f8fa"; }
+
+.fa-angle-right::before {
+ content: "\f105"; }
+
+.fa-dial-med::before {
+ content: "\e15f"; }
+
+.fa-horse::before {
+ content: "\f6f0"; }
+
+.fa-q::before {
+ content: "\51"; }
+
+.fa-monitor-waveform::before {
+ content: "\f611"; }
+
+.fa-monitor-heart-rate::before {
+ content: "\f611"; }
+
+.fa-link-simple::before {
+ content: "\e1cd"; }
+
+.fa-whistle::before {
+ content: "\f460"; }
+
+.fa-g::before {
+ content: "\47"; }
+
+.fa-wine-glass-crack::before {
+ content: "\f4bb"; }
+
+.fa-fragile::before {
+ content: "\f4bb"; }
+
+.fa-slot-machine::before {
+ content: "\e3ce"; }
+
+.fa-notes-medical::before {
+ content: "\f481"; }
+
+.fa-car-wash::before {
+ content: "\f5e6"; }
+
+.fa-escalator::before {
+ content: "\e171"; }
+
+.fa-comment-image::before {
+ content: "\e148"; }
+
+.fa-temperature-half::before {
+ content: "\f2c9"; }
+
+.fa-temperature-2::before {
+ content: "\f2c9"; }
+
+.fa-thermometer-2::before {
+ content: "\f2c9"; }
+
+.fa-thermometer-half::before {
+ content: "\f2c9"; }
+
+.fa-dong-sign::before {
+ content: "\e169"; }
+
+.fa-donut::before {
+ content: "\e406"; }
+
+.fa-doughnut::before {
+ content: "\e406"; }
+
+.fa-capsules::before {
+ content: "\f46b"; }
+
+.fa-poo-storm::before {
+ content: "\f75a"; }
+
+.fa-poo-bolt::before {
+ content: "\f75a"; }
+
+.fa-tally-1::before {
+ content: "\e294"; }
+
+.fa-face-frown-open::before {
+ content: "\f57a"; }
+
+.fa-frown-open::before {
+ content: "\f57a"; }
+
+.fa-square-dashed::before {
+ content: "\e269"; }
+
+.fa-square-j::before {
+ content: "\e273"; }
+
+.fa-hand-point-up::before {
+ content: "\f0a6"; }
+
+.fa-money-bill::before {
+ content: "\f0d6"; }
+
+.fa-arrow-up-big-small::before {
+ content: "\f88e"; }
+
+.fa-sort-size-up::before {
+ content: "\f88e"; }
+
+.fa-barcode-read::before {
+ content: "\f464"; }
+
+.fa-baguette::before {
+ content: "\e3d8"; }
+
+.fa-bowl-soft-serve::before {
+ content: "\e46b"; }
+
+.fa-face-holding-back-tears::before {
+ content: "\e482"; }
+
+.fa-square-up::before {
+ content: "\f353"; }
+
+.fa-arrow-alt-square-up::before {
+ content: "\f353"; }
+
+.fa-train-subway-tunnel::before {
+ content: "\e2a3"; }
+
+.fa-subway-tunnel::before {
+ content: "\e2a3"; }
+
+.fa-square-exclamation::before {
+ content: "\f321"; }
+
+.fa-exclamation-square::before {
+ content: "\f321"; }
+
+.fa-semicolon::before {
+ content: "\3b"; }
+
+.fa-bookmark::before {
+ content: "\f02e"; }
+
+.fa-fan-table::before {
+ content: "\e004"; }
+
+.fa-align-justify::before {
+ content: "\f039"; }
+
+.fa-battery-low::before {
+ content: "\e0b1"; }
+
+.fa-battery-1::before {
+ content: "\e0b1"; }
+
+.fa-credit-card-front::before {
+ content: "\f38a"; }
+
+.fa-brain-arrow-curved-right::before {
+ content: "\f677"; }
+
+.fa-mind-share::before {
+ content: "\f677"; }
+
+.fa-umbrella-beach::before {
+ content: "\f5ca"; }
+
+.fa-helmet-un::before {
+ content: "\e503"; }
+
+.fa-location-smile::before {
+ content: "\f60d"; }
+
+.fa-map-marker-smile::before {
+ content: "\f60d"; }
+
+.fa-arrow-left-to-line::before {
+ content: "\f33e"; }
+
+.fa-arrow-to-left::before {
+ content: "\f33e"; }
+
+.fa-bullseye::before {
+ content: "\f140"; }
+
+.fa-sushi::before {
+ content: "\e48a"; }
+
+.fa-nigiri::before {
+ content: "\e48a"; }
+
+.fa-message-captions::before {
+ content: "\e1de"; }
+
+.fa-comment-alt-captions::before {
+ content: "\e1de"; }
+
+.fa-trash-list::before {
+ content: "\e2b1"; }
+
+.fa-bacon::before {
+ content: "\f7e5"; }
+
+.fa-option::before {
+ content: "\e318"; }
+
+.fa-hand-point-down::before {
+ content: "\f0a7"; }
+
+.fa-arrow-up-from-bracket::before {
+ content: "\e09a"; }
+
+.fa-trash-plus::before {
+ content: "\e2b2"; }
+
+.fa-objects-align-top::before {
+ content: "\e3c0"; }
+
+.fa-folder::before {
+ content: "\f07b"; }
+
+.fa-folder-blank::before {
+ content: "\f07b"; }
+
+.fa-face-anxious-sweat::before {
+ content: "\e36a"; }
+
+.fa-credit-card-blank::before {
+ content: "\f389"; }
+
+.fa-file-waveform::before {
+ content: "\f478"; }
+
+.fa-file-medical-alt::before {
+ content: "\f478"; }
+
+.fa-microchip-ai::before {
+ content: "\e1ec"; }
+
+.fa-mug::before {
+ content: "\f874"; }
+
+.fa-plane-up-slash::before {
+ content: "\e22e"; }
+
+.fa-radiation::before {
+ content: "\f7b9"; }
+
+.fa-pen-circle::before {
+ content: "\e20e"; }
+
+.fa-chart-simple::before {
+ content: "\e473"; }
+
+.fa-crutches::before {
+ content: "\f7f8"; }
+
+.fa-circle-parking::before {
+ content: "\f615"; }
+
+.fa-parking-circle::before {
+ content: "\f615"; }
+
+.fa-mars-stroke::before {
+ content: "\f229"; }
+
+.fa-leaf-oak::before {
+ content: "\f6f7"; }
+
+.fa-square-bolt::before {
+ content: "\e265"; }
+
+.fa-vial::before {
+ content: "\f492"; }
+
+.fa-gauge::before {
+ content: "\f624"; }
+
+.fa-dashboard::before {
+ content: "\f624"; }
+
+.fa-gauge-med::before {
+ content: "\f624"; }
+
+.fa-tachometer-alt-average::before {
+ content: "\f624"; }
+
+.fa-wand-magic-sparkles::before {
+ content: "\e2ca"; }
+
+.fa-magic-wand-sparkles::before {
+ content: "\e2ca"; }
+
+.fa-lambda::before {
+ content: "\f66e"; }
+
+.fa-e::before {
+ content: "\45"; }
+
+.fa-pizza::before {
+ content: "\f817"; }
+
+.fa-bowl-chopsticks-noodles::before {
+ content: "\e2ea"; }
+
+.fa-h3::before {
+ content: "\f315"; }
+
+.fa-pen-clip::before {
+ content: "\f305"; }
+
+.fa-pen-alt::before {
+ content: "\f305"; }
+
+.fa-bridge-circle-exclamation::before {
+ content: "\e4ca"; }
+
+.fa-badge-percent::before {
+ content: "\f646"; }
+
+.fa-user::before {
+ content: "\f007"; }
+
+.fa-sensor::before {
+ content: "\e028"; }
+
+.fa-comma::before {
+ content: "\2c"; }
+
+.fa-school-circle-check::before {
+ content: "\e56b"; }
+
+.fa-toilet-paper-under::before {
+ content: "\e2a0"; }
+
+.fa-toilet-paper-reverse::before {
+ content: "\e2a0"; }
+
+.fa-light-emergency::before {
+ content: "\e41f"; }
+
+.fa-arrow-down-to-arc::before {
+ content: "\e4ae"; }
+
+.fa-dumpster::before {
+ content: "\f793"; }
+
+.fa-van-shuttle::before {
+ content: "\f5b6"; }
+
+.fa-shuttle-van::before {
+ content: "\f5b6"; }
+
+.fa-building-user::before {
+ content: "\e4da"; }
+
+.fa-light-switch::before {
+ content: "\e017"; }
+
+.fa-square-caret-left::before {
+ content: "\f191"; }
+
+.fa-caret-square-left::before {
+ content: "\f191"; }
+
+.fa-highlighter::before {
+ content: "\f591"; }
+
+.fa-wave-pulse::before {
+ content: "\f5f8"; }
+
+.fa-heart-rate::before {
+ content: "\f5f8"; }
+
+.fa-key::before {
+ content: "\f084"; }
+
+.fa-hat-santa::before {
+ content: "\f7a7"; }
+
+.fa-tamale::before {
+ content: "\e451"; }
+
+.fa-box-check::before {
+ content: "\f467"; }
+
+.fa-bullhorn::before {
+ content: "\f0a1"; }
+
+.fa-steak::before {
+ content: "\f824"; }
+
+.fa-location-crosshairs-slash::before {
+ content: "\f603"; }
+
+.fa-location-slash::before {
+ content: "\f603"; }
+
+.fa-person-dolly::before {
+ content: "\f4d0"; }
+
+.fa-globe::before {
+ content: "\f0ac"; }
+
+.fa-synagogue::before {
+ content: "\f69b"; }
+
+.fa-file-chart-column::before {
+ content: "\f659"; }
+
+.fa-file-chart-line::before {
+ content: "\f659"; }
+
+.fa-person-half-dress::before {
+ content: "\e548"; }
+
+.fa-folder-image::before {
+ content: "\e18a"; }
+
+.fa-calendar-pen::before {
+ content: "\f333"; }
+
+.fa-calendar-edit::before {
+ content: "\f333"; }
+
+.fa-road-bridge::before {
+ content: "\e563"; }
+
+.fa-face-smile-tear::before {
+ content: "\e393"; }
+
+.fa-message-plus::before {
+ content: "\f4a8"; }
+
+.fa-comment-alt-plus::before {
+ content: "\f4a8"; }
+
+.fa-location-arrow::before {
+ content: "\f124"; }
+
+.fa-c::before {
+ content: "\43"; }
+
+.fa-tablet-button::before {
+ content: "\f10a"; }
+
+.fa-rectangle-history-circle-user::before {
+ content: "\e4a4"; }
+
+.fa-building-lock::before {
+ content: "\e4d6"; }
+
+.fa-chart-line-up::before {
+ content: "\e0e5"; }
+
+.fa-mailbox::before {
+ content: "\f813"; }
+
+.fa-truck-bolt::before {
+ content: "\e3d0"; }
+
+.fa-pizza-slice::before {
+ content: "\f818"; }
+
+.fa-money-bill-wave::before {
+ content: "\f53a"; }
+
+.fa-chart-area::before {
+ content: "\f1fe"; }
+
+.fa-area-chart::before {
+ content: "\f1fe"; }
+
+.fa-house-flag::before {
+ content: "\e50d"; }
+
+.fa-person-circle-minus::before {
+ content: "\e540"; }
+
+.fa-scalpel::before {
+ content: "\f61d"; }
+
+.fa-ban::before {
+ content: "\f05e"; }
+
+.fa-cancel::before {
+ content: "\f05e"; }
+
+.fa-bell-exclamation::before {
+ content: "\f848"; }
+
+.fa-circle-bookmark::before {
+ content: "\e100"; }
+
+.fa-bookmark-circle::before {
+ content: "\e100"; }
+
+.fa-egg-fried::before {
+ content: "\f7fc"; }
+
+.fa-face-weary::before {
+ content: "\e3a1"; }
+
+.fa-uniform-martial-arts::before {
+ content: "\e3d1"; }
+
+.fa-camera-rotate::before {
+ content: "\e0d8"; }
+
+.fa-sun-dust::before {
+ content: "\f764"; }
+
+.fa-comment-text::before {
+ content: "\e14d"; }
+
+.fa-spray-can-sparkles::before {
+ content: "\f5d0"; }
+
+.fa-air-freshener::before {
+ content: "\f5d0"; }
+
+.fa-signal-bars::before {
+ content: "\f690"; }
+
+.fa-signal-alt::before {
+ content: "\f690"; }
+
+.fa-signal-alt-4::before {
+ content: "\f690"; }
+
+.fa-signal-bars-strong::before {
+ content: "\f690"; }
+
+.fa-diamond-exclamation::before {
+ content: "\e405"; }
+
+.fa-star::before {
+ content: "\f005"; }
+
+.fa-dial-min::before {
+ content: "\e161"; }
+
+.fa-repeat::before {
+ content: "\f363"; }
+
+.fa-cross::before {
+ content: "\f654"; }
+
+.fa-page-caret-down::before {
+ content: "\e429"; }
+
+.fa-file-caret-down::before {
+ content: "\e429"; }
+
+.fa-box::before {
+ content: "\f466"; }
+
+.fa-venus-mars::before {
+ content: "\f228"; }
+
+.fa-clock-seven-thirty::before {
+ content: "\e351"; }
+
+.fa-arrow-pointer::before {
+ content: "\f245"; }
+
+.fa-mouse-pointer::before {
+ content: "\f245"; }
+
+.fa-clock-four-thirty::before {
+ content: "\e34b"; }
+
+.fa-signal-bars-good::before {
+ content: "\f693"; }
+
+.fa-signal-alt-3::before {
+ content: "\f693"; }
+
+.fa-cactus::before {
+ content: "\f8a7"; }
+
+.fa-maximize::before {
+ content: "\f31e"; }
+
+.fa-expand-arrows-alt::before {
+ content: "\f31e"; }
+
+.fa-charging-station::before {
+ content: "\f5e7"; }
+
+.fa-shapes::before {
+ content: "\f61f"; }
+
+.fa-triangle-circle-square::before {
+ content: "\f61f"; }
+
+.fa-plane-tail::before {
+ content: "\e22c"; }
+
+.fa-gauge-simple-max::before {
+ content: "\f62b"; }
+
+.fa-tachometer-fastest::before {
+ content: "\f62b"; }
+
+.fa-circle-u::before {
+ content: "\e127"; }
+
+.fa-shield-slash::before {
+ content: "\e24b"; }
+
+.fa-square-phone-hangup::before {
+ content: "\e27a"; }
+
+.fa-phone-square-down::before {
+ content: "\e27a"; }
+
+.fa-arrow-up-left::before {
+ content: "\e09d"; }
+
+.fa-transporter-1::before {
+ content: "\e043"; }
+
+.fa-peanuts::before {
+ content: "\e431"; }
+
+.fa-shuffle::before {
+ content: "\f074"; }
+
+.fa-random::before {
+ content: "\f074"; }
+
+.fa-person-running::before {
+ content: "\f70c"; }
+
+.fa-running::before {
+ content: "\f70c"; }
+
+.fa-mobile-retro::before {
+ content: "\e527"; }
+
+.fa-grip-lines-vertical::before {
+ content: "\f7a5"; }
+
+.fa-arrow-up-from-square::before {
+ content: "\e09c"; }
+
+.fa-file-dashed-line::before {
+ content: "\f877"; }
+
+.fa-page-break::before {
+ content: "\f877"; }
+
+.fa-bracket-curly-right::before {
+ content: "\7d"; }
+
+.fa-spider::before {
+ content: "\f717"; }
+
+.fa-clock-three::before {
+ content: "\e356"; }
+
+.fa-hands-bound::before {
+ content: "\e4f9"; }
+
+.fa-scalpel-line-dashed::before {
+ content: "\f61e"; }
+
+.fa-scalpel-path::before {
+ content: "\f61e"; }
+
+.fa-file-invoice-dollar::before {
+ content: "\f571"; }
+
+.fa-pipe-smoking::before {
+ content: "\e3c4"; }
+
+.fa-face-astonished::before {
+ content: "\e36b"; }
+
+.fa-window::before {
+ content: "\f40e"; }
+
+.fa-plane-circle-exclamation::before {
+ content: "\e556"; }
+
+.fa-ear::before {
+ content: "\f5f0"; }
+
+.fa-file-lock::before {
+ content: "\e3a6"; }
+
+.fa-diagram-venn::before {
+ content: "\e15a"; }
+
+.fa-x-ray::before {
+ content: "\f497"; }
+
+.fa-goal-net::before {
+ content: "\e3ab"; }
+
+.fa-coffin-cross::before {
+ content: "\e051"; }
+
+.fa-spell-check::before {
+ content: "\f891"; }
+
+.fa-location-xmark::before {
+ content: "\f60e"; }
+
+.fa-map-marker-times::before {
+ content: "\f60e"; }
+
+.fa-map-marker-xmark::before {
+ content: "\f60e"; }
+
+.fa-lasso::before {
+ content: "\f8c8"; }
+
+.fa-slash::before {
+ content: "\f715"; }
+
+.fa-person-to-portal::before {
+ content: "\e022"; }
+
+.fa-portal-enter::before {
+ content: "\e022"; }
+
+.fa-calendar-star::before {
+ content: "\f736"; }
+
+.fa-computer-mouse::before {
+ content: "\f8cc"; }
+
+.fa-mouse::before {
+ content: "\f8cc"; }
+
+.fa-arrow-right-to-bracket::before {
+ content: "\f090"; }
+
+.fa-sign-in::before {
+ content: "\f090"; }
+
+.fa-pegasus::before {
+ content: "\f703"; }
+
+.fa-files-medical::before {
+ content: "\f7fd"; }
+
+.fa-nfc-lock::before {
+ content: "\e1f8"; }
+
+.fa-person-ski-lift::before {
+ content: "\f7c8"; }
+
+.fa-ski-lift::before {
+ content: "\f7c8"; }
+
+.fa-square-6::before {
+ content: "\e25b"; }
+
+.fa-shop-slash::before {
+ content: "\e070"; }
+
+.fa-store-alt-slash::before {
+ content: "\e070"; }
+
+.fa-wind-turbine::before {
+ content: "\f89b"; }
+
+.fa-sliders-simple::before {
+ content: "\e253"; }
+
+.fa-badge-sheriff::before {
+ content: "\f8a2"; }
+
+.fa-server::before {
+ content: "\f233"; }
+
+.fa-virus-covid-slash::before {
+ content: "\e4a9"; }
+
+.fa-intersection::before {
+ content: "\f668"; }
+
+.fa-shop-lock::before {
+ content: "\e4a5"; }
+
+.fa-family::before {
+ content: "\e300"; }
+
+.fa-hourglass-start::before {
+ content: "\f251"; }
+
+.fa-hourglass-1::before {
+ content: "\f251"; }
+
+.fa-user-hair-buns::before {
+ content: "\e3d3"; }
+
+.fa-blender-phone::before {
+ content: "\f6b6"; }
+
+.fa-hourglass-clock::before {
+ content: "\e41b"; }
+
+.fa-person-seat-reclined::before {
+ content: "\e21f"; }
+
+.fa-paper-plane-top::before {
+ content: "\e20a"; }
+
+.fa-paper-plane-alt::before {
+ content: "\e20a"; }
+
+.fa-send::before {
+ content: "\e20a"; }
+
+.fa-message-arrow-up::before {
+ content: "\e1dc"; }
+
+.fa-comment-alt-arrow-up::before {
+ content: "\e1dc"; }
+
+.fa-lightbulb-exclamation::before {
+ content: "\f671"; }
+
+.fa-layer-minus::before {
+ content: "\f5fe"; }
+
+.fa-layer-group-minus::before {
+ content: "\f5fe"; }
+
+.fa-circle-e::before {
+ content: "\e109"; }
+
+.fa-building-wheat::before {
+ content: "\e4db"; }
+
+.fa-gauge-max::before {
+ content: "\f626"; }
+
+.fa-tachometer-alt-fastest::before {
+ content: "\f626"; }
+
+.fa-person-breastfeeding::before {
+ content: "\e53a"; }
+
+.fa-apostrophe::before {
+ content: "\27"; }
+
+.fa-fire-hydrant::before {
+ content: "\e17f"; }
+
+.fa-right-to-bracket::before {
+ content: "\f2f6"; }
+
+.fa-sign-in-alt::before {
+ content: "\f2f6"; }
+
+.fa-video-plus::before {
+ content: "\f4e1"; }
+
+.fa-square-right::before {
+ content: "\f352"; }
+
+.fa-arrow-alt-square-right::before {
+ content: "\f352"; }
+
+.fa-comment-smile::before {
+ content: "\f4b4"; }
+
+.fa-venus::before {
+ content: "\f221"; }
+
+.fa-passport::before {
+ content: "\f5ab"; }
+
+.fa-inbox-in::before {
+ content: "\f310"; }
+
+.fa-inbox-arrow-down::before {
+ content: "\f310"; }
+
+.fa-heart-pulse::before {
+ content: "\f21e"; }
+
+.fa-heartbeat::before {
+ content: "\f21e"; }
+
+.fa-circle-8::before {
+ content: "\e0f5"; }
+
+.fa-clouds-moon::before {
+ content: "\f745"; }
+
+.fa-clock-ten-thirty::before {
+ content: "\e355"; }
+
+.fa-people-carry-box::before {
+ content: "\f4ce"; }
+
+.fa-people-carry::before {
+ content: "\f4ce"; }
+
+.fa-folder-user::before {
+ content: "\e18e"; }
+
+.fa-trash-can-xmark::before {
+ content: "\e2ae"; }
+
+.fa-temperature-high::before {
+ content: "\f769"; }
+
+.fa-microchip::before {
+ content: "\f2db"; }
+
+.fa-left-long-to-line::before {
+ content: "\e41e"; }
+
+.fa-crown::before {
+ content: "\f521"; }
+
+.fa-weight-hanging::before {
+ content: "\f5cd"; }
+
+.fa-xmarks-lines::before {
+ content: "\e59a"; }
+
+.fa-file-prescription::before {
+ content: "\f572"; }
+
+.fa-calendar-range::before {
+ content: "\e0d6"; }
+
+.fa-flower-daffodil::before {
+ content: "\f800"; }
+
+.fa-hand-back-point-up::before {
+ content: "\e1a2"; }
+
+.fa-weight-scale::before {
+ content: "\f496"; }
+
+.fa-weight::before {
+ content: "\f496"; }
+
+.fa-star-exclamation::before {
+ content: "\f2f3"; }
+
+.fa-books::before {
+ content: "\f5db"; }
+
+.fa-user-group::before {
+ content: "\f500"; }
+
+.fa-user-friends::before {
+ content: "\f500"; }
+
+.fa-arrow-up-a-z::before {
+ content: "\f15e"; }
+
+.fa-sort-alpha-up::before {
+ content: "\f15e"; }
+
+.fa-layer-plus::before {
+ content: "\f5ff"; }
+
+.fa-layer-group-plus::before {
+ content: "\f5ff"; }
+
+.fa-play-pause::before {
+ content: "\e22f"; }
+
+.fa-block-question::before {
+ content: "\e3dd"; }
+
+.fa-snooze::before {
+ content: "\f880"; }
+
+.fa-zzz::before {
+ content: "\f880"; }
+
+.fa-scanner-image::before {
+ content: "\f8f3"; }
+
+.fa-tv-retro::before {
+ content: "\f401"; }
+
+.fa-square-t::before {
+ content: "\e280"; }
+
+.fa-farm::before {
+ content: "\f864"; }
+
+.fa-barn-silo::before {
+ content: "\f864"; }
+
+.fa-chess-knight::before {
+ content: "\f441"; }
+
+.fa-bars-sort::before {
+ content: "\e0ae"; }
+
+.fa-pallet-boxes::before {
+ content: "\f483"; }
+
+.fa-palette-boxes::before {
+ content: "\f483"; }
+
+.fa-pallet-alt::before {
+ content: "\f483"; }
+
+.fa-face-laugh-squint::before {
+ content: "\f59b"; }
+
+.fa-laugh-squint::before {
+ content: "\f59b"; }
+
+.fa-code-simple::before {
+ content: "\e13d"; }
+
+.fa-bolt-slash::before {
+ content: "\e0b8"; }
+
+.fa-panel-fire::before {
+ content: "\e42f"; }
+
+.fa-binary-circle-check::before {
+ content: "\e33c"; }
+
+.fa-comment-minus::before {
+ content: "\f4b1"; }
+
+.fa-burrito::before {
+ content: "\f7ed"; }
+
+.fa-violin::before {
+ content: "\f8ed"; }
+
+.fa-objects-column::before {
+ content: "\e3c1"; }
+
+.fa-square-chevron-down::before {
+ content: "\f329"; }
+
+.fa-chevron-square-down::before {
+ content: "\f329"; }
+
+.fa-comment-plus::before {
+ content: "\f4b2"; }
+
+.fa-triangle-instrument::before {
+ content: "\f8e2"; }
+
+.fa-triangle-music::before {
+ content: "\f8e2"; }
+
+.fa-wheelchair::before {
+ content: "\f193"; }
+
+.fa-user-pilot-tie::before {
+ content: "\e2c1"; }
+
+.fa-piano-keyboard::before {
+ content: "\f8d5"; }
+
+.fa-bed-empty::before {
+ content: "\f8f9"; }
+
+.fa-circle-arrow-up::before {
+ content: "\f0aa"; }
+
+.fa-arrow-circle-up::before {
+ content: "\f0aa"; }
+
+.fa-toggle-on::before {
+ content: "\f205"; }
+
+.fa-rectangle-vertical::before {
+ content: "\f2fb"; }
+
+.fa-rectangle-portrait::before {
+ content: "\f2fb"; }
+
+.fa-person-walking::before {
+ content: "\f554"; }
+
+.fa-walking::before {
+ content: "\f554"; }
+
+.fa-l::before {
+ content: "\4c"; }
+
+.fa-signal-stream::before {
+ content: "\f8dd"; }
+
+.fa-down-to-bracket::before {
+ content: "\e4e7"; }
+
+.fa-circle-z::before {
+ content: "\e130"; }
+
+.fa-stars::before {
+ content: "\f762"; }
+
+.fa-fire::before {
+ content: "\f06d"; }
+
+.fa-bed-pulse::before {
+ content: "\f487"; }
+
+.fa-procedures::before {
+ content: "\f487"; }
+
+.fa-house-day::before {
+ content: "\e00e"; }
+
+.fa-shuttle-space::before {
+ content: "\f197"; }
+
+.fa-space-shuttle::before {
+ content: "\f197"; }
+
+.fa-shirt-long-sleeve::before {
+ content: "\e3c7"; }
+
+.fa-chart-pie-simple::before {
+ content: "\f64e"; }
+
+.fa-chart-pie-alt::before {
+ content: "\f64e"; }
+
+.fa-face-laugh::before {
+ content: "\f599"; }
+
+.fa-laugh::before {
+ content: "\f599"; }
+
+.fa-folder-open::before {
+ content: "\f07c"; }
+
+.fa-album-collection-circle-user::before {
+ content: "\e48f"; }
+
+.fa-candy::before {
+ content: "\e3e7"; }
+
+.fa-bowl-hot::before {
+ content: "\f823"; }
+
+.fa-soup::before {
+ content: "\f823"; }
+
+.fa-flatbread::before {
+ content: "\e40b"; }
+
+.fa-heart-circle-plus::before {
+ content: "\e500"; }
+
+.fa-code-fork::before {
+ content: "\e13b"; }
+
+.fa-city::before {
+ content: "\f64f"; }
+
+.fa-signal-bars-weak::before {
+ content: "\f691"; }
+
+.fa-signal-alt-1::before {
+ content: "\f691"; }
+
+.fa-microphone-lines::before {
+ content: "\f3c9"; }
+
+.fa-microphone-alt::before {
+ content: "\f3c9"; }
+
+.fa-clock-twelve::before {
+ content: "\e358"; }
+
+.fa-pepper-hot::before {
+ content: "\f816"; }
+
+.fa-citrus-slice::before {
+ content: "\e2f5"; }
+
+.fa-sheep::before {
+ content: "\f711"; }
+
+.fa-unlock::before {
+ content: "\f09c"; }
+
+.fa-colon-sign::before {
+ content: "\e140"; }
+
+.fa-headset::before {
+ content: "\f590"; }
+
+.fa-badger-honey::before {
+ content: "\f6b4"; }
+
+.fa-h4::before {
+ content: "\f86a"; }
+
+.fa-store-slash::before {
+ content: "\e071"; }
+
+.fa-road-circle-xmark::before {
+ content: "\e566"; }
+
+.fa-signal-slash::before {
+ content: "\f695"; }
+
+.fa-user-minus::before {
+ content: "\f503"; }
+
+.fa-mars-stroke-up::before {
+ content: "\f22a"; }
+
+.fa-mars-stroke-v::before {
+ content: "\f22a"; }
+
+.fa-champagne-glasses::before {
+ content: "\f79f"; }
+
+.fa-glass-cheers::before {
+ content: "\f79f"; }
+
+.fa-taco::before {
+ content: "\f826"; }
+
+.fa-hexagon-plus::before {
+ content: "\f300"; }
+
+.fa-plus-hexagon::before {
+ content: "\f300"; }
+
+.fa-clipboard::before {
+ content: "\f328"; }
+
+.fa-house-circle-exclamation::before {
+ content: "\e50a"; }
+
+.fa-file-arrow-up::before {
+ content: "\f574"; }
+
+.fa-file-upload::before {
+ content: "\f574"; }
+
+.fa-wifi::before {
+ content: "\f1eb"; }
+
+.fa-wifi-3::before {
+ content: "\f1eb"; }
+
+.fa-wifi-strong::before {
+ content: "\f1eb"; }
+
+.fa-messages::before {
+ content: "\f4b6"; }
+
+.fa-comments-alt::before {
+ content: "\f4b6"; }
+
+.fa-bath::before {
+ content: "\f2cd"; }
+
+.fa-bathtub::before {
+ content: "\f2cd"; }
+
+.fa-umbrella-simple::before {
+ content: "\e2bc"; }
+
+.fa-umbrella-alt::before {
+ content: "\e2bc"; }
+
+.fa-rectangle-history-circle-plus::before {
+ content: "\e4a3"; }
+
+.fa-underline::before {
+ content: "\f0cd"; }
+
+.fa-prescription-bottle-pill::before {
+ content: "\e5c0"; }
+
+.fa-user-pen::before {
+ content: "\f4ff"; }
+
+.fa-user-edit::before {
+ content: "\f4ff"; }
+
+.fa-binary-slash::before {
+ content: "\e33e"; }
+
+.fa-square-o::before {
+ content: "\e278"; }
+
+.fa-signature::before {
+ content: "\f5b7"; }
+
+.fa-stroopwafel::before {
+ content: "\f551"; }
+
+.fa-bold::before {
+ content: "\f032"; }
+
+.fa-anchor-lock::before {
+ content: "\e4ad"; }
+
+.fa-building-ngo::before {
+ content: "\e4d7"; }
+
+.fa-transporter-3::before {
+ content: "\e045"; }
+
+.fa-engine-warning::before {
+ content: "\f5f2"; }
+
+.fa-engine-exclamation::before {
+ content: "\f5f2"; }
+
+.fa-circle-down-right::before {
+ content: "\e108"; }
+
+.fa-square-k::before {
+ content: "\e274"; }
+
+.fa-manat-sign::before {
+ content: "\e1d5"; }
+
+.fa-money-check-pen::before {
+ content: "\f872"; }
+
+.fa-money-check-edit::before {
+ content: "\f872"; }
+
+.fa-not-equal::before {
+ content: "\f53e"; }
+
+.fa-border-top-left::before {
+ content: "\f853"; }
+
+.fa-border-style::before {
+ content: "\f853"; }
+
+.fa-map-location-dot::before {
+ content: "\f5a0"; }
+
+.fa-map-marked-alt::before {
+ content: "\f5a0"; }
+
+.fa-tilde::before {
+ content: "\7e"; }
+
+.fa-jedi::before {
+ content: "\f669"; }
+
+.fa-square-poll-vertical::before {
+ content: "\f681"; }
+
+.fa-poll::before {
+ content: "\f681"; }
+
+.fa-arrow-down-square-triangle::before {
+ content: "\f889"; }
+
+.fa-sort-shapes-down-alt::before {
+ content: "\f889"; }
+
+.fa-mug-hot::before {
+ content: "\f7b6"; }
+
+.fa-dog-leashed::before {
+ content: "\f6d4"; }
+
+.fa-car-battery::before {
+ content: "\f5df"; }
+
+.fa-battery-car::before {
+ content: "\f5df"; }
+
+.fa-face-downcast-sweat::before {
+ content: "\e371"; }
+
+.fa-mailbox-flag-up::before {
+ content: "\e5bb"; }
+
+.fa-memo-circle-info::before {
+ content: "\e49a"; }
+
+.fa-gift::before {
+ content: "\f06b"; }
+
+.fa-dice-two::before {
+ content: "\f528"; }
+
+.fa-volume::before {
+ content: "\f6a8"; }
+
+.fa-volume-medium::before {
+ content: "\f6a8"; }
+
+.fa-transporter-5::before {
+ content: "\e2a6"; }
+
+.fa-gauge-circle-bolt::before {
+ content: "\e496"; }
+
+.fa-coin-front::before {
+ content: "\e3fc"; }
+
+.fa-file-slash::before {
+ content: "\e3a7"; }
+
+.fa-message-arrow-up-right::before {
+ content: "\e1dd"; }
+
+.fa-treasure-chest::before {
+ content: "\f723"; }
+
+.fa-chess-queen::before {
+ content: "\f445"; }
+
+.fa-paintbrush-fine::before {
+ content: "\f5a9"; }
+
+.fa-paint-brush-alt::before {
+ content: "\f5a9"; }
+
+.fa-paint-brush-fine::before {
+ content: "\f5a9"; }
+
+.fa-paintbrush-alt::before {
+ content: "\f5a9"; }
+
+.fa-glasses::before {
+ content: "\f530"; }
+
+.fa-hood-cloak::before {
+ content: "\f6ef"; }
+
+.fa-square-quote::before {
+ content: "\e329"; }
+
+.fa-up-left::before {
+ content: "\e2bd"; }
+
+.fa-bring-front::before {
+ content: "\f857"; }
+
+.fa-chess-board::before {
+ content: "\f43c"; }
+
+.fa-burger-cheese::before {
+ content: "\f7f1"; }
+
+.fa-cheeseburger::before {
+ content: "\f7f1"; }
+
+.fa-building-circle-check::before {
+ content: "\e4d2"; }
+
+.fa-repeat-1::before {
+ content: "\f365"; }
+
+.fa-arrow-down-to-line::before {
+ content: "\f33d"; }
+
+.fa-arrow-to-bottom::before {
+ content: "\f33d"; }
+
+.fa-grid-5::before {
+ content: "\e199"; }
+
+.fa-right-long-to-line::before {
+ content: "\e444"; }
+
+.fa-person-chalkboard::before {
+ content: "\e53d"; }
+
+.fa-mars-stroke-right::before {
+ content: "\f22b"; }
+
+.fa-mars-stroke-h::before {
+ content: "\f22b"; }
+
+.fa-hand-back-fist::before {
+ content: "\f255"; }
+
+.fa-hand-rock::before {
+ content: "\f255"; }
+
+.fa-tally::before {
+ content: "\f69c"; }
+
+.fa-tally-5::before {
+ content: "\f69c"; }
+
+.fa-square-caret-up::before {
+ content: "\f151"; }
+
+.fa-caret-square-up::before {
+ content: "\f151"; }
+
+.fa-cloud-showers-water::before {
+ content: "\e4e4"; }
+
+.fa-chart-bar::before {
+ content: "\f080"; }
+
+.fa-bar-chart::before {
+ content: "\f080"; }
+
+.fa-hands-bubbles::before {
+ content: "\e05e"; }
+
+.fa-hands-wash::before {
+ content: "\e05e"; }
+
+.fa-less-than-equal::before {
+ content: "\f537"; }
+
+.fa-train::before {
+ content: "\f238"; }
+
+.fa-up-from-dotted-line::before {
+ content: "\e456"; }
+
+.fa-eye-low-vision::before {
+ content: "\f2a8"; }
+
+.fa-low-vision::before {
+ content: "\f2a8"; }
+
+.fa-traffic-light-go::before {
+ content: "\f638"; }
+
+.fa-face-exhaling::before {
+ content: "\e480"; }
+
+.fa-sensor-fire::before {
+ content: "\e02a"; }
+
+.fa-user-unlock::before {
+ content: "\e058"; }
+
+.fa-hexagon-divide::before {
+ content: "\e1ad"; }
+
+.fa-00::before {
+ content: "\e467"; }
+
+.fa-crow::before {
+ content: "\f520"; }
+
+.fa-cassette-betamax::before {
+ content: "\f8a4"; }
+
+.fa-betamax::before {
+ content: "\f8a4"; }
+
+.fa-sailboat::before {
+ content: "\e445"; }
+
+.fa-window-restore::before {
+ content: "\f2d2"; }
+
+.fa-nfc-magnifying-glass::before {
+ content: "\e1f9"; }
+
+.fa-file-binary::before {
+ content: "\e175"; }
+
+.fa-circle-v::before {
+ content: "\e12a"; }
+
+.fa-square-plus::before {
+ content: "\f0fe"; }
+
+.fa-plus-square::before {
+ content: "\f0fe"; }
+
+.fa-bowl-scoops::before {
+ content: "\e3df"; }
+
+.fa-mistletoe::before {
+ content: "\f7b4"; }
+
+.fa-custard::before {
+ content: "\e403"; }
+
+.fa-lacrosse-stick::before {
+ content: "\e3b5"; }
+
+.fa-hockey-mask::before {
+ content: "\f6ee"; }
+
+.fa-sunrise::before {
+ content: "\f766"; }
+
+.fa-panel-ews::before {
+ content: "\e42e"; }
+
+.fa-torii-gate::before {
+ content: "\f6a1"; }
+
+.fa-cloud-exclamation::before {
+ content: "\e491"; }
+
+.fa-message-lines::before {
+ content: "\f4a6"; }
+
+.fa-comment-alt-lines::before {
+ content: "\f4a6"; }
+
+.fa-frog::before {
+ content: "\f52e"; }
+
+.fa-bucket::before {
+ content: "\e4cf"; }
+
+.fa-floppy-disk-pen::before {
+ content: "\e182"; }
+
+.fa-image::before {
+ content: "\f03e"; }
+
+.fa-window-frame::before {
+ content: "\e04f"; }
+
+.fa-microphone::before {
+ content: "\f130"; }
+
+.fa-cow::before {
+ content: "\f6c8"; }
+
+.fa-square-ring::before {
+ content: "\e44f"; }
+
+.fa-down-from-line::before {
+ content: "\f349"; }
+
+.fa-arrow-alt-from-top::before {
+ content: "\f349"; }
+
+.fa-caret-up::before {
+ content: "\f0d8"; }
+
+.fa-shield-xmark::before {
+ content: "\e24c"; }
+
+.fa-shield-times::before {
+ content: "\e24c"; }
+
+.fa-screwdriver::before {
+ content: "\f54a"; }
+
+.fa-circle-sort-down::before {
+ content: "\e031"; }
+
+.fa-sort-circle-down::before {
+ content: "\e031"; }
+
+.fa-folder-closed::before {
+ content: "\e185"; }
+
+.fa-house-tsunami::before {
+ content: "\e515"; }
+
+.fa-square-nfi::before {
+ content: "\e576"; }
+
+.fa-forklift::before {
+ content: "\f47a"; }
+
+.fa-arrow-up-from-ground-water::before {
+ content: "\e4b5"; }
+
+.fa-bracket-square-right::before {
+ content: "\5d"; }
+
+.fa-martini-glass::before {
+ content: "\f57b"; }
+
+.fa-glass-martini-alt::before {
+ content: "\f57b"; }
+
+.fa-rotate-left::before {
+ content: "\f2ea"; }
+
+.fa-rotate-back::before {
+ content: "\f2ea"; }
+
+.fa-rotate-backward::before {
+ content: "\f2ea"; }
+
+.fa-undo-alt::before {
+ content: "\f2ea"; }
+
+.fa-table-columns::before {
+ content: "\f0db"; }
+
+.fa-columns::before {
+ content: "\f0db"; }
+
+.fa-square-a::before {
+ content: "\e25f"; }
+
+.fa-tick::before {
+ content: "\e32f"; }
+
+.fa-lemon::before {
+ content: "\f094"; }
+
+.fa-head-side-mask::before {
+ content: "\e063"; }
+
+.fa-handshake::before {
+ content: "\f2b5"; }
+
+.fa-gem::before {
+ content: "\f3a5"; }
+
+.fa-dolly::before {
+ content: "\f472"; }
+
+.fa-dolly-box::before {
+ content: "\f472"; }
+
+.fa-smoking::before {
+ content: "\f48d"; }
+
+.fa-minimize::before {
+ content: "\f78c"; }
+
+.fa-compress-arrows-alt::before {
+ content: "\f78c"; }
+
+.fa-refrigerator::before {
+ content: "\e026"; }
+
+.fa-monument::before {
+ content: "\f5a6"; }
+
+.fa-octagon-xmark::before {
+ content: "\f2f0"; }
+
+.fa-times-octagon::before {
+ content: "\f2f0"; }
+
+.fa-xmark-octagon::before {
+ content: "\f2f0"; }
+
+.fa-align-slash::before {
+ content: "\f846"; }
+
+.fa-snowplow::before {
+ content: "\f7d2"; }
+
+.fa-angles-right::before {
+ content: "\f101"; }
+
+.fa-angle-double-right::before {
+ content: "\f101"; }
+
+.fa-truck-ramp-couch::before {
+ content: "\f4dd"; }
+
+.fa-truck-couch::before {
+ content: "\f4dd"; }
+
+.fa-cannabis::before {
+ content: "\f55f"; }
+
+.fa-circle-play::before {
+ content: "\f144"; }
+
+.fa-play-circle::before {
+ content: "\f144"; }
+
+.fa-arrow-up-right-and-arrow-down-left-from-center::before {
+ content: "\e0a0"; }
+
+.fa-tablets::before {
+ content: "\f490"; }
+
+.fa-360-degrees::before {
+ content: "\e2dc"; }
+
+.fa-ethernet::before {
+ content: "\f796"; }
+
+.fa-euro-sign::before {
+ content: "\f153"; }
+
+.fa-eur::before {
+ content: "\f153"; }
+
+.fa-euro::before {
+ content: "\f153"; }
+
+.fa-chair::before {
+ content: "\f6c0"; }
+
+.fa-circle-check::before {
+ content: "\f058"; }
+
+.fa-check-circle::before {
+ content: "\f058"; }
+
+.fa-square-dashed-circle-plus::before {
+ content: "\e5c2"; }
+
+.fa-money-simple-from-bracket::before {
+ content: "\e313"; }
+
+.fa-bat::before {
+ content: "\f6b5"; }
+
+.fa-circle-stop::before {
+ content: "\f28d"; }
+
+.fa-stop-circle::before {
+ content: "\f28d"; }
+
+.fa-head-side-headphones::before {
+ content: "\f8c2"; }
+
+.fa-phone-rotary::before {
+ content: "\f8d3"; }
+
+.fa-compass-drafting::before {
+ content: "\f568"; }
+
+.fa-drafting-compass::before {
+ content: "\f568"; }
+
+.fa-plate-wheat::before {
+ content: "\e55a"; }
+
+.fa-calendar-circle-minus::before {
+ content: "\e46f"; }
+
+.fa-chopsticks::before {
+ content: "\e3f7"; }
+
+.fa-car-wrench::before {
+ content: "\f5e3"; }
+
+.fa-car-mechanic::before {
+ content: "\f5e3"; }
+
+.fa-icicles::before {
+ content: "\f7ad"; }
+
+.fa-person-shelter::before {
+ content: "\e54f"; }
+
+.fa-neuter::before {
+ content: "\f22c"; }
+
+.fa-id-badge::before {
+ content: "\f2c1"; }
+
+.fa-kazoo::before {
+ content: "\f8c7"; }
+
+.fa-marker::before {
+ content: "\f5a1"; }
+
+.fa-face-laugh-beam::before {
+ content: "\f59a"; }
+
+.fa-laugh-beam::before {
+ content: "\f59a"; }
+
+.fa-square-arrow-down-left::before {
+ content: "\e261"; }
+
+.fa-battery-bolt::before {
+ content: "\f376"; }
+
+.fa-tree-large::before {
+ content: "\f7dd"; }
+
+.fa-helicopter-symbol::before {
+ content: "\e502"; }
+
+.fa-aperture::before {
+ content: "\e2df"; }
+
+.fa-universal-access::before {
+ content: "\f29a"; }
+
+.fa-file-magnifying-glass::before {
+ content: "\f865"; }
+
+.fa-file-search::before {
+ content: "\f865"; }
+
+.fa-up-right::before {
+ content: "\e2be"; }
+
+.fa-circle-chevron-up::before {
+ content: "\f139"; }
+
+.fa-chevron-circle-up::before {
+ content: "\f139"; }
+
+.fa-user-police::before {
+ content: "\e333"; }
+
+.fa-lari-sign::before {
+ content: "\e1c8"; }
+
+.fa-volcano::before {
+ content: "\f770"; }
+
+.fa-teddy-bear::before {
+ content: "\e3cf"; }
+
+.fa-stocking::before {
+ content: "\f7d5"; }
+
+.fa-person-walking-dashed-line-arrow-right::before {
+ content: "\e553"; }
+
+.fa-image-slash::before {
+ content: "\e1b7"; }
+
+.fa-mask-snorkel::before {
+ content: "\e3b7"; }
+
+.fa-smoke::before {
+ content: "\f760"; }
+
+.fa-sterling-sign::before {
+ content: "\f154"; }
+
+.fa-gbp::before {
+ content: "\f154"; }
+
+.fa-pound-sign::before {
+ content: "\f154"; }
+
+.fa-battery-exclamation::before {
+ content: "\e0b0"; }
+
+.fa-viruses::before {
+ content: "\e076"; }
+
+.fa-square-person-confined::before {
+ content: "\e577"; }
+
+.fa-user-tie::before {
+ content: "\f508"; }
+
+.fa-arrow-down-long::before {
+ content: "\f175"; }
+
+.fa-long-arrow-down::before {
+ content: "\f175"; }
+
+.fa-tent-arrow-down-to-line::before {
+ content: "\e57e"; }
+
+.fa-certificate::before {
+ content: "\f0a3"; }
+
+.fa-crystal-ball::before {
+ content: "\e362"; }
+
+.fa-reply-all::before {
+ content: "\f122"; }
+
+.fa-mail-reply-all::before {
+ content: "\f122"; }
+
+.fa-suitcase::before {
+ content: "\f0f2"; }
+
+.fa-person-skating::before {
+ content: "\f7c5"; }
+
+.fa-skating::before {
+ content: "\f7c5"; }
+
+.fa-star-shooting::before {
+ content: "\e036"; }
+
+.fa-binary-lock::before {
+ content: "\e33d"; }
+
+.fa-filter-circle-dollar::before {
+ content: "\f662"; }
+
+.fa-funnel-dollar::before {
+ content: "\f662"; }
+
+.fa-camera-retro::before {
+ content: "\f083"; }
+
+.fa-circle-arrow-down::before {
+ content: "\f0ab"; }
+
+.fa-arrow-circle-down::before {
+ content: "\f0ab"; }
+
+.fa-comment-pen::before {
+ content: "\f4ae"; }
+
+.fa-comment-edit::before {
+ content: "\f4ae"; }
+
+.fa-file-import::before {
+ content: "\f56f"; }
+
+.fa-arrow-right-to-file::before {
+ content: "\f56f"; }
+
+.fa-banjo::before {
+ content: "\f8a3"; }
+
+.fa-square-arrow-up-right::before {
+ content: "\f14c"; }
+
+.fa-external-link-square::before {
+ content: "\f14c"; }
+
+.fa-light-emergency-on::before {
+ content: "\e420"; }
+
+.fa-kerning::before {
+ content: "\f86f"; }
+
+.fa-box-open::before {
+ content: "\f49e"; }
+
+.fa-square-f::before {
+ content: "\e270"; }
+
+.fa-scroll::before {
+ content: "\f70e"; }
+
+.fa-spa::before {
+ content: "\f5bb"; }
+
+.fa-arrow-left-from-line::before {
+ content: "\f344"; }
+
+.fa-arrow-from-right::before {
+ content: "\f344"; }
+
+.fa-strawberry::before {
+ content: "\e32b"; }
+
+.fa-location-pin-lock::before {
+ content: "\e51f"; }
+
+.fa-pause::before {
+ content: "\f04c"; }
+
+.fa-clock-eight-thirty::before {
+ content: "\e346"; }
+
+.fa-plane-engines::before {
+ content: "\f3de"; }
+
+.fa-plane-alt::before {
+ content: "\f3de"; }
+
+.fa-hill-avalanche::before {
+ content: "\e507"; }
+
+.fa-temperature-empty::before {
+ content: "\f2cb"; }
+
+.fa-temperature-0::before {
+ content: "\f2cb"; }
+
+.fa-thermometer-0::before {
+ content: "\f2cb"; }
+
+.fa-thermometer-empty::before {
+ content: "\f2cb"; }
+
+.fa-bomb::before {
+ content: "\f1e2"; }
+
+.fa-gauge-low::before {
+ content: "\f627"; }
+
+.fa-tachometer-alt-slow::before {
+ content: "\f627"; }
+
+.fa-registered::before {
+ content: "\f25d"; }
+
+.fa-trash-can-plus::before {
+ content: "\e2ac"; }
+
+.fa-address-card::before {
+ content: "\f2bb"; }
+
+.fa-contact-card::before {
+ content: "\f2bb"; }
+
+.fa-vcard::before {
+ content: "\f2bb"; }
+
+.fa-scale-unbalanced-flip::before {
+ content: "\f516"; }
+
+.fa-balance-scale-right::before {
+ content: "\f516"; }
+
+.fa-globe-snow::before {
+ content: "\f7a3"; }
+
+.fa-subscript::before {
+ content: "\f12c"; }
+
+.fa-diamond-turn-right::before {
+ content: "\f5eb"; }
+
+.fa-directions::before {
+ content: "\f5eb"; }
+
+.fa-integral::before {
+ content: "\f667"; }
+
+.fa-burst::before {
+ content: "\e4dc"; }
+
+.fa-house-laptop::before {
+ content: "\e066"; }
+
+.fa-laptop-house::before {
+ content: "\e066"; }
+
+.fa-face-tired::before {
+ content: "\f5c8"; }
+
+.fa-tired::before {
+ content: "\f5c8"; }
+
+.fa-money-bills::before {
+ content: "\e1f3"; }
+
+.fa-blinds-raised::before {
+ content: "\f8fd"; }
+
+.fa-smog::before {
+ content: "\f75f"; }
+
+.fa-ufo-beam::before {
+ content: "\e048"; }
+
+.fa-circle-caret-up::before {
+ content: "\f331"; }
+
+.fa-caret-circle-up::before {
+ content: "\f331"; }
+
+.fa-user-vneck-hair-long::before {
+ content: "\e463"; }
+
+.fa-square-a-lock::before {
+ content: "\e44d"; }
+
+.fa-crutch::before {
+ content: "\f7f7"; }
+
+.fa-gas-pump-slash::before {
+ content: "\f5f4"; }
+
+.fa-cloud-arrow-up::before {
+ content: "\f0ee"; }
+
+.fa-cloud-upload::before {
+ content: "\f0ee"; }
+
+.fa-cloud-upload-alt::before {
+ content: "\f0ee"; }
+
+.fa-palette::before {
+ content: "\f53f"; }
+
+.fa-transporter-4::before {
+ content: "\e2a5"; }
+
+.fa-objects-align-right::before {
+ content: "\e3bf"; }
+
+.fa-arrows-turn-right::before {
+ content: "\e4c0"; }
+
+.fa-vest::before {
+ content: "\e085"; }
+
+.fa-pig::before {
+ content: "\f706"; }
+
+.fa-inbox-full::before {
+ content: "\e1ba"; }
+
+.fa-circle-envelope::before {
+ content: "\e10c"; }
+
+.fa-envelope-circle::before {
+ content: "\e10c"; }
+
+.fa-triangle-person-digging::before {
+ content: "\f85d"; }
+
+.fa-construction::before {
+ content: "\f85d"; }
+
+.fa-ferry::before {
+ content: "\e4ea"; }
+
+.fa-bullseye-arrow::before {
+ content: "\f648"; }
+
+.fa-arrows-down-to-people::before {
+ content: "\e4b9"; }
+
+.fa-seedling::before {
+ content: "\f4d8"; }
+
+.fa-sprout::before {
+ content: "\f4d8"; }
+
+.fa-clock-seven::before {
+ content: "\e350"; }
+
+.fa-left-right::before {
+ content: "\f337"; }
+
+.fa-arrows-alt-h::before {
+ content: "\f337"; }
+
+.fa-boxes-packing::before {
+ content: "\e4c7"; }
+
+.fa-circle-arrow-left::before {
+ content: "\f0a8"; }
+
+.fa-arrow-circle-left::before {
+ content: "\f0a8"; }
+
+.fa-flashlight::before {
+ content: "\f8b8"; }
+
+.fa-group-arrows-rotate::before {
+ content: "\e4f6"; }
+
+.fa-bowl-food::before {
+ content: "\e4c6"; }
+
+.fa-square-9::before {
+ content: "\e25e"; }
+
+.fa-candy-cane::before {
+ content: "\f786"; }
+
+.fa-arrow-down-wide-short::before {
+ content: "\f160"; }
+
+.fa-sort-amount-asc::before {
+ content: "\f160"; }
+
+.fa-sort-amount-down::before {
+ content: "\f160"; }
+
+.fa-square-dollar::before {
+ content: "\f2e9"; }
+
+.fa-dollar-square::before {
+ content: "\f2e9"; }
+
+.fa-usd-square::before {
+ content: "\f2e9"; }
+
+.fa-phone-arrow-right::before {
+ content: "\e5be"; }
+
+.fa-hand-holding-seedling::before {
+ content: "\f4bf"; }
+
+.fa-message-check::before {
+ content: "\f4a2"; }
+
+.fa-comment-alt-check::before {
+ content: "\f4a2"; }
+
+.fa-cloud-bolt::before {
+ content: "\f76c"; }
+
+.fa-thunderstorm::before {
+ content: "\f76c"; }
+
+.fa-text-slash::before {
+ content: "\f87d"; }
+
+.fa-remove-format::before {
+ content: "\f87d"; }
+
+.fa-watch::before {
+ content: "\f2e1"; }
+
+.fa-circle-down-left::before {
+ content: "\e107"; }
+
+.fa-text::before {
+ content: "\f893"; }
+
+.fa-projector::before {
+ content: "\f8d6"; }
+
+.fa-face-smile-wink::before {
+ content: "\f4da"; }
+
+.fa-smile-wink::before {
+ content: "\f4da"; }
+
+.fa-tombstone-blank::before {
+ content: "\f721"; }
+
+.fa-tombstone-alt::before {
+ content: "\f721"; }
+
+.fa-chess-king-piece::before {
+ content: "\f440"; }
+
+.fa-chess-king-alt::before {
+ content: "\f440"; }
+
+.fa-circle-6::before {
+ content: "\e0f3"; }
+
+.fa-left::before {
+ content: "\f355"; }
+
+.fa-arrow-alt-left::before {
+ content: "\f355"; }
+
+.fa-file-word::before {
+ content: "\f1c2"; }
+
+.fa-file-powerpoint::before {
+ content: "\f1c4"; }
+
+.fa-square-down::before {
+ content: "\f350"; }
+
+.fa-arrow-alt-square-down::before {
+ content: "\f350"; }
+
+.fa-objects-align-center-vertical::before {
+ content: "\e3bd"; }
+
+.fa-arrows-left-right::before {
+ content: "\f07e"; }
+
+.fa-arrows-h::before {
+ content: "\f07e"; }
+
+.fa-house-lock::before {
+ content: "\e510"; }
+
+.fa-cloud-arrow-down::before {
+ content: "\f0ed"; }
+
+.fa-cloud-download::before {
+ content: "\f0ed"; }
+
+.fa-cloud-download-alt::before {
+ content: "\f0ed"; }
+
+.fa-wreath::before {
+ content: "\f7e2"; }
+
+.fa-children::before {
+ content: "\e4e1"; }
+
+.fa-meter-droplet::before {
+ content: "\e1ea"; }
+
+.fa-chalkboard::before {
+ content: "\f51b"; }
+
+.fa-blackboard::before {
+ content: "\f51b"; }
+
+.fa-user-large-slash::before {
+ content: "\f4fa"; }
+
+.fa-user-alt-slash::before {
+ content: "\f4fa"; }
+
+.fa-signal-strong::before {
+ content: "\f68f"; }
+
+.fa-signal-4::before {
+ content: "\f68f"; }
+
+.fa-lollipop::before {
+ content: "\e424"; }
+
+.fa-lollypop::before {
+ content: "\e424"; }
+
+.fa-list-tree::before {
+ content: "\e1d2"; }
+
+.fa-envelope-open::before {
+ content: "\f2b6"; }
+
+.fa-draw-circle::before {
+ content: "\f5ed"; }
+
+.fa-cat-space::before {
+ content: "\e001"; }
+
+.fa-handshake-simple-slash::before {
+ content: "\e05f"; }
+
+.fa-handshake-alt-slash::before {
+ content: "\e05f"; }
+
+.fa-rabbit-running::before {
+ content: "\f709"; }
+
+.fa-rabbit-fast::before {
+ content: "\f709"; }
+
+.fa-memo-pad::before {
+ content: "\e1da"; }
+
+.fa-mattress-pillow::before {
+ content: "\e525"; }
+
+.fa-alarm-plus::before {
+ content: "\f844"; }
+
+.fa-alicorn::before {
+ content: "\f6b0"; }
+
+.fa-comment-question::before {
+ content: "\e14b"; }
+
+.fa-gingerbread-man::before {
+ content: "\f79d"; }
+
+.fa-guarani-sign::before {
+ content: "\e19a"; }
+
+.fa-burger-fries::before {
+ content: "\e0cd"; }
+
+.fa-mug-tea::before {
+ content: "\f875"; }
+
+.fa-border-top::before {
+ content: "\f855"; }
+
+.fa-arrows-rotate::before {
+ content: "\f021"; }
+
+.fa-refresh::before {
+ content: "\f021"; }
+
+.fa-sync::before {
+ content: "\f021"; }
+
+.fa-circle-book-open::before {
+ content: "\e0ff"; }
+
+.fa-book-circle::before {
+ content: "\e0ff"; }
+
+.fa-arrows-to-dotted-line::before {
+ content: "\e0a6"; }
+
+.fa-fire-extinguisher::before {
+ content: "\f134"; }
+
+.fa-garage-open::before {
+ content: "\e00b"; }
+
+.fa-shelves-empty::before {
+ content: "\e246"; }
+
+.fa-cruzeiro-sign::before {
+ content: "\e152"; }
+
+.fa-watch-apple::before {
+ content: "\e2cb"; }
+
+.fa-watch-calculator::before {
+ content: "\f8f0"; }
+
+.fa-list-dropdown::before {
+ content: "\e1cf"; }
+
+.fa-cabinet-filing::before {
+ content: "\f64b"; }
+
+.fa-burger-soda::before {
+ content: "\f858"; }
+
+.fa-square-arrow-up::before {
+ content: "\f33c"; }
+
+.fa-arrow-square-up::before {
+ content: "\f33c"; }
+
+.fa-greater-than-equal::before {
+ content: "\f532"; }
+
+.fa-pallet-box::before {
+ content: "\e208"; }
+
+.fa-face-confounded::before {
+ content: "\e36c"; }
+
+.fa-shield-halved::before {
+ content: "\f3ed"; }
+
+.fa-shield-alt::before {
+ content: "\f3ed"; }
+
+.fa-truck-plow::before {
+ content: "\f7de"; }
+
+.fa-book-atlas::before {
+ content: "\f558"; }
+
+.fa-atlas::before {
+ content: "\f558"; }
+
+.fa-virus::before {
+ content: "\e074"; }
+
+.fa-comment-middle-top::before {
+ content: "\e14a"; }
+
+.fa-envelope-circle-check::before {
+ content: "\e4e8"; }
+
+.fa-layer-group::before {
+ content: "\f5fd"; }
+
+.fa-restroom-simple::before {
+ content: "\e23a"; }
+
+.fa-arrows-to-dot::before {
+ content: "\e4be"; }
+
+.fa-border-outer::before {
+ content: "\f851"; }
+
+.fa-hashtag-lock::before {
+ content: "\e415"; }
+
+.fa-clock-two-thirty::before {
+ content: "\e35b"; }
+
+.fa-archway::before {
+ content: "\f557"; }
+
+.fa-heart-circle-check::before {
+ content: "\e4fd"; }
+
+.fa-house-chimney-crack::before {
+ content: "\f6f1"; }
+
+.fa-house-damage::before {
+ content: "\f6f1"; }
+
+.fa-file-zipper::before {
+ content: "\f1c6"; }
+
+.fa-file-archive::before {
+ content: "\f1c6"; }
+
+.fa-heart-half::before {
+ content: "\e1ab"; }
+
+.fa-comment-check::before {
+ content: "\f4ac"; }
+
+.fa-square::before {
+ content: "\f0c8"; }
+
+.fa-memo::before {
+ content: "\e1d8"; }
+
+.fa-martini-glass-empty::before {
+ content: "\f000"; }
+
+.fa-glass-martini::before {
+ content: "\f000"; }
+
+.fa-couch::before {
+ content: "\f4b8"; }
+
+.fa-cedi-sign::before {
+ content: "\e0df"; }
+
+.fa-italic::before {
+ content: "\f033"; }
+
+.fa-glass-citrus::before {
+ content: "\f869"; }
+
+.fa-calendar-lines-pen::before {
+ content: "\e472"; }
+
+.fa-church::before {
+ content: "\f51d"; }
+
+.fa-person-snowmobiling::before {
+ content: "\f7d1"; }
+
+.fa-snowmobile::before {
+ content: "\f7d1"; }
+
+.fa-face-hushed::before {
+ content: "\e37b"; }
+
+.fa-comments-dollar::before {
+ content: "\f653"; }
+
+.fa-pickaxe::before {
+ content: "\e5bf"; }
+
+.fa-link-simple-slash::before {
+ content: "\e1ce"; }
+
+.fa-democrat::before {
+ content: "\f747"; }
+
+.fa-face-confused::before {
+ content: "\e36d"; }
+
+.fa-pinball::before {
+ content: "\e229"; }
+
+.fa-z::before {
+ content: "\5a"; }
+
+.fa-person-skiing::before {
+ content: "\f7c9"; }
+
+.fa-skiing::before {
+ content: "\f7c9"; }
+
+.fa-deer::before {
+ content: "\f78e"; }
+
+.fa-input-pipe::before {
+ content: "\e1be"; }
+
+.fa-road-lock::before {
+ content: "\e567"; }
+
+.fa-a::before {
+ content: "\41"; }
+
+.fa-bookmark-slash::before {
+ content: "\e0c2"; }
+
+.fa-temperature-arrow-down::before {
+ content: "\e03f"; }
+
+.fa-temperature-down::before {
+ content: "\e03f"; }
+
+.fa-mace::before {
+ content: "\f6f8"; }
+
+.fa-feather-pointed::before {
+ content: "\f56b"; }
+
+.fa-feather-alt::before {
+ content: "\f56b"; }
+
+.fa-sausage::before {
+ content: "\f820"; }
+
+.fa-trash-can-clock::before {
+ content: "\e2aa"; }
+
+.fa-p::before {
+ content: "\50"; }
+
+.fa-snowflake::before {
+ content: "\f2dc"; }
+
+.fa-stomach::before {
+ content: "\f623"; }
+
+.fa-newspaper::before {
+ content: "\f1ea"; }
+
+.fa-rectangle-ad::before {
+ content: "\f641"; }
+
+.fa-ad::before {
+ content: "\f641"; }
+
+.fa-guitar-electric::before {
+ content: "\f8be"; }
+
+.fa-arrow-turn-down-right::before {
+ content: "\e3d6"; }
+
+.fa-moon-cloud::before {
+ content: "\f754"; }
+
+.fa-bread-slice-butter::before {
+ content: "\e3e1"; }
+
+.fa-circle-arrow-right::before {
+ content: "\f0a9"; }
+
+.fa-arrow-circle-right::before {
+ content: "\f0a9"; }
+
+.fa-user-group-crown::before {
+ content: "\f6a5"; }
+
+.fa-users-crown::before {
+ content: "\f6a5"; }
+
+.fa-circle-i::before {
+ content: "\e111"; }
+
+.fa-toilet-paper-check::before {
+ content: "\e5b2"; }
+
+.fa-filter-circle-xmark::before {
+ content: "\e17b"; }
+
+.fa-locust::before {
+ content: "\e520"; }
+
+.fa-sort::before {
+ content: "\f0dc"; }
+
+.fa-unsorted::before {
+ content: "\f0dc"; }
+
+.fa-list-ol::before {
+ content: "\f0cb"; }
+
+.fa-list-1-2::before {
+ content: "\f0cb"; }
+
+.fa-list-numeric::before {
+ content: "\f0cb"; }
+
+.fa-chart-waterfall::before {
+ content: "\e0eb"; }
+
+.fa-face-party::before {
+ content: "\e383"; }
+
+.fa-kidneys::before {
+ content: "\f5fb"; }
+
+.fa-wifi-exclamation::before {
+ content: "\e2cf"; }
+
+.fa-chart-network::before {
+ content: "\f78a"; }
+
+.fa-person-dress-burst::before {
+ content: "\e544"; }
+
+.fa-dice-d4::before {
+ content: "\f6d0"; }
+
+.fa-money-check-dollar::before {
+ content: "\f53d"; }
+
+.fa-money-check-alt::before {
+ content: "\f53d"; }
+
+.fa-vector-square::before {
+ content: "\f5cb"; }
+
+.fa-bread-slice::before {
+ content: "\f7ec"; }
+
+.fa-language::before {
+ content: "\f1ab"; }
+
+.fa-wheat-awn-slash::before {
+ content: "\e338"; }
+
+.fa-face-kiss-wink-heart::before {
+ content: "\f598"; }
+
+.fa-kiss-wink-heart::before {
+ content: "\f598"; }
+
+.fa-dagger::before {
+ content: "\f6cb"; }
+
+.fa-podium::before {
+ content: "\f680"; }
+
+.fa-memo-circle-check::before {
+ content: "\e1d9"; }
+
+.fa-route-highway::before {
+ content: "\f61a"; }
+
+.fa-down-to-line::before {
+ content: "\f34a"; }
+
+.fa-arrow-alt-to-bottom::before {
+ content: "\f34a"; }
+
+.fa-filter::before {
+ content: "\f0b0"; }
+
+.fa-square-g::before {
+ content: "\e271"; }
+
+.fa-circle-phone::before {
+ content: "\e11b"; }
+
+.fa-phone-circle::before {
+ content: "\e11b"; }
+
+.fa-clipboard-prescription::before {
+ content: "\f5e8"; }
+
+.fa-user-nurse-hair::before {
+ content: "\e45d"; }
+
+.fa-question::before {
+ content: "\3f"; }
+
+.fa-file-signature::before {
+ content: "\f573"; }
+
+.fa-toggle-large-on::before {
+ content: "\e5b1"; }
+
+.fa-up-down-left-right::before {
+ content: "\f0b2"; }
+
+.fa-arrows-alt::before {
+ content: "\f0b2"; }
+
+.fa-dryer-heat::before {
+ content: "\f862"; }
+
+.fa-dryer-alt::before {
+ content: "\f862"; }
+
+.fa-house-chimney-user::before {
+ content: "\e065"; }
+
+.fa-hand-holding-heart::before {
+ content: "\f4be"; }
+
+.fa-arrow-up-small-big::before {
+ content: "\f88f"; }
+
+.fa-sort-size-up-alt::before {
+ content: "\f88f"; }
+
+.fa-train-track::before {
+ content: "\e453"; }
+
+.fa-puzzle-piece::before {
+ content: "\f12e"; }
+
+.fa-money-check::before {
+ content: "\f53c"; }
+
+.fa-star-half-stroke::before {
+ content: "\f5c0"; }
+
+.fa-star-half-alt::before {
+ content: "\f5c0"; }
+
+.fa-file-exclamation::before {
+ content: "\f31a"; }
+
+.fa-code::before {
+ content: "\f121"; }
+
+.fa-whiskey-glass::before {
+ content: "\f7a0"; }
+
+.fa-glass-whiskey::before {
+ content: "\f7a0"; }
+
+.fa-moon-stars::before {
+ content: "\f755"; }
+
+.fa-building-circle-exclamation::before {
+ content: "\e4d3"; }
+
+.fa-clothes-hanger::before {
+ content: "\e136"; }
+
+.fa-mobile-notch::before {
+ content: "\e1ee"; }
+
+.fa-mobile-iphone::before {
+ content: "\e1ee"; }
+
+.fa-magnifying-glass-chart::before {
+ content: "\e522"; }
+
+.fa-arrow-up-right-from-square::before {
+ content: "\f08e"; }
+
+.fa-external-link::before {
+ content: "\f08e"; }
+
+.fa-cubes-stacked::before {
+ content: "\e4e6"; }
+
+.fa-images-user::before {
+ content: "\e1b9"; }
+
+.fa-won-sign::before {
+ content: "\f159"; }
+
+.fa-krw::before {
+ content: "\f159"; }
+
+.fa-won::before {
+ content: "\f159"; }
+
+.fa-image-polaroid-user::before {
+ content: "\e1b6"; }
+
+.fa-virus-covid::before {
+ content: "\e4a8"; }
+
+.fa-square-ellipsis::before {
+ content: "\e26e"; }
+
+.fa-pie::before {
+ content: "\f705"; }
+
+.fa-chess-knight-piece::before {
+ content: "\f442"; }
+
+.fa-chess-knight-alt::before {
+ content: "\f442"; }
+
+.fa-austral-sign::before {
+ content: "\e0a9"; }
+
+.fa-cloud-plus::before {
+ content: "\e35e"; }
+
+.fa-f::before {
+ content: "\46"; }
+
+.fa-leaf::before {
+ content: "\f06c"; }
+
+.fa-bed-bunk::before {
+ content: "\f8f8"; }
+
+.fa-road::before {
+ content: "\f018"; }
+
+.fa-taxi::before {
+ content: "\f1ba"; }
+
+.fa-cab::before {
+ content: "\f1ba"; }
+
+.fa-person-circle-plus::before {
+ content: "\e541"; }
+
+.fa-chart-pie::before {
+ content: "\f200"; }
+
+.fa-pie-chart::before {
+ content: "\f200"; }
+
+.fa-bolt-lightning::before {
+ content: "\e0b7"; }
+
+.fa-clock-eight::before {
+ content: "\e345"; }
+
+.fa-sack-xmark::before {
+ content: "\e56a"; }
+
+.fa-file-excel::before {
+ content: "\f1c3"; }
+
+.fa-file-contract::before {
+ content: "\f56c"; }
+
+.fa-fish-fins::before {
+ content: "\e4f2"; }
+
+.fa-circle-q::before {
+ content: "\e11e"; }
+
+.fa-building-flag::before {
+ content: "\e4d5"; }
+
+.fa-face-grin-beam::before {
+ content: "\f582"; }
+
+.fa-grin-beam::before {
+ content: "\f582"; }
+
+.fa-object-ungroup::before {
+ content: "\f248"; }
+
+.fa-face-disguise::before {
+ content: "\e370"; }
+
+.fa-circle-arrow-down-right::before {
+ content: "\e0fa"; }
+
+.fa-alien-8bit::before {
+ content: "\f8f6"; }
+
+.fa-alien-monster::before {
+ content: "\f8f6"; }
+
+.fa-hand-point-ribbon::before {
+ content: "\e1a6"; }
+
+.fa-poop::before {
+ content: "\f619"; }
+
+.fa-object-exclude::before {
+ content: "\e49c"; }
+
+.fa-telescope::before {
+ content: "\e03e"; }
+
+.fa-location-pin::before {
+ content: "\f041"; }
+
+.fa-map-marker::before {
+ content: "\f041"; }
+
+.fa-square-list::before {
+ content: "\e489"; }
+
+.fa-kaaba::before {
+ content: "\f66b"; }
+
+.fa-toilet-paper::before {
+ content: "\f71e"; }
+
+.fa-helmet-safety::before {
+ content: "\f807"; }
+
+.fa-hard-hat::before {
+ content: "\f807"; }
+
+.fa-hat-hard::before {
+ content: "\f807"; }
+
+.fa-comment-code::before {
+ content: "\e147"; }
+
+.fa-sim-cards::before {
+ content: "\e251"; }
+
+.fa-starship::before {
+ content: "\e039"; }
+
+.fa-eject::before {
+ content: "\f052"; }
+
+.fa-circle-right::before {
+ content: "\f35a"; }
+
+.fa-arrow-alt-circle-right::before {
+ content: "\f35a"; }
+
+.fa-plane-circle-check::before {
+ content: "\e555"; }
+
+.fa-seal::before {
+ content: "\e241"; }
+
+.fa-user-cowboy::before {
+ content: "\f8ea"; }
+
+.fa-hexagon-vertical-nft::before {
+ content: "\e505"; }
+
+.fa-face-rolling-eyes::before {
+ content: "\f5a5"; }
+
+.fa-meh-rolling-eyes::before {
+ content: "\f5a5"; }
+
+.fa-bread-loaf::before {
+ content: "\f7eb"; }
+
+.fa-rings-wedding::before {
+ content: "\f81b"; }
+
+.fa-object-group::before {
+ content: "\f247"; }
+
+.fa-french-fries::before {
+ content: "\f803"; }
+
+.fa-chart-line::before {
+ content: "\f201"; }
+
+.fa-line-chart::before {
+ content: "\f201"; }
+
+.fa-calendar-arrow-down::before {
+ content: "\e0d0"; }
+
+.fa-calendar-download::before {
+ content: "\e0d0"; }
+
+.fa-send-back::before {
+ content: "\f87e"; }
+
+.fa-mask-ventilator::before {
+ content: "\e524"; }
+
+.fa-signature-lock::before {
+ content: "\e3ca"; }
+
+.fa-arrow-right::before {
+ content: "\f061"; }
+
+.fa-signs-post::before {
+ content: "\f277"; }
+
+.fa-map-signs::before {
+ content: "\f277"; }
+
+.fa-octagon-plus::before {
+ content: "\f301"; }
+
+.fa-plus-octagon::before {
+ content: "\f301"; }
+
+.fa-cash-register::before {
+ content: "\f788"; }
+
+.fa-person-circle-question::before {
+ content: "\e542"; }
+
+.fa-melon-slice::before {
+ content: "\e311"; }
+
+.fa-space-station-moon::before {
+ content: "\e033"; }
+
+.fa-message-smile::before {
+ content: "\f4aa"; }
+
+.fa-comment-alt-smile::before {
+ content: "\f4aa"; }
+
+.fa-cup-straw::before {
+ content: "\e363"; }
+
+.fa-left-from-line::before {
+ content: "\f348"; }
+
+.fa-arrow-alt-from-right::before {
+ content: "\f348"; }
+
+.fa-h::before {
+ content: "\48"; }
+
+.fa-basket-shopping-simple::before {
+ content: "\e0af"; }
+
+.fa-shopping-basket-alt::before {
+ content: "\e0af"; }
+
+.fa-hands-holding-heart::before {
+ content: "\f4c3"; }
+
+.fa-hands-heart::before {
+ content: "\f4c3"; }
+
+.fa-clock-nine::before {
+ content: "\e34c"; }
+
+.fa-tarp::before {
+ content: "\e57b"; }
+
+.fa-face-sleepy::before {
+ content: "\e38e"; }
+
+.fa-hand-horns::before {
+ content: "\e1a9"; }
+
+.fa-screwdriver-wrench::before {
+ content: "\f7d9"; }
+
+.fa-tools::before {
+ content: "\f7d9"; }
+
+.fa-arrows-to-eye::before {
+ content: "\e4bf"; }
+
+.fa-circle-three-quarters::before {
+ content: "\e125"; }
+
+.fa-trophy-star::before {
+ content: "\f2eb"; }
+
+.fa-trophy-alt::before {
+ content: "\f2eb"; }
+
+.fa-plug-circle-bolt::before {
+ content: "\e55b"; }
+
+.fa-face-thermometer::before {
+ content: "\e39a"; }
+
+.fa-shirt-running::before {
+ content: "\e3c8"; }
+
+.fa-book-circle-arrow-up::before {
+ content: "\e0bd"; }
+
+.fa-face-nauseated::before {
+ content: "\e381"; }
+
+.fa-heart::before {
+ content: "\f004"; }
+
+.fa-file-chart-pie::before {
+ content: "\f65a"; }
+
+.fa-mars-and-venus::before {
+ content: "\f224"; }
+
+.fa-house-user::before {
+ content: "\e1b0"; }
+
+.fa-home-user::before {
+ content: "\e1b0"; }
+
+.fa-circle-arrow-down-left::before {
+ content: "\e0f9"; }
+
+.fa-dumpster-fire::before {
+ content: "\f794"; }
+
+.fa-hexagon-minus::before {
+ content: "\f307"; }
+
+.fa-minus-hexagon::before {
+ content: "\f307"; }
+
+.fa-left-to-line::before {
+ content: "\f34b"; }
+
+.fa-arrow-alt-to-left::before {
+ content: "\f34b"; }
+
+.fa-house-crack::before {
+ content: "\e3b1"; }
+
+.fa-paw-simple::before {
+ content: "\f701"; }
+
+.fa-paw-alt::before {
+ content: "\f701"; }
+
+.fa-arrow-left-long-to-line::before {
+ content: "\e3d4"; }
+
+.fa-brackets-round::before {
+ content: "\e0c5"; }
+
+.fa-parentheses::before {
+ content: "\e0c5"; }
+
+.fa-martini-glass-citrus::before {
+ content: "\f561"; }
+
+.fa-cocktail::before {
+ content: "\f561"; }
+
+.fa-user-shakespeare::before {
+ content: "\e2c2"; }
+
+.fa-arrow-right-to-arc::before {
+ content: "\e4b2"; }
+
+.fa-face-surprise::before {
+ content: "\f5c2"; }
+
+.fa-surprise::before {
+ content: "\f5c2"; }
+
+.fa-bottle-water::before {
+ content: "\e4c5"; }
+
+.fa-circle-pause::before {
+ content: "\f28b"; }
+
+.fa-pause-circle::before {
+ content: "\f28b"; }
+
+.fa-gauge-circle-plus::before {
+ content: "\e498"; }
+
+.fa-folders::before {
+ content: "\f660"; }
+
+.fa-angel::before {
+ content: "\f779"; }
+
+.fa-value-absolute::before {
+ content: "\f6a6"; }
+
+.fa-rabbit::before {
+ content: "\f708"; }
+
+.fa-toilet-paper-slash::before {
+ content: "\e072"; }
+
+.fa-apple-whole::before {
+ content: "\f5d1"; }
+
+.fa-apple-alt::before {
+ content: "\f5d1"; }
+
+.fa-kitchen-set::before {
+ content: "\e51a"; }
+
+.fa-diamond-half::before {
+ content: "\e5b7"; }
+
+.fa-lock-keyhole::before {
+ content: "\f30d"; }
+
+.fa-lock-alt::before {
+ content: "\f30d"; }
+
+.fa-r::before {
+ content: "\52"; }
+
+.fa-temperature-quarter::before {
+ content: "\f2ca"; }
+
+.fa-temperature-1::before {
+ content: "\f2ca"; }
+
+.fa-thermometer-1::before {
+ content: "\f2ca"; }
+
+.fa-thermometer-quarter::before {
+ content: "\f2ca"; }
+
+.fa-square-info::before {
+ content: "\f30f"; }
+
+.fa-info-square::before {
+ content: "\f30f"; }
+
+.fa-wifi-slash::before {
+ content: "\f6ac"; }
+
+.fa-toilet-paper-xmark::before {
+ content: "\e5b3"; }
+
+.fa-hands-holding-dollar::before {
+ content: "\f4c5"; }
+
+.fa-hands-usd::before {
+ content: "\f4c5"; }
+
+.fa-cube::before {
+ content: "\f1b2"; }
+
+.fa-arrow-down-triangle-square::before {
+ content: "\f888"; }
+
+.fa-sort-shapes-down::before {
+ content: "\f888"; }
+
+.fa-bitcoin-sign::before {
+ content: "\e0b4"; }
+
+.fa-shutters::before {
+ content: "\e449"; }
+
+.fa-shield-dog::before {
+ content: "\e573"; }
+
+.fa-solar-panel::before {
+ content: "\f5ba"; }
+
+.fa-lock-open::before {
+ content: "\f3c1"; }
+
+.fa-table-tree::before {
+ content: "\e293"; }
+
+.fa-house-chimney-heart::before {
+ content: "\e1b2"; }
+
+.fa-tally-3::before {
+ content: "\e296"; }
+
+.fa-elevator::before {
+ content: "\e16d"; }
+
+.fa-money-bill-transfer::before {
+ content: "\e528"; }
+
+.fa-money-bill-trend-up::before {
+ content: "\e529"; }
+
+.fa-house-flood-water-circle-arrow-right::before {
+ content: "\e50f"; }
+
+.fa-square-poll-horizontal::before {
+ content: "\f682"; }
+
+.fa-poll-h::before {
+ content: "\f682"; }
+
+.fa-circle::before {
+ content: "\f111"; }
+
+.fa-cart-circle-exclamation::before {
+ content: "\e3f2"; }
+
+.fa-sword::before {
+ content: "\f71c"; }
+
+.fa-backward-fast::before {
+ content: "\f049"; }
+
+.fa-fast-backward::before {
+ content: "\f049"; }
+
+.fa-recycle::before {
+ content: "\f1b8"; }
+
+.fa-user-astronaut::before {
+ content: "\f4fb"; }
+
+.fa-interrobang::before {
+ content: "\e5ba"; }
+
+.fa-plane-slash::before {
+ content: "\e069"; }
+
+.fa-circle-dashed::before {
+ content: "\e105"; }
+
+.fa-trademark::before {
+ content: "\f25c"; }
+
+.fa-basketball::before {
+ content: "\f434"; }
+
+.fa-basketball-ball::before {
+ content: "\f434"; }
+
+.fa-fork-knife::before {
+ content: "\f2e6"; }
+
+.fa-utensils-alt::before {
+ content: "\f2e6"; }
+
+.fa-satellite-dish::before {
+ content: "\f7c0"; }
+
+.fa-badge-check::before {
+ content: "\f336"; }
+
+.fa-circle-up::before {
+ content: "\f35b"; }
+
+.fa-arrow-alt-circle-up::before {
+ content: "\f35b"; }
+
+.fa-slider::before {
+ content: "\e252"; }
+
+.fa-mobile-screen-button::before {
+ content: "\f3cd"; }
+
+.fa-mobile-alt::before {
+ content: "\f3cd"; }
+
+.fa-clock-one-thirty::before {
+ content: "\e34f"; }
+
+.fa-inbox-out::before {
+ content: "\f311"; }
+
+.fa-inbox-arrow-up::before {
+ content: "\f311"; }
+
+.fa-cloud-slash::before {
+ content: "\e137"; }
+
+.fa-volume-high::before {
+ content: "\f028"; }
+
+.fa-volume-up::before {
+ content: "\f028"; }
+
+.fa-users-rays::before {
+ content: "\e593"; }
+
+.fa-wallet::before {
+ content: "\f555"; }
+
+.fa-octagon-check::before {
+ content: "\e426"; }
+
+.fa-flatbread-stuffed::before {
+ content: "\e40c"; }
+
+.fa-clipboard-check::before {
+ content: "\f46c"; }
+
+.fa-cart-circle-plus::before {
+ content: "\e3f3"; }
+
+.fa-truck-clock::before {
+ content: "\f48c"; }
+
+.fa-shipping-timed::before {
+ content: "\f48c"; }
+
+.fa-pool-8-ball::before {
+ content: "\e3c5"; }
+
+.fa-file-audio::before {
+ content: "\f1c7"; }
+
+.fa-turn-down-left::before {
+ content: "\e331"; }
+
+.fa-lock-hashtag::before {
+ content: "\e423"; }
+
+.fa-chart-radar::before {
+ content: "\e0e7"; }
+
+.fa-staff::before {
+ content: "\f71b"; }
+
+.fa-burger::before {
+ content: "\f805"; }
+
+.fa-hamburger::before {
+ content: "\f805"; }
+
+.fa-utility-pole::before {
+ content: "\e2c3"; }
+
+.fa-transporter-6::before {
+ content: "\e2a7"; }
+
+.fa-wrench::before {
+ content: "\f0ad"; }
+
+.fa-bugs::before {
+ content: "\e4d0"; }
+
+.fa-vector-polygon::before {
+ content: "\e2c7"; }
+
+.fa-diagram-nested::before {
+ content: "\e157"; }
+
+.fa-rupee-sign::before {
+ content: "\f156"; }
+
+.fa-rupee::before {
+ content: "\f156"; }
+
+.fa-file-image::before {
+ content: "\f1c5"; }
+
+.fa-circle-question::before {
+ content: "\f059"; }
+
+.fa-question-circle::before {
+ content: "\f059"; }
+
+.fa-image-user::before {
+ content: "\e1b8"; }
+
+.fa-buoy::before {
+ content: "\e5b5"; }
+
+.fa-plane-departure::before {
+ content: "\f5b0"; }
+
+.fa-handshake-slash::before {
+ content: "\e060"; }
+
+.fa-book-bookmark::before {
+ content: "\e0bb"; }
+
+.fa-border-center-h::before {
+ content: "\f89c"; }
+
+.fa-can-food::before {
+ content: "\e3e6"; }
+
+.fa-typewriter::before {
+ content: "\f8e7"; }
+
+.fa-arrow-right-from-arc::before {
+ content: "\e4b1"; }
+
+.fa-circle-k::before {
+ content: "\e113"; }
+
+.fa-face-hand-over-mouth::before {
+ content: "\e378"; }
+
+.fa-popcorn::before {
+ content: "\f819"; }
+
+.fa-house-water::before {
+ content: "\f74f"; }
+
+.fa-house-flood::before {
+ content: "\f74f"; }
+
+.fa-object-subtract::before {
+ content: "\e49e"; }
+
+.fa-code-branch::before {
+ content: "\f126"; }
+
+.fa-warehouse-full::before {
+ content: "\f495"; }
+
+.fa-warehouse-alt::before {
+ content: "\f495"; }
+
+.fa-hat-cowboy::before {
+ content: "\f8c0"; }
+
+.fa-bridge::before {
+ content: "\e4c8"; }
+
+.fa-phone-flip::before {
+ content: "\f879"; }
+
+.fa-phone-alt::before {
+ content: "\f879"; }
+
+.fa-arrow-down-from-dotted-line::before {
+ content: "\e090"; }
+
+.fa-square-quarters::before {
+ content: "\e44e"; }
+
+.fa-truck-front::before {
+ content: "\e2b7"; }
+
+.fa-cat::before {
+ content: "\f6be"; }
+
+.fa-trash-xmark::before {
+ content: "\e2b4"; }
+
+.fa-circle-caret-left::before {
+ content: "\f32e"; }
+
+.fa-caret-circle-left::before {
+ content: "\f32e"; }
+
+.fa-files::before {
+ content: "\e178"; }
+
+.fa-anchor-circle-exclamation::before {
+ content: "\e4ab"; }
+
+.fa-face-clouds::before {
+ content: "\e47d"; }
+
+.fa-user-crown::before {
+ content: "\f6a4"; }
+
+.fa-truck-field::before {
+ content: "\e58d"; }
+
+.fa-route::before {
+ content: "\f4d7"; }
+
+.fa-cart-circle-check::before {
+ content: "\e3f1"; }
+
+.fa-clipboard-question::before {
+ content: "\e4e3"; }
+
+.fa-panorama::before {
+ content: "\e209"; }
+
+.fa-comment-medical::before {
+ content: "\f7f5"; }
+
+.fa-teeth-open::before {
+ content: "\f62f"; }
+
+.fa-user-tie-hair-long::before {
+ content: "\e460"; }
+
+.fa-file-circle-minus::before {
+ content: "\e4ed"; }
+
+.fa-head-side-medical::before {
+ content: "\f809"; }
+
+.fa-tags::before {
+ content: "\f02c"; }
+
+.fa-wine-glass::before {
+ content: "\f4e3"; }
+
+.fa-forward-fast::before {
+ content: "\f050"; }
+
+.fa-fast-forward::before {
+ content: "\f050"; }
+
+.fa-face-meh-blank::before {
+ content: "\f5a4"; }
+
+.fa-meh-blank::before {
+ content: "\f5a4"; }
+
+.fa-user-robot::before {
+ content: "\e04b"; }
+
+.fa-square-parking::before {
+ content: "\f540"; }
+
+.fa-parking::before {
+ content: "\f540"; }
+
+.fa-card-diamond::before {
+ content: "\e3ea"; }
+
+.fa-face-zipper::before {
+ content: "\e3a5"; }
+
+.fa-face-raised-eyebrow::before {
+ content: "\e388"; }
+
+.fa-house-signal::before {
+ content: "\e012"; }
+
+.fa-square-chevron-up::before {
+ content: "\f32c"; }
+
+.fa-chevron-square-up::before {
+ content: "\f32c"; }
+
+.fa-bars-progress::before {
+ content: "\f828"; }
+
+.fa-tasks-alt::before {
+ content: "\f828"; }
+
+.fa-faucet-drip::before {
+ content: "\e006"; }
+
+.fa-arrows-to-line::before {
+ content: "\e0a7"; }
+
+.fa-dolphin::before {
+ content: "\e168"; }
+
+.fa-arrow-up-right::before {
+ content: "\e09f"; }
+
+.fa-circle-r::before {
+ content: "\e120"; }
+
+.fa-cart-flatbed::before {
+ content: "\f474"; }
+
+.fa-dolly-flatbed::before {
+ content: "\f474"; }
+
+.fa-ban-smoking::before {
+ content: "\f54d"; }
+
+.fa-smoking-ban::before {
+ content: "\f54d"; }
+
+.fa-circle-sort-up::before {
+ content: "\e032"; }
+
+.fa-sort-circle-up::before {
+ content: "\e032"; }
+
+.fa-terminal::before {
+ content: "\f120"; }
+
+.fa-mobile-button::before {
+ content: "\f10b"; }
+
+.fa-house-medical-flag::before {
+ content: "\e514"; }
+
+.fa-basket-shopping::before {
+ content: "\f291"; }
+
+.fa-shopping-basket::before {
+ content: "\f291"; }
+
+.fa-tape::before {
+ content: "\f4db"; }
+
+.fa-chestnut::before {
+ content: "\e3f6"; }
+
+.fa-bus-simple::before {
+ content: "\f55e"; }
+
+.fa-bus-alt::before {
+ content: "\f55e"; }
+
+.fa-eye::before {
+ content: "\f06e"; }
+
+.fa-face-sad-cry::before {
+ content: "\f5b3"; }
+
+.fa-sad-cry::before {
+ content: "\f5b3"; }
+
+.fa-heat::before {
+ content: "\e00c"; }
+
+.fa-ticket-airline::before {
+ content: "\e29a"; }
+
+.fa-boot-heeled::before {
+ content: "\e33f"; }
+
+.fa-arrows-minimize::before {
+ content: "\e0a5"; }
+
+.fa-compress-arrows::before {
+ content: "\e0a5"; }
+
+.fa-audio-description::before {
+ content: "\f29e"; }
+
+.fa-person-military-to-person::before {
+ content: "\e54c"; }
+
+.fa-file-shield::before {
+ content: "\e4f0"; }
+
+.fa-hexagon::before {
+ content: "\f312"; }
+
+.fa-manhole::before {
+ content: "\e1d6"; }
+
+.fa-user-slash::before {
+ content: "\f506"; }
+
+.fa-pen::before {
+ content: "\f304"; }
+
+.fa-tower-observation::before {
+ content: "\e586"; }
+
+.fa-floppy-disks::before {
+ content: "\e183"; }
+
+.fa-toilet-paper-blank-under::before {
+ content: "\e29f"; }
+
+.fa-toilet-paper-reverse-alt::before {
+ content: "\e29f"; }
+
+.fa-file-code::before {
+ content: "\f1c9"; }
+
+.fa-signal::before {
+ content: "\f012"; }
+
+.fa-signal-5::before {
+ content: "\f012"; }
+
+.fa-signal-perfect::before {
+ content: "\f012"; }
+
+.fa-pump::before {
+ content: "\e442"; }
+
+.fa-bus::before {
+ content: "\f207"; }
+
+.fa-heart-circle-xmark::before {
+ content: "\e501"; }
+
+.fa-arrow-up-left-from-circle::before {
+ content: "\e09e"; }
+
+.fa-house-chimney::before {
+ content: "\e3af"; }
+
+.fa-home-lg::before {
+ content: "\e3af"; }
+
+.fa-window-maximize::before {
+ content: "\f2d0"; }
+
+.fa-dryer::before {
+ content: "\f861"; }
+
+.fa-face-frown::before {
+ content: "\f119"; }
+
+.fa-frown::before {
+ content: "\f119"; }
+
+.fa-chess-bishop-piece::before {
+ content: "\f43b"; }
+
+.fa-chess-bishop-alt::before {
+ content: "\f43b"; }
+
+.fa-shirt-tank-top::before {
+ content: "\e3c9"; }
+
+.fa-diploma::before {
+ content: "\f5ea"; }
+
+.fa-scroll-ribbon::before {
+ content: "\f5ea"; }
+
+.fa-screencast::before {
+ content: "\e23e"; }
+
+.fa-walker::before {
+ content: "\f831"; }
+
+.fa-prescription::before {
+ content: "\f5b1"; }
+
+.fa-shop::before {
+ content: "\f54f"; }
+
+.fa-store-alt::before {
+ content: "\f54f"; }
+
+.fa-floppy-disk::before {
+ content: "\f0c7"; }
+
+.fa-save::before {
+ content: "\f0c7"; }
+
+.fa-vihara::before {
+ content: "\f6a7"; }
+
+.fa-face-kiss-closed-eyes::before {
+ content: "\e37d"; }
+
+.fa-scale-unbalanced::before {
+ content: "\f515"; }
+
+.fa-balance-scale-left::before {
+ content: "\f515"; }
+
+.fa-file-user::before {
+ content: "\f65c"; }
+
+.fa-user-police-tie::before {
+ content: "\e334"; }
+
+.fa-face-tongue-money::before {
+ content: "\e39d"; }
+
+.fa-tennis-ball::before {
+ content: "\f45e"; }
+
+.fa-square-l::before {
+ content: "\e275"; }
+
+.fa-sort-up::before {
+ content: "\f0de"; }
+
+.fa-sort-asc::before {
+ content: "\f0de"; }
+
+.fa-calendar-arrow-up::before {
+ content: "\e0d1"; }
+
+.fa-calendar-upload::before {
+ content: "\e0d1"; }
+
+.fa-comment-dots::before {
+ content: "\f4ad"; }
+
+.fa-commenting::before {
+ content: "\f4ad"; }
+
+.fa-plant-wilt::before {
+ content: "\e5aa"; }
+
+.fa-scarf::before {
+ content: "\f7c1"; }
+
+.fa-album-circle-plus::before {
+ content: "\e48c"; }
+
+.fa-user-nurse-hair-long::before {
+ content: "\e45e"; }
+
+.fa-diamond::before {
+ content: "\f219"; }
+
+.fa-square-left::before {
+ content: "\f351"; }
+
+.fa-arrow-alt-square-left::before {
+ content: "\f351"; }
+
+.fa-face-grin-squint::before {
+ content: "\f585"; }
+
+.fa-grin-squint::before {
+ content: "\f585"; }
+
+.fa-circle-ellipsis-vertical::before {
+ content: "\e10b"; }
+
+.fa-hand-holding-dollar::before {
+ content: "\f4c0"; }
+
+.fa-hand-holding-usd::before {
+ content: "\f4c0"; }
+
+.fa-grid-dividers::before {
+ content: "\e3ad"; }
+
+.fa-bacterium::before {
+ content: "\e05a"; }
+
+.fa-hand-pointer::before {
+ content: "\f25a"; }
+
+.fa-drum-steelpan::before {
+ content: "\f56a"; }
+
+.fa-hand-scissors::before {
+ content: "\f257"; }
+
+.fa-hands-praying::before {
+ content: "\f684"; }
+
+.fa-praying-hands::before {
+ content: "\f684"; }
+
+.fa-face-pensive::before {
+ content: "\e384"; }
+
+.fa-user-music::before {
+ content: "\f8eb"; }
+
+.fa-arrow-rotate-right::before {
+ content: "\f01e"; }
+
+.fa-arrow-right-rotate::before {
+ content: "\f01e"; }
+
+.fa-arrow-rotate-forward::before {
+ content: "\f01e"; }
+
+.fa-redo::before {
+ content: "\f01e"; }
+
+.fa-messages-dollar::before {
+ content: "\f652"; }
+
+.fa-comments-alt-dollar::before {
+ content: "\f652"; }
+
+.fa-sensor-on::before {
+ content: "\e02b"; }
+
+.fa-balloon::before {
+ content: "\e2e3"; }
+
+.fa-biohazard::before {
+ content: "\f780"; }
+
+.fa-chess-queen-piece::before {
+ content: "\f446"; }
+
+.fa-chess-queen-alt::before {
+ content: "\f446"; }
+
+.fa-location-crosshairs::before {
+ content: "\f601"; }
+
+.fa-location::before {
+ content: "\f601"; }
+
+.fa-mars-double::before {
+ content: "\f227"; }
+
+.fa-house-person-leave::before {
+ content: "\e00f"; }
+
+.fa-house-leave::before {
+ content: "\e00f"; }
+
+.fa-house-person-depart::before {
+ content: "\e00f"; }
+
+.fa-ruler-triangle::before {
+ content: "\f61c"; }
+
+.fa-card-club::before {
+ content: "\e3e9"; }
+
+.fa-child-dress::before {
+ content: "\e59c"; }
+
+.fa-users-between-lines::before {
+ content: "\e591"; }
+
+.fa-lungs-virus::before {
+ content: "\e067"; }
+
+.fa-spinner-third::before {
+ content: "\f3f4"; }
+
+.fa-face-grin-tears::before {
+ content: "\f588"; }
+
+.fa-grin-tears::before {
+ content: "\f588"; }
+
+.fa-phone::before {
+ content: "\f095"; }
+
+.fa-computer-mouse-scrollwheel::before {
+ content: "\f8cd"; }
+
+.fa-mouse-alt::before {
+ content: "\f8cd"; }
+
+.fa-calendar-xmark::before {
+ content: "\f273"; }
+
+.fa-calendar-times::before {
+ content: "\f273"; }
+
+.fa-child-reaching::before {
+ content: "\e59d"; }
+
+.fa-table-layout::before {
+ content: "\e290"; }
+
+.fa-narwhal::before {
+ content: "\f6fe"; }
+
+.fa-ramp-loading::before {
+ content: "\f4d4"; }
+
+.fa-calendar-circle-plus::before {
+ content: "\e470"; }
+
+.fa-toothbrush::before {
+ content: "\f635"; }
+
+.fa-border-inner::before {
+ content: "\f84e"; }
+
+.fa-paw-claws::before {
+ content: "\f702"; }
+
+.fa-kiwi-fruit::before {
+ content: "\e30c"; }
+
+.fa-traffic-light-slow::before {
+ content: "\f639"; }
+
+.fa-rectangle-code::before {
+ content: "\e322"; }
+
+.fa-head-side-virus::before {
+ content: "\e064"; }
+
+.fa-keyboard-brightness::before {
+ content: "\e1c0"; }
+
+.fa-books-medical::before {
+ content: "\f7e8"; }
+
+.fa-lightbulb-slash::before {
+ content: "\f673"; }
+
+.fa-house-blank::before {
+ content: "\e487"; }
+
+.fa-home-blank::before {
+ content: "\e487"; }
+
+.fa-square-5::before {
+ content: "\e25a"; }
+
+.fa-square-heart::before {
+ content: "\f4c8"; }
+
+.fa-heart-square::before {
+ content: "\f4c8"; }
+
+.fa-puzzle::before {
+ content: "\e443"; }
+
+.fa-user-gear::before {
+ content: "\f4fe"; }
+
+.fa-user-cog::before {
+ content: "\f4fe"; }
+
+.fa-pipe-circle-check::before {
+ content: "\e436"; }
+
+.fa-arrow-up-1-9::before {
+ content: "\f163"; }
+
+.fa-sort-numeric-up::before {
+ content: "\f163"; }
+
+.fa-octagon-exclamation::before {
+ content: "\e204"; }
+
+.fa-dial-low::before {
+ content: "\e15d"; }
+
+.fa-door-closed::before {
+ content: "\f52a"; }
+
+.fa-laptop-mobile::before {
+ content: "\f87a"; }
+
+.fa-phone-laptop::before {
+ content: "\f87a"; }
+
+.fa-conveyor-belt-boxes::before {
+ content: "\f46f"; }
+
+.fa-conveyor-belt-alt::before {
+ content: "\f46f"; }
+
+.fa-shield-virus::before {
+ content: "\e06c"; }
+
+.fa-starfighter-twin-ion-engine-advanced::before {
+ content: "\e28e"; }
+
+.fa-starfighter-alt-advanced::before {
+ content: "\e28e"; }
+
+.fa-dice-six::before {
+ content: "\f526"; }
+
+.fa-starfighter-twin-ion-engine::before {
+ content: "\e038"; }
+
+.fa-starfighter-alt::before {
+ content: "\e038"; }
+
+.fa-rocket-launch::before {
+ content: "\e027"; }
+
+.fa-mosquito-net::before {
+ content: "\e52c"; }
+
+.fa-vent-damper::before {
+ content: "\e465"; }
+
+.fa-bridge-water::before {
+ content: "\e4ce"; }
+
+.fa-ban-bug::before {
+ content: "\f7f9"; }
+
+.fa-debug::before {
+ content: "\f7f9"; }
+
+.fa-person-booth::before {
+ content: "\f756"; }
+
+.fa-text-width::before {
+ content: "\f035"; }
+
+.fa-garage-car::before {
+ content: "\e00a"; }
+
+.fa-square-kanban::before {
+ content: "\e488"; }
+
+.fa-hat-wizard::before {
+ content: "\f6e8"; }
+
+.fa-pen-fancy::before {
+ content: "\f5ac"; }
+
+.fa-coffee-pot::before {
+ content: "\e002"; }
+
+.fa-mouse-field::before {
+ content: "\e5a8"; }
+
+.fa-person-digging::before {
+ content: "\f85e"; }
+
+.fa-digging::before {
+ content: "\f85e"; }
+
+.fa-shower-down::before {
+ content: "\e24d"; }
+
+.fa-shower-alt::before {
+ content: "\e24d"; }
+
+.fa-box-circle-check::before {
+ content: "\e0c4"; }
+
+.fa-brightness::before {
+ content: "\e0c9"; }
+
+.fa-car-side-bolt::before {
+ content: "\e344"; }
+
+.fa-ornament::before {
+ content: "\f7b8"; }
+
+.fa-phone-arrow-down-left::before {
+ content: "\e223"; }
+
+.fa-phone-arrow-down::before {
+ content: "\e223"; }
+
+.fa-phone-incoming::before {
+ content: "\e223"; }
+
+.fa-cloud-word::before {
+ content: "\e138"; }
+
+.fa-hand-fingers-crossed::before {
+ content: "\e1a3"; }
+
+.fa-trash::before {
+ content: "\f1f8"; }
+
+.fa-gauge-simple::before {
+ content: "\f629"; }
+
+.fa-gauge-simple-med::before {
+ content: "\f629"; }
+
+.fa-tachometer-average::before {
+ content: "\f629"; }
+
+.fa-arrow-down-small-big::before {
+ content: "\f88d"; }
+
+.fa-sort-size-down-alt::before {
+ content: "\f88d"; }
+
+.fa-book-medical::before {
+ content: "\f7e6"; }
+
+.fa-face-melting::before {
+ content: "\e483"; }
+
+.fa-poo::before {
+ content: "\f2fe"; }
+
+.fa-pen-clip-slash::before {
+ content: "\e20f"; }
+
+.fa-pen-alt-slash::before {
+ content: "\e20f"; }
+
+.fa-quote-right::before {
+ content: "\f10e"; }
+
+.fa-quote-right-alt::before {
+ content: "\f10e"; }
+
+.fa-scroll-old::before {
+ content: "\f70f"; }
+
+.fa-guitars::before {
+ content: "\f8bf"; }
+
+.fa-phone-xmark::before {
+ content: "\e227"; }
+
+.fa-hose::before {
+ content: "\e419"; }
+
+.fa-clock-six::before {
+ content: "\e352"; }
+
+.fa-shirt::before {
+ content: "\f553"; }
+
+.fa-t-shirt::before {
+ content: "\f553"; }
+
+.fa-tshirt::before {
+ content: "\f553"; }
+
+.fa-square-r::before {
+ content: "\e27c"; }
+
+.fa-cubes::before {
+ content: "\f1b3"; }
+
+.fa-envelope-open-dollar::before {
+ content: "\f657"; }
+
+.fa-divide::before {
+ content: "\f529"; }
+
+.fa-sun-cloud::before {
+ content: "\f763"; }
+
+.fa-lamp-floor::before {
+ content: "\e015"; }
+
+.fa-square-7::before {
+ content: "\e25c"; }
+
+.fa-tenge-sign::before {
+ content: "\f7d7"; }
+
+.fa-tenge::before {
+ content: "\f7d7"; }
+
+.fa-headphones::before {
+ content: "\f025"; }
+
+.fa-hands-holding::before {
+ content: "\f4c2"; }
+
+.fa-campfire::before {
+ content: "\f6ba"; }
+
+.fa-circle-ampersand::before {
+ content: "\e0f8"; }
+
+.fa-snowflakes::before {
+ content: "\f7cf"; }
+
+.fa-hands-clapping::before {
+ content: "\e1a8"; }
+
+.fa-republican::before {
+ content: "\f75e"; }
+
+.fa-leaf-maple::before {
+ content: "\f6f6"; }
+
+.fa-arrow-left::before {
+ content: "\f060"; }
+
+.fa-person-circle-xmark::before {
+ content: "\e543"; }
+
+.fa-ruler::before {
+ content: "\f545"; }
+
+.fa-cup-straw-swoosh::before {
+ content: "\e364"; }
+
+.fa-temperature-sun::before {
+ content: "\f76a"; }
+
+.fa-temperature-hot::before {
+ content: "\f76a"; }
+
+.fa-align-left::before {
+ content: "\f036"; }
+
+.fa-dice-d6::before {
+ content: "\f6d1"; }
+
+.fa-restroom::before {
+ content: "\f7bd"; }
+
+.fa-high-definition::before {
+ content: "\e1ae"; }
+
+.fa-rectangle-hd::before {
+ content: "\e1ae"; }
+
+.fa-j::before {
+ content: "\4a"; }
+
+.fa-galaxy::before {
+ content: "\e008"; }
+
+.fa-users-viewfinder::before {
+ content: "\e595"; }
+
+.fa-file-video::before {
+ content: "\f1c8"; }
+
+.fa-cherries::before {
+ content: "\e0ec"; }
+
+.fa-up-right-from-square::before {
+ content: "\f35d"; }
+
+.fa-external-link-alt::before {
+ content: "\f35d"; }
+
+.fa-circle-sort::before {
+ content: "\e030"; }
+
+.fa-sort-circle::before {
+ content: "\e030"; }
+
+.fa-table-cells::before {
+ content: "\f00a"; }
+
+.fa-th::before {
+ content: "\f00a"; }
+
+.fa-file-pdf::before {
+ content: "\f1c1"; }
+
+.fa-siren::before {
+ content: "\e02d"; }
+
+.fa-arrow-up-to-dotted-line::before {
+ content: "\e0a1"; }
+
+.fa-image-landscape::before {
+ content: "\e1b5"; }
+
+.fa-landscape::before {
+ content: "\e1b5"; }
+
+.fa-tank-water::before {
+ content: "\e452"; }
+
+.fa-curling-stone::before {
+ content: "\f44a"; }
+
+.fa-curling::before {
+ content: "\f44a"; }
+
+.fa-gamepad-modern::before {
+ content: "\e5a2"; }
+
+.fa-gamepad-alt::before {
+ content: "\e5a2"; }
+
+.fa-messages-question::before {
+ content: "\e1e7"; }
+
+.fa-book-bible::before {
+ content: "\f647"; }
+
+.fa-bible::before {
+ content: "\f647"; }
+
+.fa-o::before {
+ content: "\4f"; }
+
+.fa-suitcase-medical::before {
+ content: "\f0fa"; }
+
+.fa-medkit::before {
+ content: "\f0fa"; }
+
+.fa-briefcase-arrow-right::before {
+ content: "\e2f2"; }
+
+.fa-expand-wide::before {
+ content: "\f320"; }
+
+.fa-clock-eleven-thirty::before {
+ content: "\e348"; }
+
+.fa-rv::before {
+ content: "\f7be"; }
+
+.fa-user-secret::before {
+ content: "\f21b"; }
+
+.fa-otter::before {
+ content: "\f700"; }
+
+.fa-dreidel::before {
+ content: "\f792"; }
+
+.fa-person-dress::before {
+ content: "\f182"; }
+
+.fa-female::before {
+ content: "\f182"; }
+
+.fa-comment-dollar::before {
+ content: "\f651"; }
+
+.fa-business-time::before {
+ content: "\f64a"; }
+
+.fa-briefcase-clock::before {
+ content: "\f64a"; }
+
+.fa-flower-tulip::before {
+ content: "\f801"; }
+
+.fa-people-pants-simple::before {
+ content: "\e21a"; }
+
+.fa-cloud-drizzle::before {
+ content: "\f738"; }
+
+.fa-table-cells-large::before {
+ content: "\f009"; }
+
+.fa-th-large::before {
+ content: "\f009"; }
+
+.fa-book-tanakh::before {
+ content: "\f827"; }
+
+.fa-tanakh::before {
+ content: "\f827"; }
+
+.fa-solar-system::before {
+ content: "\e02f"; }
+
+.fa-seal-question::before {
+ content: "\e243"; }
+
+.fa-phone-volume::before {
+ content: "\f2a0"; }
+
+.fa-volume-control-phone::before {
+ content: "\f2a0"; }
+
+.fa-disc-drive::before {
+ content: "\f8b5"; }
+
+.fa-hat-cowboy-side::before {
+ content: "\f8c1"; }
+
+.fa-table-rows::before {
+ content: "\e292"; }
+
+.fa-rows::before {
+ content: "\e292"; }
+
+.fa-location-exclamation::before {
+ content: "\f608"; }
+
+.fa-map-marker-exclamation::before {
+ content: "\f608"; }
+
+.fa-face-fearful::before {
+ content: "\e375"; }
+
+.fa-clipboard-user::before {
+ content: "\f7f3"; }
+
+.fa-bus-school::before {
+ content: "\f5dd"; }
+
+.fa-film-slash::before {
+ content: "\e179"; }
+
+.fa-square-arrow-down-right::before {
+ content: "\e262"; }
+
+.fa-book-sparkles::before {
+ content: "\f6b8"; }
+
+.fa-book-spells::before {
+ content: "\f6b8"; }
+
+.fa-washing-machine::before {
+ content: "\f898"; }
+
+.fa-washer::before {
+ content: "\f898"; }
+
+.fa-child::before {
+ content: "\f1ae"; }
+
+.fa-lira-sign::before {
+ content: "\f195"; }
+
+.fa-user-visor::before {
+ content: "\e04c"; }
+
+.fa-file-plus-minus::before {
+ content: "\e177"; }
+
+.fa-chess-clock-flip::before {
+ content: "\f43e"; }
+
+.fa-chess-clock-alt::before {
+ content: "\f43e"; }
+
+.fa-satellite::before {
+ content: "\f7bf"; }
+
+.fa-plane-lock::before {
+ content: "\e558"; }
+
+.fa-steering-wheel::before {
+ content: "\f622"; }
+
+.fa-tag::before {
+ content: "\f02b"; }
+
+.fa-stretcher::before {
+ content: "\f825"; }
+
+.fa-book-section::before {
+ content: "\e0c1"; }
+
+.fa-book-law::before {
+ content: "\e0c1"; }
+
+.fa-inboxes::before {
+ content: "\e1bb"; }
+
+.fa-coffee-bean::before {
+ content: "\e13e"; }
+
+.fa-brackets-curly::before {
+ content: "\f7ea"; }
+
+.fa-ellipsis-stroke-vertical::before {
+ content: "\f39c"; }
+
+.fa-ellipsis-v-alt::before {
+ content: "\f39c"; }
+
+.fa-comment::before {
+ content: "\f075"; }
+
+.fa-square-1::before {
+ content: "\e256"; }
+
+.fa-cake-candles::before {
+ content: "\f1fd"; }
+
+.fa-birthday-cake::before {
+ content: "\f1fd"; }
+
+.fa-cake::before {
+ content: "\f1fd"; }
+
+.fa-head-side::before {
+ content: "\f6e9"; }
+
+.fa-envelope::before {
+ content: "\f0e0"; }
+
+.fa-dolly-empty::before {
+ content: "\f473"; }
+
+.fa-face-tissue::before {
+ content: "\e39c"; }
+
+.fa-angles-up::before {
+ content: "\f102"; }
+
+.fa-angle-double-up::before {
+ content: "\f102"; }
+
+.fa-paperclip::before {
+ content: "\f0c6"; }
+
+.fa-chart-line-down::before {
+ content: "\f64d"; }
+
+.fa-arrow-right-to-city::before {
+ content: "\e4b3"; }
+
+.fa-lock-a::before {
+ content: "\e422"; }
+
+.fa-ribbon::before {
+ content: "\f4d6"; }
+
+.fa-lungs::before {
+ content: "\f604"; }
+
+.fa-person-pinball::before {
+ content: "\e21d"; }
+
+.fa-arrow-up-9-1::before {
+ content: "\f887"; }
+
+.fa-sort-numeric-up-alt::before {
+ content: "\f887"; }
+
+.fa-apple-core::before {
+ content: "\e08f"; }
+
+.fa-circle-y::before {
+ content: "\e12f"; }
+
+.fa-h6::before {
+ content: "\e413"; }
+
+.fa-litecoin-sign::before {
+ content: "\e1d3"; }
+
+.fa-circle-small::before {
+ content: "\e122"; }
+
+.fa-border-none::before {
+ content: "\f850"; }
+
+.fa-arrow-turn-down-left::before {
+ content: "\e2e1"; }
+
+.fa-circle-nodes::before {
+ content: "\e4e2"; }
+
+.fa-parachute-box::before {
+ content: "\f4cd"; }
+
+.fa-message-medical::before {
+ content: "\f7f4"; }
+
+.fa-comment-alt-medical::before {
+ content: "\f7f4"; }
+
+.fa-rugby-ball::before {
+ content: "\e3c6"; }
+
+.fa-comment-music::before {
+ content: "\f8b0"; }
+
+.fa-indent::before {
+ content: "\f03c"; }
+
+.fa-tree-deciduous::before {
+ content: "\f400"; }
+
+.fa-tree-alt::before {
+ content: "\f400"; }
+
+.fa-puzzle-piece-simple::before {
+ content: "\e231"; }
+
+.fa-puzzle-piece-alt::before {
+ content: "\e231"; }
+
+.fa-truck-field-un::before {
+ content: "\e58e"; }
+
+.fa-nfc-trash::before {
+ content: "\e1fd"; }
+
+.fa-hourglass::before {
+ content: "\f254"; }
+
+.fa-hourglass-empty::before {
+ content: "\f254"; }
+
+.fa-mountain::before {
+ content: "\f6fc"; }
+
+.fa-file-xmark::before {
+ content: "\f317"; }
+
+.fa-file-times::before {
+ content: "\f317"; }
+
+.fa-house-heart::before {
+ content: "\f4c9"; }
+
+.fa-home-heart::before {
+ content: "\f4c9"; }
+
+.fa-house-chimney-blank::before {
+ content: "\e3b0"; }
+
+.fa-meter-bolt::before {
+ content: "\e1e9"; }
+
+.fa-user-doctor::before {
+ content: "\f0f0"; }
+
+.fa-user-md::before {
+ content: "\f0f0"; }
+
+.fa-slash-back::before {
+ content: "\5c"; }
+
+.fa-circle-info::before {
+ content: "\f05a"; }
+
+.fa-info-circle::before {
+ content: "\f05a"; }
+
+.fa-fishing-rod::before {
+ content: "\e3a8"; }
+
+.fa-hammer-crash::before {
+ content: "\e414"; }
+
+.fa-message-heart::before {
+ content: "\e5c9"; }
+
+.fa-cloud-meatball::before {
+ content: "\f73b"; }
+
+.fa-camera-polaroid::before {
+ content: "\f8aa"; }
+
+.fa-camera::before {
+ content: "\f030"; }
+
+.fa-camera-alt::before {
+ content: "\f030"; }
+
+.fa-square-virus::before {
+ content: "\e578"; }
+
+.fa-cart-arrow-up::before {
+ content: "\e3ee"; }
+
+.fa-meteor::before {
+ content: "\f753"; }
+
+.fa-car-on::before {
+ content: "\e4dd"; }
+
+.fa-sleigh::before {
+ content: "\f7cc"; }
+
+.fa-arrow-down-1-9::before {
+ content: "\f162"; }
+
+.fa-sort-numeric-asc::before {
+ content: "\f162"; }
+
+.fa-sort-numeric-down::before {
+ content: "\f162"; }
+
+.fa-buoy-mooring::before {
+ content: "\e5b6"; }
+
+.fa-square-4::before {
+ content: "\e259"; }
+
+.fa-hand-holding-droplet::before {
+ content: "\f4c1"; }
+
+.fa-hand-holding-water::before {
+ content: "\f4c1"; }
+
+.fa-tricycle-adult::before {
+ content: "\e5c4"; }
+
+.fa-waveform::before {
+ content: "\f8f1"; }
+
+.fa-water::before {
+ content: "\f773"; }
+
+.fa-star-sharp-half-stroke::before {
+ content: "\e28d"; }
+
+.fa-star-sharp-half-alt::before {
+ content: "\e28d"; }
+
+.fa-nfc-signal::before {
+ content: "\e1fb"; }
+
+.fa-plane-prop::before {
+ content: "\e22b"; }
+
+.fa-calendar-check::before {
+ content: "\f274"; }
+
+.fa-clock-desk::before {
+ content: "\e134"; }
+
+.fa-calendar-clock::before {
+ content: "\e0d2"; }
+
+.fa-calendar-time::before {
+ content: "\e0d2"; }
+
+.fa-braille::before {
+ content: "\f2a1"; }
+
+.fa-prescription-bottle-medical::before {
+ content: "\f486"; }
+
+.fa-prescription-bottle-alt::before {
+ content: "\f486"; }
+
+.fa-plate-utensils::before {
+ content: "\e43b"; }
+
+.fa-family-pants::before {
+ content: "\e302"; }
+
+.fa-hose-reel::before {
+ content: "\e41a"; }
+
+.fa-house-window::before {
+ content: "\e3b3"; }
+
+.fa-landmark::before {
+ content: "\f66f"; }
+
+.fa-truck::before {
+ content: "\f0d1"; }
+
+.fa-crosshairs::before {
+ content: "\f05b"; }
+
+.fa-cloud-rainbow::before {
+ content: "\f73e"; }
+
+.fa-person-cane::before {
+ content: "\e53c"; }
+
+.fa-alien::before {
+ content: "\f8f5"; }
+
+.fa-tent::before {
+ content: "\e57d"; }
+
+.fa-vest-patches::before {
+ content: "\e086"; }
+
+.fa-people-dress-simple::before {
+ content: "\e218"; }
+
+.fa-check-double::before {
+ content: "\f560"; }
+
+.fa-arrow-down-a-z::before {
+ content: "\f15d"; }
+
+.fa-sort-alpha-asc::before {
+ content: "\f15d"; }
+
+.fa-sort-alpha-down::before {
+ content: "\f15d"; }
+
+.fa-bowling-ball-pin::before {
+ content: "\e0c3"; }
+
+.fa-bell-school-slash::before {
+ content: "\f5d6"; }
+
+.fa-plus-large::before {
+ content: "\e59e"; }
+
+.fa-money-bill-wheat::before {
+ content: "\e52a"; }
+
+.fa-camera-viewfinder::before {
+ content: "\e0da"; }
+
+.fa-screenshot::before {
+ content: "\e0da"; }
+
+.fa-message-music::before {
+ content: "\f8af"; }
+
+.fa-comment-alt-music::before {
+ content: "\f8af"; }
+
+.fa-car-building::before {
+ content: "\f859"; }
+
+.fa-border-bottom-right::before {
+ content: "\f854"; }
+
+.fa-border-style-alt::before {
+ content: "\f854"; }
+
+.fa-octagon::before {
+ content: "\f306"; }
+
+.fa-comment-arrow-up-right::before {
+ content: "\e145"; }
+
+.fa-octagon-divide::before {
+ content: "\e203"; }
+
+.fa-cookie::before {
+ content: "\f563"; }
+
+.fa-arrow-rotate-left::before {
+ content: "\f0e2"; }
+
+.fa-arrow-left-rotate::before {
+ content: "\f0e2"; }
+
+.fa-arrow-rotate-back::before {
+ content: "\f0e2"; }
+
+.fa-arrow-rotate-backward::before {
+ content: "\f0e2"; }
+
+.fa-undo::before {
+ content: "\f0e2"; }
+
+.fa-tv-music::before {
+ content: "\f8e6"; }
+
+.fa-hard-drive::before {
+ content: "\f0a0"; }
+
+.fa-hdd::before {
+ content: "\f0a0"; }
+
+.fa-reel::before {
+ content: "\e238"; }
+
+.fa-face-grin-squint-tears::before {
+ content: "\f586"; }
+
+.fa-grin-squint-tears::before {
+ content: "\f586"; }
+
+.fa-dumbbell::before {
+ content: "\f44b"; }
+
+.fa-rectangle-list::before {
+ content: "\f022"; }
+
+.fa-list-alt::before {
+ content: "\f022"; }
+
+.fa-tarp-droplet::before {
+ content: "\e57c"; }
+
+.fa-alarm-exclamation::before {
+ content: "\f843"; }
+
+.fa-house-medical-circle-check::before {
+ content: "\e511"; }
+
+.fa-traffic-cone::before {
+ content: "\f636"; }
+
+.fa-grate::before {
+ content: "\e193"; }
+
+.fa-arrow-down-right::before {
+ content: "\e093"; }
+
+.fa-person-skiing-nordic::before {
+ content: "\f7ca"; }
+
+.fa-skiing-nordic::before {
+ content: "\f7ca"; }
+
+.fa-calendar-plus::before {
+ content: "\f271"; }
+
+.fa-person-from-portal::before {
+ content: "\e023"; }
+
+.fa-portal-exit::before {
+ content: "\e023"; }
+
+.fa-plane-arrival::before {
+ content: "\f5af"; }
+
+.fa-cowbell-circle-plus::before {
+ content: "\f8b4"; }
+
+.fa-cowbell-more::before {
+ content: "\f8b4"; }
+
+.fa-circle-left::before {
+ content: "\f359"; }
+
+.fa-arrow-alt-circle-left::before {
+ content: "\f359"; }
+
+.fa-distribute-spacing-vertical::before {
+ content: "\e366"; }
+
+.fa-signal-bars-fair::before {
+ content: "\f692"; }
+
+.fa-signal-alt-2::before {
+ content: "\f692"; }
+
+.fa-sportsball::before {
+ content: "\e44b"; }
+
+.fa-game-console-handheld-crank::before {
+ content: "\e5b9"; }
+
+.fa-train-subway::before {
+ content: "\f239"; }
+
+.fa-subway::before {
+ content: "\f239"; }
+
+.fa-chart-gantt::before {
+ content: "\e0e4"; }
+
+.fa-face-smile-upside-down::before {
+ content: "\e395"; }
+
+.fa-ball-pile::before {
+ content: "\f77e"; }
+
+.fa-badge-dollar::before {
+ content: "\f645"; }
+
+.fa-money-bills-simple::before {
+ content: "\e1f4"; }
+
+.fa-money-bills-alt::before {
+ content: "\e1f4"; }
+
+.fa-list-timeline::before {
+ content: "\e1d1"; }
+
+.fa-indian-rupee-sign::before {
+ content: "\e1bc"; }
+
+.fa-indian-rupee::before {
+ content: "\e1bc"; }
+
+.fa-inr::before {
+ content: "\e1bc"; }
+
+.fa-crop-simple::before {
+ content: "\f565"; }
+
+.fa-crop-alt::before {
+ content: "\f565"; }
+
+.fa-money-bill-1::before {
+ content: "\f3d1"; }
+
+.fa-money-bill-alt::before {
+ content: "\f3d1"; }
+
+.fa-left-long::before {
+ content: "\f30a"; }
+
+.fa-long-arrow-alt-left::before {
+ content: "\f30a"; }
+
+.fa-keyboard-down::before {
+ content: "\e1c2"; }
+
+.fa-circle-up-right::before {
+ content: "\e129"; }
+
+.fa-cloud-bolt-moon::before {
+ content: "\f76d"; }
+
+.fa-thunderstorm-moon::before {
+ content: "\f76d"; }
+
+.fa-dna::before {
+ content: "\f471"; }
+
+.fa-virus-slash::before {
+ content: "\e075"; }
+
+.fa-bracket-round-right::before {
+ content: "\29"; }
+
+.fa-circle-5::before {
+ content: "\e0f2"; }
+
+.fa-minus::before {
+ content: "\f068"; }
+
+.fa-subtract::before {
+ content: "\f068"; }
+
+.fa-fire-flame::before {
+ content: "\f6df"; }
+
+.fa-flame::before {
+ content: "\f6df"; }
+
+.fa-right-to-line::before {
+ content: "\f34c"; }
+
+.fa-arrow-alt-to-right::before {
+ content: "\f34c"; }
+
+.fa-gif::before {
+ content: "\e190"; }
+
+.fa-chess::before {
+ content: "\f439"; }
+
+.fa-trash-slash::before {
+ content: "\e2b3"; }
+
+.fa-arrow-left-long::before {
+ content: "\f177"; }
+
+.fa-long-arrow-left::before {
+ content: "\f177"; }
+
+.fa-plug-circle-check::before {
+ content: "\e55c"; }
+
+.fa-font-case::before {
+ content: "\f866"; }
+
+.fa-street-view::before {
+ content: "\f21d"; }
+
+.fa-arrow-down-left::before {
+ content: "\e091"; }
+
+.fa-franc-sign::before {
+ content: "\e18f"; }
+
+.fa-flask-round-poison::before {
+ content: "\f6e0"; }
+
+.fa-flask-poison::before {
+ content: "\f6e0"; }
+
+.fa-volume-off::before {
+ content: "\f026"; }
+
+.fa-book-circle-arrow-right::before {
+ content: "\e0bc"; }
+
+.fa-chart-user::before {
+ content: "\f6a3"; }
+
+.fa-user-chart::before {
+ content: "\f6a3"; }
+
+.fa-hands-asl-interpreting::before {
+ content: "\f2a3"; }
+
+.fa-american-sign-language-interpreting::before {
+ content: "\f2a3"; }
+
+.fa-asl-interpreting::before {
+ content: "\f2a3"; }
+
+.fa-hands-american-sign-language-interpreting::before {
+ content: "\f2a3"; }
+
+.fa-presentation-screen::before {
+ content: "\f685"; }
+
+.fa-presentation::before {
+ content: "\f685"; }
+
+.fa-circle-bolt::before {
+ content: "\e0fe"; }
+
+.fa-face-smile-halo::before {
+ content: "\e38f"; }
+
+.fa-cart-circle-arrow-down::before {
+ content: "\e3ef"; }
+
+.fa-house-person-return::before {
+ content: "\e011"; }
+
+.fa-house-person-arrive::before {
+ content: "\e011"; }
+
+.fa-house-return::before {
+ content: "\e011"; }
+
+.fa-message-xmark::before {
+ content: "\f4ab"; }
+
+.fa-comment-alt-times::before {
+ content: "\f4ab"; }
+
+.fa-message-times::before {
+ content: "\f4ab"; }
+
+.fa-file-certificate::before {
+ content: "\f5f3"; }
+
+.fa-file-award::before {
+ content: "\f5f3"; }
+
+.fa-user-doctor-hair-long::before {
+ content: "\e459"; }
+
+.fa-camera-security::before {
+ content: "\f8fe"; }
+
+.fa-camera-home::before {
+ content: "\f8fe"; }
+
+.fa-gear::before {
+ content: "\f013"; }
+
+.fa-cog::before {
+ content: "\f013"; }
+
+.fa-droplet-slash::before {
+ content: "\f5c7"; }
+
+.fa-tint-slash::before {
+ content: "\f5c7"; }
+
+.fa-book-heart::before {
+ content: "\f499"; }
+
+.fa-mosque::before {
+ content: "\f678"; }
+
+.fa-duck::before {
+ content: "\f6d8"; }
+
+.fa-mosquito::before {
+ content: "\e52b"; }
+
+.fa-star-of-david::before {
+ content: "\f69a"; }
+
+.fa-flag-swallowtail::before {
+ content: "\f74c"; }
+
+.fa-flag-alt::before {
+ content: "\f74c"; }
+
+.fa-person-military-rifle::before {
+ content: "\e54b"; }
+
+.fa-car-garage::before {
+ content: "\f5e2"; }
+
+.fa-cart-shopping::before {
+ content: "\f07a"; }
+
+.fa-shopping-cart::before {
+ content: "\f07a"; }
+
+.fa-book-font::before {
+ content: "\e0bf"; }
+
+.fa-shield-plus::before {
+ content: "\e24a"; }
+
+.fa-vials::before {
+ content: "\f493"; }
+
+.fa-eye-dropper-full::before {
+ content: "\e172"; }
+
+.fa-distribute-spacing-horizontal::before {
+ content: "\e365"; }
+
+.fa-tablet-rugged::before {
+ content: "\f48f"; }
+
+.fa-temperature-snow::before {
+ content: "\f768"; }
+
+.fa-temperature-frigid::before {
+ content: "\f768"; }
+
+.fa-moped::before {
+ content: "\e3b9"; }
+
+.fa-face-smile-plus::before {
+ content: "\f5b9"; }
+
+.fa-smile-plus::before {
+ content: "\f5b9"; }
+
+.fa-radio-tuner::before {
+ content: "\f8d8"; }
+
+.fa-radio-alt::before {
+ content: "\f8d8"; }
+
+.fa-face-swear::before {
+ content: "\e399"; }
+
+.fa-water-arrow-down::before {
+ content: "\f774"; }
+
+.fa-water-lower::before {
+ content: "\f774"; }
+
+.fa-scanner-touchscreen::before {
+ content: "\f48a"; }
+
+.fa-circle-7::before {
+ content: "\e0f4"; }
+
+.fa-plug-circle-plus::before {
+ content: "\e55f"; }
+
+.fa-person-ski-jumping::before {
+ content: "\f7c7"; }
+
+.fa-ski-jump::before {
+ content: "\f7c7"; }
+
+.fa-place-of-worship::before {
+ content: "\f67f"; }
+
+.fa-water-arrow-up::before {
+ content: "\f775"; }
+
+.fa-water-rise::before {
+ content: "\f775"; }
+
+.fa-waveform-lines::before {
+ content: "\f8f2"; }
+
+.fa-waveform-path::before {
+ content: "\f8f2"; }
+
+.fa-split::before {
+ content: "\e254"; }
+
+.fa-film-canister::before {
+ content: "\f8b7"; }
+
+.fa-film-cannister::before {
+ content: "\f8b7"; }
+
+.fa-folder-xmark::before {
+ content: "\f65f"; }
+
+.fa-folder-times::before {
+ content: "\f65f"; }
+
+.fa-toilet-paper-blank::before {
+ content: "\f71f"; }
+
+.fa-toilet-paper-alt::before {
+ content: "\f71f"; }
+
+.fa-tablet-screen::before {
+ content: "\f3fc"; }
+
+.fa-tablet-android-alt::before {
+ content: "\f3fc"; }
+
+.fa-hexagon-vertical-nft-slanted::before {
+ content: "\e506"; }
+
+.fa-folder-music::before {
+ content: "\e18d"; }
+
+.fa-display-medical::before {
+ content: "\e166"; }
+
+.fa-desktop-medical::before {
+ content: "\e166"; }
+
+.fa-share-all::before {
+ content: "\f367"; }
+
+.fa-peapod::before {
+ content: "\e31c"; }
+
+.fa-chess-clock::before {
+ content: "\f43d"; }
+
+.fa-axe::before {
+ content: "\f6b2"; }
+
+.fa-square-d::before {
+ content: "\e268"; }
+
+.fa-grip-vertical::before {
+ content: "\f58e"; }
+
+.fa-mobile-signal-out::before {
+ content: "\e1f0"; }
+
+.fa-arrow-turn-up::before {
+ content: "\f148"; }
+
+.fa-level-up::before {
+ content: "\f148"; }
+
+.fa-u::before {
+ content: "\55"; }
+
+.fa-arrow-up-from-dotted-line::before {
+ content: "\e09b"; }
+
+.fa-square-root-variable::before {
+ content: "\f698"; }
+
+.fa-square-root-alt::before {
+ content: "\f698"; }
+
+.fa-light-switch-on::before {
+ content: "\e019"; }
+
+.fa-arrow-down-arrow-up::before {
+ content: "\f883"; }
+
+.fa-sort-alt::before {
+ content: "\f883"; }
+
+.fa-raindrops::before {
+ content: "\f75c"; }
+
+.fa-dash::before {
+ content: "\e404"; }
+
+.fa-minus-large::before {
+ content: "\e404"; }
+
+.fa-clock::before {
+ content: "\f017"; }
+
+.fa-clock-four::before {
+ content: "\f017"; }
+
+.fa-input-numeric::before {
+ content: "\e1bd"; }
+
+.fa-truck-tow::before {
+ content: "\e2b8"; }
+
+.fa-backward-step::before {
+ content: "\f048"; }
+
+.fa-step-backward::before {
+ content: "\f048"; }
+
+.fa-pallet::before {
+ content: "\f482"; }
+
+.fa-car-bolt::before {
+ content: "\e341"; }
+
+.fa-arrows-maximize::before {
+ content: "\f31d"; }
+
+.fa-expand-arrows::before {
+ content: "\f31d"; }
+
+.fa-faucet::before {
+ content: "\e005"; }
+
+.fa-cloud-sleet::before {
+ content: "\f741"; }
+
+.fa-lamp-street::before {
+ content: "\e1c5"; }
+
+.fa-list-radio::before {
+ content: "\e1d0"; }
+
+.fa-pen-nib-slash::before {
+ content: "\e4a1"; }
+
+.fa-baseball-bat-ball::before {
+ content: "\f432"; }
+
+.fa-square-up-left::before {
+ content: "\e282"; }
+
+.fa-overline::before {
+ content: "\f876"; }
+
+.fa-s::before {
+ content: "\53"; }
+
+.fa-timeline::before {
+ content: "\e29c"; }
+
+.fa-keyboard::before {
+ content: "\f11c"; }
+
+.fa-arrows-from-dotted-line::before {
+ content: "\e0a3"; }
+
+.fa-usb-drive::before {
+ content: "\f8e9"; }
+
+.fa-ballot::before {
+ content: "\f732"; }
+
+.fa-caret-down::before {
+ content: "\f0d7"; }
+
+.fa-location-dot-slash::before {
+ content: "\f605"; }
+
+.fa-map-marker-alt-slash::before {
+ content: "\f605"; }
+
+.fa-cards::before {
+ content: "\e3ed"; }
+
+.fa-house-chimney-medical::before {
+ content: "\f7f2"; }
+
+.fa-clinic-medical::before {
+ content: "\f7f2"; }
+
+.fa-boxing-glove::before {
+ content: "\f438"; }
+
+.fa-glove-boxing::before {
+ content: "\f438"; }
+
+.fa-temperature-three-quarters::before {
+ content: "\f2c8"; }
+
+.fa-temperature-3::before {
+ content: "\f2c8"; }
+
+.fa-thermometer-3::before {
+ content: "\f2c8"; }
+
+.fa-thermometer-three-quarters::before {
+ content: "\f2c8"; }
+
+.fa-bell-school::before {
+ content: "\f5d5"; }
+
+.fa-mobile-screen::before {
+ content: "\f3cf"; }
+
+.fa-mobile-android-alt::before {
+ content: "\f3cf"; }
+
+.fa-plane-up::before {
+ content: "\e22d"; }
+
+.fa-folder-heart::before {
+ content: "\e189"; }
+
+.fa-circle-location-arrow::before {
+ content: "\f602"; }
+
+.fa-location-circle::before {
+ content: "\f602"; }
+
+.fa-face-head-bandage::before {
+ content: "\e37a"; }
+
+.fa-sushi-roll::before {
+ content: "\e48b"; }
+
+.fa-maki-roll::before {
+ content: "\e48b"; }
+
+.fa-makizushi::before {
+ content: "\e48b"; }
+
+.fa-car-bump::before {
+ content: "\f5e0"; }
+
+.fa-piggy-bank::before {
+ content: "\f4d3"; }
+
+.fa-racquet::before {
+ content: "\f45a"; }
+
+.fa-car-mirrors::before {
+ content: "\e343"; }
+
+.fa-industry-windows::before {
+ content: "\f3b3"; }
+
+.fa-industry-alt::before {
+ content: "\f3b3"; }
+
+.fa-bolt-auto::before {
+ content: "\e0b6"; }
+
+.fa-battery-half::before {
+ content: "\f242"; }
+
+.fa-battery-3::before {
+ content: "\f242"; }
+
+.fa-flux-capacitor::before {
+ content: "\f8ba"; }
+
+.fa-mountain-city::before {
+ content: "\e52e"; }
+
+.fa-coins::before {
+ content: "\f51e"; }
+
+.fa-honey-pot::before {
+ content: "\e418"; }
+
+.fa-olive::before {
+ content: "\e316"; }
+
+.fa-khanda::before {
+ content: "\f66d"; }
+
+.fa-filter-list::before {
+ content: "\e17c"; }
+
+.fa-outlet::before {
+ content: "\e01c"; }
+
+.fa-sliders::before {
+ content: "\f1de"; }
+
+.fa-sliders-h::before {
+ content: "\f1de"; }
+
+.fa-cauldron::before {
+ content: "\f6bf"; }
+
+.fa-people::before {
+ content: "\e216"; }
+
+.fa-folder-tree::before {
+ content: "\f802"; }
+
+.fa-network-wired::before {
+ content: "\f6ff"; }
+
+.fa-croissant::before {
+ content: "\f7f6"; }
+
+.fa-map-pin::before {
+ content: "\f276"; }
+
+.fa-hamsa::before {
+ content: "\f665"; }
+
+.fa-cent-sign::before {
+ content: "\e3f5"; }
+
+.fa-swords-laser::before {
+ content: "\e03d"; }
+
+.fa-flask::before {
+ content: "\f0c3"; }
+
+.fa-person-pregnant::before {
+ content: "\e31e"; }
+
+.fa-square-u::before {
+ content: "\e281"; }
+
+.fa-wand-sparkles::before {
+ content: "\f72b"; }
+
+.fa-router::before {
+ content: "\f8da"; }
+
+.fa-ellipsis-vertical::before {
+ content: "\f142"; }
+
+.fa-ellipsis-v::before {
+ content: "\f142"; }
+
+.fa-sword-laser-alt::before {
+ content: "\e03c"; }
+
+.fa-ticket::before {
+ content: "\f145"; }
+
+.fa-power-off::before {
+ content: "\f011"; }
+
+.fa-coin::before {
+ content: "\f85c"; }
+
+.fa-laptop-slash::before {
+ content: "\e1c7"; }
+
+.fa-right-long::before {
+ content: "\f30b"; }
+
+.fa-long-arrow-alt-right::before {
+ content: "\f30b"; }
+
+.fa-circle-b::before {
+ content: "\e0fd"; }
+
+.fa-person-dress-simple::before {
+ content: "\e21c"; }
+
+.fa-pipe-collar::before {
+ content: "\e437"; }
+
+.fa-lights-holiday::before {
+ content: "\f7b2"; }
+
+.fa-citrus::before {
+ content: "\e2f4"; }
+
+.fa-flag-usa::before {
+ content: "\f74d"; }
+
+.fa-laptop-file::before {
+ content: "\e51d"; }
+
+.fa-tty::before {
+ content: "\f1e4"; }
+
+.fa-teletype::before {
+ content: "\f1e4"; }
+
+.fa-chart-tree-map::before {
+ content: "\e0ea"; }
+
+.fa-diagram-next::before {
+ content: "\e476"; }
+
+.fa-person-rifle::before {
+ content: "\e54e"; }
+
+.fa-clock-five-thirty::before {
+ content: "\e34a"; }
+
+.fa-pipe-valve::before {
+ content: "\e439"; }
+
+.fa-arrow-up-from-arc::before {
+ content: "\e4b4"; }
+
+.fa-face-spiral-eyes::before {
+ content: "\e485"; }
+
+.fa-compress-wide::before {
+ content: "\f326"; }
+
+.fa-circle-phone-hangup::before {
+ content: "\e11d"; }
+
+.fa-phone-circle-down::before {
+ content: "\e11d"; }
+
+.fa-house-medical-circle-exclamation::before {
+ content: "\e512"; }
+
+.fa-badminton::before {
+ content: "\e33a"; }
+
+.fa-closed-captioning::before {
+ content: "\f20a"; }
+
+.fa-person-hiking::before {
+ content: "\f6ec"; }
+
+.fa-hiking::before {
+ content: "\f6ec"; }
+
+.fa-right-from-line::before {
+ content: "\f347"; }
+
+.fa-arrow-alt-from-left::before {
+ content: "\f347"; }
+
+.fa-venus-double::before {
+ content: "\f226"; }
+
+.fa-images::before {
+ content: "\f302"; }
+
+.fa-calculator::before {
+ content: "\f1ec"; }
+
+.fa-shuttlecock::before {
+ content: "\f45b"; }
+
+.fa-user-hair::before {
+ content: "\e45a"; }
+
+.fa-eye-evil::before {
+ content: "\f6db"; }
+
+.fa-people-pulling::before {
+ content: "\e535"; }
+
+.fa-n::before {
+ content: "\4e"; }
+
+.fa-garage::before {
+ content: "\e009"; }
+
+.fa-cable-car::before {
+ content: "\f7da"; }
+
+.fa-tram::before {
+ content: "\f7da"; }
+
+.fa-shovel-snow::before {
+ content: "\f7c3"; }
+
+.fa-cloud-rain::before {
+ content: "\f73d"; }
+
+.fa-face-lying::before {
+ content: "\e37e"; }
+
+.fa-sprinkler::before {
+ content: "\e035"; }
+
+.fa-building-circle-xmark::before {
+ content: "\e4d4"; }
+
+.fa-person-sledding::before {
+ content: "\f7cb"; }
+
+.fa-sledding::before {
+ content: "\f7cb"; }
+
+.fa-game-console-handheld::before {
+ content: "\f8bb"; }
+
+.fa-ship::before {
+ content: "\f21a"; }
+
+.fa-clock-six-thirty::before {
+ content: "\e353"; }
+
+.fa-battery-slash::before {
+ content: "\f377"; }
+
+.fa-tugrik-sign::before {
+ content: "\e2ba"; }
+
+.fa-arrows-down-to-line::before {
+ content: "\e4b8"; }
+
+.fa-download::before {
+ content: "\f019"; }
+
+.fa-shelves::before {
+ content: "\f480"; }
+
+.fa-inventory::before {
+ content: "\f480"; }
+
+.fa-cloud-snow::before {
+ content: "\f742"; }
+
+.fa-face-grin::before {
+ content: "\f580"; }
+
+.fa-grin::before {
+ content: "\f580"; }
+
+.fa-delete-left::before {
+ content: "\f55a"; }
+
+.fa-backspace::before {
+ content: "\f55a"; }
+
+.fa-oven::before {
+ content: "\e01d"; }
+
+.fa-eye-dropper::before {
+ content: "\f1fb"; }
+
+.fa-eye-dropper-empty::before {
+ content: "\f1fb"; }
+
+.fa-eyedropper::before {
+ content: "\f1fb"; }
+
+.fa-comment-captions::before {
+ content: "\e146"; }
+
+.fa-comments-question::before {
+ content: "\e14e"; }
+
+.fa-scribble::before {
+ content: "\e23f"; }
+
+.fa-rotate-exclamation::before {
+ content: "\e23c"; }
+
+.fa-file-circle-check::before {
+ content: "\e5a0"; }
+
+.fa-glass::before {
+ content: "\f804"; }
+
+.fa-loader::before {
+ content: "\e1d4"; }
+
+.fa-forward::before {
+ content: "\f04e"; }
+
+.fa-user-pilot::before {
+ content: "\e2c0"; }
+
+.fa-mobile::before {
+ content: "\f3ce"; }
+
+.fa-mobile-android::before {
+ content: "\f3ce"; }
+
+.fa-mobile-phone::before {
+ content: "\f3ce"; }
+
+.fa-code-pull-request-closed::before {
+ content: "\e3f9"; }
+
+.fa-face-meh::before {
+ content: "\f11a"; }
+
+.fa-meh::before {
+ content: "\f11a"; }
+
+.fa-align-center::before {
+ content: "\f037"; }
+
+.fa-book-skull::before {
+ content: "\f6b7"; }
+
+.fa-book-dead::before {
+ content: "\f6b7"; }
+
+.fa-id-card::before {
+ content: "\f2c2"; }
+
+.fa-drivers-license::before {
+ content: "\f2c2"; }
+
+.fa-face-dotted::before {
+ content: "\e47f"; }
+
+.fa-face-worried::before {
+ content: "\e3a3"; }
+
+.fa-outdent::before {
+ content: "\f03b"; }
+
+.fa-dedent::before {
+ content: "\f03b"; }
+
+.fa-heart-circle-exclamation::before {
+ content: "\e4fe"; }
+
+.fa-house::before {
+ content: "\f015"; }
+
+.fa-home::before {
+ content: "\f015"; }
+
+.fa-home-alt::before {
+ content: "\f015"; }
+
+.fa-home-lg-alt::before {
+ content: "\f015"; }
+
+.fa-vector-circle::before {
+ content: "\e2c6"; }
+
+.fa-car-circle-bolt::before {
+ content: "\e342"; }
+
+.fa-calendar-week::before {
+ content: "\f784"; }
+
+.fa-flying-disc::before {
+ content: "\e3a9"; }
+
+.fa-laptop-medical::before {
+ content: "\f812"; }
+
+.fa-square-down-right::before {
+ content: "\e26c"; }
+
+.fa-b::before {
+ content: "\42"; }
+
+.fa-seat-airline::before {
+ content: "\e244"; }
+
+.fa-moon-over-sun::before {
+ content: "\f74a"; }
+
+.fa-eclipse-alt::before {
+ content: "\f74a"; }
+
+.fa-pipe::before {
+ content: "\7c"; }
+
+.fa-file-medical::before {
+ content: "\f477"; }
+
+.fa-potato::before {
+ content: "\e440"; }
+
+.fa-dice-one::before {
+ content: "\f525"; }
+
+.fa-circle-a::before {
+ content: "\e0f7"; }
+
+.fa-helmet-battle::before {
+ content: "\f6eb"; }
+
+.fa-butter::before {
+ content: "\e3e4"; }
+
+.fa-blanket-fire::before {
+ content: "\e3da"; }
+
+.fa-kiwi-bird::before {
+ content: "\f535"; }
+
+.fa-castle::before {
+ content: "\e0de"; }
+
+.fa-golf-club::before {
+ content: "\f451"; }
+
+.fa-arrow-right-arrow-left::before {
+ content: "\f0ec"; }
+
+.fa-exchange::before {
+ content: "\f0ec"; }
+
+.fa-rotate-right::before {
+ content: "\f2f9"; }
+
+.fa-redo-alt::before {
+ content: "\f2f9"; }
+
+.fa-rotate-forward::before {
+ content: "\f2f9"; }
+
+.fa-utensils::before {
+ content: "\f2e7"; }
+
+.fa-cutlery::before {
+ content: "\f2e7"; }
+
+.fa-arrow-up-wide-short::before {
+ content: "\f161"; }
+
+.fa-sort-amount-up::before {
+ content: "\f161"; }
+
+.fa-balloons::before {
+ content: "\e2e4"; }
+
+.fa-mill-sign::before {
+ content: "\e1ed"; }
+
+.fa-bowl-rice::before {
+ content: "\e2eb"; }
+
+.fa-timeline-arrow::before {
+ content: "\e29d"; }
+
+.fa-skull::before {
+ content: "\f54c"; }
+
+.fa-game-board-simple::before {
+ content: "\f868"; }
+
+.fa-game-board-alt::before {
+ content: "\f868"; }
+
+.fa-circle-video::before {
+ content: "\e12b"; }
+
+.fa-video-circle::before {
+ content: "\e12b"; }
+
+.fa-chart-scatter-bubble::before {
+ content: "\e0e9"; }
+
+.fa-house-turret::before {
+ content: "\e1b4"; }
+
+.fa-banana::before {
+ content: "\e2e5"; }
+
+.fa-hand-holding-skull::before {
+ content: "\e1a4"; }
+
+.fa-people-dress::before {
+ content: "\e217"; }
+
+.fa-loveseat::before {
+ content: "\f4cc"; }
+
+.fa-couch-small::before {
+ content: "\f4cc"; }
+
+.fa-tower-broadcast::before {
+ content: "\f519"; }
+
+.fa-broadcast-tower::before {
+ content: "\f519"; }
+
+.fa-truck-pickup::before {
+ content: "\f63c"; }
+
+.fa-block-quote::before {
+ content: "\e0b5"; }
+
+.fa-up-long::before {
+ content: "\f30c"; }
+
+.fa-long-arrow-alt-up::before {
+ content: "\f30c"; }
+
+.fa-stop::before {
+ content: "\f04d"; }
+
+.fa-code-merge::before {
+ content: "\f387"; }
+
+.fa-money-check-dollar-pen::before {
+ content: "\f873"; }
+
+.fa-money-check-edit-alt::before {
+ content: "\f873"; }
+
+.fa-up-from-line::before {
+ content: "\f346"; }
+
+.fa-arrow-alt-from-bottom::before {
+ content: "\f346"; }
+
+.fa-upload::before {
+ content: "\f093"; }
+
+.fa-hurricane::before {
+ content: "\f751"; }
+
+.fa-people-pants::before {
+ content: "\e219"; }
+
+.fa-mound::before {
+ content: "\e52d"; }
+
+.fa-windsock::before {
+ content: "\f777"; }
+
+.fa-circle-half::before {
+ content: "\e110"; }
+
+.fa-brake-warning::before {
+ content: "\e0c7"; }
+
+.fa-toilet-portable::before {
+ content: "\e583"; }
+
+.fa-compact-disc::before {
+ content: "\f51f"; }
+
+.fa-file-arrow-down::before {
+ content: "\f56d"; }
+
+.fa-file-download::before {
+ content: "\f56d"; }
+
+.fa-saxophone-fire::before {
+ content: "\f8db"; }
+
+.fa-sax-hot::before {
+ content: "\f8db"; }
+
+.fa-camera-web-slash::before {
+ content: "\f833"; }
+
+.fa-webcam-slash::before {
+ content: "\f833"; }
+
+.fa-folder-medical::before {
+ content: "\e18c"; }
+
+.fa-folder-gear::before {
+ content: "\e187"; }
+
+.fa-folder-cog::before {
+ content: "\e187"; }
+
+.fa-hand-wave::before {
+ content: "\e1a7"; }
+
+.fa-arrow-up-arrow-down::before {
+ content: "\e099"; }
+
+.fa-sort-up-down::before {
+ content: "\e099"; }
+
+.fa-caravan::before {
+ content: "\f8ff"; }
+
+.fa-shield-cat::before {
+ content: "\e572"; }
+
+.fa-message-slash::before {
+ content: "\f4a9"; }
+
+.fa-comment-alt-slash::before {
+ content: "\f4a9"; }
+
+.fa-bolt::before {
+ content: "\f0e7"; }
+
+.fa-zap::before {
+ content: "\f0e7"; }
+
+.fa-trash-can-check::before {
+ content: "\e2a9"; }
+
+.fa-glass-water::before {
+ content: "\e4f4"; }
+
+.fa-oil-well::before {
+ content: "\e532"; }
+
+.fa-person-simple::before {
+ content: "\e220"; }
+
+.fa-vault::before {
+ content: "\e2c5"; }
+
+.fa-mars::before {
+ content: "\f222"; }
+
+.fa-toilet::before {
+ content: "\f7d8"; }
+
+.fa-plane-circle-xmark::before {
+ content: "\e557"; }
+
+.fa-yen-sign::before {
+ content: "\f157"; }
+
+.fa-cny::before {
+ content: "\f157"; }
+
+.fa-jpy::before {
+ content: "\f157"; }
+
+.fa-rmb::before {
+ content: "\f157"; }
+
+.fa-yen::before {
+ content: "\f157"; }
+
+.fa-notes::before {
+ content: "\e202"; }
+
+.fa-ruble-sign::before {
+ content: "\f158"; }
+
+.fa-rouble::before {
+ content: "\f158"; }
+
+.fa-rub::before {
+ content: "\f158"; }
+
+.fa-ruble::before {
+ content: "\f158"; }
+
+.fa-trash-undo::before {
+ content: "\f895"; }
+
+.fa-trash-arrow-turn-left::before {
+ content: "\f895"; }
+
+.fa-champagne-glass::before {
+ content: "\f79e"; }
+
+.fa-glass-champagne::before {
+ content: "\f79e"; }
+
+.fa-objects-align-center-horizontal::before {
+ content: "\e3bc"; }
+
+.fa-sun::before {
+ content: "\f185"; }
+
+.fa-trash-can-slash::before {
+ content: "\e2ad"; }
+
+.fa-trash-alt-slash::before {
+ content: "\e2ad"; }
+
+.fa-screen-users::before {
+ content: "\f63d"; }
+
+.fa-users-class::before {
+ content: "\f63d"; }
+
+.fa-guitar::before {
+ content: "\f7a6"; }
+
+.fa-square-arrow-left::before {
+ content: "\f33a"; }
+
+.fa-arrow-square-left::before {
+ content: "\f33a"; }
+
+.fa-square-8::before {
+ content: "\e25d"; }
+
+.fa-face-smile-hearts::before {
+ content: "\e390"; }
+
+.fa-brackets-square::before {
+ content: "\f7e9"; }
+
+.fa-brackets::before {
+ content: "\f7e9"; }
+
+.fa-laptop-arrow-down::before {
+ content: "\e1c6"; }
+
+.fa-hockey-stick-puck::before {
+ content: "\e3ae"; }
+
+.fa-house-tree::before {
+ content: "\e1b3"; }
+
+.fa-signal-fair::before {
+ content: "\f68d"; }
+
+.fa-signal-2::before {
+ content: "\f68d"; }
+
+.fa-face-laugh-wink::before {
+ content: "\f59c"; }
+
+.fa-laugh-wink::before {
+ content: "\f59c"; }
+
+.fa-circle-dollar::before {
+ content: "\f2e8"; }
+
+.fa-dollar-circle::before {
+ content: "\f2e8"; }
+
+.fa-usd-circle::before {
+ content: "\f2e8"; }
+
+.fa-horse-head::before {
+ content: "\f7ab"; }
+
+.fa-arrows-repeat::before {
+ content: "\f364"; }
+
+.fa-repeat-alt::before {
+ content: "\f364"; }
+
+.fa-bore-hole::before {
+ content: "\e4c3"; }
+
+.fa-industry::before {
+ content: "\f275"; }
+
+.fa-image-polaroid::before {
+ content: "\f8c4"; }
+
+.fa-wave-triangle::before {
+ content: "\f89a"; }
+
+.fa-circle-down::before {
+ content: "\f358"; }
+
+.fa-arrow-alt-circle-down::before {
+ content: "\f358"; }
+
+.fa-grill::before {
+ content: "\e5a3"; }
+
+.fa-arrows-turn-to-dots::before {
+ content: "\e4c1"; }
+
+.fa-chart-mixed::before {
+ content: "\f643"; }
+
+.fa-analytics::before {
+ content: "\f643"; }
+
+.fa-florin-sign::before {
+ content: "\e184"; }
+
+.fa-arrow-down-short-wide::before {
+ content: "\f884"; }
+
+.fa-sort-amount-desc::before {
+ content: "\f884"; }
+
+.fa-sort-amount-down-alt::before {
+ content: "\f884"; }
+
+.fa-less-than::before {
+ content: "\3c"; }
+
+.fa-display-code::before {
+ content: "\e165"; }
+
+.fa-desktop-code::before {
+ content: "\e165"; }
+
+.fa-face-drooling::before {
+ content: "\e372"; }
+
+.fa-oil-temperature::before {
+ content: "\f614"; }
+
+.fa-oil-temp::before {
+ content: "\f614"; }
+
+.fa-square-question::before {
+ content: "\f2fd"; }
+
+.fa-question-square::before {
+ content: "\f2fd"; }
+
+.fa-air-conditioner::before {
+ content: "\f8f4"; }
+
+.fa-angle-down::before {
+ content: "\f107"; }
+
+.fa-mountains::before {
+ content: "\f6fd"; }
+
+.fa-omega::before {
+ content: "\f67a"; }
+
+.fa-car-tunnel::before {
+ content: "\e4de"; }
+
+.fa-person-dolly-empty::before {
+ content: "\f4d1"; }
+
+.fa-pan-food::before {
+ content: "\e42b"; }
+
+.fa-head-side-cough::before {
+ content: "\e061"; }
+
+.fa-grip-lines::before {
+ content: "\f7a4"; }
+
+.fa-thumbs-down::before {
+ content: "\f165"; }
+
+.fa-user-lock::before {
+ content: "\f502"; }
+
+.fa-arrow-right-long::before {
+ content: "\f178"; }
+
+.fa-long-arrow-right::before {
+ content: "\f178"; }
+
+.fa-tickets-airline::before {
+ content: "\e29b"; }
+
+.fa-anchor-circle-xmark::before {
+ content: "\e4ac"; }
+
+.fa-ellipsis::before {
+ content: "\f141"; }
+
+.fa-ellipsis-h::before {
+ content: "\f141"; }
+
+.fa-nfc-slash::before {
+ content: "\e1fc"; }
+
+.fa-chess-pawn::before {
+ content: "\f443"; }
+
+.fa-kit-medical::before {
+ content: "\f479"; }
+
+.fa-first-aid::before {
+ content: "\f479"; }
+
+.fa-grid-2-plus::before {
+ content: "\e197"; }
+
+.fa-bells::before {
+ content: "\f77f"; }
+
+.fa-person-through-window::before {
+ content: "\e5a9"; }
+
+.fa-toolbox::before {
+ content: "\f552"; }
+
+.fa-envelope-dot::before {
+ content: "\e16f"; }
+
+.fa-envelope-badge::before {
+ content: "\e16f"; }
+
+.fa-hands-holding-circle::before {
+ content: "\e4fb"; }
+
+.fa-bug::before {
+ content: "\f188"; }
+
+.fa-bowl-chopsticks::before {
+ content: "\e2e9"; }
+
+.fa-credit-card::before {
+ content: "\f09d"; }
+
+.fa-credit-card-alt::before {
+ content: "\f09d"; }
+
+.fa-circle-s::before {
+ content: "\e121"; }
+
+.fa-box-ballot::before {
+ content: "\f735"; }
+
+.fa-car::before {
+ content: "\f1b9"; }
+
+.fa-automobile::before {
+ content: "\f1b9"; }
+
+.fa-hand-holding-hand::before {
+ content: "\e4f7"; }
+
+.fa-user-tie-hair::before {
+ content: "\e45f"; }
+
+.fa-podium-star::before {
+ content: "\f758"; }
+
+.fa-user-hair-mullet::before {
+ content: "\e45c"; }
+
+.fa-business-front::before {
+ content: "\e45c"; }
+
+.fa-party-back::before {
+ content: "\e45c"; }
+
+.fa-trian-balbot::before {
+ content: "\e45c"; }
+
+.fa-microphone-stand::before {
+ content: "\f8cb"; }
+
+.fa-book-open-reader::before {
+ content: "\f5da"; }
+
+.fa-book-reader::before {
+ content: "\f5da"; }
+
+.fa-family-dress::before {
+ content: "\e301"; }
+
+.fa-circle-x::before {
+ content: "\e12e"; }
+
+.fa-cabin::before {
+ content: "\e46d"; }
+
+.fa-mountain-sun::before {
+ content: "\e52f"; }
+
+.fa-chart-simple-horizontal::before {
+ content: "\e474"; }
+
+.fa-arrows-left-right-to-line::before {
+ content: "\e4ba"; }
+
+.fa-hand-back-point-left::before {
+ content: "\e19f"; }
+
+.fa-message-dots::before {
+ content: "\f4a3"; }
+
+.fa-comment-alt-dots::before {
+ content: "\f4a3"; }
+
+.fa-messaging::before {
+ content: "\f4a3"; }
+
+.fa-file-heart::before {
+ content: "\e176"; }
+
+.fa-beer-mug::before {
+ content: "\e0b3"; }
+
+.fa-beer-foam::before {
+ content: "\e0b3"; }
+
+.fa-dice-d20::before {
+ content: "\f6cf"; }
+
+.fa-drone::before {
+ content: "\f85f"; }
+
+.fa-truck-droplet::before {
+ content: "\e58c"; }
+
+.fa-file-circle-xmark::before {
+ content: "\e5a1"; }
+
+.fa-temperature-arrow-up::before {
+ content: "\e040"; }
+
+.fa-temperature-up::before {
+ content: "\e040"; }
+
+.fa-medal::before {
+ content: "\f5a2"; }
+
+.fa-bed::before {
+ content: "\f236"; }
+
+.fa-book-copy::before {
+ content: "\e0be"; }
+
+.fa-square-h::before {
+ content: "\f0fd"; }
+
+.fa-h-square::before {
+ content: "\f0fd"; }
+
+.fa-square-c::before {
+ content: "\e266"; }
+
+.fa-clock-two::before {
+ content: "\e35a"; }
+
+.fa-square-ellipsis-vertical::before {
+ content: "\e26f"; }
+
+.fa-podcast::before {
+ content: "\f2ce"; }
+
+.fa-bee::before {
+ content: "\e0b2"; }
+
+.fa-temperature-full::before {
+ content: "\f2c7"; }
+
+.fa-temperature-4::before {
+ content: "\f2c7"; }
+
+.fa-thermometer-4::before {
+ content: "\f2c7"; }
+
+.fa-thermometer-full::before {
+ content: "\f2c7"; }
+
+.fa-bell::before {
+ content: "\f0f3"; }
+
+.fa-candy-bar::before {
+ content: "\e3e8"; }
+
+.fa-chocolate-bar::before {
+ content: "\e3e8"; }
+
+.fa-xmark-large::before {
+ content: "\e59b"; }
+
+.fa-pinata::before {
+ content: "\e3c3"; }
+
+.fa-arrows-from-line::before {
+ content: "\e0a4"; }
+
+.fa-superscript::before {
+ content: "\f12b"; }
+
+.fa-bowl-spoon::before {
+ content: "\e3e0"; }
+
+.fa-hexagon-check::before {
+ content: "\e416"; }
+
+.fa-plug-circle-xmark::before {
+ content: "\e560"; }
+
+.fa-star-of-life::before {
+ content: "\f621"; }
+
+.fa-phone-slash::before {
+ content: "\f3dd"; }
+
+.fa-traffic-light-stop::before {
+ content: "\f63a"; }
+
+.fa-paint-roller::before {
+ content: "\f5aa"; }
+
+.fa-accent-grave::before {
+ content: "\60"; }
+
+.fa-handshake-angle::before {
+ content: "\f4c4"; }
+
+.fa-hands-helping::before {
+ content: "\f4c4"; }
+
+.fa-circle-0::before {
+ content: "\e0ed"; }
+
+.fa-dial-med-low::before {
+ content: "\e160"; }
+
+.fa-location-dot::before {
+ content: "\f3c5"; }
+
+.fa-map-marker-alt::before {
+ content: "\f3c5"; }
+
+.fa-crab::before {
+ content: "\e3ff"; }
+
+.fa-box-open-full::before {
+ content: "\f49c"; }
+
+.fa-box-full::before {
+ content: "\f49c"; }
+
+.fa-file::before {
+ content: "\f15b"; }
+
+.fa-greater-than::before {
+ content: "\3e"; }
+
+.fa-quotes::before {
+ content: "\e234"; }
+
+.fa-pretzel::before {
+ content: "\e441"; }
+
+.fa-person-swimming::before {
+ content: "\f5c4"; }
+
+.fa-swimmer::before {
+ content: "\f5c4"; }
+
+.fa-arrow-down::before {
+ content: "\f063"; }
+
+.fa-user-robot-xmarks::before {
+ content: "\e4a7"; }
+
+.fa-message-quote::before {
+ content: "\e1e4"; }
+
+.fa-comment-alt-quote::before {
+ content: "\e1e4"; }
+
+.fa-candy-corn::before {
+ content: "\f6bd"; }
+
+.fa-folder-magnifying-glass::before {
+ content: "\e18b"; }
+
+.fa-folder-search::before {
+ content: "\e18b"; }
+
+.fa-notebook::before {
+ content: "\e201"; }
+
+.fa-droplet::before {
+ content: "\f043"; }
+
+.fa-tint::before {
+ content: "\f043"; }
+
+.fa-bullseye-pointer::before {
+ content: "\f649"; }
+
+.fa-eraser::before {
+ content: "\f12d"; }
+
+.fa-hexagon-image::before {
+ content: "\e504"; }
+
+.fa-earth-americas::before {
+ content: "\f57d"; }
+
+.fa-earth::before {
+ content: "\f57d"; }
+
+.fa-earth-america::before {
+ content: "\f57d"; }
+
+.fa-globe-americas::before {
+ content: "\f57d"; }
+
+.fa-crate-apple::before {
+ content: "\f6b1"; }
+
+.fa-apple-crate::before {
+ content: "\f6b1"; }
+
+.fa-person-burst::before {
+ content: "\e53b"; }
+
+.fa-game-board::before {
+ content: "\f867"; }
+
+.fa-hat-chef::before {
+ content: "\f86b"; }
+
+.fa-hand-back-point-right::before {
+ content: "\e1a1"; }
+
+.fa-dove::before {
+ content: "\f4ba"; }
+
+.fa-snowflake-droplets::before {
+ content: "\e5c1"; }
+
+.fa-battery-empty::before {
+ content: "\f244"; }
+
+.fa-battery-0::before {
+ content: "\f244"; }
+
+.fa-grid-4::before {
+ content: "\e198"; }
+
+.fa-socks::before {
+ content: "\f696"; }
+
+.fa-face-sunglasses::before {
+ content: "\e398"; }
+
+.fa-inbox::before {
+ content: "\f01c"; }
+
+.fa-square-0::before {
+ content: "\e255"; }
+
+.fa-section::before {
+ content: "\e447"; }
+
+.fa-square-this-way-up::before {
+ content: "\f49f"; }
+
+.fa-box-up::before {
+ content: "\f49f"; }
+
+.fa-gauge-high::before {
+ content: "\f625"; }
+
+.fa-tachometer-alt::before {
+ content: "\f625"; }
+
+.fa-tachometer-alt-fast::before {
+ content: "\f625"; }
+
+.fa-square-ampersand::before {
+ content: "\e260"; }
+
+.fa-envelope-open-text::before {
+ content: "\f658"; }
+
+.fa-lamp-desk::before {
+ content: "\e014"; }
+
+.fa-hospital::before {
+ content: "\f0f8"; }
+
+.fa-hospital-alt::before {
+ content: "\f0f8"; }
+
+.fa-hospital-wide::before {
+ content: "\f0f8"; }
+
+.fa-poll-people::before {
+ content: "\f759"; }
+
+.fa-whiskey-glass-ice::before {
+ content: "\f7a1"; }
+
+.fa-glass-whiskey-rocks::before {
+ content: "\f7a1"; }
+
+.fa-wine-bottle::before {
+ content: "\f72f"; }
+
+.fa-chess-rook::before {
+ content: "\f447"; }
+
+.fa-user-bounty-hunter::before {
+ content: "\e2bf"; }
+
+.fa-bars-staggered::before {
+ content: "\f550"; }
+
+.fa-reorder::before {
+ content: "\f550"; }
+
+.fa-stream::before {
+ content: "\f550"; }
+
+.fa-diagram-sankey::before {
+ content: "\e158"; }
+
+.fa-cloud-hail-mixed::before {
+ content: "\f73a"; }
+
+.fa-circle-up-left::before {
+ content: "\e128"; }
+
+.fa-dharmachakra::before {
+ content: "\f655"; }
+
+.fa-objects-align-left::before {
+ content: "\e3be"; }
+
+.fa-oil-can-drip::before {
+ content: "\e205"; }
+
+.fa-face-smiling-hands::before {
+ content: "\e396"; }
+
+.fa-broccoli::before {
+ content: "\e3e2"; }
+
+.fa-route-interstate::before {
+ content: "\f61b"; }
+
+.fa-ear-muffs::before {
+ content: "\f795"; }
+
+.fa-hotdog::before {
+ content: "\f80f"; }
+
+.fa-transporter-empty::before {
+ content: "\e046"; }
+
+.fa-person-walking-with-cane::before {
+ content: "\f29d"; }
+
+.fa-blind::before {
+ content: "\f29d"; }
+
+.fa-angle-90::before {
+ content: "\e08d"; }
+
+.fa-rectangle-terminal::before {
+ content: "\e236"; }
+
+.fa-kite::before {
+ content: "\f6f4"; }
+
+.fa-drum::before {
+ content: "\f569"; }
+
+.fa-scrubber::before {
+ content: "\f2f8"; }
+
+.fa-ice-cream::before {
+ content: "\f810"; }
+
+.fa-heart-circle-bolt::before {
+ content: "\e4fc"; }
+
+.fa-fish-bones::before {
+ content: "\e304"; }
+
+.fa-deer-rudolph::before {
+ content: "\f78f"; }
+
+.fa-fax::before {
+ content: "\f1ac"; }
+
+.fa-paragraph::before {
+ content: "\f1dd"; }
+
+.fa-head-side-heart::before {
+ content: "\e1aa"; }
+
+.fa-square-e::before {
+ content: "\e26d"; }
+
+.fa-meter-fire::before {
+ content: "\e1eb"; }
+
+.fa-cloud-hail::before {
+ content: "\f739"; }
+
+.fa-check-to-slot::before {
+ content: "\f772"; }
+
+.fa-vote-yea::before {
+ content: "\f772"; }
+
+.fa-money-from-bracket::before {
+ content: "\e312"; }
+
+.fa-star-half::before {
+ content: "\f089"; }
+
+.fa-car-bus::before {
+ content: "\f85a"; }
+
+.fa-speaker::before {
+ content: "\f8df"; }
+
+.fa-timer::before {
+ content: "\e29e"; }
+
+.fa-boxes-stacked::before {
+ content: "\f468"; }
+
+.fa-boxes::before {
+ content: "\f468"; }
+
+.fa-boxes-alt::before {
+ content: "\f468"; }
+
+.fa-grill-hot::before {
+ content: "\e5a5"; }
+
+.fa-ballot-check::before {
+ content: "\f733"; }
+
+.fa-link::before {
+ content: "\f0c1"; }
+
+.fa-chain::before {
+ content: "\f0c1"; }
+
+.fa-ear-listen::before {
+ content: "\f2a2"; }
+
+.fa-assistive-listening-systems::before {
+ content: "\f2a2"; }
+
+.fa-file-minus::before {
+ content: "\f318"; }
+
+.fa-tree-city::before {
+ content: "\e587"; }
+
+.fa-play::before {
+ content: "\f04b"; }
+
+.fa-font::before {
+ content: "\f031"; }
+
+.fa-cup-togo::before {
+ content: "\f6c5"; }
+
+.fa-coffee-togo::before {
+ content: "\f6c5"; }
+
+.fa-square-down-left::before {
+ content: "\e26b"; }
+
+.fa-burger-lettuce::before {
+ content: "\e3e3"; }
+
+.fa-rupiah-sign::before {
+ content: "\e23d"; }
+
+.fa-magnifying-glass::before {
+ content: "\f002"; }
+
+.fa-search::before {
+ content: "\f002"; }
+
+.fa-table-tennis-paddle-ball::before {
+ content: "\f45d"; }
+
+.fa-ping-pong-paddle-ball::before {
+ content: "\f45d"; }
+
+.fa-table-tennis::before {
+ content: "\f45d"; }
+
+.fa-person-dots-from-line::before {
+ content: "\f470"; }
+
+.fa-diagnoses::before {
+ content: "\f470"; }
+
+.fa-chevrons-down::before {
+ content: "\f322"; }
+
+.fa-chevron-double-down::before {
+ content: "\f322"; }
+
+.fa-trash-can-arrow-up::before {
+ content: "\f82a"; }
+
+.fa-trash-restore-alt::before {
+ content: "\f82a"; }
+
+.fa-signal-good::before {
+ content: "\f68e"; }
+
+.fa-signal-3::before {
+ content: "\f68e"; }
+
+.fa-location-question::before {
+ content: "\f60b"; }
+
+.fa-map-marker-question::before {
+ content: "\f60b"; }
+
+.fa-floppy-disk-circle-xmark::before {
+ content: "\e181"; }
+
+.fa-floppy-disk-times::before {
+ content: "\e181"; }
+
+.fa-save-circle-xmark::before {
+ content: "\e181"; }
+
+.fa-save-times::before {
+ content: "\e181"; }
+
+.fa-naira-sign::before {
+ content: "\e1f6"; }
+
+.fa-peach::before {
+ content: "\e20b"; }
+
+.fa-taxi-bus::before {
+ content: "\e298"; }
+
+.fa-bracket-curly::before {
+ content: "\7b"; }
+
+.fa-bracket-curly-left::before {
+ content: "\7b"; }
+
+.fa-lobster::before {
+ content: "\e421"; }
+
+.fa-cart-flatbed-empty::before {
+ content: "\f476"; }
+
+.fa-dolly-flatbed-empty::before {
+ content: "\f476"; }
+
+.fa-colon::before {
+ content: "\3a"; }
+
+.fa-cart-arrow-down::before {
+ content: "\f218"; }
+
+.fa-wand::before {
+ content: "\f72a"; }
+
+.fa-walkie-talkie::before {
+ content: "\f8ef"; }
+
+.fa-file-pen::before {
+ content: "\f31c"; }
+
+.fa-file-edit::before {
+ content: "\f31c"; }
+
+.fa-receipt::before {
+ content: "\f543"; }
+
+.fa-table-picnic::before {
+ content: "\e32d"; }
+
+.fa-square-pen::before {
+ content: "\f14b"; }
+
+.fa-pen-square::before {
+ content: "\f14b"; }
+
+.fa-pencil-square::before {
+ content: "\f14b"; }
+
+.fa-circle-microphone-lines::before {
+ content: "\e117"; }
+
+.fa-microphone-circle-alt::before {
+ content: "\e117"; }
+
+.fa-display-slash::before {
+ content: "\e2fa"; }
+
+.fa-desktop-slash::before {
+ content: "\e2fa"; }
+
+.fa-suitcase-rolling::before {
+ content: "\f5c1"; }
+
+.fa-person-circle-exclamation::before {
+ content: "\e53f"; }
+
+.fa-transporter-2::before {
+ content: "\e044"; }
+
+.fa-hands-holding-diamond::before {
+ content: "\f47c"; }
+
+.fa-hand-receiving::before {
+ content: "\f47c"; }
+
+.fa-money-bill-simple-wave::before {
+ content: "\e1f2"; }
+
+.fa-chevron-down::before {
+ content: "\f078"; }
+
+.fa-battery-full::before {
+ content: "\f240"; }
+
+.fa-battery::before {
+ content: "\f240"; }
+
+.fa-battery-5::before {
+ content: "\f240"; }
+
+.fa-bell-plus::before {
+ content: "\f849"; }
+
+.fa-book-arrow-right::before {
+ content: "\e0b9"; }
+
+.fa-hospitals::before {
+ content: "\f80e"; }
+
+.fa-club::before {
+ content: "\f327"; }
+
+.fa-skull-crossbones::before {
+ content: "\f714"; }
+
+.fa-droplet-degree::before {
+ content: "\f748"; }
+
+.fa-dewpoint::before {
+ content: "\f748"; }
+
+.fa-code-compare::before {
+ content: "\e13a"; }
+
+.fa-list-ul::before {
+ content: "\f0ca"; }
+
+.fa-list-dots::before {
+ content: "\f0ca"; }
+
+.fa-hand-holding-magic::before {
+ content: "\f6e5"; }
+
+.fa-watermelon-slice::before {
+ content: "\e337"; }
+
+.fa-circle-ellipsis::before {
+ content: "\e10a"; }
+
+.fa-school-lock::before {
+ content: "\e56f"; }
+
+.fa-tower-cell::before {
+ content: "\e585"; }
+
+.fa-sd-cards::before {
+ content: "\e240"; }
+
+.fa-down-long::before {
+ content: "\f309"; }
+
+.fa-long-arrow-alt-down::before {
+ content: "\f309"; }
+
+.fa-envelopes::before {
+ content: "\e170"; }
+
+.fa-phone-office::before {
+ content: "\f67d"; }
+
+.fa-ranking-star::before {
+ content: "\e561"; }
+
+.fa-chess-king::before {
+ content: "\f43f"; }
+
+.fa-nfc-pen::before {
+ content: "\e1fa"; }
+
+.fa-person-harassing::before {
+ content: "\e549"; }
+
+.fa-hat-winter::before {
+ content: "\f7a8"; }
+
+.fa-brazilian-real-sign::before {
+ content: "\e46c"; }
+
+.fa-landmark-dome::before {
+ content: "\f752"; }
+
+.fa-landmark-alt::before {
+ content: "\f752"; }
+
+.fa-bone-break::before {
+ content: "\f5d8"; }
+
+.fa-arrow-up::before {
+ content: "\f062"; }
+
+.fa-down-from-dotted-line::before {
+ content: "\e407"; }
+
+.fa-tv::before {
+ content: "\f26c"; }
+
+.fa-television::before {
+ content: "\f26c"; }
+
+.fa-tv-alt::before {
+ content: "\f26c"; }
+
+.fa-border-left::before {
+ content: "\f84f"; }
+
+.fa-circle-divide::before {
+ content: "\e106"; }
+
+.fa-shrimp::before {
+ content: "\e448"; }
+
+.fa-list-check::before {
+ content: "\f0ae"; }
+
+.fa-tasks::before {
+ content: "\f0ae"; }
+
+.fa-diagram-subtask::before {
+ content: "\e479"; }
+
+.fa-jug-detergent::before {
+ content: "\e519"; }
+
+.fa-circle-user::before {
+ content: "\f2bd"; }
+
+.fa-user-circle::before {
+ content: "\f2bd"; }
+
+.fa-square-y::before {
+ content: "\e287"; }
+
+.fa-user-doctor-hair::before {
+ content: "\e458"; }
+
+.fa-planet-ringed::before {
+ content: "\e020"; }
+
+.fa-mushroom::before {
+ content: "\e425"; }
+
+.fa-user-shield::before {
+ content: "\f505"; }
+
+.fa-megaphone::before {
+ content: "\f675"; }
+
+.fa-circle-exclamation-check::before {
+ content: "\e10d"; }
+
+.fa-wind::before {
+ content: "\f72e"; }
+
+.fa-box-dollar::before {
+ content: "\f4a0"; }
+
+.fa-box-usd::before {
+ content: "\f4a0"; }
+
+.fa-car-burst::before {
+ content: "\f5e1"; }
+
+.fa-car-crash::before {
+ content: "\f5e1"; }
+
+.fa-y::before {
+ content: "\59"; }
+
+.fa-user-headset::before {
+ content: "\f82d"; }
+
+.fa-arrows-retweet::before {
+ content: "\f361"; }
+
+.fa-retweet-alt::before {
+ content: "\f361"; }
+
+.fa-person-snowboarding::before {
+ content: "\f7ce"; }
+
+.fa-snowboarding::before {
+ content: "\f7ce"; }
+
+.fa-square-chevron-right::before {
+ content: "\f32b"; }
+
+.fa-chevron-square-right::before {
+ content: "\f32b"; }
+
+.fa-lacrosse-stick-ball::before {
+ content: "\e3b6"; }
+
+.fa-truck-fast::before {
+ content: "\f48b"; }
+
+.fa-shipping-fast::before {
+ content: "\f48b"; }
+
+.fa-user-magnifying-glass::before {
+ content: "\e5c5"; }
+
+.fa-star-sharp::before {
+ content: "\e28b"; }
+
+.fa-comment-heart::before {
+ content: "\e5c8"; }
+
+.fa-circle-1::before {
+ content: "\e0ee"; }
+
+.fa-circle-star::before {
+ content: "\e123"; }
+
+.fa-star-circle::before {
+ content: "\e123"; }
+
+.fa-fish::before {
+ content: "\f578"; }
+
+.fa-cloud-fog::before {
+ content: "\f74e"; }
+
+.fa-fog::before {
+ content: "\f74e"; }
+
+.fa-waffle::before {
+ content: "\e466"; }
+
+.fa-music-note::before {
+ content: "\f8cf"; }
+
+.fa-music-alt::before {
+ content: "\f8cf"; }
+
+.fa-hexagon-exclamation::before {
+ content: "\e417"; }
+
+.fa-cart-shopping-fast::before {
+ content: "\e0dc"; }
+
+.fa-object-union::before {
+ content: "\e49f"; }
+
+.fa-user-graduate::before {
+ content: "\f501"; }
+
+.fa-starfighter::before {
+ content: "\e037"; }
+
+.fa-circle-half-stroke::before {
+ content: "\f042"; }
+
+.fa-adjust::before {
+ content: "\f042"; }
+
+.fa-arrow-right-long-to-line::before {
+ content: "\e3d5"; }
+
+.fa-square-arrow-down::before {
+ content: "\f339"; }
+
+.fa-arrow-square-down::before {
+ content: "\f339"; }
+
+.fa-diamond-half-stroke::before {
+ content: "\e5b8"; }
+
+.fa-clapperboard::before {
+ content: "\e131"; }
+
+.fa-square-chevron-left::before {
+ content: "\f32a"; }
+
+.fa-chevron-square-left::before {
+ content: "\f32a"; }
+
+.fa-phone-intercom::before {
+ content: "\e434"; }
+
+.fa-link-horizontal::before {
+ content: "\e1cb"; }
+
+.fa-chain-horizontal::before {
+ content: "\e1cb"; }
+
+.fa-mango::before {
+ content: "\e30f"; }
+
+.fa-music-note-slash::before {
+ content: "\f8d0"; }
+
+.fa-music-alt-slash::before {
+ content: "\f8d0"; }
+
+.fa-circle-radiation::before {
+ content: "\f7ba"; }
+
+.fa-radiation-alt::before {
+ content: "\f7ba"; }
+
+.fa-face-tongue-sweat::before {
+ content: "\e39e"; }
+
+.fa-globe-stand::before {
+ content: "\f5f6"; }
+
+.fa-baseball::before {
+ content: "\f433"; }
+
+.fa-baseball-ball::before {
+ content: "\f433"; }
+
+.fa-circle-p::before {
+ content: "\e11a"; }
+
+.fa-award-simple::before {
+ content: "\e0ab"; }
+
+.fa-jet-fighter-up::before {
+ content: "\e518"; }
+
+.fa-diagram-project::before {
+ content: "\f542"; }
+
+.fa-project-diagram::before {
+ content: "\f542"; }
+
+.fa-pedestal::before {
+ content: "\e20d"; }
+
+.fa-chart-pyramid::before {
+ content: "\e0e6"; }
+
+.fa-sidebar::before {
+ content: "\e24e"; }
+
+.fa-snowman-head::before {
+ content: "\f79b"; }
+
+.fa-frosty-head::before {
+ content: "\f79b"; }
+
+.fa-copy::before {
+ content: "\f0c5"; }
+
+.fa-burger-glass::before {
+ content: "\e0ce"; }
+
+.fa-volume-xmark::before {
+ content: "\f6a9"; }
+
+.fa-volume-mute::before {
+ content: "\f6a9"; }
+
+.fa-volume-times::before {
+ content: "\f6a9"; }
+
+.fa-hand-sparkles::before {
+ content: "\e05d"; }
+
+.fa-bars-filter::before {
+ content: "\e0ad"; }
+
+.fa-paintbrush-pencil::before {
+ content: "\e206"; }
+
+.fa-party-bell::before {
+ content: "\e31a"; }
+
+.fa-user-vneck-hair::before {
+ content: "\e462"; }
+
+.fa-jack-o-lantern::before {
+ content: "\f30e"; }
+
+.fa-grip::before {
+ content: "\f58d"; }
+
+.fa-grip-horizontal::before {
+ content: "\f58d"; }
+
+.fa-share-from-square::before {
+ content: "\f14d"; }
+
+.fa-share-square::before {
+ content: "\f14d"; }
+
+.fa-keynote::before {
+ content: "\f66c"; }
+
+.fa-child-combatant::before {
+ content: "\e4e0"; }
+
+.fa-child-rifle::before {
+ content: "\e4e0"; }
+
+.fa-gun::before {
+ content: "\e19b"; }
+
+.fa-square-phone::before {
+ content: "\f098"; }
+
+.fa-phone-square::before {
+ content: "\f098"; }
+
+.fa-plus::before {
+ content: "\2b"; }
+
+.fa-add::before {
+ content: "\2b"; }
+
+.fa-expand::before {
+ content: "\f065"; }
+
+.fa-computer::before {
+ content: "\e4e5"; }
+
+.fa-fort::before {
+ content: "\e486"; }
+
+.fa-cloud-check::before {
+ content: "\e35c"; }
+
+.fa-xmark::before {
+ content: "\f00d"; }
+
+.fa-close::before {
+ content: "\f00d"; }
+
+.fa-multiply::before {
+ content: "\f00d"; }
+
+.fa-remove::before {
+ content: "\f00d"; }
+
+.fa-times::before {
+ content: "\f00d"; }
+
+.fa-face-smirking::before {
+ content: "\e397"; }
+
+.fa-arrows-up-down-left-right::before {
+ content: "\f047"; }
+
+.fa-arrows::before {
+ content: "\f047"; }
+
+.fa-chalkboard-user::before {
+ content: "\f51c"; }
+
+.fa-chalkboard-teacher::before {
+ content: "\f51c"; }
+
+.fa-rhombus::before {
+ content: "\e23b"; }
+
+.fa-claw-marks::before {
+ content: "\f6c2"; }
+
+.fa-peso-sign::before {
+ content: "\e222"; }
+
+.fa-face-smile-tongue::before {
+ content: "\e394"; }
+
+.fa-cart-circle-xmark::before {
+ content: "\e3f4"; }
+
+.fa-building-shield::before {
+ content: "\e4d8"; }
+
+.fa-circle-phone-flip::before {
+ content: "\e11c"; }
+
+.fa-phone-circle-alt::before {
+ content: "\e11c"; }
+
+.fa-baby::before {
+ content: "\f77c"; }
+
+.fa-users-line::before {
+ content: "\e592"; }
+
+.fa-quote-left::before {
+ content: "\f10d"; }
+
+.fa-quote-left-alt::before {
+ content: "\f10d"; }
+
+.fa-tractor::before {
+ content: "\f722"; }
+
+.fa-key-skeleton::before {
+ content: "\f6f3"; }
+
+.fa-trash-arrow-up::before {
+ content: "\f829"; }
+
+.fa-trash-restore::before {
+ content: "\f829"; }
+
+.fa-arrow-down-up-lock::before {
+ content: "\e4b0"; }
+
+.fa-arrow-down-to-bracket::before {
+ content: "\e094"; }
+
+.fa-lines-leaning::before {
+ content: "\e51e"; }
+
+.fa-square-q::before {
+ content: "\e27b"; }
+
+.fa-ruler-combined::before {
+ content: "\f546"; }
+
+.fa-symbols::before {
+ content: "\f86e"; }
+
+.fa-icons-alt::before {
+ content: "\f86e"; }
+
+.fa-copyright::before {
+ content: "\f1f9"; }
+
+.fa-highlighter-line::before {
+ content: "\e1af"; }
+
+.fa-bracket-square::before {
+ content: "\5b"; }
+
+.fa-bracket::before {
+ content: "\5b"; }
+
+.fa-bracket-left::before {
+ content: "\5b"; }
+
+.fa-island-tropical::before {
+ content: "\f811"; }
+
+.fa-island-tree-palm::before {
+ content: "\f811"; }
+
+.fa-arrow-right-from-line::before {
+ content: "\f343"; }
+
+.fa-arrow-from-left::before {
+ content: "\f343"; }
+
+.fa-h2::before {
+ content: "\f314"; }
+
+.fa-equals::before {
+ content: "\3d"; }
+
+.fa-cake-slice::before {
+ content: "\e3e5"; }
+
+.fa-shortcake::before {
+ content: "\e3e5"; }
+
+.fa-peanut::before {
+ content: "\e430"; }
+
+.fa-wrench-simple::before {
+ content: "\e2d1"; }
+
+.fa-blender::before {
+ content: "\f517"; }
+
+.fa-teeth::before {
+ content: "\f62e"; }
+
+.fa-tally-2::before {
+ content: "\e295"; }
+
+.fa-shekel-sign::before {
+ content: "\f20b"; }
+
+.fa-ils::before {
+ content: "\f20b"; }
+
+.fa-shekel::before {
+ content: "\f20b"; }
+
+.fa-sheqel::before {
+ content: "\f20b"; }
+
+.fa-sheqel-sign::before {
+ content: "\f20b"; }
+
+.fa-cars::before {
+ content: "\f85b"; }
+
+.fa-axe-battle::before {
+ content: "\f6b3"; }
+
+.fa-user-hair-long::before {
+ content: "\e45b"; }
+
+.fa-map::before {
+ content: "\f279"; }
+
+.fa-file-circle-info::before {
+ content: "\e493"; }
+
+.fa-face-disappointed::before {
+ content: "\e36f"; }
+
+.fa-lasso-sparkles::before {
+ content: "\e1c9"; }
+
+.fa-clock-eleven::before {
+ content: "\e347"; }
+
+.fa-rocket::before {
+ content: "\f135"; }
+
+.fa-siren-on::before {
+ content: "\e02e"; }
+
+.fa-clock-ten::before {
+ content: "\e354"; }
+
+.fa-candle-holder::before {
+ content: "\f6bc"; }
+
+.fa-video-arrow-down-left::before {
+ content: "\e2c8"; }
+
+.fa-photo-film::before {
+ content: "\f87c"; }
+
+.fa-photo-video::before {
+ content: "\f87c"; }
+
+.fa-floppy-disk-circle-arrow-right::before {
+ content: "\e180"; }
+
+.fa-save-circle-arrow-right::before {
+ content: "\e180"; }
+
+.fa-folder-minus::before {
+ content: "\f65d"; }
+
+.fa-planet-moon::before {
+ content: "\e01f"; }
+
+.fa-face-eyes-xmarks::before {
+ content: "\e374"; }
+
+.fa-chart-scatter::before {
+ content: "\f7ee"; }
+
+.fa-display-arrow-down::before {
+ content: "\e164"; }
+
+.fa-store::before {
+ content: "\f54e"; }
+
+.fa-arrow-trend-up::before {
+ content: "\e098"; }
+
+.fa-plug-circle-minus::before {
+ content: "\e55e"; }
+
+.fa-olive-branch::before {
+ content: "\e317"; }
+
+.fa-angle::before {
+ content: "\e08c"; }
+
+.fa-vacuum-robot::before {
+ content: "\e04e"; }
+
+.fa-sign-hanging::before {
+ content: "\f4d9"; }
+
+.fa-sign::before {
+ content: "\f4d9"; }
+
+.fa-square-divide::before {
+ content: "\e26a"; }
+
+.fa-signal-stream-slash::before {
+ content: "\e250"; }
+
+.fa-bezier-curve::before {
+ content: "\f55b"; }
+
+.fa-eye-dropper-half::before {
+ content: "\e173"; }
+
+.fa-store-lock::before {
+ content: "\e4a6"; }
+
+.fa-bell-slash::before {
+ content: "\f1f6"; }
+
+.fa-cloud-bolt-sun::before {
+ content: "\f76e"; }
+
+.fa-thunderstorm-sun::before {
+ content: "\f76e"; }
+
+.fa-camera-slash::before {
+ content: "\e0d9"; }
+
+.fa-comment-quote::before {
+ content: "\e14c"; }
+
+.fa-tablet::before {
+ content: "\f3fb"; }
+
+.fa-tablet-android::before {
+ content: "\f3fb"; }
+
+.fa-school-flag::before {
+ content: "\e56e"; }
+
+.fa-message-code::before {
+ content: "\e1df"; }
+
+.fa-glass-half::before {
+ content: "\e192"; }
+
+.fa-glass-half-empty::before {
+ content: "\e192"; }
+
+.fa-glass-half-full::before {
+ content: "\e192"; }
+
+.fa-fill::before {
+ content: "\f575"; }
+
+.fa-message-minus::before {
+ content: "\f4a7"; }
+
+.fa-comment-alt-minus::before {
+ content: "\f4a7"; }
+
+.fa-angle-up::before {
+ content: "\f106"; }
+
+.fa-drumstick-bite::before {
+ content: "\f6d7"; }
+
+.fa-link-horizontal-slash::before {
+ content: "\e1cc"; }
+
+.fa-chain-horizontal-slash::before {
+ content: "\e1cc"; }
+
+.fa-holly-berry::before {
+ content: "\f7aa"; }
+
+.fa-nose::before {
+ content: "\e5bd"; }
+
+.fa-chevron-left::before {
+ content: "\f053"; }
+
+.fa-bacteria::before {
+ content: "\e059"; }
+
+.fa-clouds::before {
+ content: "\f744"; }
+
+.fa-money-bill-simple::before {
+ content: "\e1f1"; }
+
+.fa-hand-lizard::before {
+ content: "\f258"; }
+
+.fa-table-pivot::before {
+ content: "\e291"; }
+
+.fa-filter-slash::before {
+ content: "\e17d"; }
+
+.fa-trash-can-undo::before {
+ content: "\f896"; }
+
+.fa-trash-can-arrow-turn-left::before {
+ content: "\f896"; }
+
+.fa-trash-undo-alt::before {
+ content: "\f896"; }
+
+.fa-notdef::before {
+ content: "\e1fe"; }
+
+.fa-disease::before {
+ content: "\f7fa"; }
+
+.fa-person-to-door::before {
+ content: "\e433"; }
+
+.fa-turntable::before {
+ content: "\f8e4"; }
+
+.fa-briefcase-medical::before {
+ content: "\f469"; }
+
+.fa-genderless::before {
+ content: "\f22d"; }
+
+.fa-chevron-right::before {
+ content: "\f054"; }
+
+.fa-signal-weak::before {
+ content: "\f68c"; }
+
+.fa-signal-1::before {
+ content: "\f68c"; }
+
+.fa-clock-five::before {
+ content: "\e349"; }
+
+.fa-retweet::before {
+ content: "\f079"; }
+
+.fa-car-rear::before {
+ content: "\f5de"; }
+
+.fa-car-alt::before {
+ content: "\f5de"; }
+
+.fa-pump-soap::before {
+ content: "\e06b"; }
+
+.fa-computer-classic::before {
+ content: "\f8b1"; }
+
+.fa-frame::before {
+ content: "\e495"; }
+
+.fa-video-slash::before {
+ content: "\f4e2"; }
+
+.fa-battery-quarter::before {
+ content: "\f243"; }
+
+.fa-battery-2::before {
+ content: "\f243"; }
+
+.fa-ellipsis-stroke::before {
+ content: "\f39b"; }
+
+.fa-ellipsis-h-alt::before {
+ content: "\f39b"; }
+
+.fa-radio::before {
+ content: "\f8d7"; }
+
+.fa-baby-carriage::before {
+ content: "\f77d"; }
+
+.fa-carriage-baby::before {
+ content: "\f77d"; }
+
+.fa-face-expressionless::before {
+ content: "\e373"; }
+
+.fa-down-to-dotted-line::before {
+ content: "\e408"; }
+
+.fa-cloud-music::before {
+ content: "\f8ae"; }
+
+.fa-traffic-light::before {
+ content: "\f637"; }
+
+.fa-cloud-minus::before {
+ content: "\e35d"; }
+
+.fa-thermometer::before {
+ content: "\f491"; }
+
+.fa-shield-minus::before {
+ content: "\e249"; }
+
+.fa-vr-cardboard::before {
+ content: "\f729"; }
+
+.fa-car-tilt::before {
+ content: "\f5e5"; }
+
+.fa-gauge-circle-minus::before {
+ content: "\e497"; }
+
+.fa-brightness-low::before {
+ content: "\e0ca"; }
+
+.fa-hand-middle-finger::before {
+ content: "\f806"; }
+
+.fa-percent::before {
+ content: "\25"; }
+
+.fa-percentage::before {
+ content: "\25"; }
+
+.fa-truck-moving::before {
+ content: "\f4df"; }
+
+.fa-glass-water-droplet::before {
+ content: "\e4f5"; }
+
+.fa-conveyor-belt::before {
+ content: "\f46e"; }
+
+.fa-location-check::before {
+ content: "\f606"; }
+
+.fa-map-marker-check::before {
+ content: "\f606"; }
+
+.fa-coin-vertical::before {
+ content: "\e3fd"; }
+
+.fa-display::before {
+ content: "\e163"; }
+
+.fa-person-sign::before {
+ content: "\f757"; }
+
+.fa-face-smile::before {
+ content: "\f118"; }
+
+.fa-smile::before {
+ content: "\f118"; }
+
+.fa-phone-hangup::before {
+ content: "\e225"; }
+
+.fa-signature-slash::before {
+ content: "\e3cb"; }
+
+.fa-thumbtack::before {
+ content: "\f08d"; }
+
+.fa-thumb-tack::before {
+ content: "\f08d"; }
+
+.fa-wheat-slash::before {
+ content: "\e339"; }
+
+.fa-trophy::before {
+ content: "\f091"; }
+
+.fa-clouds-sun::before {
+ content: "\f746"; }
+
+.fa-person-praying::before {
+ content: "\f683"; }
+
+.fa-pray::before {
+ content: "\f683"; }
+
+.fa-hammer::before {
+ content: "\f6e3"; }
+
+.fa-face-vomit::before {
+ content: "\e3a0"; }
+
+.fa-speakers::before {
+ content: "\f8e0"; }
+
+.fa-tty-answer::before {
+ content: "\e2b9"; }
+
+.fa-teletype-answer::before {
+ content: "\e2b9"; }
+
+.fa-mug-tea-saucer::before {
+ content: "\e1f5"; }
+
+.fa-diagram-lean-canvas::before {
+ content: "\e156"; }
+
+.fa-alt::before {
+ content: "\e08a"; }
+
+.fa-dial::before {
+ content: "\e15b"; }
+
+.fa-dial-med-high::before {
+ content: "\e15b"; }
+
+.fa-hand-peace::before {
+ content: "\f25b"; }
+
+.fa-circle-trash::before {
+ content: "\e126"; }
+
+.fa-trash-circle::before {
+ content: "\e126"; }
+
+.fa-rotate::before {
+ content: "\f2f1"; }
+
+.fa-sync-alt::before {
+ content: "\f2f1"; }
+
+.fa-circle-quarters::before {
+ content: "\e3f8"; }
+
+.fa-spinner::before {
+ content: "\f110"; }
+
+.fa-tower-control::before {
+ content: "\e2a2"; }
+
+.fa-arrow-up-triangle-square::before {
+ content: "\f88a"; }
+
+.fa-sort-shapes-up::before {
+ content: "\f88a"; }
+
+.fa-whale::before {
+ content: "\f72c"; }
+
+.fa-robot::before {
+ content: "\f544"; }
+
+.fa-peace::before {
+ content: "\f67c"; }
+
+.fa-party-horn::before {
+ content: "\e31b"; }
+
+.fa-gears::before {
+ content: "\f085"; }
+
+.fa-cogs::before {
+ content: "\f085"; }
+
+.fa-sun-bright::before {
+ content: "\e28f"; }
+
+.fa-sun-alt::before {
+ content: "\e28f"; }
+
+.fa-warehouse::before {
+ content: "\f494"; }
+
+.fa-lock-keyhole-open::before {
+ content: "\f3c2"; }
+
+.fa-lock-open-alt::before {
+ content: "\f3c2"; }
+
+.fa-square-fragile::before {
+ content: "\f49b"; }
+
+.fa-box-fragile::before {
+ content: "\f49b"; }
+
+.fa-square-wine-glass-crack::before {
+ content: "\f49b"; }
+
+.fa-arrow-up-right-dots::before {
+ content: "\e4b7"; }
+
+.fa-square-n::before {
+ content: "\e277"; }
+
+.fa-splotch::before {
+ content: "\f5bc"; }
+
+.fa-face-grin-hearts::before {
+ content: "\f584"; }
+
+.fa-grin-hearts::before {
+ content: "\f584"; }
+
+.fa-meter::before {
+ content: "\e1e8"; }
+
+.fa-mandolin::before {
+ content: "\f6f9"; }
+
+.fa-dice-four::before {
+ content: "\f524"; }
+
+.fa-sim-card::before {
+ content: "\f7c4"; }
+
+.fa-transgender::before {
+ content: "\f225"; }
+
+.fa-transgender-alt::before {
+ content: "\f225"; }
+
+.fa-mercury::before {
+ content: "\f223"; }
+
+.fa-up-from-bracket::before {
+ content: "\e590"; }
+
+.fa-knife-kitchen::before {
+ content: "\f6f5"; }
+
+.fa-border-right::before {
+ content: "\f852"; }
+
+.fa-arrow-turn-down::before {
+ content: "\f149"; }
+
+.fa-level-down::before {
+ content: "\f149"; }
+
+.fa-spade::before {
+ content: "\f2f4"; }
+
+.fa-card-spade::before {
+ content: "\e3ec"; }
+
+.fa-line-columns::before {
+ content: "\f870"; }
+
+.fa-arrow-right-to-line::before {
+ content: "\f340"; }
+
+.fa-arrow-to-right::before {
+ content: "\f340"; }
+
+.fa-person-falling-burst::before {
+ content: "\e547"; }
+
+.fa-flag-pennant::before {
+ content: "\f456"; }
+
+.fa-pennant::before {
+ content: "\f456"; }
+
+.fa-conveyor-belt-empty::before {
+ content: "\e150"; }
+
+.fa-award::before {
+ content: "\f559"; }
+
+.fa-ticket-simple::before {
+ content: "\f3ff"; }
+
+.fa-ticket-alt::before {
+ content: "\f3ff"; }
+
+.fa-building::before {
+ content: "\f1ad"; }
+
+.fa-angles-left::before {
+ content: "\f100"; }
+
+.fa-angle-double-left::before {
+ content: "\f100"; }
+
+.fa-camcorder::before {
+ content: "\f8a8"; }
+
+.fa-video-handheld::before {
+ content: "\f8a8"; }
+
+.fa-pancakes::before {
+ content: "\e42d"; }
+
+.fa-album-circle-user::before {
+ content: "\e48d"; }
+
+.fa-qrcode::before {
+ content: "\f029"; }
+
+.fa-dice-d10::before {
+ content: "\f6cd"; }
+
+.fa-fireplace::before {
+ content: "\f79a"; }
+
+.fa-browser::before {
+ content: "\f37e"; }
+
+.fa-pen-paintbrush::before {
+ content: "\f618"; }
+
+.fa-pencil-paintbrush::before {
+ content: "\f618"; }
+
+.fa-fish-cooked::before {
+ content: "\f7fe"; }
+
+.fa-chair-office::before {
+ content: "\f6c1"; }
+
+.fa-nesting-dolls::before {
+ content: "\e3ba"; }
+
+.fa-clock-rotate-left::before {
+ content: "\f1da"; }
+
+.fa-history::before {
+ content: "\f1da"; }
+
+.fa-trumpet::before {
+ content: "\f8e3"; }
+
+.fa-face-grin-beam-sweat::before {
+ content: "\f583"; }
+
+.fa-grin-beam-sweat::before {
+ content: "\f583"; }
+
+.fa-fire-smoke::before {
+ content: "\f74b"; }
+
+.fa-phone-missed::before {
+ content: "\e226"; }
+
+.fa-file-export::before {
+ content: "\f56e"; }
+
+.fa-arrow-right-from-file::before {
+ content: "\f56e"; }
+
+.fa-shield::before {
+ content: "\f132"; }
+
+.fa-shield-blank::before {
+ content: "\f132"; }
+
+.fa-arrow-up-short-wide::before {
+ content: "\f885"; }
+
+.fa-sort-amount-up-alt::before {
+ content: "\f885"; }
+
+.fa-arrows-repeat-1::before {
+ content: "\f366"; }
+
+.fa-repeat-1-alt::before {
+ content: "\f366"; }
+
+.fa-gun-slash::before {
+ content: "\e19c"; }
+
+.fa-avocado::before {
+ content: "\e0aa"; }
+
+.fa-binary::before {
+ content: "\e33b"; }
+
+.fa-glasses-round::before {
+ content: "\f5f5"; }
+
+.fa-glasses-alt::before {
+ content: "\f5f5"; }
+
+.fa-phone-plus::before {
+ content: "\f4d2"; }
+
+.fa-ditto::before {
+ content: "\22"; }
+
+.fa-person-seat::before {
+ content: "\e21e"; }
+
+.fa-house-medical::before {
+ content: "\e3b2"; }
+
+.fa-golf-ball-tee::before {
+ content: "\f450"; }
+
+.fa-golf-ball::before {
+ content: "\f450"; }
+
+.fa-circle-chevron-left::before {
+ content: "\f137"; }
+
+.fa-chevron-circle-left::before {
+ content: "\f137"; }
+
+.fa-house-chimney-window::before {
+ content: "\e00d"; }
+
+.fa-scythe::before {
+ content: "\f710"; }
+
+.fa-pen-nib::before {
+ content: "\f5ad"; }
+
+.fa-ban-parking::before {
+ content: "\f616"; }
+
+.fa-parking-circle-slash::before {
+ content: "\f616"; }
+
+.fa-tent-arrow-turn-left::before {
+ content: "\e580"; }
+
+.fa-face-diagonal-mouth::before {
+ content: "\e47e"; }
+
+.fa-diagram-cells::before {
+ content: "\e475"; }
+
+.fa-cricket-bat-ball::before {
+ content: "\f449"; }
+
+.fa-cricket::before {
+ content: "\f449"; }
+
+.fa-tents::before {
+ content: "\e582"; }
+
+.fa-wand-magic::before {
+ content: "\f0d0"; }
+
+.fa-magic::before {
+ content: "\f0d0"; }
+
+.fa-dog::before {
+ content: "\f6d3"; }
+
+.fa-pen-line::before {
+ content: "\e212"; }
+
+.fa-atom-simple::before {
+ content: "\f5d3"; }
+
+.fa-atom-alt::before {
+ content: "\f5d3"; }
+
+.fa-ampersand::before {
+ content: "\26"; }
+
+.fa-carrot::before {
+ content: "\f787"; }
+
+.fa-arrow-up-from-line::before {
+ content: "\f342"; }
+
+.fa-arrow-from-bottom::before {
+ content: "\f342"; }
+
+.fa-moon::before {
+ content: "\f186"; }
+
+.fa-pen-slash::before {
+ content: "\e213"; }
+
+.fa-wine-glass-empty::before {
+ content: "\f5ce"; }
+
+.fa-wine-glass-alt::before {
+ content: "\f5ce"; }
+
+.fa-square-star::before {
+ content: "\e27f"; }
+
+.fa-cheese::before {
+ content: "\f7ef"; }
+
+.fa-send-backward::before {
+ content: "\f87f"; }
+
+.fa-yin-yang::before {
+ content: "\f6ad"; }
+
+.fa-music::before {
+ content: "\f001"; }
+
+.fa-compass-slash::before {
+ content: "\f5e9"; }
+
+.fa-clock-one::before {
+ content: "\e34e"; }
+
+.fa-file-music::before {
+ content: "\f8b6"; }
+
+.fa-code-commit::before {
+ content: "\f386"; }
+
+.fa-temperature-low::before {
+ content: "\f76b"; }
+
+.fa-person-biking::before {
+ content: "\f84a"; }
+
+.fa-biking::before {
+ content: "\f84a"; }
+
+.fa-skeleton::before {
+ content: "\f620"; }
+
+.fa-circle-g::before {
+ content: "\e10f"; }
+
+.fa-circle-arrow-up-left::before {
+ content: "\e0fb"; }
+
+.fa-coin-blank::before {
+ content: "\e3fb"; }
+
+.fa-broom::before {
+ content: "\f51a"; }
+
+.fa-vacuum::before {
+ content: "\e04d"; }
+
+.fa-shield-heart::before {
+ content: "\e574"; }
+
+.fa-card-heart::before {
+ content: "\e3eb"; }
+
+.fa-lightbulb-cfl-on::before {
+ content: "\e5a7"; }
+
+.fa-melon::before {
+ content: "\e310"; }
+
+.fa-gopuram::before {
+ content: "\f664"; }
+
+.fa-earth-oceania::before {
+ content: "\e47b"; }
+
+.fa-globe-oceania::before {
+ content: "\e47b"; }
+
+.fa-container-storage::before {
+ content: "\f4b7"; }
+
+.fa-face-pouting::before {
+ content: "\e387"; }
+
+.fa-square-xmark::before {
+ content: "\f2d3"; }
+
+.fa-times-square::before {
+ content: "\f2d3"; }
+
+.fa-xmark-square::before {
+ content: "\f2d3"; }
+
+.fa-face-explode::before {
+ content: "\e2fe"; }
+
+.fa-exploding-head::before {
+ content: "\e2fe"; }
+
+.fa-hashtag::before {
+ content: "\23"; }
+
+.fa-up-right-and-down-left-from-center::before {
+ content: "\f424"; }
+
+.fa-expand-alt::before {
+ content: "\f424"; }
+
+.fa-oil-can::before {
+ content: "\f613"; }
+
+.fa-t::before {
+ content: "\54"; }
+
+.fa-transformer-bolt::before {
+ content: "\e2a4"; }
+
+.fa-hippo::before {
+ content: "\f6ed"; }
+
+.fa-chart-column::before {
+ content: "\e0e3"; }
+
+.fa-cassette-vhs::before {
+ content: "\f8ec"; }
+
+.fa-vhs::before {
+ content: "\f8ec"; }
+
+.fa-infinity::before {
+ content: "\f534"; }
+
+.fa-vial-circle-check::before {
+ content: "\e596"; }
+
+.fa-chimney::before {
+ content: "\f78b"; }
+
+.fa-object-intersect::before {
+ content: "\e49d"; }
+
+.fa-person-arrow-down-to-line::before {
+ content: "\e538"; }
+
+.fa-voicemail::before {
+ content: "\f897"; }
+
+.fa-block-brick::before {
+ content: "\e3db"; }
+
+.fa-wall-brick::before {
+ content: "\e3db"; }
+
+.fa-fan::before {
+ content: "\f863"; }
+
+.fa-bags-shopping::before {
+ content: "\f847"; }
+
+.fa-paragraph-left::before {
+ content: "\f878"; }
+
+.fa-paragraph-rtl::before {
+ content: "\f878"; }
+
+.fa-person-walking-luggage::before {
+ content: "\e554"; }
+
+.fa-caravan-simple::before {
+ content: "\e000"; }
+
+.fa-caravan-alt::before {
+ content: "\e000"; }
+
+.fa-turtle::before {
+ content: "\f726"; }
+
+.fa-up-down::before {
+ content: "\f338"; }
+
+.fa-arrows-alt-v::before {
+ content: "\f338"; }
+
+.fa-cloud-moon-rain::before {
+ content: "\f73c"; }
+
+.fa-booth-curtain::before {
+ content: "\f734"; }
+
+.fa-calendar::before {
+ content: "\f133"; }
+
+.fa-box-heart::before {
+ content: "\f49d"; }
+
+.fa-trailer::before {
+ content: "\e041"; }
+
+.fa-user-doctor-message::before {
+ content: "\f82e"; }
+
+.fa-user-md-chat::before {
+ content: "\f82e"; }
+
+.fa-bahai::before {
+ content: "\f666"; }
+
+.fa-haykal::before {
+ content: "\f666"; }
+
+.fa-amp-guitar::before {
+ content: "\f8a1"; }
+
+.fa-sd-card::before {
+ content: "\f7c2"; }
+
+.fa-volume-slash::before {
+ content: "\f2e2"; }
+
+.fa-border-bottom::before {
+ content: "\f84d"; }
+
+.fa-wifi-weak::before {
+ content: "\f6aa"; }
+
+.fa-wifi-1::before {
+ content: "\f6aa"; }
+
+.fa-dragon::before {
+ content: "\f6d5"; }
+
+.fa-shoe-prints::before {
+ content: "\f54b"; }
+
+.fa-circle-plus::before {
+ content: "\f055"; }
+
+.fa-plus-circle::before {
+ content: "\f055"; }
+
+.fa-face-grin-tongue-wink::before {
+ content: "\f58b"; }
+
+.fa-grin-tongue-wink::before {
+ content: "\f58b"; }
+
+.fa-hand-holding::before {
+ content: "\f4bd"; }
+
+.fa-plug-circle-exclamation::before {
+ content: "\e55d"; }
+
+.fa-link-slash::before {
+ content: "\f127"; }
+
+.fa-chain-broken::before {
+ content: "\f127"; }
+
+.fa-chain-slash::before {
+ content: "\f127"; }
+
+.fa-unlink::before {
+ content: "\f127"; }
+
+.fa-clone::before {
+ content: "\f24d"; }
+
+.fa-person-walking-arrow-loop-left::before {
+ content: "\e551"; }
+
+.fa-arrow-up-z-a::before {
+ content: "\f882"; }
+
+.fa-sort-alpha-up-alt::before {
+ content: "\f882"; }
+
+.fa-fire-flame-curved::before {
+ content: "\f7e4"; }
+
+.fa-fire-alt::before {
+ content: "\f7e4"; }
+
+.fa-tornado::before {
+ content: "\f76f"; }
+
+.fa-file-circle-plus::before {
+ content: "\e494"; }
+
+.fa-delete-right::before {
+ content: "\e154"; }
+
+.fa-book-quran::before {
+ content: "\f687"; }
+
+.fa-quran::before {
+ content: "\f687"; }
+
+.fa-circle-quarter::before {
+ content: "\e11f"; }
+
+.fa-anchor::before {
+ content: "\f13d"; }
+
+.fa-border-all::before {
+ content: "\f84c"; }
+
+.fa-function::before {
+ content: "\f661"; }
+
+.fa-face-angry::before {
+ content: "\f556"; }
+
+.fa-angry::before {
+ content: "\f556"; }
+
+.fa-people-simple::before {
+ content: "\e21b"; }
+
+.fa-cookie-bite::before {
+ content: "\f564"; }
+
+.fa-arrow-trend-down::before {
+ content: "\e097"; }
+
+.fa-rss::before {
+ content: "\f09e"; }
+
+.fa-feed::before {
+ content: "\f09e"; }
+
+.fa-face-monocle::before {
+ content: "\e380"; }
+
+.fa-draw-polygon::before {
+ content: "\f5ee"; }
+
+.fa-scale-balanced::before {
+ content: "\f24e"; }
+
+.fa-balance-scale::before {
+ content: "\f24e"; }
+
+.fa-calendar-lines::before {
+ content: "\e0d5"; }
+
+.fa-calendar-note::before {
+ content: "\e0d5"; }
+
+.fa-arrow-down-big-small::before {
+ content: "\f88c"; }
+
+.fa-sort-size-down::before {
+ content: "\f88c"; }
+
+.fa-gauge-simple-high::before {
+ content: "\f62a"; }
+
+.fa-tachometer::before {
+ content: "\f62a"; }
+
+.fa-tachometer-fast::before {
+ content: "\f62a"; }
+
+.fa-do-not-enter::before {
+ content: "\f5ec"; }
+
+.fa-shower::before {
+ content: "\f2cc"; }
+
+.fa-dice-d8::before {
+ content: "\f6d2"; }
+
+.fa-desktop::before {
+ content: "\f390"; }
+
+.fa-desktop-alt::before {
+ content: "\f390"; }
+
+.fa-m::before {
+ content: "\4d"; }
+
+.fa-grip-dots-vertical::before {
+ content: "\e411"; }
+
+.fa-face-viewfinder::before {
+ content: "\e2ff"; }
+
+.fa-soft-serve::before {
+ content: "\e400"; }
+
+.fa-creemee::before {
+ content: "\e400"; }
+
+.fa-h5::before {
+ content: "\e412"; }
+
+.fa-hand-back-point-down::before {
+ content: "\e19e"; }
+
+.fa-table-list::before {
+ content: "\f00b"; }
+
+.fa-th-list::before {
+ content: "\f00b"; }
+
+.fa-comment-sms::before {
+ content: "\f7cd"; }
+
+.fa-sms::before {
+ content: "\f7cd"; }
+
+.fa-rectangle::before {
+ content: "\f2fa"; }
+
+.fa-rectangle-landscape::before {
+ content: "\f2fa"; }
+
+.fa-clipboard-list-check::before {
+ content: "\f737"; }
+
+.fa-turkey::before {
+ content: "\f725"; }
+
+.fa-book::before {
+ content: "\f02d"; }
+
+.fa-user-plus::before {
+ content: "\f234"; }
+
+.fa-ice-skate::before {
+ content: "\f7ac"; }
+
+.fa-check::before {
+ content: "\f00c"; }
+
+.fa-battery-three-quarters::before {
+ content: "\f241"; }
+
+.fa-battery-4::before {
+ content: "\f241"; }
+
+.fa-tomato::before {
+ content: "\e330"; }
+
+.fa-sword-laser::before {
+ content: "\e03b"; }
+
+.fa-house-circle-check::before {
+ content: "\e509"; }
+
+.fa-buildings::before {
+ content: "\e0cc"; }
+
+.fa-angle-left::before {
+ content: "\f104"; }
+
+.fa-cart-flatbed-boxes::before {
+ content: "\f475"; }
+
+.fa-dolly-flatbed-alt::before {
+ content: "\f475"; }
+
+.fa-diagram-successor::before {
+ content: "\e47a"; }
+
+.fa-truck-arrow-right::before {
+ content: "\e58b"; }
+
+.fa-square-w::before {
+ content: "\e285"; }
+
+.fa-arrows-split-up-and-left::before {
+ content: "\e4bc"; }
+
+.fa-lamp::before {
+ content: "\f4ca"; }
+
+.fa-airplay::before {
+ content: "\e089"; }
+
+.fa-hand-fist::before {
+ content: "\f6de"; }
+
+.fa-fist-raised::before {
+ content: "\f6de"; }
+
+.fa-shield-quartered::before {
+ content: "\e575"; }
+
+.fa-slash-forward::before {
+ content: "\2f"; }
+
+.fa-location-pen::before {
+ content: "\f607"; }
+
+.fa-map-marker-edit::before {
+ content: "\f607"; }
+
+.fa-cloud-moon::before {
+ content: "\f6c3"; }
+
+.fa-pot-food::before {
+ content: "\e43f"; }
+
+.fa-briefcase::before {
+ content: "\f0b1"; }
+
+.fa-person-falling::before {
+ content: "\e546"; }
+
+.fa-image-portrait::before {
+ content: "\f3e0"; }
+
+.fa-portrait::before {
+ content: "\f3e0"; }
+
+.fa-user-tag::before {
+ content: "\f507"; }
+
+.fa-rug::before {
+ content: "\e569"; }
+
+.fa-print-slash::before {
+ content: "\f686"; }
+
+.fa-earth-europe::before {
+ content: "\f7a2"; }
+
+.fa-globe-europe::before {
+ content: "\f7a2"; }
+
+.fa-cart-flatbed-suitcase::before {
+ content: "\f59d"; }
+
+.fa-luggage-cart::before {
+ content: "\f59d"; }
+
+.fa-hand-back-point-ribbon::before {
+ content: "\e1a0"; }
+
+.fa-rectangle-xmark::before {
+ content: "\f410"; }
+
+.fa-rectangle-times::before {
+ content: "\f410"; }
+
+.fa-times-rectangle::before {
+ content: "\f410"; }
+
+.fa-window-close::before {
+ content: "\f410"; }
+
+.fa-tire-rugged::before {
+ content: "\f634"; }
+
+.fa-lightbulb-dollar::before {
+ content: "\f670"; }
+
+.fa-cowbell::before {
+ content: "\f8b3"; }
+
+.fa-baht-sign::before {
+ content: "\e0ac"; }
+
+.fa-corner::before {
+ content: "\e3fe"; }
+
+.fa-chevrons-right::before {
+ content: "\f324"; }
+
+.fa-chevron-double-right::before {
+ content: "\f324"; }
+
+.fa-book-open::before {
+ content: "\f518"; }
+
+.fa-book-journal-whills::before {
+ content: "\f66a"; }
+
+.fa-journal-whills::before {
+ content: "\f66a"; }
+
+.fa-inhaler::before {
+ content: "\f5f9"; }
+
+.fa-handcuffs::before {
+ content: "\e4f8"; }
+
+.fa-snake::before {
+ content: "\f716"; }
+
+.fa-triangle-exclamation::before {
+ content: "\f071"; }
+
+.fa-exclamation-triangle::before {
+ content: "\f071"; }
+
+.fa-warning::before {
+ content: "\f071"; }
+
+.fa-note-medical::before {
+ content: "\e200"; }
+
+.fa-database::before {
+ content: "\f1c0"; }
+
+.fa-down-left::before {
+ content: "\e16a"; }
+
+.fa-share::before {
+ content: "\f064"; }
+
+.fa-arrow-turn-right::before {
+ content: "\f064"; }
+
+.fa-mail-forward::before {
+ content: "\f064"; }
+
+.fa-face-thinking::before {
+ content: "\e39b"; }
+
+.fa-turn-down-right::before {
+ content: "\e455"; }
+
+.fa-bottle-droplet::before {
+ content: "\e4c4"; }
+
+.fa-mask-face::before {
+ content: "\e1d7"; }
+
+.fa-hill-rockslide::before {
+ content: "\e508"; }
+
+.fa-scanner-keyboard::before {
+ content: "\f489"; }
+
+.fa-circle-o::before {
+ content: "\e119"; }
+
+.fa-grid-horizontal::before {
+ content: "\e307"; }
+
+.fa-message-dollar::before {
+ content: "\f650"; }
+
+.fa-comment-alt-dollar::before {
+ content: "\f650"; }
+
+.fa-right-left::before {
+ content: "\f362"; }
+
+.fa-exchange-alt::before {
+ content: "\f362"; }
+
+.fa-columns-3::before {
+ content: "\e361"; }
+
+.fa-paper-plane::before {
+ content: "\f1d8"; }
+
+.fa-road-circle-exclamation::before {
+ content: "\e565"; }
+
+.fa-dungeon::before {
+ content: "\f6d9"; }
+
+.fa-hand-holding-box::before {
+ content: "\f47b"; }
+
+.fa-input-text::before {
+ content: "\e1bf"; }
+
+.fa-window-flip::before {
+ content: "\f40f"; }
+
+.fa-window-alt::before {
+ content: "\f40f"; }
+
+.fa-align-right::before {
+ content: "\f038"; }
+
+.fa-scanner-gun::before {
+ content: "\f488"; }
+
+.fa-scanner::before {
+ content: "\f488"; }
+
+.fa-tire::before {
+ content: "\f631"; }
+
+.fa-engine::before {
+ content: "\e16e"; }
+
+.fa-money-bill-1-wave::before {
+ content: "\f53b"; }
+
+.fa-money-bill-wave-alt::before {
+ content: "\f53b"; }
+
+.fa-life-ring::before {
+ content: "\f1cd"; }
+
+.fa-hands::before {
+ content: "\f2a7"; }
+
+.fa-sign-language::before {
+ content: "\f2a7"; }
+
+.fa-signing::before {
+ content: "\f2a7"; }
+
+.fa-circle-caret-right::before {
+ content: "\f330"; }
+
+.fa-caret-circle-right::before {
+ content: "\f330"; }
+
+.fa-wheat::before {
+ content: "\f72d"; }
+
+.fa-file-spreadsheet::before {
+ content: "\f65b"; }
+
+.fa-audio-description-slash::before {
+ content: "\e0a8"; }
+
+.fa-calendar-day::before {
+ content: "\f783"; }
+
+.fa-water-ladder::before {
+ content: "\f5c5"; }
+
+.fa-ladder-water::before {
+ content: "\f5c5"; }
+
+.fa-swimming-pool::before {
+ content: "\f5c5"; }
+
+.fa-arrows-up-down::before {
+ content: "\f07d"; }
+
+.fa-arrows-v::before {
+ content: "\f07d"; }
+
+.fa-chess-pawn-piece::before {
+ content: "\f444"; }
+
+.fa-chess-pawn-alt::before {
+ content: "\f444"; }
+
+.fa-face-grimace::before {
+ content: "\f57f"; }
+
+.fa-grimace::before {
+ content: "\f57f"; }
+
+.fa-wheelchair-move::before {
+ content: "\e2ce"; }
+
+.fa-wheelchair-alt::before {
+ content: "\e2ce"; }
+
+.fa-turn-down::before {
+ content: "\f3be"; }
+
+.fa-level-down-alt::before {
+ content: "\f3be"; }
+
+.fa-square-s::before {
+ content: "\e27d"; }
+
+.fa-rectangle-barcode::before {
+ content: "\f463"; }
+
+.fa-barcode-alt::before {
+ content: "\f463"; }
+
+.fa-person-walking-arrow-right::before {
+ content: "\e552"; }
+
+.fa-square-envelope::before {
+ content: "\f199"; }
+
+.fa-envelope-square::before {
+ content: "\f199"; }
+
+.fa-dice::before {
+ content: "\f522"; }
+
+.fa-unicorn::before {
+ content: "\f727"; }
+
+.fa-bowling-ball::before {
+ content: "\f436"; }
+
+.fa-pompebled::before {
+ content: "\e43d"; }
+
+.fa-brain::before {
+ content: "\f5dc"; }
+
+.fa-watch-smart::before {
+ content: "\e2cc"; }
+
+.fa-book-user::before {
+ content: "\f7e7"; }
+
+.fa-sensor-cloud::before {
+ content: "\e02c"; }
+
+.fa-sensor-smoke::before {
+ content: "\e02c"; }
+
+.fa-clapperboard-play::before {
+ content: "\e132"; }
+
+.fa-bandage::before {
+ content: "\f462"; }
+
+.fa-band-aid::before {
+ content: "\f462"; }
+
+.fa-calendar-minus::before {
+ content: "\f272"; }
+
+.fa-circle-xmark::before {
+ content: "\f057"; }
+
+.fa-times-circle::before {
+ content: "\f057"; }
+
+.fa-xmark-circle::before {
+ content: "\f057"; }
+
+.fa-circle-4::before {
+ content: "\e0f1"; }
+
+.fa-gifts::before {
+ content: "\f79c"; }
+
+.fa-album-collection::before {
+ content: "\f8a0"; }
+
+.fa-hotel::before {
+ content: "\f594"; }
+
+.fa-earth-asia::before {
+ content: "\f57e"; }
+
+.fa-globe-asia::before {
+ content: "\f57e"; }
+
+.fa-id-card-clip::before {
+ content: "\f47f"; }
+
+.fa-id-card-alt::before {
+ content: "\f47f"; }
+
+.fa-magnifying-glass-plus::before {
+ content: "\f00e"; }
+
+.fa-search-plus::before {
+ content: "\f00e"; }
+
+.fa-thumbs-up::before {
+ content: "\f164"; }
+
+.fa-cloud-showers::before {
+ content: "\f73f"; }
+
+.fa-user-clock::before {
+ content: "\f4fd"; }
+
+.fa-onion::before {
+ content: "\e427"; }
+
+.fa-clock-twelve-thirty::before {
+ content: "\e359"; }
+
+.fa-arrow-down-to-dotted-line::before {
+ content: "\e095"; }
+
+.fa-hand-dots::before {
+ content: "\f461"; }
+
+.fa-allergies::before {
+ content: "\f461"; }
+
+.fa-file-invoice::before {
+ content: "\f570"; }
+
+.fa-window-minimize::before {
+ content: "\f2d1"; }
+
+.fa-rectangle-wide::before {
+ content: "\f2fc"; }
+
+.fa-comment-arrow-up::before {
+ content: "\e144"; }
+
+.fa-garlic::before {
+ content: "\e40e"; }
+
+.fa-mug-saucer::before {
+ content: "\f0f4"; }
+
+.fa-coffee::before {
+ content: "\f0f4"; }
+
+.fa-brush::before {
+ content: "\f55d"; }
+
+.fa-tree-decorated::before {
+ content: "\f7dc"; }
+
+.fa-mask::before {
+ content: "\f6fa"; }
+
+.fa-calendar-heart::before {
+ content: "\e0d3"; }
+
+.fa-magnifying-glass-minus::before {
+ content: "\f010"; }
+
+.fa-search-minus::before {
+ content: "\f010"; }
+
+.fa-flower::before {
+ content: "\f7ff"; }
+
+.fa-ruler-vertical::before {
+ content: "\f548"; }
+
+.fa-user-large::before {
+ content: "\f406"; }
+
+.fa-user-alt::before {
+ content: "\f406"; }
+
+.fa-starship-freighter::before {
+ content: "\e03a"; }
+
+.fa-train-tram::before {
+ content: "\e5b4"; }
+
+.fa-bridge-suspension::before {
+ content: "\e4cd"; }
+
+.fa-trash-check::before {
+ content: "\e2af"; }
+
+.fa-user-nurse::before {
+ content: "\f82f"; }
+
+.fa-boombox::before {
+ content: "\f8a5"; }
+
+.fa-syringe::before {
+ content: "\f48e"; }
+
+.fa-cloud-sun::before {
+ content: "\f6c4"; }
+
+.fa-shield-exclamation::before {
+ content: "\e247"; }
+
+.fa-stopwatch-20::before {
+ content: "\e06f"; }
+
+.fa-square-full::before {
+ content: "\f45c"; }
+
+.fa-grip-dots::before {
+ content: "\e410"; }
+
+.fa-comment-exclamation::before {
+ content: "\f4af"; }
+
+.fa-pen-swirl::before {
+ content: "\e214"; }
+
+.fa-falafel::before {
+ content: "\e40a"; }
+
+.fa-circle-2::before {
+ content: "\e0ef"; }
+
+.fa-magnet::before {
+ content: "\f076"; }
+
+.fa-jar::before {
+ content: "\e516"; }
+
+.fa-gramophone::before {
+ content: "\f8bd"; }
+
+.fa-dice-d12::before {
+ content: "\f6ce"; }
+
+.fa-note-sticky::before {
+ content: "\f249"; }
+
+.fa-sticky-note::before {
+ content: "\f249"; }
+
+.fa-down::before {
+ content: "\f354"; }
+
+.fa-arrow-alt-down::before {
+ content: "\f354"; }
+
+.fa-hundred-points::before {
+ content: "\e41c"; }
+
+.fa-100::before {
+ content: "\e41c"; }
+
+.fa-paperclip-vertical::before {
+ content: "\e3c2"; }
+
+.fa-wind-warning::before {
+ content: "\f776"; }
+
+.fa-wind-circle-exclamation::before {
+ content: "\f776"; }
+
+.fa-location-pin-slash::before {
+ content: "\f60c"; }
+
+.fa-map-marker-slash::before {
+ content: "\f60c"; }
+
+.fa-face-sad-sweat::before {
+ content: "\e38a"; }
+
+.fa-bug-slash::before {
+ content: "\e490"; }
+
+.fa-cupcake::before {
+ content: "\e402"; }
+
+.fa-light-switch-off::before {
+ content: "\e018"; }
+
+.fa-toggle-large-off::before {
+ content: "\e5b0"; }
+
+.fa-pen-fancy-slash::before {
+ content: "\e210"; }
+
+.fa-truck-container::before {
+ content: "\f4dc"; }
+
+.fa-boot::before {
+ content: "\f782"; }
+
+.fa-arrow-up-from-water-pump::before {
+ content: "\e4b6"; }
+
+.fa-file-check::before {
+ content: "\f316"; }
+
+.fa-bone::before {
+ content: "\f5d7"; }
+
+.fa-cards-blank::before {
+ content: "\e4df"; }
+
+.fa-circle-3::before {
+ content: "\e0f0"; }
+
+.fa-bench-tree::before {
+ content: "\e2e7"; }
+
+.fa-keyboard-brightness-low::before {
+ content: "\e1c1"; }
+
+.fa-ski-boot-ski::before {
+ content: "\e3cd"; }
+
+.fa-brain-circuit::before {
+ content: "\e0c6"; }
+
+.fa-user-injured::before {
+ content: "\f728"; }
+
+.fa-block-brick-fire::before {
+ content: "\e3dc"; }
+
+.fa-firewall::before {
+ content: "\e3dc"; }
+
+.fa-face-sad-tear::before {
+ content: "\f5b4"; }
+
+.fa-sad-tear::before {
+ content: "\f5b4"; }
+
+.fa-plane::before {
+ content: "\f072"; }
+
+.fa-tent-arrows-down::before {
+ content: "\e581"; }
+
+.fa-exclamation::before {
+ content: "\21"; }
+
+.fa-arrows-spin::before {
+ content: "\e4bb"; }
+
+.fa-face-smile-relaxed::before {
+ content: "\e392"; }
+
+.fa-comment-xmark::before {
+ content: "\f4b5"; }
+
+.fa-comment-times::before {
+ content: "\f4b5"; }
+
+.fa-print::before {
+ content: "\f02f"; }
+
+.fa-turkish-lira-sign::before {
+ content: "\e2bb"; }
+
+.fa-try::before {
+ content: "\e2bb"; }
+
+.fa-turkish-lira::before {
+ content: "\e2bb"; }
+
+.fa-face-nose-steam::before {
+ content: "\e382"; }
+
+.fa-circle-waveform-lines::before {
+ content: "\e12d"; }
+
+.fa-waveform-circle::before {
+ content: "\e12d"; }
+
+.fa-dollar-sign::before {
+ content: "\24"; }
+
+.fa-dollar::before {
+ content: "\24"; }
+
+.fa-usd::before {
+ content: "\24"; }
+
+.fa-ferris-wheel::before {
+ content: "\e174"; }
+
+.fa-computer-speaker::before {
+ content: "\f8b2"; }
+
+.fa-skull-cow::before {
+ content: "\f8de"; }
+
+.fa-x::before {
+ content: "\58"; }
+
+.fa-magnifying-glass-dollar::before {
+ content: "\f688"; }
+
+.fa-search-dollar::before {
+ content: "\f688"; }
+
+.fa-users-gear::before {
+ content: "\f509"; }
+
+.fa-users-cog::before {
+ content: "\f509"; }
+
+.fa-person-military-pointing::before {
+ content: "\e54a"; }
+
+.fa-building-columns::before {
+ content: "\f19c"; }
+
+.fa-bank::before {
+ content: "\f19c"; }
+
+.fa-institution::before {
+ content: "\f19c"; }
+
+.fa-museum::before {
+ content: "\f19c"; }
+
+.fa-university::before {
+ content: "\f19c"; }
+
+.fa-circle-t::before {
+ content: "\e124"; }
+
+.fa-sack::before {
+ content: "\f81c"; }
+
+.fa-grid-2::before {
+ content: "\e196"; }
+
+.fa-camera-cctv::before {
+ content: "\f8ac"; }
+
+.fa-cctv::before {
+ content: "\f8ac"; }
+
+.fa-umbrella::before {
+ content: "\f0e9"; }
+
+.fa-trowel::before {
+ content: "\e589"; }
+
+.fa-horizontal-rule::before {
+ content: "\f86c"; }
+
+.fa-bed-front::before {
+ content: "\f8f7"; }
+
+.fa-bed-alt::before {
+ content: "\f8f7"; }
+
+.fa-d::before {
+ content: "\44"; }
+
+.fa-stapler::before {
+ content: "\e5af"; }
+
+.fa-masks-theater::before {
+ content: "\f630"; }
+
+.fa-theater-masks::before {
+ content: "\f630"; }
+
+.fa-kip-sign::before {
+ content: "\e1c4"; }
+
+.fa-face-woozy::before {
+ content: "\e3a2"; }
+
+.fa-cloud-question::before {
+ content: "\e492"; }
+
+.fa-pineapple::before {
+ content: "\e31f"; }
+
+.fa-hand-point-left::before {
+ content: "\f0a5"; }
+
+.fa-gallery-thumbnails::before {
+ content: "\e3aa"; }
+
+.fa-circle-j::before {
+ content: "\e112"; }
+
+.fa-eyes::before {
+ content: "\e367"; }
+
+.fa-handshake-simple::before {
+ content: "\f4c6"; }
+
+.fa-handshake-alt::before {
+ content: "\f4c6"; }
+
+.fa-page-caret-up::before {
+ content: "\e42a"; }
+
+.fa-file-caret-up::before {
+ content: "\e42a"; }
+
+.fa-jet-fighter::before {
+ content: "\f0fb"; }
+
+.fa-fighter-jet::before {
+ content: "\f0fb"; }
+
+.fa-comet::before {
+ content: "\e003"; }
+
+.fa-square-share-nodes::before {
+ content: "\f1e1"; }
+
+.fa-share-alt-square::before {
+ content: "\f1e1"; }
+
+.fa-shield-keyhole::before {
+ content: "\e248"; }
+
+.fa-barcode::before {
+ content: "\f02a"; }
+
+.fa-plus-minus::before {
+ content: "\e43c"; }
+
+.fa-square-sliders-vertical::before {
+ content: "\f3f2"; }
+
+.fa-sliders-v-square::before {
+ content: "\f3f2"; }
+
+.fa-video::before {
+ content: "\f03d"; }
+
+.fa-video-camera::before {
+ content: "\f03d"; }
+
+.fa-message-middle::before {
+ content: "\e1e1"; }
+
+.fa-comment-middle-alt::before {
+ content: "\e1e1"; }
+
+.fa-graduation-cap::before {
+ content: "\f19d"; }
+
+.fa-mortar-board::before {
+ content: "\f19d"; }
+
+.fa-hand-holding-medical::before {
+ content: "\e05c"; }
+
+.fa-person-circle-check::before {
+ content: "\e53e"; }
+
+.fa-square-z::before {
+ content: "\e288"; }
+
+.fa-message-text::before {
+ content: "\e1e6"; }
+
+.fa-comment-alt-text::before {
+ content: "\e1e6"; }
+
+.fa-turn-up::before {
+ content: "\f3bf"; }
+
+.fa-level-up-alt::before {
+ content: "\f3bf"; }
+
+.sr-only,
+.fa-sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border-width: 0; }
+
+.sr-only-focusable:not(:focus),
+.fa-sr-only-focusable:not(:focus) {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border-width: 0; }
diff --git a/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/fontawesome.min.css b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/fontawesome.min.css
new file mode 100644
index 000000000..610ecce51
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/fontawesome.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license (Commercial License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+.fa{font-family:var(--fa-style-family,"Font Awesome 6 Pro");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-duotone,.fa-light,.fa-regular,.fa-sharp,.fa-sharp-solid,.fa-solid,.fa-thin,.fab,.fad,.fal,.far,.fas,.fass,.fat{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-light,.fa-regular,.fa-solid,.fa-thin,.fal,.far,.fas,.fat{font-family:"Font Awesome 6 Pro"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-classic.fa-duotone,.fa-duotone,.fad{font-family:"Font Awesome 6 Duotone"}.fa-sharp,.fass{font-family:"Font Awesome 6 Sharp";font-weight:900}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-wagon-covered:before{content:"\f8ee"}.fa-line-height:before{content:"\f871"}.fa-bagel:before{content:"\e3d7"}.fa-transporter-7:before{content:"\e2a8"}.fa-at:before{content:"\40"}.fa-rectangles-mixed:before{content:"\e323"}.fa-phone-arrow-up-right:before,.fa-phone-arrow-up:before,.fa-phone-outgoing:before{content:"\e224"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-circle-l:before{content:"\e114"}.fa-head-side-goggles:before,.fa-head-vr:before{content:"\f6ea"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-face-hand-yawn:before{content:"\e379"}.fa-gauge-simple-min:before,.fa-tachometer-slowest:before{content:"\f62d"}.fa-stethoscope:before{content:"\f0f1"}.fa-coffin:before{content:"\f6c6"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-bowl-salad:before,.fa-salad:before{content:"\f81e"}.fa-info:before{content:"\f129"}.fa-robot-astromech:before{content:"\e2d2"}.fa-ring-diamond:before{content:"\e5ab"}.fa-fondue-pot:before{content:"\e40d"}.fa-theta:before{content:"\f69e"}.fa-face-hand-peeking:before{content:"\e481"}.fa-square-user:before{content:"\e283"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-tire-pressure-warning:before{content:"\f633"}.fa-wifi-2:before,.fa-wifi-fair:before{content:"\f6ab"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-mp3-player:before{content:"\f8ce"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-tally-4:before{content:"\e297"}.fa-rectangle-history:before{content:"\e4a2"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-sun-haze:before{content:"\f765"}.fa-text-size:before{content:"\f894"}.fa-ufo:before{content:"\e047"}.fa-fork:before,.fa-utensil-fork:before{content:"\f2e3"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-mobile-signal:before{content:"\e1ef"}.fa-barcode-scan:before{content:"\f465"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-folder-arrow-down:before,.fa-folder-download:before{content:"\e053"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-face-icicles:before{content:"\e37c"}.fa-shovel:before{content:"\f713"}.fa-door-open:before{content:"\f52b"}.fa-films:before{content:"\e17a"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-face-glasses:before{content:"\e377"}.fa-nfc:before{content:"\e1f7"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-closed-captioning-slash:before{content:"\e135"}.fa-calculator-alt:before,.fa-calculator-simple:before{content:"\f64c"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-sliders-up:before,.fa-sliders-v:before{content:"\f3f1"}.fa-location-minus:before,.fa-map-marker-minus:before{content:"\f609"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-ski-boot:before{content:"\e3cc"}.fa-rectangle-sd:before,.fa-standard-definition:before{content:"\e28a"}.fa-h1:before{content:"\f313"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-message-bot:before{content:"\e3b8"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-light-ceiling:before{content:"\e016"}.fa-comment-alt-exclamation:before,.fa-message-exclamation:before{content:"\f4a5"}.fa-bowl-scoop:before,.fa-bowl-shaved-ice:before{content:"\e3de"}.fa-square-x:before{content:"\e286"}.fa-utility-pole-double:before{content:"\e2c4"}.fa-flag-checkered:before{content:"\f11e"}.fa-chevron-double-up:before,.fa-chevrons-up:before{content:"\f325"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-user-vneck:before{content:"\e461"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-arrow-square-right:before,.fa-square-arrow-right:before{content:"\f33b"}.fa-location-plus:before,.fa-map-marker-plus:before{content:"\f60a"}.fa-lightbulb-exclamation-on:before{content:"\e1ca"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-crate-empty:before{content:"\e151"}.fa-diagram-predecessor:before{content:"\e477"}.fa-transporter:before{content:"\e042"}.fa-calendar-circle-user:before{content:"\e471"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-person-carry-box:before,.fa-person-carry:before{content:"\f4cf"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-union:before{content:"\f6a2"}.fa-chevron-double-left:before,.fa-chevrons-left:before{content:"\f323"}.fa-circle-heart:before,.fa-heart-circle:before{content:"\f4c7"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-bring-forward:before{content:"\f856"}.fa-square-p:before{content:"\e279"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-sigma:before{content:"\f68b"}.fa-camera-movie:before{content:"\f8a9"}.fa-bong:before{content:"\f55c"}.fa-clarinet:before{content:"\f8ad"}.fa-truck-flatbed:before{content:"\e2b6"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-leaf-heart:before{content:"\f4cb"}.fa-house-building:before{content:"\e1b1"}.fa-cheese-swiss:before{content:"\f7f0"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-bow-arrow:before{content:"\f6b9"}.fa-cart-xmark:before{content:"\e0dd"}.fa-hexagon-xmark:before,.fa-times-hexagon:before,.fa-xmark-hexagon:before{content:"\f2ee"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-merge:before{content:"\e526"}.fa-pager:before{content:"\f815"}.fa-cart-minus:before{content:"\e0db"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-pan-frying:before{content:"\e42c"}.fa-grid-3:before,.fa-grid:before{content:"\e195"}.fa-football-helmet:before{content:"\f44f"}.fa-hand-love:before{content:"\e1a5"}.fa-trees:before{content:"\f724"}.fa-strikethrough:before{content:"\f0cc"}.fa-page:before{content:"\e428"}.fa-k:before{content:"\4b"}.fa-diagram-previous:before{content:"\e478"}.fa-gauge-min:before,.fa-tachometer-alt-slowest:before{content:"\f628"}.fa-folder-grid:before{content:"\e188"}.fa-eggplant:before{content:"\e16c"}.fa-ram:before{content:"\f70a"}.fa-landmark-flag:before{content:"\e51c"}.fa-lips:before{content:"\f600"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-desktop-arrow-down:before{content:"\e155"}.fa-code-pull-request:before{content:"\e13c"}.fa-pumpkin:before{content:"\f707"}.fa-clipboard-list:before{content:"\f46d"}.fa-pen-field:before{content:"\e211"}.fa-blueberries:before{content:"\e2e8"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-note:before{content:"\e1ff"}.fa-arrow-down-to-square:before{content:"\e096"}.fa-user-check:before{content:"\f4fc"}.fa-cloud-xmark:before{content:"\e35f"}.fa-vial-virus:before{content:"\e597"}.fa-book-alt:before,.fa-book-blank:before{content:"\f5d9"}.fa-golf-flag-hole:before{content:"\e3ac"}.fa-comment-alt-arrow-down:before,.fa-message-arrow-down:before{content:"\e1db"}.fa-face-unamused:before{content:"\e39f"}.fa-sheet-plastic:before{content:"\e571"}.fa-circle-9:before{content:"\e0f6"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-pencil-slash:before{content:"\e215"}.fa-bowling-pins:before{content:"\f437"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-down-right:before{content:"\e16b"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-blinds-open:before{content:"\f8fc"}.fa-fence:before{content:"\e303"}.fa-arrow-alt-up:before,.fa-up:before{content:"\f357"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-drumstick:before{content:"\f6d6"}.fa-square-v:before{content:"\e284"}.fa-face-awesome:before,.fa-gave-dandy:before{content:"\e409"}.fa-dial-off:before{content:"\e162"}.fa-toggle-off:before{content:"\f204"}.fa-face-smile-horns:before{content:"\e391"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-grapes:before{content:"\e306"}.fa-person-drowning:before{content:"\e545"}.fa-dial-max:before{content:"\e15e"}.fa-circle-m:before{content:"\e115"}.fa-calendar-image:before{content:"\e0d4"}.fa-caret-circle-down:before,.fa-circle-caret-down:before{content:"\f32d"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-shish-kebab:before{content:"\f821"}.fa-spray-can:before{content:"\f5bd"}.fa-alarm-snooze:before{content:"\f845"}.fa-scarecrow:before{content:"\f70d"}.fa-truck-monster:before{content:"\f63b"}.fa-gift-card:before{content:"\f663"}.fa-w:before{content:"\57"}.fa-code-pull-request-draft:before{content:"\e3fa"}.fa-square-b:before{content:"\e264"}.fa-elephant:before{content:"\f6da"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-message-question:before{content:"\e1e3"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-square-3:before{content:"\e258"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-microwave:before{content:"\e01b"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-cart-circle-arrow-up:before{content:"\e3f0"}.fa-trash-clock:before{content:"\e2b0"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-sprinkler-ceiling:before{content:"\e44c"}.fa-browsers:before{content:"\e0cb"}.fa-trillium:before{content:"\e588"}.fa-music-slash:before{content:"\f8d1"}.fa-truck-ramp:before{content:"\f4e0"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-circle-c:before{content:"\e101"}.fa-star-christmas:before{content:"\f7d4"}.fa-chart-bullet:before{content:"\e0e1"}.fa-motorcycle:before{content:"\f21c"}.fa-tree-christmas:before{content:"\f7db"}.fa-tire-flat:before{content:"\f632"}.fa-sunglasses:before{content:"\f892"}.fa-badge:before{content:"\f335"}.fa-comment-alt-edit:before,.fa-message-edit:before,.fa-message-pen:before{content:"\f4a4"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-chess-rook-alt:before,.fa-chess-rook-piece:before{content:"\f448"}.fa-square-root:before{content:"\f697"}.fa-album-collection-circle-plus:before{content:"\e48e"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-face-angry-horns:before{content:"\e368"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-tombstone:before{content:"\f720"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-list-music:before{content:"\f8c9"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-mustache:before{content:"\e5bc"}.fa-hyphen:before{content:"\2d"}.fa-table:before{content:"\f0ce"}.fa-user-chef:before{content:"\e3d2"}.fa-comment-alt-image:before,.fa-message-image:before{content:"\e1e0"}.fa-users-medical:before{content:"\f830"}.fa-sensor-alert:before,.fa-sensor-triangle-exclamation:before{content:"\e029"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-face-mask:before{content:"\e37f"}.fa-pickleball:before{content:"\e435"}.fa-star-sharp-half:before{content:"\e28c"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-meat:before{content:"\f814"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-empty-set:before{content:"\f656"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-bird:before{content:"\e469"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-heart-half-alt:before,.fa-heart-half-stroke:before{content:"\e1ac"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-joystick:before{content:"\f8c5"}.fa-grill-fire:before{content:"\e5a4"}.fa-rectangle-vertical-history:before{content:"\e237"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-keyboard-left:before{content:"\e1c3"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-face-beam-hand-over-mouth:before{content:"\e47c"}.fa-droplet-percent:before,.fa-humidity:before{content:"\f750"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-corn:before{content:"\f6c7"}.fa-roller-coaster:before{content:"\e324"}.fa-photo-film-music:before{content:"\e228"}.fa-radar:before{content:"\e024"}.fa-sickle:before{content:"\f822"}.fa-film:before{content:"\f008"}.fa-coconut:before{content:"\e2f6"}.fa-ruler-horizontal:before{content:"\f547"}.fa-shield-cross:before{content:"\f712"}.fa-cassette-tape:before{content:"\f8ab"}.fa-square-terminal:before{content:"\e32a"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-comment-middle:before{content:"\e149"}.fa-trash-can-list:before{content:"\e2ab"}.fa-block:before{content:"\e46a"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-face-frown-slight:before{content:"\e376"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-sidebar-flip:before{content:"\e24f"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-temperature-list:before{content:"\e299"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-pipe-section:before{content:"\e438"}.fa-space-station-moon-alt:before,.fa-space-station-moon-construction:before{content:"\e034"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-face-sleeping:before{content:"\e38d"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-squirrel:before{content:"\f71a"}.fa-arrow-to-top:before,.fa-arrow-up-to-line:before{content:"\f341"}.fa-flag:before{content:"\f024"}.fa-face-cowboy-hat:before{content:"\e36e"}.fa-hanukiah:before{content:"\f6e6"}.fa-chart-scatter-3d:before{content:"\e0e8"}.fa-square-code:before{content:"\e267"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-times-to-slot:before,.fa-vote-nay:before,.fa-xmark-to-slot:before{content:"\f771"}.fa-box-alt:before,.fa-box-taped:before{content:"\f49a"}.fa-comment-slash:before{content:"\f4b3"}.fa-swords:before{content:"\f71d"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-album:before{content:"\f89f"}.fa-circle-n:before{content:"\e118"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-key-skeleton-left-right:before{content:"\e3b4"}.fa-comment-lines:before{content:"\f4b0"}.fa-luchador-mask:before,.fa-luchador:before,.fa-mask-luchador:before{content:"\f455"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-shredder:before{content:"\f68a"}.fa-book-open-alt:before,.fa-book-open-cover:before{content:"\e0c0"}.fa-sandwich:before{content:"\f81f"}.fa-peseta-sign:before{content:"\e221"}.fa-parking-slash:before,.fa-square-parking-slash:before{content:"\f617"}.fa-train-tunnel:before{content:"\e454"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-face-anguished:before{content:"\e369"}.fa-hockey-sticks:before{content:"\f454"}.fa-abacus:before{content:"\f640"}.fa-film-alt:before,.fa-film-simple:before{content:"\f3a0"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-tree-palm:before{content:"\f82b"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-border-center-v:before{content:"\f89d"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-clipboard-medical:before{content:"\e133"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-arrow-alt-to-top:before,.fa-up-to-line:before{content:"\f34d"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-watch-fitness:before{content:"\f63e"}.fa-clock-nine-thirty:before{content:"\e34d"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-jug:before{content:"\f8c6"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-snow-blowing:before{content:"\f761"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-arrow-down-from-line:before,.fa-arrow-from-top:before{content:"\f345"}.fa-gas-pump:before{content:"\f52f"}.fa-signal-alt-slash:before,.fa-signal-bars-slash:before{content:"\f694"}.fa-monkey:before{content:"\f6fb"}.fa-pro:before,.fa-rectangle-pro:before{content:"\e235"}.fa-house-night:before{content:"\e010"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-blanket:before{content:"\f498"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-comments-question-check:before{content:"\e14f"}.fa-tree:before{content:"\f1bb"}.fa-arrows-cross:before{content:"\e0a2"}.fa-backpack:before{content:"\f5d4"}.fa-square-small:before{content:"\e27e"}.fa-folder-arrow-up:before,.fa-folder-upload:before{content:"\e054"}.fa-bridge-lock:before{content:"\e4cc"}.fa-crosshairs-simple:before{content:"\e59f"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-sliders-h-square:before,.fa-square-sliders:before{content:"\f3f0"}.fa-car-side:before{content:"\f5e4"}.fa-comment-middle-top-alt:before,.fa-message-middle-top:before{content:"\e1e2"}.fa-lightbulb-on:before{content:"\f672"}.fa-knife:before,.fa-utensil-knife:before{content:"\f2e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-wave-sine:before{content:"\f899"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-circle-w:before{content:"\e12c"}.fa-calendar-circle:before,.fa-circle-calendar:before{content:"\e102"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sunset:before{content:"\f767"}.fa-sink:before{content:"\e06d"}.fa-calendar-exclamation:before{content:"\f334"}.fa-truck-container-empty:before{content:"\e2b5"}.fa-hand-heart:before{content:"\f4bc"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-reply-clock:before,.fa-reply-time:before{content:"\e239"}.fa-person-rays:before{content:"\e54d"}.fa-arrow-alt-right:before,.fa-right:before{content:"\f356"}.fa-circle-f:before{content:"\e10e"}.fa-users:before{content:"\f0c0"}.fa-face-pleading:before{content:"\e386"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-police-box:before{content:"\e021"}.fa-cucumber:before{content:"\e401"}.fa-head-side-brain:before{content:"\f808"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-biking-mountain:before,.fa-person-biking-mountain:before{content:"\f84b"}.fa-utensils-slash:before{content:"\e464"}.fa-print-magnifying-glass:before,.fa-print-search:before{content:"\f81a"}.fa-folder-bookmark:before{content:"\e186"}.fa-om:before{content:"\f679"}.fa-pi:before{content:"\f67e"}.fa-flask-potion:before,.fa-flask-round-potion:before{content:"\f6e1"}.fa-face-shush:before{content:"\e38c"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-calendar-circle-exclamation:before{content:"\e46e"}.fa-square-i:before{content:"\e272"}.fa-chevron-up:before{content:"\f077"}.fa-face-saluting:before{content:"\e484"}.fa-gauge-simple-low:before,.fa-tachometer-slow:before{content:"\f62c"}.fa-face-persevering:before{content:"\e385"}.fa-camera-circle:before,.fa-circle-camera:before{content:"\e103"}.fa-hand-spock:before{content:"\f259"}.fa-spider-web:before{content:"\f719"}.fa-circle-microphone:before,.fa-microphone-circle:before{content:"\e116"}.fa-book-arrow-up:before{content:"\e0ba"}.fa-popsicle:before{content:"\e43e"}.fa-command:before{content:"\e142"}.fa-blinds:before{content:"\f8fb"}.fa-stopwatch:before{content:"\f2f2"}.fa-saxophone:before{content:"\f8dc"}.fa-square-2:before{content:"\e257"}.fa-field-hockey-stick-ball:before,.fa-field-hockey:before{content:"\f44c"}.fa-arrow-up-square-triangle:before,.fa-sort-shapes-up-alt:before{content:"\f88b"}.fa-face-scream:before{content:"\e38b"}.fa-square-m:before{content:"\e276"}.fa-camera-web:before,.fa-webcam:before{content:"\f832"}.fa-comment-arrow-down:before{content:"\e143"}.fa-lightbulb-cfl:before{content:"\e5a6"}.fa-window-frame-open:before{content:"\e050"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-period:before{content:"\2e"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-up-to-dotted-line:before{content:"\e457"}.fa-thought-bubble:before{content:"\e32e"}.fa-raygun:before{content:"\e025"}.fa-flute:before{content:"\f8b9"}.fa-acorn:before{content:"\f6ae"}.fa-video-arrow-up-right:before{content:"\e2c9"}.fa-grate-droplet:before{content:"\e194"}.fa-seal-exclamation:before{content:"\e242"}.fa-chess-bishop:before{content:"\f43a"}.fa-message-sms:before{content:"\e1e5"}.fa-coffee-beans:before{content:"\e13f"}.fa-hat-witch:before{content:"\f6e7"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-clock-three-thirty:before{content:"\e357"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-alarm-clock:before{content:"\f34e"}.fa-eclipse:before{content:"\f749"}.fa-face-relieved:before{content:"\e389"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-minus-octagon:before,.fa-octagon-minus:before{content:"\f308"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-face-zany:before{content:"\e3a4"}.fa-tricycle:before{content:"\e5c3"}.fa-land-mine-on:before{content:"\e51b"}.fa-square-arrow-up-left:before{content:"\e263"}.fa-i-cursor:before{content:"\f246"}.fa-salt-shaker:before{content:"\e446"}.fa-stamp:before{content:"\f5bf"}.fa-file-plus:before{content:"\f319"}.fa-draw-square:before{content:"\f5ef"}.fa-toilet-paper-reverse-slash:before,.fa-toilet-paper-under-slash:before{content:"\e2a1"}.fa-stairs:before{content:"\e289"}.fa-drone-alt:before,.fa-drone-front:before{content:"\f860"}.fa-glass-empty:before{content:"\e191"}.fa-dial-high:before{content:"\e15c"}.fa-user-construction:before,.fa-user-hard-hat:before,.fa-user-helmet-safety:before{content:"\f82c"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-arrow-down-left-and-arrow-up-right-to-center:before{content:"\e092"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-basketball-hoop:before{content:"\f435"}.fa-objects-align-bottom:before{content:"\e3bb"}.fa-v:before{content:"\56"}.fa-sparkles:before{content:"\f890"}.fa-squid:before{content:"\e450"}.fa-leafy-green:before{content:"\e41d"}.fa-circle-arrow-up-right:before{content:"\e0fc"}.fa-calendars:before{content:"\e0d7"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-hammer-war:before{content:"\f6e4"}.fa-circle-d:before{content:"\e104"}.fa-spider-black-widow:before{content:"\f718"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-pear:before{content:"\e20c"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-triangle:before{content:"\f2ec"}.fa-apartment:before{content:"\e468"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-pepper:before{content:"\e432"}.fa-piano:before{content:"\f8d4"}.fa-gun-squirt:before{content:"\e19d"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-user-alien:before{content:"\e04a"}.fa-shield-check:before{content:"\f2f7"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-chart-candlestick:before{content:"\e0e2"}.fa-briefcase-blank:before{content:"\e0c8"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-bracket-round:before,.fa-parenthesis:before{content:"\28"}.fa-joint:before{content:"\f595"}.fa-horse-saddle:before{content:"\f8c3"}.fa-mug-marshmallows:before{content:"\f7b7"}.fa-filters:before{content:"\e17e"}.fa-bell-on:before{content:"\f8fa"}.fa-angle-right:before{content:"\f105"}.fa-dial-med:before{content:"\e15f"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-monitor-heart-rate:before,.fa-monitor-waveform:before{content:"\f611"}.fa-link-simple:before{content:"\e1cd"}.fa-whistle:before{content:"\f460"}.fa-g:before{content:"\47"}.fa-fragile:before,.fa-wine-glass-crack:before{content:"\f4bb"}.fa-slot-machine:before{content:"\e3ce"}.fa-notes-medical:before{content:"\f481"}.fa-car-wash:before{content:"\f5e6"}.fa-escalator:before{content:"\e171"}.fa-comment-image:before{content:"\e148"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-donut:before,.fa-doughnut:before{content:"\e406"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-tally-1:before{content:"\e294"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-square-dashed:before{content:"\e269"}.fa-square-j:before{content:"\e273"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-arrow-up-big-small:before,.fa-sort-size-up:before{content:"\f88e"}.fa-barcode-read:before{content:"\f464"}.fa-baguette:before{content:"\e3d8"}.fa-bowl-soft-serve:before{content:"\e46b"}.fa-face-holding-back-tears:before{content:"\e482"}.fa-arrow-alt-square-up:before,.fa-square-up:before{content:"\f353"}.fa-subway-tunnel:before,.fa-train-subway-tunnel:before{content:"\e2a3"}.fa-exclamation-square:before,.fa-square-exclamation:before{content:"\f321"}.fa-semicolon:before{content:"\3b"}.fa-bookmark:before{content:"\f02e"}.fa-fan-table:before{content:"\e004"}.fa-align-justify:before{content:"\f039"}.fa-battery-1:before,.fa-battery-low:before{content:"\e0b1"}.fa-credit-card-front:before{content:"\f38a"}.fa-brain-arrow-curved-right:before,.fa-mind-share:before{content:"\f677"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-location-smile:before,.fa-map-marker-smile:before{content:"\f60d"}.fa-arrow-left-to-line:before,.fa-arrow-to-left:before{content:"\f33e"}.fa-bullseye:before{content:"\f140"}.fa-nigiri:before,.fa-sushi:before{content:"\e48a"}.fa-comment-alt-captions:before,.fa-message-captions:before{content:"\e1de"}.fa-trash-list:before{content:"\e2b1"}.fa-bacon:before{content:"\f7e5"}.fa-option:before{content:"\e318"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-trash-plus:before{content:"\e2b2"}.fa-objects-align-top:before{content:"\e3c0"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-face-anxious-sweat:before{content:"\e36a"}.fa-credit-card-blank:before{content:"\f389"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-microchip-ai:before{content:"\e1ec"}.fa-mug:before{content:"\f874"}.fa-plane-up-slash:before{content:"\e22e"}.fa-radiation:before{content:"\f7b9"}.fa-pen-circle:before{content:"\e20e"}.fa-chart-simple:before{content:"\e473"}.fa-crutches:before{content:"\f7f8"}.fa-circle-parking:before,.fa-parking-circle:before{content:"\f615"}.fa-mars-stroke:before{content:"\f229"}.fa-leaf-oak:before{content:"\f6f7"}.fa-square-bolt:before{content:"\e265"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-lambda:before{content:"\f66e"}.fa-e:before{content:"\45"}.fa-pizza:before{content:"\f817"}.fa-bowl-chopsticks-noodles:before{content:"\e2ea"}.fa-h3:before{content:"\f315"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-badge-percent:before{content:"\f646"}.fa-user:before{content:"\f007"}.fa-sensor:before{content:"\e028"}.fa-comma:before{content:"\2c"}.fa-school-circle-check:before{content:"\e56b"}.fa-toilet-paper-reverse:before,.fa-toilet-paper-under:before{content:"\e2a0"}.fa-light-emergency:before{content:"\e41f"}.fa-arrow-down-to-arc:before{content:"\e4ae"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-light-switch:before{content:"\e017"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-heart-rate:before,.fa-wave-pulse:before{content:"\f5f8"}.fa-key:before{content:"\f084"}.fa-hat-santa:before{content:"\f7a7"}.fa-tamale:before{content:"\e451"}.fa-box-check:before{content:"\f467"}.fa-bullhorn:before{content:"\f0a1"}.fa-steak:before{content:"\f824"}.fa-location-crosshairs-slash:before,.fa-location-slash:before{content:"\f603"}.fa-person-dolly:before{content:"\f4d0"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-file-chart-column:before,.fa-file-chart-line:before{content:"\f659"}.fa-person-half-dress:before{content:"\e548"}.fa-folder-image:before{content:"\e18a"}.fa-calendar-edit:before,.fa-calendar-pen:before{content:"\f333"}.fa-road-bridge:before{content:"\e563"}.fa-face-smile-tear:before{content:"\e393"}.fa-comment-alt-plus:before,.fa-message-plus:before{content:"\f4a8"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-rectangle-history-circle-user:before{content:"\e4a4"}.fa-building-lock:before{content:"\e4d6"}.fa-chart-line-up:before{content:"\e0e5"}.fa-mailbox:before{content:"\f813"}.fa-truck-bolt:before{content:"\e3d0"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-scalpel:before{content:"\f61d"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-bell-exclamation:before{content:"\f848"}.fa-bookmark-circle:before,.fa-circle-bookmark:before{content:"\e100"}.fa-egg-fried:before{content:"\f7fc"}.fa-face-weary:before{content:"\e3a1"}.fa-uniform-martial-arts:before{content:"\e3d1"}.fa-camera-rotate:before{content:"\e0d8"}.fa-sun-dust:before{content:"\f764"}.fa-comment-text:before{content:"\e14d"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-signal-alt-4:before,.fa-signal-alt:before,.fa-signal-bars-strong:before,.fa-signal-bars:before{content:"\f690"}.fa-diamond-exclamation:before{content:"\e405"}.fa-star:before{content:"\f005"}.fa-dial-min:before{content:"\e161"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-file-caret-down:before,.fa-page-caret-down:before{content:"\e429"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-clock-seven-thirty:before{content:"\e351"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-clock-four-thirty:before{content:"\e34b"}.fa-signal-alt-3:before,.fa-signal-bars-good:before{content:"\f693"}.fa-cactus:before{content:"\f8a7"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-plane-tail:before{content:"\e22c"}.fa-gauge-simple-max:before,.fa-tachometer-fastest:before{content:"\f62b"}.fa-circle-u:before{content:"\e127"}.fa-shield-slash:before{content:"\e24b"}.fa-phone-square-down:before,.fa-square-phone-hangup:before{content:"\e27a"}.fa-arrow-up-left:before{content:"\e09d"}.fa-transporter-1:before{content:"\e043"}.fa-peanuts:before{content:"\e431"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-arrow-up-from-square:before{content:"\e09c"}.fa-file-dashed-line:before,.fa-page-break:before{content:"\f877"}.fa-bracket-curly-right:before{content:"\7d"}.fa-spider:before{content:"\f717"}.fa-clock-three:before{content:"\e356"}.fa-hands-bound:before{content:"\e4f9"}.fa-scalpel-line-dashed:before,.fa-scalpel-path:before{content:"\f61e"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-pipe-smoking:before{content:"\e3c4"}.fa-face-astonished:before{content:"\e36b"}.fa-window:before{content:"\f40e"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-ear:before{content:"\f5f0"}.fa-file-lock:before{content:"\e3a6"}.fa-diagram-venn:before{content:"\e15a"}.fa-x-ray:before{content:"\f497"}.fa-goal-net:before{content:"\e3ab"}.fa-coffin-cross:before{content:"\e051"}.fa-spell-check:before{content:"\f891"}.fa-location-xmark:before,.fa-map-marker-times:before,.fa-map-marker-xmark:before{content:"\f60e"}.fa-lasso:before{content:"\f8c8"}.fa-slash:before{content:"\f715"}.fa-person-to-portal:before,.fa-portal-enter:before{content:"\e022"}.fa-calendar-star:before{content:"\f736"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-pegasus:before{content:"\f703"}.fa-files-medical:before{content:"\f7fd"}.fa-nfc-lock:before{content:"\e1f8"}.fa-person-ski-lift:before,.fa-ski-lift:before{content:"\f7c8"}.fa-square-6:before{content:"\e25b"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-wind-turbine:before{content:"\f89b"}.fa-sliders-simple:before{content:"\e253"}.fa-badge-sheriff:before{content:"\f8a2"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-intersection:before{content:"\f668"}.fa-shop-lock:before{content:"\e4a5"}.fa-family:before{content:"\e300"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-user-hair-buns:before{content:"\e3d3"}.fa-blender-phone:before{content:"\f6b6"}.fa-hourglass-clock:before{content:"\e41b"}.fa-person-seat-reclined:before{content:"\e21f"}.fa-paper-plane-alt:before,.fa-paper-plane-top:before,.fa-send:before{content:"\e20a"}.fa-comment-alt-arrow-up:before,.fa-message-arrow-up:before{content:"\e1dc"}.fa-lightbulb-exclamation:before{content:"\f671"}.fa-layer-group-minus:before,.fa-layer-minus:before{content:"\f5fe"}.fa-circle-e:before{content:"\e109"}.fa-building-wheat:before{content:"\e4db"}.fa-gauge-max:before,.fa-tachometer-alt-fastest:before{content:"\f626"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-apostrophe:before{content:"\27"}.fa-fire-hydrant:before{content:"\e17f"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-video-plus:before{content:"\f4e1"}.fa-arrow-alt-square-right:before,.fa-square-right:before{content:"\f352"}.fa-comment-smile:before{content:"\f4b4"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-inbox-arrow-down:before,.fa-inbox-in:before{content:"\f310"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-circle-8:before{content:"\e0f5"}.fa-clouds-moon:before{content:"\f745"}.fa-clock-ten-thirty:before{content:"\e355"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-folder-user:before{content:"\e18e"}.fa-trash-can-xmark:before{content:"\e2ae"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-left-long-to-line:before{content:"\e41e"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-calendar-range:before{content:"\e0d6"}.fa-flower-daffodil:before{content:"\f800"}.fa-hand-back-point-up:before{content:"\e1a2"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-star-exclamation:before{content:"\f2f3"}.fa-books:before{content:"\f5db"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-layer-group-plus:before,.fa-layer-plus:before{content:"\f5ff"}.fa-play-pause:before{content:"\e22f"}.fa-block-question:before{content:"\e3dd"}.fa-snooze:before,.fa-zzz:before{content:"\f880"}.fa-scanner-image:before{content:"\f8f3"}.fa-tv-retro:before{content:"\f401"}.fa-square-t:before{content:"\e280"}.fa-barn-silo:before,.fa-farm:before{content:"\f864"}.fa-chess-knight:before{content:"\f441"}.fa-bars-sort:before{content:"\e0ae"}.fa-palette-boxes:before,.fa-pallet-alt:before,.fa-pallet-boxes:before{content:"\f483"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-code-simple:before{content:"\e13d"}.fa-bolt-slash:before{content:"\e0b8"}.fa-panel-fire:before{content:"\e42f"}.fa-binary-circle-check:before{content:"\e33c"}.fa-comment-minus:before{content:"\f4b1"}.fa-burrito:before{content:"\f7ed"}.fa-violin:before{content:"\f8ed"}.fa-objects-column:before{content:"\e3c1"}.fa-chevron-square-down:before,.fa-square-chevron-down:before{content:"\f329"}.fa-comment-plus:before{content:"\f4b2"}.fa-triangle-instrument:before,.fa-triangle-music:before{content:"\f8e2"}.fa-wheelchair:before{content:"\f193"}.fa-user-pilot-tie:before{content:"\e2c1"}.fa-piano-keyboard:before{content:"\f8d5"}.fa-bed-empty:before{content:"\f8f9"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-rectangle-portrait:before,.fa-rectangle-vertical:before{content:"\f2fb"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-signal-stream:before{content:"\f8dd"}.fa-down-to-bracket:before{content:"\e4e7"}.fa-circle-z:before{content:"\e130"}.fa-stars:before{content:"\f762"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-house-day:before{content:"\e00e"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-shirt-long-sleeve:before{content:"\e3c7"}.fa-chart-pie-alt:before,.fa-chart-pie-simple:before{content:"\f64e"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-album-collection-circle-user:before{content:"\e48f"}.fa-candy:before{content:"\e3e7"}.fa-bowl-hot:before,.fa-soup:before{content:"\f823"}.fa-flatbread:before{content:"\e40b"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-signal-alt-1:before,.fa-signal-bars-weak:before{content:"\f691"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-clock-twelve:before{content:"\e358"}.fa-pepper-hot:before{content:"\f816"}.fa-citrus-slice:before{content:"\e2f5"}.fa-sheep:before{content:"\f711"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-badger-honey:before{content:"\f6b4"}.fa-h4:before{content:"\f86a"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-signal-slash:before{content:"\f695"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-taco:before{content:"\f826"}.fa-hexagon-plus:before,.fa-plus-hexagon:before{content:"\f300"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-comments-alt:before,.fa-messages:before{content:"\f4b6"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-umbrella-alt:before,.fa-umbrella-simple:before{content:"\e2bc"}.fa-rectangle-history-circle-plus:before{content:"\e4a3"}.fa-underline:before{content:"\f0cd"}.fa-prescription-bottle-pill:before{content:"\e5c0"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-binary-slash:before{content:"\e33e"}.fa-square-o:before{content:"\e278"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-transporter-3:before{content:"\e045"}.fa-engine-exclamation:before,.fa-engine-warning:before{content:"\f5f2"}.fa-circle-down-right:before{content:"\e108"}.fa-square-k:before{content:"\e274"}.fa-manat-sign:before{content:"\e1d5"}.fa-money-check-edit:before,.fa-money-check-pen:before{content:"\f872"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-tilde:before{content:"\7e"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-arrow-down-square-triangle:before,.fa-sort-shapes-down-alt:before{content:"\f889"}.fa-mug-hot:before{content:"\f7b6"}.fa-dog-leashed:before{content:"\f6d4"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-face-downcast-sweat:before{content:"\e371"}.fa-mailbox-flag-up:before{content:"\e5bb"}.fa-memo-circle-info:before{content:"\e49a"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-volume-medium:before,.fa-volume:before{content:"\f6a8"}.fa-transporter-5:before{content:"\e2a6"}.fa-gauge-circle-bolt:before{content:"\e496"}.fa-coin-front:before{content:"\e3fc"}.fa-file-slash:before{content:"\e3a7"}.fa-message-arrow-up-right:before{content:"\e1dd"}.fa-treasure-chest:before{content:"\f723"}.fa-chess-queen:before{content:"\f445"}.fa-paint-brush-alt:before,.fa-paint-brush-fine:before,.fa-paintbrush-alt:before,.fa-paintbrush-fine:before{content:"\f5a9"}.fa-glasses:before{content:"\f530"}.fa-hood-cloak:before{content:"\f6ef"}.fa-square-quote:before{content:"\e329"}.fa-up-left:before{content:"\e2bd"}.fa-bring-front:before{content:"\f857"}.fa-chess-board:before{content:"\f43c"}.fa-burger-cheese:before,.fa-cheeseburger:before{content:"\f7f1"}.fa-building-circle-check:before{content:"\e4d2"}.fa-repeat-1:before{content:"\f365"}.fa-arrow-down-to-line:before,.fa-arrow-to-bottom:before{content:"\f33d"}.fa-grid-5:before{content:"\e199"}.fa-right-long-to-line:before{content:"\e444"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-tally-5:before,.fa-tally:before{content:"\f69c"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-up-from-dotted-line:before{content:"\e456"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-traffic-light-go:before{content:"\f638"}.fa-face-exhaling:before{content:"\e480"}.fa-sensor-fire:before{content:"\e02a"}.fa-user-unlock:before{content:"\e058"}.fa-hexagon-divide:before{content:"\e1ad"}.fa-00:before{content:"\e467"}.fa-crow:before{content:"\f520"}.fa-betamax:before,.fa-cassette-betamax:before{content:"\f8a4"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-nfc-magnifying-glass:before{content:"\e1f9"}.fa-file-binary:before{content:"\e175"}.fa-circle-v:before{content:"\e12a"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-bowl-scoops:before{content:"\e3df"}.fa-mistletoe:before{content:"\f7b4"}.fa-custard:before{content:"\e403"}.fa-lacrosse-stick:before{content:"\e3b5"}.fa-hockey-mask:before{content:"\f6ee"}.fa-sunrise:before{content:"\f766"}.fa-panel-ews:before{content:"\e42e"}.fa-torii-gate:before{content:"\f6a1"}.fa-cloud-exclamation:before{content:"\e491"}.fa-comment-alt-lines:before,.fa-message-lines:before{content:"\f4a6"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-floppy-disk-pen:before{content:"\e182"}.fa-image:before{content:"\f03e"}.fa-window-frame:before{content:"\e04f"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-square-ring:before{content:"\e44f"}.fa-arrow-alt-from-top:before,.fa-down-from-line:before{content:"\f349"}.fa-caret-up:before{content:"\f0d8"}.fa-shield-times:before,.fa-shield-xmark:before{content:"\e24c"}.fa-screwdriver:before{content:"\f54a"}.fa-circle-sort-down:before,.fa-sort-circle-down:before{content:"\e031"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-forklift:before{content:"\f47a"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-bracket-square-right:before{content:"\5d"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-square-a:before{content:"\e25f"}.fa-tick:before{content:"\e32f"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-refrigerator:before{content:"\e026"}.fa-monument:before{content:"\f5a6"}.fa-octagon-xmark:before,.fa-times-octagon:before,.fa-xmark-octagon:before{content:"\f2f0"}.fa-align-slash:before{content:"\f846"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-truck-couch:before,.fa-truck-ramp-couch:before{content:"\f4dd"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-arrow-up-right-and-arrow-down-left-from-center:before{content:"\e0a0"}.fa-tablets:before{content:"\f490"}.fa-360-degrees:before{content:"\e2dc"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-square-dashed-circle-plus:before{content:"\e5c2"}.fa-money-simple-from-bracket:before{content:"\e313"}.fa-bat:before{content:"\f6b5"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-head-side-headphones:before{content:"\f8c2"}.fa-phone-rotary:before{content:"\f8d3"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-calendar-circle-minus:before{content:"\e46f"}.fa-chopsticks:before{content:"\e3f7"}.fa-car-mechanic:before,.fa-car-wrench:before{content:"\f5e3"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-kazoo:before{content:"\f8c7"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-square-arrow-down-left:before{content:"\e261"}.fa-battery-bolt:before{content:"\f376"}.fa-tree-large:before{content:"\f7dd"}.fa-helicopter-symbol:before{content:"\e502"}.fa-aperture:before{content:"\e2df"}.fa-universal-access:before{content:"\f29a"}.fa-file-magnifying-glass:before,.fa-file-search:before{content:"\f865"}.fa-up-right:before{content:"\e2be"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-user-police:before{content:"\e333"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-teddy-bear:before{content:"\e3cf"}.fa-stocking:before{content:"\f7d5"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-image-slash:before{content:"\e1b7"}.fa-mask-snorkel:before{content:"\e3b7"}.fa-smoke:before{content:"\f760"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-battery-exclamation:before{content:"\e0b0"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-crystal-ball:before{content:"\e362"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-star-shooting:before{content:"\e036"}.fa-binary-lock:before{content:"\e33d"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-comment-edit:before,.fa-comment-pen:before{content:"\f4ae"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-banjo:before{content:"\f8a3"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-light-emergency-on:before{content:"\e420"}.fa-kerning:before{content:"\f86f"}.fa-box-open:before{content:"\f49e"}.fa-square-f:before{content:"\e270"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-arrow-from-right:before,.fa-arrow-left-from-line:before{content:"\f344"}.fa-strawberry:before{content:"\e32b"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-clock-eight-thirty:before{content:"\e346"}.fa-plane-alt:before,.fa-plane-engines:before{content:"\f3de"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-gauge-low:before,.fa-tachometer-alt-slow:before{content:"\f627"}.fa-registered:before{content:"\f25d"}.fa-trash-can-plus:before{content:"\e2ac"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-globe-snow:before{content:"\f7a3"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-integral:before{content:"\f667"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-blinds-raised:before{content:"\f8fd"}.fa-smog:before{content:"\f75f"}.fa-ufo-beam:before{content:"\e048"}.fa-caret-circle-up:before,.fa-circle-caret-up:before{content:"\f331"}.fa-user-vneck-hair-long:before{content:"\e463"}.fa-square-a-lock:before{content:"\e44d"}.fa-crutch:before{content:"\f7f7"}.fa-gas-pump-slash:before{content:"\f5f4"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-transporter-4:before{content:"\e2a5"}.fa-objects-align-right:before{content:"\e3bf"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-pig:before{content:"\f706"}.fa-inbox-full:before{content:"\e1ba"}.fa-circle-envelope:before,.fa-envelope-circle:before{content:"\e10c"}.fa-construction:before,.fa-triangle-person-digging:before{content:"\f85d"}.fa-ferry:before{content:"\e4ea"}.fa-bullseye-arrow:before{content:"\f648"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-clock-seven:before{content:"\e350"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-flashlight:before{content:"\f8b8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-square-9:before{content:"\e25e"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-dollar-square:before,.fa-square-dollar:before,.fa-usd-square:before{content:"\f2e9"}.fa-phone-arrow-right:before{content:"\e5be"}.fa-hand-holding-seedling:before{content:"\f4bf"}.fa-comment-alt-check:before,.fa-message-check:before{content:"\f4a2"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-watch:before{content:"\f2e1"}.fa-circle-down-left:before{content:"\e107"}.fa-text:before{content:"\f893"}.fa-projector:before{content:"\f8d6"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-tombstone-alt:before,.fa-tombstone-blank:before{content:"\f721"}.fa-chess-king-alt:before,.fa-chess-king-piece:before{content:"\f440"}.fa-circle-6:before{content:"\e0f3"}.fa-arrow-alt-left:before,.fa-left:before{content:"\f355"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrow-alt-square-down:before,.fa-square-down:before{content:"\f350"}.fa-objects-align-center-vertical:before{content:"\e3bd"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-wreath:before{content:"\f7e2"}.fa-children:before{content:"\e4e1"}.fa-meter-droplet:before{content:"\e1ea"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-signal-4:before,.fa-signal-strong:before{content:"\f68f"}.fa-lollipop:before,.fa-lollypop:before{content:"\e424"}.fa-list-tree:before{content:"\e1d2"}.fa-envelope-open:before{content:"\f2b6"}.fa-draw-circle:before{content:"\f5ed"}.fa-cat-space:before{content:"\e001"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-rabbit-fast:before,.fa-rabbit-running:before{content:"\f709"}.fa-memo-pad:before{content:"\e1da"}.fa-mattress-pillow:before{content:"\e525"}.fa-alarm-plus:before{content:"\f844"}.fa-alicorn:before{content:"\f6b0"}.fa-comment-question:before{content:"\e14b"}.fa-gingerbread-man:before{content:"\f79d"}.fa-guarani-sign:before{content:"\e19a"}.fa-burger-fries:before{content:"\e0cd"}.fa-mug-tea:before{content:"\f875"}.fa-border-top:before{content:"\f855"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-book-circle:before,.fa-circle-book-open:before{content:"\e0ff"}.fa-arrows-to-dotted-line:before{content:"\e0a6"}.fa-fire-extinguisher:before{content:"\f134"}.fa-garage-open:before{content:"\e00b"}.fa-shelves-empty:before{content:"\e246"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-watch-apple:before{content:"\e2cb"}.fa-watch-calculator:before{content:"\f8f0"}.fa-list-dropdown:before{content:"\e1cf"}.fa-cabinet-filing:before{content:"\f64b"}.fa-burger-soda:before{content:"\f858"}.fa-arrow-square-up:before,.fa-square-arrow-up:before{content:"\f33c"}.fa-greater-than-equal:before{content:"\f532"}.fa-pallet-box:before{content:"\e208"}.fa-face-confounded:before{content:"\e36c"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-truck-plow:before{content:"\f7de"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-comment-middle-top:before{content:"\e14a"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-restroom-simple:before{content:"\e23a"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-border-outer:before{content:"\f851"}.fa-hashtag-lock:before{content:"\e415"}.fa-clock-two-thirty:before{content:"\e35b"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-heart-half:before{content:"\e1ab"}.fa-comment-check:before{content:"\f4ac"}.fa-square:before{content:"\f0c8"}.fa-memo:before{content:"\e1d8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-glass-citrus:before{content:"\f869"}.fa-calendar-lines-pen:before{content:"\e472"}.fa-church:before{content:"\f51d"}.fa-person-snowmobiling:before,.fa-snowmobile:before{content:"\f7d1"}.fa-face-hushed:before{content:"\e37b"}.fa-comments-dollar:before{content:"\f653"}.fa-pickaxe:before{content:"\e5bf"}.fa-link-simple-slash:before{content:"\e1ce"}.fa-democrat:before{content:"\f747"}.fa-face-confused:before{content:"\e36d"}.fa-pinball:before{content:"\e229"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-deer:before{content:"\f78e"}.fa-input-pipe:before{content:"\e1be"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-bookmark-slash:before{content:"\e0c2"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-mace:before{content:"\f6f8"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-sausage:before{content:"\f820"}.fa-trash-can-clock:before{content:"\e2aa"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-stomach:before{content:"\f623"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-guitar-electric:before{content:"\f8be"}.fa-arrow-turn-down-right:before{content:"\e3d6"}.fa-moon-cloud:before{content:"\f754"}.fa-bread-slice-butter:before{content:"\e3e1"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-user-group-crown:before,.fa-users-crown:before{content:"\f6a5"}.fa-circle-i:before{content:"\e111"}.fa-toilet-paper-check:before{content:"\e5b2"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-chart-waterfall:before{content:"\e0eb"}.fa-face-party:before{content:"\e383"}.fa-kidneys:before{content:"\f5fb"}.fa-wifi-exclamation:before{content:"\e2cf"}.fa-chart-network:before{content:"\f78a"}.fa-person-dress-burst:before{content:"\e544"}.fa-dice-d4:before{content:"\f6d0"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-wheat-awn-slash:before{content:"\e338"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-dagger:before{content:"\f6cb"}.fa-podium:before{content:"\f680"}.fa-memo-circle-check:before{content:"\e1d9"}.fa-route-highway:before{content:"\f61a"}.fa-arrow-alt-to-bottom:before,.fa-down-to-line:before{content:"\f34a"}.fa-filter:before{content:"\f0b0"}.fa-square-g:before{content:"\e271"}.fa-circle-phone:before,.fa-phone-circle:before{content:"\e11b"}.fa-clipboard-prescription:before{content:"\f5e8"}.fa-user-nurse-hair:before{content:"\e45d"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-toggle-large-on:before{content:"\e5b1"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-dryer-alt:before,.fa-dryer-heat:before{content:"\f862"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-arrow-up-small-big:before,.fa-sort-size-up-alt:before{content:"\f88f"}.fa-train-track:before{content:"\e453"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-file-exclamation:before{content:"\f31a"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-moon-stars:before{content:"\f755"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-clothes-hanger:before{content:"\e136"}.fa-mobile-iphone:before,.fa-mobile-notch:before{content:"\e1ee"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-images-user:before{content:"\e1b9"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-image-polaroid-user:before{content:"\e1b6"}.fa-virus-covid:before{content:"\e4a8"}.fa-square-ellipsis:before{content:"\e26e"}.fa-pie:before{content:"\f705"}.fa-chess-knight-alt:before,.fa-chess-knight-piece:before{content:"\f442"}.fa-austral-sign:before{content:"\e0a9"}.fa-cloud-plus:before{content:"\e35e"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-bed-bunk:before{content:"\f8f8"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-clock-eight:before{content:"\e345"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-circle-q:before{content:"\e11e"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-face-disguise:before{content:"\e370"}.fa-circle-arrow-down-right:before{content:"\e0fa"}.fa-alien-8bit:before,.fa-alien-monster:before{content:"\f8f6"}.fa-hand-point-ribbon:before{content:"\e1a6"}.fa-poop:before{content:"\f619"}.fa-object-exclude:before{content:"\e49c"}.fa-telescope:before{content:"\e03e"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-square-list:before{content:"\e489"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-comment-code:before{content:"\e147"}.fa-sim-cards:before{content:"\e251"}.fa-starship:before{content:"\e039"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-seal:before{content:"\e241"}.fa-user-cowboy:before{content:"\f8ea"}.fa-hexagon-vertical-nft:before{content:"\e505"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-bread-loaf:before{content:"\f7eb"}.fa-rings-wedding:before{content:"\f81b"}.fa-object-group:before{content:"\f247"}.fa-french-fries:before{content:"\f803"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-calendar-arrow-down:before,.fa-calendar-download:before{content:"\e0d0"}.fa-send-back:before{content:"\f87e"}.fa-mask-ventilator:before{content:"\e524"}.fa-signature-lock:before{content:"\e3ca"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-octagon-plus:before,.fa-plus-octagon:before{content:"\f301"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-melon-slice:before{content:"\e311"}.fa-space-station-moon:before{content:"\e033"}.fa-comment-alt-smile:before,.fa-message-smile:before{content:"\f4aa"}.fa-cup-straw:before{content:"\e363"}.fa-arrow-alt-from-right:before,.fa-left-from-line:before{content:"\f348"}.fa-h:before{content:"\48"}.fa-basket-shopping-simple:before,.fa-shopping-basket-alt:before{content:"\e0af"}.fa-hands-heart:before,.fa-hands-holding-heart:before{content:"\f4c3"}.fa-clock-nine:before{content:"\e34c"}.fa-tarp:before{content:"\e57b"}.fa-face-sleepy:before{content:"\e38e"}.fa-hand-horns:before{content:"\e1a9"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-circle-three-quarters:before{content:"\e125"}.fa-trophy-alt:before,.fa-trophy-star:before{content:"\f2eb"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-face-thermometer:before{content:"\e39a"}.fa-shirt-running:before{content:"\e3c8"}.fa-book-circle-arrow-up:before{content:"\e0bd"}.fa-face-nauseated:before{content:"\e381"}.fa-heart:before{content:"\f004"}.fa-file-chart-pie:before{content:"\f65a"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-circle-arrow-down-left:before{content:"\e0f9"}.fa-dumpster-fire:before{content:"\f794"}.fa-hexagon-minus:before,.fa-minus-hexagon:before{content:"\f307"}.fa-arrow-alt-to-left:before,.fa-left-to-line:before{content:"\f34b"}.fa-house-crack:before{content:"\e3b1"}.fa-paw-alt:before,.fa-paw-simple:before{content:"\f701"}.fa-arrow-left-long-to-line:before{content:"\e3d4"}.fa-brackets-round:before,.fa-parentheses:before{content:"\e0c5"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-user-shakespeare:before{content:"\e2c2"}.fa-arrow-right-to-arc:before{content:"\e4b2"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-gauge-circle-plus:before{content:"\e498"}.fa-folders:before{content:"\f660"}.fa-angel:before{content:"\f779"}.fa-value-absolute:before{content:"\f6a6"}.fa-rabbit:before{content:"\f708"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-diamond-half:before{content:"\e5b7"}.fa-lock-alt:before,.fa-lock-keyhole:before{content:"\f30d"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-info-square:before,.fa-square-info:before{content:"\f30f"}.fa-wifi-slash:before{content:"\f6ac"}.fa-toilet-paper-xmark:before{content:"\e5b3"}.fa-hands-holding-dollar:before,.fa-hands-usd:before{content:"\f4c5"}.fa-cube:before{content:"\f1b2"}.fa-arrow-down-triangle-square:before,.fa-sort-shapes-down:before{content:"\f888"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shutters:before{content:"\e449"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-table-tree:before{content:"\e293"}.fa-house-chimney-heart:before{content:"\e1b2"}.fa-tally-3:before{content:"\e296"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-cart-circle-exclamation:before{content:"\e3f2"}.fa-sword:before{content:"\f71c"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-interrobang:before{content:"\e5ba"}.fa-plane-slash:before{content:"\e069"}.fa-circle-dashed:before{content:"\e105"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-fork-knife:before,.fa-utensils-alt:before{content:"\f2e6"}.fa-satellite-dish:before{content:"\f7c0"}.fa-badge-check:before{content:"\f336"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-slider:before{content:"\e252"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-clock-one-thirty:before{content:"\e34f"}.fa-inbox-arrow-up:before,.fa-inbox-out:before{content:"\f311"}.fa-cloud-slash:before{content:"\e137"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-octagon-check:before{content:"\e426"}.fa-flatbread-stuffed:before{content:"\e40c"}.fa-clipboard-check:before{content:"\f46c"}.fa-cart-circle-plus:before{content:"\e3f3"}.fa-shipping-timed:before,.fa-truck-clock:before{content:"\f48c"}.fa-pool-8-ball:before{content:"\e3c5"}.fa-file-audio:before{content:"\f1c7"}.fa-turn-down-left:before{content:"\e331"}.fa-lock-hashtag:before{content:"\e423"}.fa-chart-radar:before{content:"\e0e7"}.fa-staff:before{content:"\f71b"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-utility-pole:before{content:"\e2c3"}.fa-transporter-6:before{content:"\e2a7"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-vector-polygon:before{content:"\e2c7"}.fa-diagram-nested:before{content:"\e157"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-image-user:before{content:"\e1b8"}.fa-buoy:before{content:"\e5b5"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-border-center-h:before{content:"\f89c"}.fa-can-food:before{content:"\e3e6"}.fa-typewriter:before{content:"\f8e7"}.fa-arrow-right-from-arc:before{content:"\e4b1"}.fa-circle-k:before{content:"\e113"}.fa-face-hand-over-mouth:before{content:"\e378"}.fa-popcorn:before{content:"\f819"}.fa-house-flood:before,.fa-house-water:before{content:"\f74f"}.fa-object-subtract:before{content:"\e49e"}.fa-code-branch:before{content:"\f126"}.fa-warehouse-alt:before,.fa-warehouse-full:before{content:"\f495"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-arrow-down-from-dotted-line:before{content:"\e090"}.fa-square-quarters:before{content:"\e44e"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-trash-xmark:before{content:"\e2b4"}.fa-caret-circle-left:before,.fa-circle-caret-left:before{content:"\f32e"}.fa-files:before{content:"\e178"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-face-clouds:before{content:"\e47d"}.fa-user-crown:before{content:"\f6a4"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-cart-circle-check:before{content:"\e3f1"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-user-tie-hair-long:before{content:"\e460"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-head-side-medical:before{content:"\f809"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-user-robot:before{content:"\e04b"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-card-diamond:before{content:"\e3ea"}.fa-face-zipper:before{content:"\e3a5"}.fa-face-raised-eyebrow:before{content:"\e388"}.fa-house-signal:before{content:"\e012"}.fa-chevron-square-up:before,.fa-square-chevron-up:before{content:"\f32c"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-arrows-to-line:before{content:"\e0a7"}.fa-dolphin:before{content:"\e168"}.fa-arrow-up-right:before{content:"\e09f"}.fa-circle-r:before{content:"\e120"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-circle-sort-up:before,.fa-sort-circle-up:before{content:"\e032"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-chestnut:before{content:"\e3f6"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-heat:before{content:"\e00c"}.fa-ticket-airline:before{content:"\e29a"}.fa-boot-heeled:before{content:"\e33f"}.fa-arrows-minimize:before,.fa-compress-arrows:before{content:"\e0a5"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-hexagon:before{content:"\f312"}.fa-manhole:before{content:"\e1d6"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-floppy-disks:before{content:"\e183"}.fa-toilet-paper-blank-under:before,.fa-toilet-paper-reverse-alt:before{content:"\e29f"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-pump:before{content:"\e442"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-arrow-up-left-from-circle:before{content:"\e09e"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-dryer:before{content:"\f861"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-chess-bishop-alt:before,.fa-chess-bishop-piece:before{content:"\f43b"}.fa-shirt-tank-top:before{content:"\e3c9"}.fa-diploma:before,.fa-scroll-ribbon:before{content:"\f5ea"}.fa-screencast:before{content:"\e23e"}.fa-walker:before{content:"\f831"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-face-kiss-closed-eyes:before{content:"\e37d"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-file-user:before{content:"\f65c"}.fa-user-police-tie:before{content:"\e334"}.fa-face-tongue-money:before{content:"\e39d"}.fa-tennis-ball:before{content:"\f45e"}.fa-square-l:before{content:"\e275"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-calendar-arrow-up:before,.fa-calendar-upload:before{content:"\e0d1"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-scarf:before{content:"\f7c1"}.fa-album-circle-plus:before{content:"\e48c"}.fa-user-nurse-hair-long:before{content:"\e45e"}.fa-diamond:before{content:"\f219"}.fa-arrow-alt-square-left:before,.fa-square-left:before{content:"\f351"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-circle-ellipsis-vertical:before{content:"\e10b"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-grid-dividers:before{content:"\e3ad"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-face-pensive:before{content:"\e384"}.fa-user-music:before{content:"\f8eb"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-comments-alt-dollar:before,.fa-messages-dollar:before{content:"\f652"}.fa-sensor-on:before{content:"\e02b"}.fa-balloon:before{content:"\e2e3"}.fa-biohazard:before{content:"\f780"}.fa-chess-queen-alt:before,.fa-chess-queen-piece:before{content:"\f446"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-house-leave:before,.fa-house-person-depart:before,.fa-house-person-leave:before{content:"\e00f"}.fa-ruler-triangle:before{content:"\f61c"}.fa-card-club:before{content:"\e3e9"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-spinner-third:before{content:"\f3f4"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-computer-mouse-scrollwheel:before,.fa-mouse-alt:before{content:"\f8cd"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-table-layout:before{content:"\e290"}.fa-narwhal:before{content:"\f6fe"}.fa-ramp-loading:before{content:"\f4d4"}.fa-calendar-circle-plus:before{content:"\e470"}.fa-toothbrush:before{content:"\f635"}.fa-border-inner:before{content:"\f84e"}.fa-paw-claws:before{content:"\f702"}.fa-kiwi-fruit:before{content:"\e30c"}.fa-traffic-light-slow:before{content:"\f639"}.fa-rectangle-code:before{content:"\e322"}.fa-head-side-virus:before{content:"\e064"}.fa-keyboard-brightness:before{content:"\e1c0"}.fa-books-medical:before{content:"\f7e8"}.fa-lightbulb-slash:before{content:"\f673"}.fa-home-blank:before,.fa-house-blank:before{content:"\e487"}.fa-square-5:before{content:"\e25a"}.fa-heart-square:before,.fa-square-heart:before{content:"\f4c8"}.fa-puzzle:before{content:"\e443"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-pipe-circle-check:before{content:"\e436"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-octagon-exclamation:before{content:"\e204"}.fa-dial-low:before{content:"\e15d"}.fa-door-closed:before{content:"\f52a"}.fa-laptop-mobile:before,.fa-phone-laptop:before{content:"\f87a"}.fa-conveyor-belt-alt:before,.fa-conveyor-belt-boxes:before{content:"\f46f"}.fa-shield-virus:before{content:"\e06c"}.fa-starfighter-alt-advanced:before,.fa-starfighter-twin-ion-engine-advanced:before{content:"\e28e"}.fa-dice-six:before{content:"\f526"}.fa-starfighter-alt:before,.fa-starfighter-twin-ion-engine:before{content:"\e038"}.fa-rocket-launch:before{content:"\e027"}.fa-mosquito-net:before{content:"\e52c"}.fa-vent-damper:before{content:"\e465"}.fa-bridge-water:before{content:"\e4ce"}.fa-ban-bug:before,.fa-debug:before{content:"\f7f9"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-garage-car:before{content:"\e00a"}.fa-square-kanban:before{content:"\e488"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-coffee-pot:before{content:"\e002"}.fa-mouse-field:before{content:"\e5a8"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-shower-alt:before,.fa-shower-down:before{content:"\e24d"}.fa-box-circle-check:before{content:"\e0c4"}.fa-brightness:before{content:"\e0c9"}.fa-car-side-bolt:before{content:"\e344"}.fa-ornament:before{content:"\f7b8"}.fa-phone-arrow-down-left:before,.fa-phone-arrow-down:before,.fa-phone-incoming:before{content:"\e223"}.fa-cloud-word:before{content:"\e138"}.fa-hand-fingers-crossed:before{content:"\e1a3"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-arrow-down-small-big:before,.fa-sort-size-down-alt:before{content:"\f88d"}.fa-book-medical:before{content:"\f7e6"}.fa-face-melting:before{content:"\e483"}.fa-poo:before{content:"\f2fe"}.fa-pen-alt-slash:before,.fa-pen-clip-slash:before{content:"\e20f"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-scroll-old:before{content:"\f70f"}.fa-guitars:before{content:"\f8bf"}.fa-phone-xmark:before{content:"\e227"}.fa-hose:before{content:"\e419"}.fa-clock-six:before{content:"\e352"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-square-r:before{content:"\e27c"}.fa-cubes:before{content:"\f1b3"}.fa-envelope-open-dollar:before{content:"\f657"}.fa-divide:before{content:"\f529"}.fa-sun-cloud:before{content:"\f763"}.fa-lamp-floor:before{content:"\e015"}.fa-square-7:before{content:"\e25c"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-campfire:before{content:"\f6ba"}.fa-circle-ampersand:before{content:"\e0f8"}.fa-snowflakes:before{content:"\f7cf"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-leaf-maple:before{content:"\f6f6"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-cup-straw-swoosh:before{content:"\e364"}.fa-temperature-hot:before,.fa-temperature-sun:before{content:"\f76a"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-high-definition:before,.fa-rectangle-hd:before{content:"\e1ae"}.fa-j:before{content:"\4a"}.fa-galaxy:before{content:"\e008"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-cherries:before{content:"\e0ec"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-circle-sort:before,.fa-sort-circle:before{content:"\e030"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-siren:before{content:"\e02d"}.fa-arrow-up-to-dotted-line:before{content:"\e0a1"}.fa-image-landscape:before,.fa-landscape:before{content:"\e1b5"}.fa-tank-water:before{content:"\e452"}.fa-curling-stone:before,.fa-curling:before{content:"\f44a"}.fa-gamepad-alt:before,.fa-gamepad-modern:before{content:"\e5a2"}.fa-messages-question:before{content:"\e1e7"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-briefcase-arrow-right:before{content:"\e2f2"}.fa-expand-wide:before{content:"\f320"}.fa-clock-eleven-thirty:before{content:"\e348"}.fa-rv:before{content:"\f7be"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-dreidel:before{content:"\f792"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-flower-tulip:before{content:"\f801"}.fa-people-pants-simple:before{content:"\e21a"}.fa-cloud-drizzle:before{content:"\f738"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-solar-system:before{content:"\e02f"}.fa-seal-question:before{content:"\e243"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-disc-drive:before{content:"\f8b5"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-rows:before,.fa-table-rows:before{content:"\e292"}.fa-location-exclamation:before,.fa-map-marker-exclamation:before{content:"\f608"}.fa-face-fearful:before{content:"\e375"}.fa-clipboard-user:before{content:"\f7f3"}.fa-bus-school:before{content:"\f5dd"}.fa-film-slash:before{content:"\e179"}.fa-square-arrow-down-right:before{content:"\e262"}.fa-book-sparkles:before,.fa-book-spells:before{content:"\f6b8"}.fa-washer:before,.fa-washing-machine:before{content:"\f898"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-user-visor:before{content:"\e04c"}.fa-file-plus-minus:before{content:"\e177"}.fa-chess-clock-alt:before,.fa-chess-clock-flip:before{content:"\f43e"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-steering-wheel:before{content:"\f622"}.fa-tag:before{content:"\f02b"}.fa-stretcher:before{content:"\f825"}.fa-book-law:before,.fa-book-section:before{content:"\e0c1"}.fa-inboxes:before{content:"\e1bb"}.fa-coffee-bean:before{content:"\e13e"}.fa-brackets-curly:before{content:"\f7ea"}.fa-ellipsis-stroke-vertical:before,.fa-ellipsis-v-alt:before{content:"\f39c"}.fa-comment:before{content:"\f075"}.fa-square-1:before{content:"\e256"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-head-side:before{content:"\f6e9"}.fa-envelope:before{content:"\f0e0"}.fa-dolly-empty:before{content:"\f473"}.fa-face-tissue:before{content:"\e39c"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-chart-line-down:before{content:"\f64d"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-lock-a:before{content:"\e422"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-person-pinball:before{content:"\e21d"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-apple-core:before{content:"\e08f"}.fa-circle-y:before{content:"\e12f"}.fa-h6:before{content:"\e413"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-circle-small:before{content:"\e122"}.fa-border-none:before{content:"\f850"}.fa-arrow-turn-down-left:before{content:"\e2e1"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-comment-alt-medical:before,.fa-message-medical:before{content:"\f7f4"}.fa-rugby-ball:before{content:"\e3c6"}.fa-comment-music:before{content:"\f8b0"}.fa-indent:before{content:"\f03c"}.fa-tree-alt:before,.fa-tree-deciduous:before{content:"\f400"}.fa-puzzle-piece-alt:before,.fa-puzzle-piece-simple:before{content:"\e231"}.fa-truck-field-un:before{content:"\e58e"}.fa-nfc-trash:before{content:"\e1fd"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-file-times:before,.fa-file-xmark:before{content:"\f317"}.fa-home-heart:before,.fa-house-heart:before{content:"\f4c9"}.fa-house-chimney-blank:before{content:"\e3b0"}.fa-meter-bolt:before{content:"\e1e9"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-slash-back:before{content:"\5c"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-fishing-rod:before{content:"\e3a8"}.fa-hammer-crash:before{content:"\e414"}.fa-message-heart:before{content:"\e5c9"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-polaroid:before{content:"\f8aa"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-cart-arrow-up:before{content:"\e3ee"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-buoy-mooring:before{content:"\e5b6"}.fa-square-4:before{content:"\e259"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-tricycle-adult:before{content:"\e5c4"}.fa-waveform:before{content:"\f8f1"}.fa-water:before{content:"\f773"}.fa-star-sharp-half-alt:before,.fa-star-sharp-half-stroke:before{content:"\e28d"}.fa-nfc-signal:before{content:"\e1fb"}.fa-plane-prop:before{content:"\e22b"}.fa-calendar-check:before{content:"\f274"}.fa-clock-desk:before{content:"\e134"}.fa-calendar-clock:before,.fa-calendar-time:before{content:"\e0d2"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-plate-utensils:before{content:"\e43b"}.fa-family-pants:before{content:"\e302"}.fa-hose-reel:before{content:"\e41a"}.fa-house-window:before{content:"\e3b3"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-cloud-rainbow:before{content:"\f73e"}.fa-person-cane:before{content:"\e53c"}.fa-alien:before{content:"\f8f5"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-people-dress-simple:before{content:"\e218"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-bowling-ball-pin:before{content:"\e0c3"}.fa-bell-school-slash:before{content:"\f5d6"}.fa-plus-large:before{content:"\e59e"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-camera-viewfinder:before,.fa-screenshot:before{content:"\e0da"}.fa-comment-alt-music:before,.fa-message-music:before{content:"\f8af"}.fa-car-building:before{content:"\f859"}.fa-border-bottom-right:before,.fa-border-style-alt:before{content:"\f854"}.fa-octagon:before{content:"\f306"}.fa-comment-arrow-up-right:before{content:"\e145"}.fa-octagon-divide:before{content:"\e203"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-tv-music:before{content:"\f8e6"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-reel:before{content:"\e238"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-alarm-exclamation:before{content:"\f843"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-traffic-cone:before{content:"\f636"}.fa-grate:before{content:"\e193"}.fa-arrow-down-right:before{content:"\e093"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-person-from-portal:before,.fa-portal-exit:before{content:"\e023"}.fa-plane-arrival:before{content:"\f5af"}.fa-cowbell-circle-plus:before,.fa-cowbell-more:before{content:"\f8b4"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-distribute-spacing-vertical:before{content:"\e366"}.fa-signal-alt-2:before,.fa-signal-bars-fair:before{content:"\f692"}.fa-sportsball:before{content:"\e44b"}.fa-game-console-handheld-crank:before{content:"\e5b9"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-face-smile-upside-down:before{content:"\e395"}.fa-ball-pile:before{content:"\f77e"}.fa-badge-dollar:before{content:"\f645"}.fa-money-bills-alt:before,.fa-money-bills-simple:before{content:"\e1f4"}.fa-list-timeline:before{content:"\e1d1"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-keyboard-down:before{content:"\e1c2"}.fa-circle-up-right:before{content:"\e129"}.fa-cloud-bolt-moon:before,.fa-thunderstorm-moon:before{content:"\f76d"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-bracket-round-right:before{content:"\29"}.fa-circle-5:before{content:"\e0f2"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-fire-flame:before,.fa-flame:before{content:"\f6df"}.fa-arrow-alt-to-right:before,.fa-right-to-line:before{content:"\f34c"}.fa-gif:before{content:"\e190"}.fa-chess:before{content:"\f439"}.fa-trash-slash:before{content:"\e2b3"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-font-case:before{content:"\f866"}.fa-street-view:before{content:"\f21d"}.fa-arrow-down-left:before{content:"\e091"}.fa-franc-sign:before{content:"\e18f"}.fa-flask-poison:before,.fa-flask-round-poison:before{content:"\f6e0"}.fa-volume-off:before{content:"\f026"}.fa-book-circle-arrow-right:before{content:"\e0bc"}.fa-chart-user:before,.fa-user-chart:before{content:"\f6a3"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-presentation-screen:before,.fa-presentation:before{content:"\f685"}.fa-circle-bolt:before{content:"\e0fe"}.fa-face-smile-halo:before{content:"\e38f"}.fa-cart-circle-arrow-down:before{content:"\e3ef"}.fa-house-person-arrive:before,.fa-house-person-return:before,.fa-house-return:before{content:"\e011"}.fa-comment-alt-times:before,.fa-message-times:before,.fa-message-xmark:before{content:"\f4ab"}.fa-file-award:before,.fa-file-certificate:before{content:"\f5f3"}.fa-user-doctor-hair-long:before{content:"\e459"}.fa-camera-home:before,.fa-camera-security:before{content:"\f8fe"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-book-heart:before{content:"\f499"}.fa-mosque:before{content:"\f678"}.fa-duck:before{content:"\f6d8"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-flag-alt:before,.fa-flag-swallowtail:before{content:"\f74c"}.fa-person-military-rifle:before{content:"\e54b"}.fa-car-garage:before{content:"\f5e2"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-book-font:before{content:"\e0bf"}.fa-shield-plus:before{content:"\e24a"}.fa-vials:before{content:"\f493"}.fa-eye-dropper-full:before{content:"\e172"}.fa-distribute-spacing-horizontal:before{content:"\e365"}.fa-tablet-rugged:before{content:"\f48f"}.fa-temperature-frigid:before,.fa-temperature-snow:before{content:"\f768"}.fa-moped:before{content:"\e3b9"}.fa-face-smile-plus:before,.fa-smile-plus:before{content:"\f5b9"}.fa-radio-alt:before,.fa-radio-tuner:before{content:"\f8d8"}.fa-face-swear:before{content:"\e399"}.fa-water-arrow-down:before,.fa-water-lower:before{content:"\f774"}.fa-scanner-touchscreen:before{content:"\f48a"}.fa-circle-7:before{content:"\e0f4"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-person-ski-jumping:before,.fa-ski-jump:before{content:"\f7c7"}.fa-place-of-worship:before{content:"\f67f"}.fa-water-arrow-up:before,.fa-water-rise:before{content:"\f775"}.fa-waveform-lines:before,.fa-waveform-path:before{content:"\f8f2"}.fa-split:before{content:"\e254"}.fa-film-canister:before,.fa-film-cannister:before{content:"\f8b7"}.fa-folder-times:before,.fa-folder-xmark:before{content:"\f65f"}.fa-toilet-paper-alt:before,.fa-toilet-paper-blank:before{content:"\f71f"}.fa-tablet-android-alt:before,.fa-tablet-screen:before{content:"\f3fc"}.fa-hexagon-vertical-nft-slanted:before{content:"\e506"}.fa-folder-music:before{content:"\e18d"}.fa-desktop-medical:before,.fa-display-medical:before{content:"\e166"}.fa-share-all:before{content:"\f367"}.fa-peapod:before{content:"\e31c"}.fa-chess-clock:before{content:"\f43d"}.fa-axe:before{content:"\f6b2"}.fa-square-d:before{content:"\e268"}.fa-grip-vertical:before{content:"\f58e"}.fa-mobile-signal-out:before{content:"\e1f0"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-arrow-up-from-dotted-line:before{content:"\e09b"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-light-switch-on:before{content:"\e019"}.fa-arrow-down-arrow-up:before,.fa-sort-alt:before{content:"\f883"}.fa-raindrops:before{content:"\f75c"}.fa-dash:before,.fa-minus-large:before{content:"\e404"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-input-numeric:before{content:"\e1bd"}.fa-truck-tow:before{content:"\e2b8"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-car-bolt:before{content:"\e341"}.fa-arrows-maximize:before,.fa-expand-arrows:before{content:"\f31d"}.fa-faucet:before{content:"\e005"}.fa-cloud-sleet:before{content:"\f741"}.fa-lamp-street:before{content:"\e1c5"}.fa-list-radio:before{content:"\e1d0"}.fa-pen-nib-slash:before{content:"\e4a1"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-square-up-left:before{content:"\e282"}.fa-overline:before{content:"\f876"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-arrows-from-dotted-line:before{content:"\e0a3"}.fa-usb-drive:before{content:"\f8e9"}.fa-ballot:before{content:"\f732"}.fa-caret-down:before{content:"\f0d7"}.fa-location-dot-slash:before,.fa-map-marker-alt-slash:before{content:"\f605"}.fa-cards:before{content:"\e3ed"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-boxing-glove:before,.fa-glove-boxing:before{content:"\f438"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-bell-school:before{content:"\f5d5"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-folder-heart:before{content:"\e189"}.fa-circle-location-arrow:before,.fa-location-circle:before{content:"\f602"}.fa-face-head-bandage:before{content:"\e37a"}.fa-maki-roll:before,.fa-makizushi:before,.fa-sushi-roll:before{content:"\e48b"}.fa-car-bump:before{content:"\f5e0"}.fa-piggy-bank:before{content:"\f4d3"}.fa-racquet:before{content:"\f45a"}.fa-car-mirrors:before{content:"\e343"}.fa-industry-alt:before,.fa-industry-windows:before{content:"\f3b3"}.fa-bolt-auto:before{content:"\e0b6"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-flux-capacitor:before{content:"\f8ba"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-honey-pot:before{content:"\e418"}.fa-olive:before{content:"\e316"}.fa-khanda:before{content:"\f66d"}.fa-filter-list:before{content:"\e17c"}.fa-outlet:before{content:"\e01c"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-cauldron:before{content:"\f6bf"}.fa-people:before{content:"\e216"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-croissant:before{content:"\f7f6"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-swords-laser:before{content:"\e03d"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-square-u:before{content:"\e281"}.fa-wand-sparkles:before{content:"\f72b"}.fa-router:before{content:"\f8da"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-sword-laser-alt:before{content:"\e03c"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-coin:before{content:"\f85c"}.fa-laptop-slash:before{content:"\e1c7"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-circle-b:before{content:"\e0fd"}.fa-person-dress-simple:before{content:"\e21c"}.fa-pipe-collar:before{content:"\e437"}.fa-lights-holiday:before{content:"\f7b2"}.fa-citrus:before{content:"\e2f4"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-chart-tree-map:before{content:"\e0ea"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-clock-five-thirty:before{content:"\e34a"}.fa-pipe-valve:before{content:"\e439"}.fa-arrow-up-from-arc:before{content:"\e4b4"}.fa-face-spiral-eyes:before{content:"\e485"}.fa-compress-wide:before{content:"\f326"}.fa-circle-phone-hangup:before,.fa-phone-circle-down:before{content:"\e11d"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-badminton:before{content:"\e33a"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-arrow-alt-from-left:before,.fa-right-from-line:before{content:"\f347"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-shuttlecock:before{content:"\f45b"}.fa-user-hair:before{content:"\e45a"}.fa-eye-evil:before{content:"\f6db"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-garage:before{content:"\e009"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-shovel-snow:before{content:"\f7c3"}.fa-cloud-rain:before{content:"\f73d"}.fa-face-lying:before{content:"\e37e"}.fa-sprinkler:before{content:"\e035"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-person-sledding:before,.fa-sledding:before{content:"\f7cb"}.fa-game-console-handheld:before{content:"\f8bb"}.fa-ship:before{content:"\f21a"}.fa-clock-six-thirty:before{content:"\e353"}.fa-battery-slash:before{content:"\f377"}.fa-tugrik-sign:before{content:"\e2ba"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-inventory:before,.fa-shelves:before{content:"\f480"}.fa-cloud-snow:before{content:"\f742"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-oven:before{content:"\e01d"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-comment-captions:before{content:"\e146"}.fa-comments-question:before{content:"\e14e"}.fa-scribble:before{content:"\e23f"}.fa-rotate-exclamation:before{content:"\e23c"}.fa-file-circle-check:before{content:"\e5a0"}.fa-glass:before{content:"\f804"}.fa-loader:before{content:"\e1d4"}.fa-forward:before{content:"\f04e"}.fa-user-pilot:before{content:"\e2c0"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-code-pull-request-closed:before{content:"\e3f9"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-face-dotted:before{content:"\e47f"}.fa-face-worried:before{content:"\e3a3"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-vector-circle:before{content:"\e2c6"}.fa-car-circle-bolt:before{content:"\e342"}.fa-calendar-week:before{content:"\f784"}.fa-flying-disc:before{content:"\e3a9"}.fa-laptop-medical:before{content:"\f812"}.fa-square-down-right:before{content:"\e26c"}.fa-b:before{content:"\42"}.fa-seat-airline:before{content:"\e244"}.fa-eclipse-alt:before,.fa-moon-over-sun:before{content:"\f74a"}.fa-pipe:before{content:"\7c"}.fa-file-medical:before{content:"\f477"}.fa-potato:before{content:"\e440"}.fa-dice-one:before{content:"\f525"}.fa-circle-a:before{content:"\e0f7"}.fa-helmet-battle:before{content:"\f6eb"}.fa-butter:before{content:"\e3e4"}.fa-blanket-fire:before{content:"\e3da"}.fa-kiwi-bird:before{content:"\f535"}.fa-castle:before{content:"\e0de"}.fa-golf-club:before{content:"\f451"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-balloons:before{content:"\e2e4"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-timeline-arrow:before{content:"\e29d"}.fa-skull:before{content:"\f54c"}.fa-game-board-alt:before,.fa-game-board-simple:before{content:"\f868"}.fa-circle-video:before,.fa-video-circle:before{content:"\e12b"}.fa-chart-scatter-bubble:before{content:"\e0e9"}.fa-house-turret:before{content:"\e1b4"}.fa-banana:before{content:"\e2e5"}.fa-hand-holding-skull:before{content:"\e1a4"}.fa-people-dress:before{content:"\e217"}.fa-couch-small:before,.fa-loveseat:before{content:"\f4cc"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-block-quote:before{content:"\e0b5"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-money-check-dollar-pen:before,.fa-money-check-edit-alt:before{content:"\f873"}.fa-arrow-alt-from-bottom:before,.fa-up-from-line:before{content:"\f346"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-people-pants:before{content:"\e219"}.fa-mound:before{content:"\e52d"}.fa-windsock:before{content:"\f777"}.fa-circle-half:before{content:"\e110"}.fa-brake-warning:before{content:"\e0c7"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-sax-hot:before,.fa-saxophone-fire:before{content:"\f8db"}.fa-camera-web-slash:before,.fa-webcam-slash:before{content:"\f833"}.fa-folder-medical:before{content:"\e18c"}.fa-folder-cog:before,.fa-folder-gear:before{content:"\e187"}.fa-hand-wave:before{content:"\e1a7"}.fa-arrow-up-arrow-down:before,.fa-sort-up-down:before{content:"\e099"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-comment-alt-slash:before,.fa-message-slash:before{content:"\f4a9"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-trash-can-check:before{content:"\e2a9"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-person-simple:before{content:"\e220"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-notes:before{content:"\e202"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-trash-arrow-turn-left:before,.fa-trash-undo:before{content:"\f895"}.fa-champagne-glass:before,.fa-glass-champagne:before{content:"\f79e"}.fa-objects-align-center-horizontal:before{content:"\e3bc"}.fa-sun:before{content:"\f185"}.fa-trash-alt-slash:before,.fa-trash-can-slash:before{content:"\e2ad"}.fa-screen-users:before,.fa-users-class:before{content:"\f63d"}.fa-guitar:before{content:"\f7a6"}.fa-arrow-square-left:before,.fa-square-arrow-left:before{content:"\f33a"}.fa-square-8:before{content:"\e25d"}.fa-face-smile-hearts:before{content:"\e390"}.fa-brackets-square:before,.fa-brackets:before{content:"\f7e9"}.fa-laptop-arrow-down:before{content:"\e1c6"}.fa-hockey-stick-puck:before{content:"\e3ae"}.fa-house-tree:before{content:"\e1b3"}.fa-signal-2:before,.fa-signal-fair:before{content:"\f68d"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-circle-dollar:before,.fa-dollar-circle:before,.fa-usd-circle:before{content:"\f2e8"}.fa-horse-head:before{content:"\f7ab"}.fa-arrows-repeat:before,.fa-repeat-alt:before{content:"\f364"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-image-polaroid:before{content:"\f8c4"}.fa-wave-triangle:before{content:"\f89a"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-grill:before{content:"\e5a3"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-analytics:before,.fa-chart-mixed:before{content:"\f643"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-desktop-code:before,.fa-display-code:before{content:"\e165"}.fa-face-drooling:before{content:"\e372"}.fa-oil-temp:before,.fa-oil-temperature:before{content:"\f614"}.fa-question-square:before,.fa-square-question:before{content:"\f2fd"}.fa-air-conditioner:before{content:"\f8f4"}.fa-angle-down:before{content:"\f107"}.fa-mountains:before{content:"\f6fd"}.fa-omega:before{content:"\f67a"}.fa-car-tunnel:before{content:"\e4de"}.fa-person-dolly-empty:before{content:"\f4d1"}.fa-pan-food:before{content:"\e42b"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-tickets-airline:before{content:"\e29b"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-nfc-slash:before{content:"\e1fc"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-grid-2-plus:before{content:"\e197"}.fa-bells:before{content:"\f77f"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-envelope-badge:before,.fa-envelope-dot:before{content:"\e16f"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-bowl-chopsticks:before{content:"\e2e9"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-circle-s:before{content:"\e121"}.fa-box-ballot:before{content:"\f735"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-user-tie-hair:before{content:"\e45f"}.fa-podium-star:before{content:"\f758"}.fa-business-front:before,.fa-party-back:before,.fa-trian-balbot:before,.fa-user-hair-mullet:before{content:"\e45c"}.fa-microphone-stand:before{content:"\f8cb"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-family-dress:before{content:"\e301"}.fa-circle-x:before{content:"\e12e"}.fa-cabin:before{content:"\e46d"}.fa-mountain-sun:before{content:"\e52f"}.fa-chart-simple-horizontal:before{content:"\e474"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-hand-back-point-left:before{content:"\e19f"}.fa-comment-alt-dots:before,.fa-message-dots:before,.fa-messaging:before{content:"\f4a3"}.fa-file-heart:before{content:"\e176"}.fa-beer-foam:before,.fa-beer-mug:before{content:"\e0b3"}.fa-dice-d20:before{content:"\f6cf"}.fa-drone:before{content:"\f85f"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-book-copy:before{content:"\e0be"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-square-c:before{content:"\e266"}.fa-clock-two:before{content:"\e35a"}.fa-square-ellipsis-vertical:before{content:"\e26f"}.fa-podcast:before{content:"\f2ce"}.fa-bee:before{content:"\e0b2"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-candy-bar:before,.fa-chocolate-bar:before{content:"\e3e8"}.fa-xmark-large:before{content:"\e59b"}.fa-pinata:before{content:"\e3c3"}.fa-arrows-from-line:before{content:"\e0a4"}.fa-superscript:before{content:"\f12b"}.fa-bowl-spoon:before{content:"\e3e0"}.fa-hexagon-check:before{content:"\e416"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-traffic-light-stop:before{content:"\f63a"}.fa-paint-roller:before{content:"\f5aa"}.fa-accent-grave:before{content:"\60"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-circle-0:before{content:"\e0ed"}.fa-dial-med-low:before{content:"\e160"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-crab:before{content:"\e3ff"}.fa-box-full:before,.fa-box-open-full:before{content:"\f49c"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-quotes:before{content:"\e234"}.fa-pretzel:before{content:"\e441"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-user-robot-xmarks:before{content:"\e4a7"}.fa-comment-alt-quote:before,.fa-message-quote:before{content:"\e1e4"}.fa-candy-corn:before{content:"\f6bd"}.fa-folder-magnifying-glass:before,.fa-folder-search:before{content:"\e18b"}.fa-notebook:before{content:"\e201"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-bullseye-pointer:before{content:"\f649"}.fa-eraser:before{content:"\f12d"}.fa-hexagon-image:before{content:"\e504"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-crate-apple:before{content:"\f6b1"}.fa-apple-crate:before{content:"\f6b1"}.fa-person-burst:before{content:"\e53b"}.fa-game-board:before{content:"\f867"}.fa-hat-chef:before{content:"\f86b"}.fa-hand-back-point-right:before{content:"\e1a1"}.fa-dove:before{content:"\f4ba"}.fa-snowflake-droplets:before{content:"\e5c1"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-grid-4:before{content:"\e198"}.fa-socks:before{content:"\f696"}.fa-face-sunglasses:before{content:"\e398"}.fa-inbox:before{content:"\f01c"}.fa-square-0:before{content:"\e255"}.fa-section:before{content:"\e447"}.fa-box-up:before,.fa-square-this-way-up:before{content:"\f49f"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-square-ampersand:before{content:"\e260"}.fa-envelope-open-text:before{content:"\f658"}.fa-lamp-desk:before{content:"\e014"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-poll-people:before{content:"\f759"}.fa-glass-whiskey-rocks:before,.fa-whiskey-glass-ice:before{content:"\f7a1"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-user-bounty-hunter:before{content:"\e2bf"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-diagram-sankey:before{content:"\e158"}.fa-cloud-hail-mixed:before{content:"\f73a"}.fa-circle-up-left:before{content:"\e128"}.fa-dharmachakra:before{content:"\f655"}.fa-objects-align-left:before{content:"\e3be"}.fa-oil-can-drip:before{content:"\e205"}.fa-face-smiling-hands:before{content:"\e396"}.fa-broccoli:before{content:"\e3e2"}.fa-route-interstate:before{content:"\f61b"}.fa-ear-muffs:before{content:"\f795"}.fa-hotdog:before{content:"\f80f"}.fa-transporter-empty:before{content:"\e046"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-angle-90:before{content:"\e08d"}.fa-rectangle-terminal:before{content:"\e236"}.fa-kite:before{content:"\f6f4"}.fa-drum:before{content:"\f569"}.fa-scrubber:before{content:"\f2f8"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fish-bones:before{content:"\e304"}.fa-deer-rudolph:before{content:"\f78f"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-head-side-heart:before{content:"\e1aa"}.fa-square-e:before{content:"\e26d"}.fa-meter-fire:before{content:"\e1eb"}.fa-cloud-hail:before{content:"\f739"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-money-from-bracket:before{content:"\e312"}.fa-star-half:before{content:"\f089"}.fa-car-bus:before{content:"\f85a"}.fa-speaker:before{content:"\f8df"}.fa-timer:before{content:"\e29e"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-grill-hot:before{content:"\e5a5"}.fa-ballot-check:before{content:"\f733"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-file-minus:before{content:"\f318"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-coffee-togo:before,.fa-cup-togo:before{content:"\f6c5"}.fa-square-down-left:before{content:"\e26b"}.fa-burger-lettuce:before{content:"\e3e3"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-chevron-double-down:before,.fa-chevrons-down:before{content:"\f322"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-signal-3:before,.fa-signal-good:before{content:"\f68e"}.fa-location-question:before,.fa-map-marker-question:before{content:"\f60b"}.fa-floppy-disk-circle-xmark:before,.fa-floppy-disk-times:before,.fa-save-circle-xmark:before,.fa-save-times:before{content:"\e181"}.fa-naira-sign:before{content:"\e1f6"}.fa-peach:before{content:"\e20b"}.fa-taxi-bus:before{content:"\e298"}.fa-bracket-curly-left:before,.fa-bracket-curly:before{content:"\7b"}.fa-lobster:before{content:"\e421"}.fa-cart-flatbed-empty:before,.fa-dolly-flatbed-empty:before{content:"\f476"}.fa-colon:before{content:"\3a"}.fa-cart-arrow-down:before{content:"\f218"}.fa-wand:before{content:"\f72a"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-table-picnic:before{content:"\e32d"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-circle-microphone-lines:before,.fa-microphone-circle-alt:before{content:"\e117"}.fa-desktop-slash:before,.fa-display-slash:before{content:"\e2fa"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-transporter-2:before{content:"\e044"}.fa-hand-receiving:before,.fa-hands-holding-diamond:before{content:"\f47c"}.fa-money-bill-simple-wave:before{content:"\e1f2"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-bell-plus:before{content:"\f849"}.fa-book-arrow-right:before{content:"\e0b9"}.fa-hospitals:before{content:"\f80e"}.fa-club:before{content:"\f327"}.fa-skull-crossbones:before{content:"\f714"}.fa-dewpoint:before,.fa-droplet-degree:before{content:"\f748"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-hand-holding-magic:before{content:"\f6e5"}.fa-watermelon-slice:before{content:"\e337"}.fa-circle-ellipsis:before{content:"\e10a"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-sd-cards:before{content:"\e240"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-envelopes:before{content:"\e170"}.fa-phone-office:before{content:"\f67d"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-nfc-pen:before{content:"\e1fa"}.fa-person-harassing:before{content:"\e549"}.fa-hat-winter:before{content:"\f7a8"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-bone-break:before{content:"\f5d8"}.fa-arrow-up:before{content:"\f062"}.fa-down-from-dotted-line:before{content:"\e407"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-border-left:before{content:"\f84f"}.fa-circle-divide:before{content:"\e106"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-diagram-subtask:before{content:"\e479"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-square-y:before{content:"\e287"}.fa-user-doctor-hair:before{content:"\e458"}.fa-planet-ringed:before{content:"\e020"}.fa-mushroom:before{content:"\e425"}.fa-user-shield:before{content:"\f505"}.fa-megaphone:before{content:"\f675"}.fa-circle-exclamation-check:before{content:"\e10d"}.fa-wind:before{content:"\f72e"}.fa-box-dollar:before,.fa-box-usd:before{content:"\f4a0"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-user-headset:before{content:"\f82d"}.fa-arrows-retweet:before,.fa-retweet-alt:before{content:"\f361"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-chevron-square-right:before,.fa-square-chevron-right:before{content:"\f32b"}.fa-lacrosse-stick-ball:before{content:"\e3b6"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-user-magnifying-glass:before{content:"\e5c5"}.fa-star-sharp:before{content:"\e28b"}.fa-comment-heart:before{content:"\e5c8"}.fa-circle-1:before{content:"\e0ee"}.fa-circle-star:before,.fa-star-circle:before{content:"\e123"}.fa-fish:before{content:"\f578"}.fa-cloud-fog:before,.fa-fog:before{content:"\f74e"}.fa-waffle:before{content:"\e466"}.fa-music-alt:before,.fa-music-note:before{content:"\f8cf"}.fa-hexagon-exclamation:before{content:"\e417"}.fa-cart-shopping-fast:before{content:"\e0dc"}.fa-object-union:before{content:"\e49f"}.fa-user-graduate:before{content:"\f501"}.fa-starfighter:before{content:"\e037"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-arrow-right-long-to-line:before{content:"\e3d5"}.fa-arrow-square-down:before,.fa-square-arrow-down:before{content:"\f339"}.fa-diamond-half-stroke:before{content:"\e5b8"}.fa-clapperboard:before{content:"\e131"}.fa-chevron-square-left:before,.fa-square-chevron-left:before{content:"\f32a"}.fa-phone-intercom:before{content:"\e434"}.fa-chain-horizontal:before,.fa-link-horizontal:before{content:"\e1cb"}.fa-mango:before{content:"\e30f"}.fa-music-alt-slash:before,.fa-music-note-slash:before{content:"\f8d0"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-face-tongue-sweat:before{content:"\e39e"}.fa-globe-stand:before{content:"\f5f6"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-circle-p:before{content:"\e11a"}.fa-award-simple:before{content:"\e0ab"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-pedestal:before{content:"\e20d"}.fa-chart-pyramid:before{content:"\e0e6"}.fa-sidebar:before{content:"\e24e"}.fa-frosty-head:before,.fa-snowman-head:before{content:"\f79b"}.fa-copy:before{content:"\f0c5"}.fa-burger-glass:before{content:"\e0ce"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-bars-filter:before{content:"\e0ad"}.fa-paintbrush-pencil:before{content:"\e206"}.fa-party-bell:before{content:"\e31a"}.fa-user-vneck-hair:before{content:"\e462"}.fa-jack-o-lantern:before{content:"\f30e"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-keynote:before{content:"\f66c"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-fort:before{content:"\e486"}.fa-cloud-check:before{content:"\e35c"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-face-smirking:before{content:"\e397"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-rhombus:before{content:"\e23b"}.fa-claw-marks:before{content:"\f6c2"}.fa-peso-sign:before{content:"\e222"}.fa-face-smile-tongue:before{content:"\e394"}.fa-cart-circle-xmark:before{content:"\e3f4"}.fa-building-shield:before{content:"\e4d8"}.fa-circle-phone-flip:before,.fa-phone-circle-alt:before{content:"\e11c"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-key-skeleton:before{content:"\f6f3"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-arrow-down-to-bracket:before{content:"\e094"}.fa-lines-leaning:before{content:"\e51e"}.fa-square-q:before{content:"\e27b"}.fa-ruler-combined:before{content:"\f546"}.fa-icons-alt:before,.fa-symbols:before{content:"\f86e"}.fa-copyright:before{content:"\f1f9"}.fa-highlighter-line:before{content:"\e1af"}.fa-bracket-left:before,.fa-bracket-square:before,.fa-bracket:before{content:"\5b"}.fa-island-tree-palm:before,.fa-island-tropical:before{content:"\f811"}.fa-arrow-from-left:before,.fa-arrow-right-from-line:before{content:"\f343"}.fa-h2:before{content:"\f314"}.fa-equals:before{content:"\3d"}.fa-cake-slice:before,.fa-shortcake:before{content:"\e3e5"}.fa-peanut:before{content:"\e430"}.fa-wrench-simple:before{content:"\e2d1"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-tally-2:before{content:"\e295"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-cars:before{content:"\f85b"}.fa-axe-battle:before{content:"\f6b3"}.fa-user-hair-long:before{content:"\e45b"}.fa-map:before{content:"\f279"}.fa-file-circle-info:before{content:"\e493"}.fa-face-disappointed:before{content:"\e36f"}.fa-lasso-sparkles:before{content:"\e1c9"}.fa-clock-eleven:before{content:"\e347"}.fa-rocket:before{content:"\f135"}.fa-siren-on:before{content:"\e02e"}.fa-clock-ten:before{content:"\e354"}.fa-candle-holder:before{content:"\f6bc"}.fa-video-arrow-down-left:before{content:"\e2c8"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-floppy-disk-circle-arrow-right:before,.fa-save-circle-arrow-right:before{content:"\e180"}.fa-folder-minus:before{content:"\f65d"}.fa-planet-moon:before{content:"\e01f"}.fa-face-eyes-xmarks:before{content:"\e374"}.fa-chart-scatter:before{content:"\f7ee"}.fa-display-arrow-down:before{content:"\e164"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-olive-branch:before{content:"\e317"}.fa-angle:before{content:"\e08c"}.fa-vacuum-robot:before{content:"\e04e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-square-divide:before{content:"\e26a"}.fa-signal-stream-slash:before{content:"\e250"}.fa-bezier-curve:before{content:"\f55b"}.fa-eye-dropper-half:before{content:"\e173"}.fa-store-lock:before{content:"\e4a6"}.fa-bell-slash:before{content:"\f1f6"}.fa-cloud-bolt-sun:before,.fa-thunderstorm-sun:before{content:"\f76e"}.fa-camera-slash:before{content:"\e0d9"}.fa-comment-quote:before{content:"\e14c"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-message-code:before{content:"\e1df"}.fa-glass-half-empty:before,.fa-glass-half-full:before,.fa-glass-half:before{content:"\e192"}.fa-fill:before{content:"\f575"}.fa-comment-alt-minus:before,.fa-message-minus:before{content:"\f4a7"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-chain-horizontal-slash:before,.fa-link-horizontal-slash:before{content:"\e1cc"}.fa-holly-berry:before{content:"\f7aa"}.fa-nose:before{content:"\e5bd"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-clouds:before{content:"\f744"}.fa-money-bill-simple:before{content:"\e1f1"}.fa-hand-lizard:before{content:"\f258"}.fa-table-pivot:before{content:"\e291"}.fa-filter-slash:before{content:"\e17d"}.fa-trash-can-arrow-turn-left:before,.fa-trash-can-undo:before,.fa-trash-undo-alt:before{content:"\f896"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-person-to-door:before{content:"\e433"}.fa-turntable:before{content:"\f8e4"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-signal-1:before,.fa-signal-weak:before{content:"\f68c"}.fa-clock-five:before{content:"\e349"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-computer-classic:before{content:"\f8b1"}.fa-frame:before{content:"\e495"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-ellipsis-h-alt:before,.fa-ellipsis-stroke:before{content:"\f39b"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-face-expressionless:before{content:"\e373"}.fa-down-to-dotted-line:before{content:"\e408"}.fa-cloud-music:before{content:"\f8ae"}.fa-traffic-light:before{content:"\f637"}.fa-cloud-minus:before{content:"\e35d"}.fa-thermometer:before{content:"\f491"}.fa-shield-minus:before{content:"\e249"}.fa-vr-cardboard:before{content:"\f729"}.fa-car-tilt:before{content:"\f5e5"}.fa-gauge-circle-minus:before{content:"\e497"}.fa-brightness-low:before{content:"\e0ca"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-conveyor-belt:before{content:"\f46e"}.fa-location-check:before,.fa-map-marker-check:before{content:"\f606"}.fa-coin-vertical:before{content:"\e3fd"}.fa-display:before{content:"\e163"}.fa-person-sign:before{content:"\f757"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-phone-hangup:before{content:"\e225"}.fa-signature-slash:before{content:"\e3cb"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-wheat-slash:before{content:"\e339"}.fa-trophy:before{content:"\f091"}.fa-clouds-sun:before{content:"\f746"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-face-vomit:before{content:"\e3a0"}.fa-speakers:before{content:"\f8e0"}.fa-teletype-answer:before,.fa-tty-answer:before{content:"\e2b9"}.fa-mug-tea-saucer:before{content:"\e1f5"}.fa-diagram-lean-canvas:before{content:"\e156"}.fa-alt:before{content:"\e08a"}.fa-dial-med-high:before,.fa-dial:before{content:"\e15b"}.fa-hand-peace:before{content:"\f25b"}.fa-circle-trash:before,.fa-trash-circle:before{content:"\e126"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-circle-quarters:before{content:"\e3f8"}.fa-spinner:before{content:"\f110"}.fa-tower-control:before{content:"\e2a2"}.fa-arrow-up-triangle-square:before,.fa-sort-shapes-up:before{content:"\f88a"}.fa-whale:before{content:"\f72c"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-party-horn:before{content:"\e31b"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-sun-alt:before,.fa-sun-bright:before{content:"\e28f"}.fa-warehouse:before{content:"\f494"}.fa-lock-keyhole-open:before,.fa-lock-open-alt:before{content:"\f3c2"}.fa-box-fragile:before,.fa-square-fragile:before,.fa-square-wine-glass-crack:before{content:"\f49b"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-square-n:before{content:"\e277"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-meter:before{content:"\e1e8"}.fa-mandolin:before{content:"\f6f9"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-up-from-bracket:before{content:"\e590"}.fa-knife-kitchen:before{content:"\f6f5"}.fa-border-right:before{content:"\f852"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-spade:before{content:"\f2f4"}.fa-card-spade:before{content:"\e3ec"}.fa-line-columns:before{content:"\f870"}.fa-arrow-right-to-line:before,.fa-arrow-to-right:before{content:"\f340"}.fa-person-falling-burst:before{content:"\e547"}.fa-flag-pennant:before,.fa-pennant:before{content:"\f456"}.fa-conveyor-belt-empty:before{content:"\e150"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-camcorder:before,.fa-video-handheld:before{content:"\f8a8"}.fa-pancakes:before{content:"\e42d"}.fa-album-circle-user:before{content:"\e48d"}.fa-qrcode:before{content:"\f029"}.fa-dice-d10:before{content:"\f6cd"}.fa-fireplace:before{content:"\f79a"}.fa-browser:before{content:"\f37e"}.fa-pen-paintbrush:before,.fa-pencil-paintbrush:before{content:"\f618"}.fa-fish-cooked:before{content:"\f7fe"}.fa-chair-office:before{content:"\f6c1"}.fa-nesting-dolls:before{content:"\e3ba"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-trumpet:before{content:"\f8e3"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-fire-smoke:before{content:"\f74b"}.fa-phone-missed:before{content:"\e226"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-arrows-repeat-1:before,.fa-repeat-1-alt:before{content:"\f366"}.fa-gun-slash:before{content:"\e19c"}.fa-avocado:before{content:"\e0aa"}.fa-binary:before{content:"\e33b"}.fa-glasses-alt:before,.fa-glasses-round:before{content:"\f5f5"}.fa-phone-plus:before{content:"\f4d2"}.fa-ditto:before{content:"\22"}.fa-person-seat:before{content:"\e21e"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-scythe:before{content:"\f710"}.fa-pen-nib:before{content:"\f5ad"}.fa-ban-parking:before,.fa-parking-circle-slash:before{content:"\f616"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-face-diagonal-mouth:before{content:"\e47e"}.fa-diagram-cells:before{content:"\e475"}.fa-cricket-bat-ball:before,.fa-cricket:before{content:"\f449"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-pen-line:before{content:"\e212"}.fa-atom-alt:before,.fa-atom-simple:before{content:"\f5d3"}.fa-ampersand:before{content:"\26"}.fa-carrot:before{content:"\f787"}.fa-arrow-from-bottom:before,.fa-arrow-up-from-line:before{content:"\f342"}.fa-moon:before{content:"\f186"}.fa-pen-slash:before{content:"\e213"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-square-star:before{content:"\e27f"}.fa-cheese:before{content:"\f7ef"}.fa-send-backward:before{content:"\f87f"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-compass-slash:before{content:"\f5e9"}.fa-clock-one:before{content:"\e34e"}.fa-file-music:before{content:"\f8b6"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-skeleton:before{content:"\f620"}.fa-circle-g:before{content:"\e10f"}.fa-circle-arrow-up-left:before{content:"\e0fb"}.fa-coin-blank:before{content:"\e3fb"}.fa-broom:before{content:"\f51a"}.fa-vacuum:before{content:"\e04d"}.fa-shield-heart:before{content:"\e574"}.fa-card-heart:before{content:"\e3eb"}.fa-lightbulb-cfl-on:before{content:"\e5a7"}.fa-melon:before{content:"\e310"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-container-storage:before{content:"\f4b7"}.fa-face-pouting:before{content:"\e387"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-exploding-head:before,.fa-face-explode:before{content:"\e2fe"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-transformer-bolt:before{content:"\e2a4"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-cassette-vhs:before,.fa-vhs:before{content:"\f8ec"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-chimney:before{content:"\f78b"}.fa-object-intersect:before{content:"\e49d"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-block-brick:before,.fa-wall-brick:before{content:"\e3db"}.fa-fan:before{content:"\f863"}.fa-bags-shopping:before{content:"\f847"}.fa-paragraph-left:before,.fa-paragraph-rtl:before{content:"\f878"}.fa-person-walking-luggage:before{content:"\e554"}.fa-caravan-alt:before,.fa-caravan-simple:before{content:"\e000"}.fa-turtle:before{content:"\f726"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-booth-curtain:before{content:"\f734"}.fa-calendar:before{content:"\f133"}.fa-box-heart:before{content:"\f49d"}.fa-trailer:before{content:"\e041"}.fa-user-doctor-message:before,.fa-user-md-chat:before{content:"\f82e"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-amp-guitar:before{content:"\f8a1"}.fa-sd-card:before{content:"\f7c2"}.fa-volume-slash:before{content:"\f2e2"}.fa-border-bottom:before{content:"\f84d"}.fa-wifi-1:before,.fa-wifi-weak:before{content:"\f6aa"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-delete-right:before{content:"\e154"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-circle-quarter:before{content:"\e11f"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-function:before{content:"\f661"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-people-simple:before{content:"\e21b"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-face-monocle:before{content:"\e380"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-calendar-lines:before,.fa-calendar-note:before{content:"\e0d5"}.fa-arrow-down-big-small:before,.fa-sort-size-down:before{content:"\f88c"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-do-not-enter:before{content:"\f5ec"}.fa-shower:before{content:"\f2cc"}.fa-dice-d8:before{content:"\f6d2"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-grip-dots-vertical:before{content:"\e411"}.fa-face-viewfinder:before{content:"\e2ff"}.fa-creemee:before,.fa-soft-serve:before{content:"\e400"}.fa-h5:before{content:"\e412"}.fa-hand-back-point-down:before{content:"\e19e"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-rectangle-landscape:before,.fa-rectangle:before{content:"\f2fa"}.fa-clipboard-list-check:before{content:"\f737"}.fa-turkey:before{content:"\f725"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-ice-skate:before{content:"\f7ac"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-tomato:before{content:"\e330"}.fa-sword-laser:before{content:"\e03b"}.fa-house-circle-check:before{content:"\e509"}.fa-buildings:before{content:"\e0cc"}.fa-angle-left:before{content:"\f104"}.fa-cart-flatbed-boxes:before,.fa-dolly-flatbed-alt:before{content:"\f475"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-square-w:before{content:"\e285"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-lamp:before{content:"\f4ca"}.fa-airplay:before{content:"\e089"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-shield-quartered:before{content:"\e575"}.fa-slash-forward:before{content:"\2f"}.fa-location-pen:before,.fa-map-marker-edit:before{content:"\f607"}.fa-cloud-moon:before{content:"\f6c3"}.fa-pot-food:before{content:"\e43f"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-print-slash:before{content:"\f686"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-hand-back-point-ribbon:before{content:"\e1a0"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-tire-rugged:before{content:"\f634"}.fa-lightbulb-dollar:before{content:"\f670"}.fa-cowbell:before{content:"\f8b3"}.fa-baht-sign:before{content:"\e0ac"}.fa-corner:before{content:"\e3fe"}.fa-chevron-double-right:before,.fa-chevrons-right:before{content:"\f324"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-inhaler:before{content:"\f5f9"}.fa-handcuffs:before{content:"\e4f8"}.fa-snake:before{content:"\f716"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-note-medical:before{content:"\e200"}.fa-database:before{content:"\f1c0"}.fa-down-left:before{content:"\e16a"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-face-thinking:before{content:"\e39b"}.fa-turn-down-right:before{content:"\e455"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-scanner-keyboard:before{content:"\f489"}.fa-circle-o:before{content:"\e119"}.fa-grid-horizontal:before{content:"\e307"}.fa-comment-alt-dollar:before,.fa-message-dollar:before{content:"\f650"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-columns-3:before{content:"\e361"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-hand-holding-box:before{content:"\f47b"}.fa-input-text:before{content:"\e1bf"}.fa-window-alt:before,.fa-window-flip:before{content:"\f40f"}.fa-align-right:before{content:"\f038"}.fa-scanner-gun:before,.fa-scanner:before{content:"\f488"}.fa-tire:before{content:"\f631"}.fa-engine:before{content:"\e16e"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-caret-circle-right:before,.fa-circle-caret-right:before{content:"\f330"}.fa-wheat:before{content:"\f72d"}.fa-file-spreadsheet:before{content:"\f65b"}.fa-audio-description-slash:before{content:"\e0a8"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-chess-pawn-alt:before,.fa-chess-pawn-piece:before{content:"\f444"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-square-s:before{content:"\e27d"}.fa-barcode-alt:before,.fa-rectangle-barcode:before{content:"\f463"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-unicorn:before{content:"\f727"}.fa-bowling-ball:before{content:"\f436"}.fa-pompebled:before{content:"\e43d"}.fa-brain:before{content:"\f5dc"}.fa-watch-smart:before{content:"\e2cc"}.fa-book-user:before{content:"\f7e7"}.fa-sensor-cloud:before,.fa-sensor-smoke:before{content:"\e02c"}.fa-clapperboard-play:before{content:"\e132"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-circle-4:before{content:"\e0f1"}.fa-gifts:before{content:"\f79c"}.fa-album-collection:before{content:"\f8a0"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-cloud-showers:before{content:"\f73f"}.fa-user-clock:before{content:"\f4fd"}.fa-onion:before{content:"\e427"}.fa-clock-twelve-thirty:before{content:"\e359"}.fa-arrow-down-to-dotted-line:before{content:"\e095"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-rectangle-wide:before{content:"\f2fc"}.fa-comment-arrow-up:before{content:"\e144"}.fa-garlic:before{content:"\e40e"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-tree-decorated:before{content:"\f7dc"}.fa-mask:before{content:"\f6fa"}.fa-calendar-heart:before{content:"\e0d3"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-flower:before{content:"\f7ff"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-starship-freighter:before{content:"\e03a"}.fa-train-tram:before{content:"\e5b4"}.fa-bridge-suspension:before{content:"\e4cd"}.fa-trash-check:before{content:"\e2af"}.fa-user-nurse:before{content:"\f82f"}.fa-boombox:before{content:"\f8a5"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-shield-exclamation:before{content:"\e247"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-grip-dots:before{content:"\e410"}.fa-comment-exclamation:before{content:"\f4af"}.fa-pen-swirl:before{content:"\e214"}.fa-falafel:before{content:"\e40a"}.fa-circle-2:before{content:"\e0ef"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-gramophone:before{content:"\f8bd"}.fa-dice-d12:before{content:"\f6ce"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-arrow-alt-down:before,.fa-down:before{content:"\f354"}.fa-100:before,.fa-hundred-points:before{content:"\e41c"}.fa-paperclip-vertical:before{content:"\e3c2"}.fa-wind-circle-exclamation:before,.fa-wind-warning:before{content:"\f776"}.fa-location-pin-slash:before,.fa-map-marker-slash:before{content:"\f60c"}.fa-face-sad-sweat:before{content:"\e38a"}.fa-bug-slash:before{content:"\e490"}.fa-cupcake:before{content:"\e402"}.fa-light-switch-off:before{content:"\e018"}.fa-toggle-large-off:before{content:"\e5b0"}.fa-pen-fancy-slash:before{content:"\e210"}.fa-truck-container:before{content:"\f4dc"}.fa-boot:before{content:"\f782"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-file-check:before{content:"\f316"}.fa-bone:before{content:"\f5d7"}.fa-cards-blank:before{content:"\e4df"}.fa-circle-3:before{content:"\e0f0"}.fa-bench-tree:before{content:"\e2e7"}.fa-keyboard-brightness-low:before{content:"\e1c1"}.fa-ski-boot-ski:before{content:"\e3cd"}.fa-brain-circuit:before{content:"\e0c6"}.fa-user-injured:before{content:"\f728"}.fa-block-brick-fire:before,.fa-firewall:before{content:"\e3dc"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-face-smile-relaxed:before{content:"\e392"}.fa-comment-times:before,.fa-comment-xmark:before{content:"\f4b5"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-face-nose-steam:before{content:"\e382"}.fa-circle-waveform-lines:before,.fa-waveform-circle:before{content:"\e12d"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-ferris-wheel:before{content:"\e174"}.fa-computer-speaker:before{content:"\f8b2"}.fa-skull-cow:before{content:"\f8de"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-circle-t:before{content:"\e124"}.fa-sack:before{content:"\f81c"}.fa-grid-2:before{content:"\e196"}.fa-camera-cctv:before,.fa-cctv:before{content:"\f8ac"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-horizontal-rule:before{content:"\f86c"}.fa-bed-alt:before,.fa-bed-front:before{content:"\f8f7"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-face-woozy:before{content:"\e3a2"}.fa-cloud-question:before{content:"\e492"}.fa-pineapple:before{content:"\e31f"}.fa-hand-point-left:before{content:"\f0a5"}.fa-gallery-thumbnails:before{content:"\e3aa"}.fa-circle-j:before{content:"\e112"}.fa-eyes:before{content:"\e367"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-file-caret-up:before,.fa-page-caret-up:before{content:"\e42a"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-comet:before{content:"\e003"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-shield-keyhole:before{content:"\e248"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-sliders-v-square:before,.fa-square-sliders-vertical:before{content:"\f3f2"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-comment-middle-alt:before,.fa-message-middle:before{content:"\e1e1"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-square-z:before{content:"\e288"}.fa-comment-alt-text:before,.fa-message-text:before{content:"\e1e6"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}
\ No newline at end of file
diff --git a/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/regular.css b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/regular.css
new file mode 100644
index 000000000..9cee8844b
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/regular.css
@@ -0,0 +1,19 @@
+/*!
+ * Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license (Commercial License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+:root, :host {
+ --fa-style-family-classic: 'Font Awesome 6 Pro';
+ --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Pro'; }
+
+@font-face {
+ font-family: 'Font Awesome 6 Pro';
+ font-style: normal;
+ font-weight: 400;
+ font-display: block;
+ src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
+
+.far,
+.fa-regular {
+ font-weight: 400; }
diff --git a/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/regular.min.css b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/regular.min.css
new file mode 100644
index 000000000..6a80d3846
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/regular.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license (Commercial License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+:host,:root{--fa-style-family-classic:"Font Awesome 6 Pro";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
\ No newline at end of file
diff --git a/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/solid.css b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/solid.css
new file mode 100644
index 000000000..9055021ee
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/solid.css
@@ -0,0 +1,19 @@
+/*!
+ * Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license (Commercial License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+:root, :host {
+ --fa-style-family-classic: 'Font Awesome 6 Pro';
+ --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Pro'; }
+
+@font-face {
+ font-family: 'Font Awesome 6 Pro';
+ font-style: normal;
+ font-weight: 900;
+ font-display: block;
+ src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
+
+.fas,
+.fa-solid {
+ font-weight: 900; }
diff --git a/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/solid.min.css b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/solid.min.css
new file mode 100644
index 000000000..b624bd85c
--- /dev/null
+++ b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/css/solid.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license (Commercial License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+:host,:root{--fa-style-family-classic:"Font Awesome 6 Pro";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}
\ No newline at end of file
diff --git a/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/webfonts/fa-regular-400.ttf b/node_modules/@yalesites-org/component-library-twig/dist/fonts/fontawesome/webfonts/fa-regular-400.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..52ed8a7f8706ae85d3ac0e9ffbf5cca7b31b60e0
GIT binary patch
literal 989124
zcmeFaf1H$K|M&kof6tFqo1G;|P3<
BZQgRo!u?b{dynAIkU6)d_LFp{oeQEasP4G0i&F$XSDLNP1l$S2evWXn84h_ea&DuOk-p?mMSSfjKZ7=9CG4uN1+N`
zcI?n?VB6y2BQC~3<55bKR)U&9)QHorB5@QNY^_S?H6sX7=5-*2v5KSN
zdy}XdiZ}vP71K<}OrcO_SCF__TdB?$ADtIh{_5H<3scgd>&t4kO_HbDT16k)*?bin
z`dZS(U*%O%#m+;u$e+HMKKb!fTGo&G%3u8AKA;K-
zUun~)(2VD$GcOmD=~+9g*|E*Vkg_ae`kEbsoF8&^$?50(B|VYLZ&_%=>RpbHwtw
z`l@uSytN+9+A1!6vu$B|RE<@OcII_&Q+&XfRV{Vr+kSf-gRomiUA!{m5rwM?M6Tn0UlMsXTJprlZ-<;^3Uw|1
zY)32nG-;cZQ_%Ly=hEc*|9ay8ej82tD$u&$xiQE~XTJma_ki3|1LdO4_fN<*Hgf+L!FrtE1z6{;w;Cqxq9WA&UjXRg47lNVYwBb*b0PRUqtbL5Q+aMR9l&*=BCQ8JL>~p$N$ovT~!<7`gP`i
zZ13OsNna(lAo+>E)X_2yapv)TP|hE|uax<_a`|au|GECSUp}kIUF$j|J)zQ~YK~j3
zb(HHVpI4o5k{ZuTiZPXaWb(^!}ksIT8z
z4yyh#jkfs7y^XrRQDqW-I`fpDTxVfgu0Hs-aArFV_ia83Rd|HPjlIOwWx$Liy@e{m`{}*KQsJZRa|Y(W;#-Yw=I%s*KEqr0cb#e5DSy
zSC1ER?a}?H($}iZGS<3muJ5X!k{0)obqqB>Eor>=>(=W8hRZ
z>l8mpi~HAAtyR^*F;_9@BW3+Hl2er?^P|^{N@qKwSwBBtKU<8evu~)R{dZ*hBr&pa
za%ok1uCnEGZKJPBi|an*=hH{MpW?W9Ci6}3^VvYGmd(r6$@XO1MlB^}96NcB*p}nmj`XH2XSO;+
zm9Jbgw&1s?wMsqlT>aU3DWZSNex(npT9prF`=Htg*55k6bsh1R`Xw&k!|A>=tm)^m
z&3au|Xg*T)3&1jbP9j<@)l+Sd2c@x1v;_`d&*X6w$X)JIgCd|TC-&Ck}auKl>u
zu3S68cE$6q*&gM~G)Y%|kTlvXqkj(|>BuXW$X(0t$n;vG(r2V!Z_Dd7*k8#@XjQhv
zk{CX@e#CVhW}d3Kfl7~xf36>5|Cy?mx$@f^_5D>@zilc;woaAL{<0n!2iuIZE;*+l
z>et6KX-EFG%1`Jt)erh+(^SlC9`snMvXT~8vE*K~6{;-!`lx?%y}R^R*OhIbf1dK3
zRq?A-IX!1Bv9iBkk$I9l{S1NmejRF0(^l`nvvsIGXdhiZp7YO^6IFTaOYRwg*#4Nd
z%vCmy#7JoVGIx?5*Zt4dElO0ov+B25&%Msi&1W_*tA6?X_JZeO&Oe*4+LDcxV7~Al
zTuXg9|NL@!cD7CVDrH)&9mdJ!$MtyR@)NoaGn+2TwS}s@H6K@dOtnAj=Z~{G|7q*j
z0V$i%@g?7{Gkad^b2x6ae%+HY_%G3GD1qGXx^nG?Iv1i+R`yVK{8fHJ_erIRE&0BW
z@&~W|bX9kp>z&trJLEi-{$#IJpR)6ijqm&VKK{PRmJyBn(9V^WH0Zib+Nuo+re%>d
z8F#88(UPZptMbz0ejf7D#7_7yzg2u*=h~e05rwK#m!tg`A3rVIhpe)mHezR0+3I|g
zvB<}dnGp5IDZidS+sZGmj9llXaUS)Wh%^1qBz)fl*Gtxh-#_~5Hu|ys_hGH(nZBm@
zCH~^8$Ax*hxb(@{e!6N~wrqZW)&}SH@9frPblaiZV#fV?vYOyEe8l$GZgyV&PR+RZ
z`DOA{jYoo?6iVoPbuIb+wJEj_^VGO!ebl%mRGRvvk(81Brpo54*m0=mpMJZudph^p
zm+gKS=2EdFeWyq>G=`yp?9vt|D$mGVMD#m&~Kem|(v!S*pfANpp0$K0~7=p${)Uz4roCc(U_R&}(l
zllj@P$n}l!R7@$GN2`22$1vmc70?3P5|wf$&k0p`+|SG2^FhVUz1LJ@kWl`*ZDI@J
zSJh&h@s?{z&ynzbn6LW6yjJazeA%b@Nc-a|9ZD0rEbXYej^|=z-=hTBCv8Kuzoo8(
z?<<-upD<*uD*m<~t^K7;t}nTEv#q(l=jAg^_E41M>StP1l}q^TLayy9UB!{KxKARN
z-!e{;M$~*)Dl$ZBgymQj
z%16p2e8iu&O82$Zy^G|NY4?UOS|Mc?#HI)w@JpAv4SLfF67#;>d^Vwd0<}N
zJ+j1vA6GQrPPC+}IplSIy~;PQjOvS&iMRACYm2I}fnP^!ZFvpOZ=3ieTKxTf>Ndnx
zdNkJtUT53LwCwW&-5-g=e4_lbW3FQB^xQK5`lvGWvGeQB)dQX1>RQSqa^Q_nc+N-1W?DAR|D-Aw{Z*Ut6@FUWf3KStQ+4#A3CtA|-=O&jAzis%_
z-k0?F-;iLM;IGg8`jkKXv5WhD^i_3<5;bOM$;*v*mG38Kkod)0e6#C0tGV%m?<2m6
z7XNI_oS&bcozvXB<(FgmY+uZ5dIIL3>eRn`WWMqhKM>J`5BxN0HXcozSfo_jk!8G+
zW3ZGO0(fml=FshaItFn+PQ^H!jx%s3#^WqZz}c9Hb8s%s!z7%K3veMSa1k!XC76s$
zaTzYh6kLHTaWx*nqj&;O;TgPy*YG9Qp($DvEsl1K?hzdr-9LI@bU}1s^oi(`(M8cE
z(WTMlUAlG|*kxvySzYeza#xqxUGDC3ZG?#2G
z`K{!S(&gPMyDjSWe7BdnecWwLx8J&Lk0EBnte72Z6KfYMj_nbP#=6EzV%=hU#(Ku~
zj`fNShz*P#9E-;W$4-u&5*rgcH8wVOT5MeG%-C7639*Y~SH`Z2T^&oru8mz6yFNB8
zc0=s0*zDLnu{p8(Vh_YBWAkG3V~@lZ#2$@37JEFlF!n_3$=Fk|#j)pO%VV#{R>a%MOfr-$3a>#0Z;Trccd~nvZKftyy35ZOz7-pK8)IjWye9?OLz4pth*CeQn3u&b6hrJ!<>Z
z_NzU(_O#k{b#3Yf)*Vqdr|$l`hwFZ-+fw&)-7lMZZ900>$W5a+owVt~O;2rlXVa>r
znY5Bl(oMEW79}Ie;^Z#L-I5)WyC*v)_ege19+ZqHha~@zJS;gPc}j9j^3>$mqe
z$%)Bxk{2YeP9~B!CT~hkPu`roC3$P|_T;SO-N}2B_a^5gA4<+k&QCs*d_MV6@{{C-
zWOcGOS(n_D{4V)RvLTsCHYS^rf26!rAQes(q}rs~rFKq5QpKr`sXbDiQe9Iesj^gg
zs(WhB)ZVFmQ~Re5N*$IuJT)RUDs_D7q}15dS*ar>NHx2I;N?n>RAx+isS>b}&2
zsb^A)Q_rPdNWGR?mHH^PF7;LF>(n=?4XN)^TT+dwrqtHdw$vYKBkiTb=}zgr()*4oW+
z(l4i9NxzzYExjzgJpFpQD*aaa?es_K&(dqt>(jra|ETX!->H7@`abph)E`toqW+Zn
zQ|r&Jzr6nH`fKa2tG}uKmin3XbL%VXAFY3({*C>ffnfRsV7QC-ocZtLrz_|6HH0
zZ>Zm1|9gYc;5HOCbZsbY=+-d2;h2UK8b&uvZTM$HWy8FNwGFim-(`ZC9+{q*-kCm`
zeKY%I;+aD-voa56=4T$yJeOILS)O?(^FijLOfu7$+1l8qv0dXqjfXVOZG5Ql;l^hg
zS2ljo_)U}5)T?Ps)8$Q9G)-%o-ZZ1>j;4E>o@si%>D8upnm%p%ylF#IO>?k0)EsUu
zXzts5Q1gS$k2b&7ysUXu^C!*K&2`P2n!j)6m)3Y@b@~5zHeL1q&Zhqh&n8p{sw36A
zS9h)+R()Lc=;|A)Z?2wEeFx8`HPst84&FFwly4yZelXVcuedHQUs`*l+v
zo=wN_Y&v<TZvuT`vHl3TS;MsJ2
z-r00pa%S=_|7@C@tmN7BNOEzqD!C^41<$4$|7`j`ne@-5<`j4~1$j2@lq&SkruOP=
zit=nK_0OgrsotsnsRL7So=rnjBY8HRkUAwbE_G?@y3`HoY?_rjo93pTQfJfisimo^
z)Q7pVX??0X^`knQnt3+;mPXo6htj*IyQKT32c+XXn~vhybPUg?i+DC&(dulPnRhll
zn66Aeo?h~ov*}HqP4A`G@ND`fy)m7vM}5coXnk*znN##
z1OD0cdi|T~Z2FLA)4%+)Dao^GTmA3#J9sv=@z17x8b&l6$Fu2Vo=sQtY?|NjMZ!Z+fq3ZPS-cHBEK?*|ZbS
zrbC+_Zho9+)AHsInm=o<;o0fG45p>wkHubqGCyruI`oqz27L+8z%zwi8A=S`jKI@j{ePYv1F
zxtc$}B^x^btMk{L*A>qPiszBa;)nV3A@ZPfy!Zife=+aai|W2#aA=!pT$#)FD$;G_}t=iiYH1A)6Oa$?^~xA
zkK^@eWNh)Ne%gt=I-&S@{v1V)BgYmWQ#`VGMDbCyhZi5opTmleC>~lou()?IztPU?
zvf>zjb}KF|?pj=29HCuQ+_pGe9EkAMJn{$mJ+eKrHIk(DEBPhzbL6MU50MR#^^q?l
zUqse0?L+cGWO?Kj>QadsSx6oykCFw1V-uMhc_4CMgx}kb%pkWC)&Iy%w62d_$Ddb4
zE{|Lmxim64a!G{Wm5*E$sfb({xgatrGBz?=#XTl6GIC_(kjO!i{UdutN+Mk&(a0W=
z4w2m=Z6Z5Gf)O)xkV2Y-CuNH(VU`ti|#49yJ&XNT}5{m%_`yy7Tr;F
zd(n)dTZ?Wfy1D44q8p2DD7wDrx}s}~5=B=RT~#!t=<=dVizXLcQgm_Ag+=o34De6U
zc}1reomw=e=oH!~7oAizx`?w?bV8B(PCwtC99*!(M4m
zwO2Y<@^6i^*?!3R&Ux4E=&Wlsn+|>-qtod
zB5mT|N%my>T*kWCj@q4^{dqmiUhj->_I3tYKQeYF`#Z)S#5f%od#&}UwZ=B>CDt0J
zke=i>aC?|F#vWn?EZ0o)ZPHM)(YlW99nTUMa}37X
zC)h(&I|o>gSv~EMdcObq(|$KU&E^jM|NqB)p3f5&OB|DH*yMSX{bM%sn!An<7G@Kk
zi`G(W8GrJ50)O(%v0VPDm4D2~Ozs0}C(>Rl`D1P~xr@w`^%boJ<{8>HpUkFdwHBF|
znOBN!#mu+N)yg`7CFUq=lzFm5F}uo@$zB_;6P^#*Kf0`OfA(6`Dzpkj&B5|h|1tB%
z&pelT19CZRnZcAl|509(bgEgw5;evb{5g?KV2PMdu0PT`^H{<;G)EYWY7Udq=AEr0
z8)N=-J=@?I|9gMTsV#m+O`a_yHb|}wHG+_cQtvG!LH?aTbN?NuJfB2y_$Lop`KAq}@7|KwN?${GO&=Y%MZ}j57meB|MpfCDi
zU+jne7=VG;AA_y??A`6I_7(P(&Na?#=TYY|=W%C|^R%YXO%57%@9ZqO}s+qoUx61R`r*X{2f
z>>l9`bBDXfxW~H3xhJ|Oxu?0~+|%9h?pf{x_iXn(canR7Tj5^f-s;YB?{e>P?{gn=
zA9gF3;2g>wf2Mb{pI#_jmUXcZUbh@J!G0
zY|rsr&+`J_Zr<)*C$F>D#fy1mUb)xZ>*MwH`gw!BA>Kc{!@R@2BfR6i6TQ*i7;mh1
zrZ?W3=$-3TcvHM--c8>9-a_vQ?^$oL_q_Llx5RtVd)<4(tMcCT-tyk@-t$&^tGxHU
z)!sMWMz6-(;{D?N9xwudz)pd-fp&qSKye@z*e7s!V0hrtz}taUf%gL+1Xc$=415&$
zIIuRbF0ef~EO=z_+~CsS^5EyeO~LPi-v_q_{|N0A>KG~y?HTG3>K*D68WcJrbZlr;
zXkut;=%&yEp$9{cg;s>V4qM@}@Lu6Q;RC}%!bgOMhtCgR5MCAjIow##18SG<(^Ib&
zdoOAiBKIQ(8Rv5l^>iP}=gv}erJm_iLLKi@N6j^(l=z
zj{1zolks^;<9&)a4p?K9?camf&%nbYWWrZyI%`#z|6VX`D2bXRY9*sCQ|cdMev0cx+>ryEPu$
z*X3S~x0=en2p-$jh4UhK&r=`McrQ>N*LW{dU)8w7sO-PsupeDkXxw9{bsFzk>L!i1
z80hL~WRAMF(}Xw=U3b>V9ChuW331-LcG3hmw_Ul0gm5GEElqGM^=(b44^U!hT<*CN
zTjQQhWlX^vP2FANF?I>-5Zp_s-8Ig4RPH^&VLMB>_k_T9>U|pLJu26h;IMxsKWLm9
z>W>;{1NCQ(Q%n6ta7c
zrCdKk;BcTD*P`I|r*iEHUImr&DtKp7xu*o@TPph@xI9O?tb(-=U8kHjax#EYC;cExetV}
z#Fso0W*xC^n&9VD&Xo`n?WqZJY+`$BLOW4=X+ndj12jR-b!?!<<@m(7z65s%HLh`g
zrw-P*67ytDKw_Sv2^3MsXadrwQ#FAAb*v`PmU@~dAY(92eO<)!E22FtH
zL+mb%dn=V^i4b~>D)UFY-KldlVXmJT_lV$doy8u|1f`Fa8b`)(p2i(cov)E!`^Fy8
zcoubm#^V}_$yg8%RH>VI4)t-3Cu?w_#&fAW;{=ZdVoz#hZO5L{D4Y8yMna>g(pK3Q
zGGEIz?zhy}HS*7<#a3w4+J1*N2^~v)R}+$aDMQ?Yshc$+83UdVLZ~JqJl*u>}d7Ub|S0ncrW%D%NoBXPGKaE#I-B;sn
z1bT2D1h0z9H7a;-QMpD1?+xls8hMTG!F?qJIQ~64YLs0;Cxkcj;eQ~eLR)*RC6wH3YBA2J(TuXs`wp4dpeb4SS{l=
zlRBDQM*B|c4dh1J&rxqCx6popI)mIs`$g&<|4!Ygzb?h1T~+KPib$VuGg5qP}xSo{FTaf3TBd8OMarA
zqNX+SgLd99d-9>>}#lV$-_)fQ0Ebjk3Egb
zF%|49s6T6Lj(Z))SFo?7a(p-SqRn-&iE%d_&ArC{ZsME?HrMH$javml*KS}OW+51V(jUam}$+=2$
zOq|E5g@kkDFm{r2Ab8`c#Ttj}KgszJ+y&HK3FpLFLhYdO-lMWVg7-d^^CURjBT4Q>
z!JS3rTnloKo#gx_52F1FHLj5}ImvlU4q^J2)PHE)`>2O$pgirxsiS3nU}mt<1V63*SJqpIcI{)HITeTqvqvS+Qi+NdKQblW@#j
znTNZ`-Lz%wrT;|kU6c1}oOh{nG_K4E*KP74`pBGA60Tjh6IIp+aZjW^LY|==r7kAV
z)9y*FA|KK2MO{Nap?whb3$lTBoLa3>YpjMg$6nq;CF?Z7<r{7*JC(YpMqaN|J;>hl|0lIK*_ZaU)c$0D+BZ=TBnQ#v
zx=F>!VYIn+Qip3?u9wtMGJ@%|sUr!;*nNO{yaqP)1j4a&E2-Q=DUQAD@sy0|S+o~Y
zr9W)D`waCuay@OXmDCMnI_)LY+cn-Q>P(Hdk~)j9E$&k4-5Pn$kh(|X^1M#nt8ryK
zxz7c6Idv|1koN1;rwHqJtEh`L?h5L28gC3$+Vlc_-l0l;tjB$iDrML%_XFyOIer;!6HE8nu4b)84>z@vSCY)2^ibNVd@C9!PQB3NG_fO&Vo4)85MT
z@2T4~h*Ezee=z+AAPvI#cYmgGZqgoYo>%D*3Dd5p?n*k*&QQCMy=ebV?MwFK8W!IH
zWFYM})HpeUb|H0`#@mg06dA$v4%Cqvk83i03^|qQ9jTKvUU%w6QNfco&d@0PHrmANN4;I6?3uJ@F@0a^ofSxAZcNvX|2)-r>~OHOj7{P2_bp{U+fV<_)F3t?@WF>GufNq$l&UhI~f*
zSn67h_dE3)vYzQDP&blaXpg2Q3D=J|0jLMze0m)JdX9TN*NMlmtdEktX>)F!PDapPOdUy1q5TH+RE@`dR6mZK&GgmO%ZRKEwzvLjjrRrh
zT8+!T)brdB+~cS>lAGxNCG}=<3+=C{Gc|IC*FQiwmmd3EU#amnP#@KJ-%?-Dc-7R`
z3EL>|P3k$$^)k-2)OR%ACh97U$GutqA^Dg--%~%)ct2AAMOcsb6IJ38?`Nu%C-NFm
zFW1E5-mFiOG;PrajaN_IMz%9u(l~!Ya4B^M&|omViRx-R`Zly7g-rjA+EwHIK`qsI
zQm&gu)@lRiu3&S3_2N*lEp9USN{YjkZUsDg!$R5wI&zV_FucO{Y*p^^F>cfO>4IWJ8+RZ#p
z`%vl=Puuf?PIBLkauWvY%=c=uIu3G)DOu=v?oy4kRR54vlPI<6PPt-^PbDp}nc>
zivaeuk#o}c3?CKrqAn)fqans>WE+LhiBz_;@f+Hl0_e^9wDnx-**2lYlWo$qJ4u$s6pn`Y1sQzh0NwA)bcB=^u}
zUz_eHY-gDB-}JmDyeF08-SjHcdrvO&sU2w1wl`^eOEFsO*2!=d?LTO<$4?w2z?H
zXu`)(+16&RvGB3fkVf8*G_y^Dbsx1rqtbVx-IxATs2ndL%rR}|m^X9HggLIwa{VZ6
z&Rg^2|+u6+a6%3?q(#UINGxtaH
z_e>u|{ekSDeGrV)H3|f3VbnVcgtkyU1wubl0}6y{s9^;{jnthK2zH{jQ6Siv+E#&J
zlv=2O+nu_b0(_Qk)Jt9z@_R6&zKa6haB8Unp&zI*1w!vr%M{=4~fzT?d#AW|N
zY3iN|gfi3~3WPqV?xjHZO6uMUglAEEDG)w|+FJqZTWTK#0uNL7QNWcp^i{xXruI`H
zd=GVBh0K>xzn=o(YpMMe2wzAYq>yK8M*V>bgpQ{kqChA?9io6O!^A
zM<@_HhkCR^+oNcY;`%v_DshjeeI4}#1;W=*PgEduI(4i9;ghIR<}~_WL_JdhyMj7F
z0ZZoMYz3_Ms1p?kUqzL6oWnK$EA?Cjg0hazQ^5L!I!OU*4ORMoKA$rbP%luxlJzEI
zbRpA0mAWe!^CRlT3fQt1E>ZByF4V~i@O_!V*LeYfC#h2u2<}0ZK6BrMr%`1-uH`+?
zR;rB4b$s3biF&;Po~ZauqyJIVI~52@+wW4qeS>ca}S
z5@Ufv_Nl@91OWv$^)ZFEAE(Vd?<}WE`GxF@?6s#A2)<2yMgg7!M*Xu21izv_uRuW7
z$%_g&k5FG$pg`8?QUwZR{k)<;!Cur?6)4!B`kDd-gQ>485GbcsDdcOF2Jc}6@O`Dh
zdl>;?@t5|!%{_QG^&JI*lK!p&?k-em-%9ptcdG2A_xW0L8udd3+-=m46$tD~m9?^l
z{<6Pi4e_iCbfA8wKtRrewF-o8q<*15a6DDU?1bh!-G)OznqW^Q$%M}RUOXc}O5aJ%>
z{h@$@VbrS?C^(XuP$2LN^=1VECsJ=$fcNA^!)yh@rPTWra2}<~c=29A*$>cuz_;hp
zp6lB(?hmtVGpX|wa7R+P#|YdF)CCHJxxN~tKeCs(1{tkTF`sIG0joe4pi6
zXHyp|5SFp!UM6w~8Vy{RMBb|!4X-KW*^$w}bw=RsMdf)xvG88J<@J?km(11;Si|nQjU=9Ggr`fdZ+g
zOaXUKYPkZT^Qm&p_W_}6s67?(p2*<)K>^?ylj*0BXR`+13kupkoc7^dZ=CbY5ekH4
zY=$WixQ@#6h#<)M$qZK@Bx8A$0wJk$gaV-o>TwGBorRG(PodUZM%v1Iq=KWV(vA!C
zUdUWXoA*c|sq-QQ`1uVZbEyI@*Gc9w1;W2lFION`Nu8oVXg>7{1q!&fGgm3pzQ{=b
zdB%ph|1#2_>)3bc>vVY0WzneBPGZb)tq~5JScrx`K1-w$KjP(M}
z@1s-=_*})vEL4D>`7!t&S%53!{G>viX_=>KKg}_5soXR2KDwYARmN@!{X0=#Qs_7@
z(|(!hZ&H^k)EStOHS`M8rT*6xaMw^}-M_(f*#}Za&PkcO6$%7-uJFCMpw3CY7dMEG
zvz9i`F+N{1GM_8p$=u2{&oMqXGcr88i2Pp3$b6-c-=P~Bo>2rL8T*Y2grselFwsqw=gE^32m{`LW1KoC5D%JKxkJ*hlj2!h;C
zjkW?o&QYVIK#*hG$gw5}az8b4EC>Sgs38S{qo_M65aj;ja|Qt}*JdO4FF~+BmHU?<
zIFP!V0>J^)-4zJ-pmtOsxEFN~1%li!jZp;x%~a`6SH?MpD)q%^OF1dugZ3FzDZ^(y
z!7fyZ#eL0ZEJowr3ItE3_EjJ#_3x*U=QBp*V1@iX#b_L&Ku|QHkk6PJjn^s=_>y{~
zLY`?GjkhS^+)lks0XI#ZsgP$oM&m36+>@#IDB!N5-m5@xDs_$m?n>(Y3i+&y!Dll9
zLQhd;4(4&64yVpnz?JcNOo8D0)F%`O$e2B;Kwu43%0I<*$n&9bkph7es81^pko3h0
z;0WsT3b-jM_ZmU?aq5c-gt>PcUs52@NL{W#co>y?ioiRX`lbS&%*AR2yq%~YDiB^k
z<(?u4+SHE~C>TMNcJrPg6rp~ifOi%3Qw3a)x={i5dTOl#j3U!>IJlv^V?q543;q?H_4#k1HRxzv(A!Z{>Iqb$)JbL%WS{??Rien*r9dwSxlu
ze37x0`-mWLJGDfCU^%tB0zuKe6tK^r9-=@nOdYI1SmGV3K$!bwEB6Bdf4609$aTv0jS1mW>i?g0Xe{oBg(ksvI}bA-U=IkWY61;Rlp*Cm1V7WG60
z!Z%Y#D_|ElF&v5}Wsn1Yz;#nL}W0rcP5Jw3vFM0wHPp423-ZG`7xE!0tumIYVIYM}0tnkkt8*
z0(Ou(Pl1rk^J5Bxr2Wq*5IT*@{Z0^+w!f@EQ0lExAS`1k{o!k+#dW$>=IJfgD{E?n
z0#+0C9R=*R)OQuI>Z$K3V9VNBsett%RRi}0+T4Q#!O7H(3cdboX>;F&rH|h!5R&!t
zg95IMpR6<4N3s^SC=fV+`m+Kq&)2QLDC8NqvGrF4+#9Go9|!^s)U*PwMU{5fbC1i~
z+^Rr8#^W~yLXT6oD}aU6KNJXTg0YQrO%Uiwy;1>}>wVj`3WPZS+c=K|;P`LjJQ9RP
zQ14P86sO*;KzIlBJ_W+BP&wBG0rqvZ1w-ImX*K*94&_sV^zy_aMeL&Lcrk
z;_-|nu(|iQeWrlLaoDz20lPo-a|NtMD(8s6=APKbIU=ynrPe55ok8V%5!l>M+v*gs
zx#zaYxbU2``Tk%1nZ}>hfU$s|;gbDW!93nO*gT(|IUM&wGM(p7giIvs*xvx59jIjc
zqiU@nxP^V3PB@2r{->Uk7fb?n8cLYghOebtNB$Ho1b@_!p|PE
zojusby?XO&DWid2Y*Vjh{(sbLW8VUx-*o<0)=cX^4j4e60SkeFtaJZT-~g6AU_CHs
z8E_!$Ke!_h9|9ag22TTq*uX!ihq1n)j4_n`7{(aGHUq;8fumU82)5zq8T{woS>~9z
zz;Ov+6ze{ooIp-o1e{b3oZJA6VST5vuG46oK8RoKVLQ)U0gN9HoVA{}RY`tLr#-)-
z6X(}*=JG2!toQt({K^e|D(F)&n_sCJ$FI-y=C2D_@8whZ)tIIH3XILKzli#73RM>hF`Z~{xV)KWBT%*qzZU_67a?XplUK%
z0lYbbtOwp=`L~wwss!*p(>`FF)rG)^?SVDDflp|EGL5kBpEAy8
ztAVvsfX`Xx%XR!p&obaEmixM#Fzz>#f%UBWU(^jO|7|~R#{v8-=pcT!vLmVEX9!u>
zCi;I@4Sc@_*t{6{iE(}|AXUJxqxkueA*6x7TOP;X11<%&783ezqwjAsf$dEHeKhb#
zPhbaMpHU8jpFcIs=`d_=e}}k3`B7D#`+-p~f&mzzQW$a{QP7*Lhq2RC!n3Z;8vbA9
z<6yL_f>9KQ5h;XG%yV>?IWTsufYE*;jNKA2I!uDG`!pCGD`D(GyVC*~omnP27e*Jx
z>ADO?$qX2!<6v~_2O}1TQPvSgIqNQG9o<*J*mEU}9_wNBq`f!W){F6akAcx=0E~Si
zF#57wzfmyu9Ry=P*4=*yi~+nJunfjPwrBqYj00Hrpq?-er2j#z<6yQm&a^|w;L$J+
zW!jK(82>1QaTwzrHUq}tWav^DNAP+W^M)m1961HX@QE;vV*C+3VH_PGYhjFB0^^v4
zFpjN)aoi#pqo%?*o<7Gn!#H6Lj1yUQH1khd3FBnuox<2-w!;|P0At)Z7^gG+%;ALP
z$1i{}f$cb(Oq>bhoJxL`b}@|e*q`%R=LPh?a1M-$L8KbS#pN(AVcukp&t>$T!uqdZ
zyRT%~t0uyj+M6FO?g!)QLb3+NHB3v8>zFF9g*OfD2%o`13ew;Aw
zBb)g$(*T3}*?5fQA0G*0VMiEGl*4#(JdCFn!&tNg#?#DuW+`K%en=k)(#EsS;3V0_I!tY;hlMc)lf`!-If
z)k(-#hK(B5QOoO1jQiab7~eDQ=FKpESOVk6=`em82V=`17(Wkz@eAYs%6PxBj#L3z
z03*GUzq?@B25RF-7|jB0x!>HDfbrXK7~9KX{5~7Tj=3&p85#;ROnayHqyc7IUKi3X+yaw(*W7sq%pxjZYt7=tFn5WQwJ>+B
zhPm4Sn7cDxM;qoI6)-!EhuOIjW^^6Qu9IMvmXjpRZfp-p5AA(M!tA>qWZ$YhxRh{HTA3iI#^n0)Othca)NO}4}2UNw(mdygIt
zlY7)WHUg8co8~B%IiBs~>!x|)D43(!zR}D-X&S#^zYyjr?9Z5GFvl{^X#-%6!@Ow-VT|d_yLl$eTPk4QO8*&b<85sB?fnR2@%T4q35NegftrBVjIJj0Nn|
zqjUHV7qI=04}rOmehV4ni8`21(*LPyn2YH9G<~053-g%;FrOU{b1`E)*Bj>ZjQ{+4
zm@mwPxnww53iG9ogmGUUK&Y=Qg8AA|Lce9pU@m9+>-`AhyiWf&80QVv_2zV#Z?V1=
z(_p?Ehxy(dn5%k{2AJ_^T9EB9KVJg#i%OVZ()TNt
z|C(jL83c1Z7&ST=2kY5Y98
zSP5%1W1Un=czyC>Sf^CL8Z!XasUTIb#wK8$HXPQt05P5GP_iA?nJZw8p9br!
zA+RRUf5H-2XS0nHS$-n(&+Q58yg{%gO@ej)LRc5XVO_}h7qZ_Kb6{OWzl+wvy2OSx
zxf0f8rLZnqQ3+r0edp-T8O^0kj(OVq5N93u|^2tb3NhniJ*6n-;)&faM+>39FKI%;)uja#)X6!&=BTJ~0#4Q#Pzc
zi(x%82iD>tu%6ov>xD(IUZmg4EceP(Sg$b_?|ZG~EcZqoAB~j4T4BR_X8^2s6R`N&
zXnjEakTLn1Xnooq*4losKCgiFCF@wX2G-ZZVSU508^Dk5tcF#+6xPN`uxhGc)zaP+
zfb|{q`#G?Fn8rs>qxq(`;Ml0#snDq*GB&j#i-M)>$*0j%Z<
zSX&3d+QwLX4{ZHLpY5#U_l2hixwAuXH=|anCf^?r_*1U|N=<>p0lEZHC>U4tB>uu=gm1&HGe4O6@|w
zu9IPxBw&|T!0tw$@`~>=_Q8xDXWAi^un!$YX2Sl*G}wnNhJE;I*hjR7
zJ&eA?#=}06_J{$nkDdd2WHanzm%u)$C+w4l!ak)M_Ng6VkDUbjG{zXmywmA-2K&H!
zOnW@@&tlpH)^j%dF>wYTC2Z#-ge2@q<6vLFIxbiQn`_;!p#Q~NU{5ZDed!q3m$7}9
z(|^iH*jLd1O8Q*Ix~^Ic`=7kNhHblc671{PrfD-_-^h5=C&Rv({k?S%>=_GS-_ADP
z(H{0p`p#szS<_(OwG{U3-mveEkj1d?rOrvfzMuXNFz$n;gnf8uH0+0IS5oIyz@Fb8
z_9HW4KN^7j7~B0A%RWxOr&hv#n)N+15%#mAU@x9d>R>-V6!r`Bd6B*^vF?`_!CqPk
z`&GbxjcLo+zvWY4zdi%@8;EhiUIlg1vGj>{ZpU-(L-THT(bJ
zDA*rW!Ty-B*Gz-`3FCZ9{fuo{%l3WF`oCa%zAT5mj&1&mWxm=1`|EYE*UyH%fn}>1
zV@<`xugx4dZAZZ=WSMrW
z;q1Hy4*z{HXBTSw6>vIKz}cPl9&tFGmcfZKX0#4Ymj!UTGFHhnIHg12bYtw;6gXu|
z;FL3N560{nfV1}`IK4{Y^d3r@;q227PG834`!{F50yzDt{gZG877~^_fUyP*hjSo(
z4q5~!&KQT#9=sXOkTGx$>ka2{ws|PqGmPbrq|Z@|F=9QOk<;NEL%-wLrsG-932e*g
zD4dg)!5LEy=hSg<#x90)S~Z+;3*ekl2#2o;&RL8zVLY6PL*bk=1I~E^;7kg@IiL9#
z42Q#eJEx)&&P5e)E@s`AOoTIe3!KXs`|=@#{o=iyb5$vvsZ-%x%@~O|oaz>Ct=8u8%$ZR+Z80*m)a31IN!Xbq1d!iD~lO5qa
zH4V<91~`1rJs}Fy4Cu;H;$2`)tPtb#PX1hV#)VI3Lr0&0090u&z&;w>ALh^9Y^J{wraJH7i*+%$&%Gu5`zpsGv$3!?gR)Zhm
zfNRF#S_!!J61YwUTz5QNZzkN}Xt?14aCeHrZNt36NpRcsgS&G%Tt5GBBkjpr@MCvy
zcja~aI=CH}&({;T;}*Dk@VXPrbnXc^O5ZN@>uQr~xFt+4odUNT%f}YOEgubc&$)1W
z41wFTH{89}!0kn!-mBs6vkY!O>b}hHKLhT-;cySAfP3InxChfOz7+0YrVk;!mvRpu
zNfyB!x)SaYEITYp8sHwux`xw##3Z;!(`RHA++*3^<9fm!wFT}8)8U@D0Pg5!xF;=v
zdotsn!u(TcpBjfdmi3&LgnK&E&R{#wm_g_}emq>hH*zPmhkG{tCiaGV4t>sL9p}w~
zd;UbY7e?S#OoMyTcDR?&XENJx={T|$?q!?dUOolx6t-i^I=ELXf_o+FzKZd#YJfX+
zF=4&`91i#DQo=IV%!HfZ^>u>?%U{0`?li`~VGP_G1B7L6ngMq@%iX*H?kz*%-a3HL
zkM~{fZFAt>Q4V)zPqG^BtR-;oWX!uj*oN8b;odzO?mY!$JluO(b`Imtsf2qU?fY2f
z{)uoO7zuZ7Az_;yWc?2fC9Lz|3b>WS;m#xTnKqyC`M$}0gn0{wkU4N4EhLNKK1QF%
zmco6!Cz(VR!ClB$Pp}^DRrkpTxQpofGw2zMR*zDmOVW-{FM4RANGj&Dc8tuBYVk?q?^|Jr_V>w3c7#CkU^
zf&1M|xZktR9}4*K7pDIdB{Se|VgG(+oL}hwt4*eo2DnL*X8Y2tr+zNn29{}<12@C#
z#wBo@SWgq%+Qhg`>)|$!Ce?7a(r@czxZ5IRDcs+tz};Q|_jl?aRd9E#hX-Ozf@jWw
zXRUze41(tlfalp{CA`3Nc){)P`1^LRpb8$}lX-1B5|%4unRdKxmmm%BcAiKUlFjgn
z$_cL{0a6LCxF5V-#>3lnHoW#*;O)jT9T=}8;O!BC*C`G!Iuc%&nS`;r(ywG0yi&$5
zWj)>4hBC%1TLh2yuwHlC-50~_F%2G{(|CK$fVX#V!kE3-*51tPGX>s0jN6xO=(`49
zKgQUX?e0&%{?+gXu*^Wl+rI+d0W;wZ>PeV3XfwP68RHrC!uwyey$fL6
zRh2(}?sp#F_q<=3ye63>lXqwGnzTvV6iOTDD?ou3ssyQ0ph$rV6;YxTDTo-{f>o;o
zc~}*-VwJ*H4KAyw$X2ad*Q!}%-KwZvm(}Xx@c*3qoo_OIu#3CDf7APY-0yv!d(OG%
zoO|w_GnOK}Na~qr+tQT?cwRP+fctX9jgBHbN9x%q>zu8mu2@Iv%0W_B)sVV+nA9~J
z;Ld>W;8p5*I}nbLdVU@O?O%(u7g(fTI7aG4XzxV_NL`0=*Y6_rV$^ZTW>PmG?dv$a
zOzP_ok$Ne@Wu2tH;TBRa-$Uv~l=&u<{U+qS;s~i%BJEYfq+X5un>Uhr4Zgn_WnTL%
zsaw#e>$Z`4J>qXzN$S=Oq`n1tZ%mPT6VgKlP`7O*^{t}_FOYgO>VF&J-j4RY1L0P@
zPh?1a=gXwthB|JWA@z3Tf44>I9k-CW1Lf_&w>uH;IzZ}sc9HttEu`Mlig1k7_iZB;
z^0Rtx4XN+nPU_zw|9v5ZeWc!hnA8uTu3f0-gO8E=;S{O6pCR?5NdExhrU+q*)CX@N
z^<(QueF$kDK1%8%$n)_$seAB!&tXzOv4_-8qD`ONOX_2Y`!vb{-%&rCA$4zv)X(Ah
zbIAAjE>b_g6yX@D`z8^Nllp~eQoneF)F;Of4w3rQPErpb-+}$4erXG-Uq(N_j5d7*
zd7ei6SGSV-4;x5*26?_VPU^Gx{_H+dzp}WuTS)V*gQPx(_it|@^?AVIc|8Bq
zHc}5F?ZMroeh2a2Mf`VPCiQzSk$Px5sozH(KbR);S3%jx>LmAoV5G_n&u@
z`lodWhe$o{MR<NyYj&O>|7KSQUCZH>Xj9p&BlFv82E
z-Gt|D!w4^s_EwbnHk5J8O48n*A?+P#%dHl|A<`yL-aEZ;qa7seHuT|kq{{-dzY>c#jL0LZ^!L~lM^XQoeur~i;g-4%?yG~OgJ0-vFTmAw1a75h
zL)R4P^VT99BfVge-h(oFQC43Qw)<=%eP9b*RFQZ79?};~lRlh5m?3>3+PP>a>5E$t
zj+4Fw&u5^{Gm+*j+?V0L9PyxW{hUc0;kBLgm7C#mi09QCNne9H#--Dbg<)Bz?o(a8+
z={Jv%{JsQb>BNPo{3Z0|Wh
z`g>9K`w;g&~k_h(4|I|R_De&0sY@9!i11G`AyH3~PQyGh@@o%D|&{YQ_J{s7uC
zg>oK5+(R1>o`q}v4$>b%{zqp>-?NSMPiUlnav$lBrAYrY;y;7(KD(9ly`!Xm4rw1p
zS)XqueV>=~FQA>U5$I1mhAr;Xq(6yrpF+N;j*$*~f&QfzN&m`T(x+b_{pro5e-&w-
zL7D%!pY*TiNq=^n^l$7W{aYJJ|MuOaKacbW2jM1$^1p|CphNwK$n&Fhr2iOkN6_Y<
zyiEGfQ0L5Jr2orN(tnP&zMx^tz%8WzatrB4HA%DCG1T+#Xg_QN`hOt)
zKVzi-5#{|UMf&lzr2l!8^uHkfztHxV@%&fBmqMh!vKHIfVhGb@h?mIl43mNR+wdO8
z7L_qF)V8yk{IIV=3x9>lreZ?IU9p{TY3c
zjI)t$MIKw^P|j+Lj5Q-xLDD&-m
z;M#YXjEPNTyc6Z!Hc7_qP1v@$pNu>3yaVxfqQ7^g5MCnVy?B1#L2MCx4%_=s#(jvt
ze=8XuMBhKO5&`vm7;XH>AQ>M;{s)d?TLU@%$ti2a*0eXzzCqlW}Ml
zwqoxl;|Hw>DDUtTjxF6o#*dGXaRlFfinyP?NXE||CgWc^vDJK(j2BQYWMSi%Tgmu0
z|1@*V~k=eF^%=Ya#x?nSzof$H_PdO!zFA7vlY*U1Y99zV)bg!!Vi9
zY0cN8jhCX_@l9l2hVO5fCKL2#Ua^wQO&iI)67^qoH$XO`DPS8V<+Fge}{=ehZm5
zAZ$gO-g21Cn-I4R?bwF8-a13(%`cPr_U&Zeih3pvk@>F8WZrg!%-fOv-6&%R(%*%2
z@7+n}Jt*gWsQ+FK;TV~JSA&3h??buwZ^JgzaWZ$|eb+N&ehBGzuO#!MDE9%h??IIN
zF{F7YhV2O{G9Q^B^HHSvIP!cP^?l+fnV%vuAKOairw@_&nU~1ii@tph?Rb1InV%mf
zb06+sm?rayDKhu(ftxPMdkXIdP~Ml&mM@`(ZCBVS1)i#B4*;d40h;3aHfPm$%f$WqsmrH9Be){$jSkY#(x
z3hXBpF*-BRJV`ODAWHk(u1v;>@
zFT!>A09nmj$ZBaNE4P%aR@BjUkgSdxglEa>L>szMULJ9UO=R_qkkvay*1$fpihIeL
zk9-RdKXi<&g)?L=x`nL8D02jLEZIQTnYb_Aj({@G>LhC!(k{Q7tWlJAHrlh|2wAI!
z$y$waSED^^UMB0@on)OqO4iyCSr;Jxg$NhL$XeG&)_U~s;^Sm(m>}zQNcVc&FGX47
zd&s)%IkMico2<*xj*ZWd^+uF^1(CI>iL5I%vaZ5?^GdR=*+JH|(_~$THs3Ht*4CqB
zy=5<1H*P>c{7q=bTT^6VuCd-$L)I-JgvZEwN1m*Aj*|5*h5
zx*dqyfqL)UO4eOy>w7jL93t!PhsnApL)QB=vL`tdFCdJtznE8w>Pe
zJ%;Dcpq$Sles3#TpTqreFIlkJSo`q&1?2nUcCtV-*8W?_dJ_G5>Ht}Pzl*FdZ6fQ-
zd&&9=>Y6@C)>kuRL9eo&L3#f;N!Hg;_Sat^>l-T(ULxz8NcXL0$$AcXzrBO3=MR&0
z@L{sPgEGH|`=PaDeSaHSn3Jp@qMXB<$@Lx)*tcwCw%+M3uJ*_te5eJwcE(9+fH@{?+qD*V`MiXKD&eLCe+(JOm>TgaER>I7{WfXK|?m?6dQAj-H9|^
zXhRpu?A}B6Jk*iLz3>d#Jt(Jl3)y|6WcQ=&0YaD|yEsku;BK<#KTP%lgdwCKM%lxM
z$zFJr>_sn=y%^6+QV2+YMjyh9WH0lQ4gJVI8{b#pz8ZPfJVy4|ak9_LlYKt!7ib9h
ze$h&@*KH$v{a&&!-bnT(c;0ZB?AIM3`_dY+$D7E$YzNtIK)%b@k-ZUhyb*D48bNr0
z>?@|pzH%wqS8XNxYV=_<>c19gwrnK(x-qh^KS1`@O=Q0X>2Dk)`=(a1x8eP*NOSWr
z!f~?Swwvr*Hjw>xPX!t>pu
zWWRSa+4msNB+}n|knHy(ekaPgua)fkQO^gSA$u3{d=U2!9U=R}&yxL-hsl0mknE{E
z*$<*z$anTb`^kQIJK2vsNA{z5-cy6{GTEODAxx0{DU|)`tz>`ZZn8hSlkB~Zk^Q)a
zHFtVtT1<#(icyMcC__y|qQQ@!CJ85!iDbh-aiAD($+hI-;apM8^#+x2y^<}8vC>Q|
zU<+XfVj|-{-EhO?4Zpmh_6Gd_F1MAoZaI|2<^!5}7`ulP%*^z{zBsc_g{0lhOF(n}~99f!4DEZlF
zd?YW*pAw5vb_Az;<#~HUv{Cif3v`YPT`UGrs+wyl4kQPXiJ&O9WKaHH@pYs&7WGwm
z3^Ncg4NsLX8mkpSf#0z5YCaMEL$tmwitk>-v;&6esq#mALc*_k_-jZ^B~$hH2D#nA
zd+Srlsf!KOFN9w;F1|B)!lyguzM%Pl54|!2Xim`}EyU<#i)eFj_U2a;$zC<<-2BO&
zUUaHgbsq+bEx9auiJO`&_NrpfIROz*_=DFvw+k3L)Q4{h-tkcR^&{6-
zZApv4l?lIyuXV0G6q9`6*Qkt)u2tfQ6iPg)d}R_?jRsQ)I5rPBb`hWtz^i`XQwvZG
zf50&`pD*$QqT+tFCD-4W%QDvSxX4ey3iKL(*?d8M;7|DL>FpmVCX(^}?R7Da8c)^N
z)z*fCK9A39*Y+!^R8=ftn?Ad@s+Qa7^NDD6O+2ca@o*{?8EB~Ya>}~Ca!SjuH`F(I
zeVkU@#LbI){CHJNJs#FHJ!JVc&9YLd`u?yX3JkO!;ZarHjKx&V@AvpEI}uUK2~8Ub
zJE9RK&j||*3lIO!t+-Wy`{Pu(Jf2%r0U!Vufr-9>Vu44hCC9Mge*65O0Qtn7k^oI7vw&o%1viHoF^O#t`|rQ`t1;6lc6pQWQwag
z>uQB)JEyr$h;(&sAXl9hqIuCpO9Iibv3zMDpy}URoe&}zO0B93$1c~RwjF6ZGc0U7
z)}K)qCAx*Et?TT~3^ZrDWM-5yucmALX@}O{n@wVz}A*!p}s^cOS
zs}J!Ahk6?uWn3k2C5N2il$^tk*T-T)qE};M?s2XLZN~mb4`qN
z#esU^(EBXHi3iny-@ikN8>)7vP`o~_@y|#SOLaV-K~Z~(V$)BODbtE=82fO
z)YiMRrogihrbqF-HDZ`rpk{lGB_cPZs;d{C<@ewdFXuD<&>k^Dux7|UG;re^(CQJ)
zlE=8k0w{~tau1Y*Gsn;bXd+B$v~QLk7~RSgz{u}cN2((cAtI4#_YMLJau~0Sl;0oGMTm!@bWF2HJa$YRWIQV6k(B4Ye?h(}it10*)#5Qqc9jCP}$Zv(}8^D4^#R2j1ZanynA2T)ukw1T}$1&*uq~Y+|TkM&k1gI
zQ^*I|?ioSi0ZM`gO8y5V2=fev5lbfGVMYZ~5(gQKV`s)}BfQD7t+9lnIlvXG+Kh0_
z9zl}>r5yluxlHa8Fu{kB;i8<`4d_rVm?=CcP`FM)SZMow-RaCHs>=QY>VSP}xEQ2e}XiXo87K5SxI&G@1c0}dqbnC*T%)|k+J@hBRC
zWKBq}>E;tr+44J-<`%c_jN>yB$1~Ie+LJi$4oD-|AL9ly3+FEm=^Qcv25NRfqDs{E
z`4!I!E2L_s+FadTl{O8?o)x6PI6vWHIp2l2BogxJ9Ss8w7~(pYCY*Z)X9mo+FH)x6
zsDmIqKvIuCJIECL<6lY?2nAHXA7q?iGTzK%Vpc3nY3r@ch$(~|Q
zktJPLIGn$J=vA0kUE1PKfiqX|C%;eeoMZDKYE8}{mX4h~h=NWY#h@Rf*xz{SDAt4G
z$;*R46OcWb$9LivHYqwgy}NDg=Ye1lgUOyGc|r*KAEp3zN^tM))BpxrF=3oAHynJ`
zFK92%nNw(QOiF1BKpXCqS-rx5NjnFic8S4YC!B)91gIy0;XQ*2dr*fh^{W?9we``D|u9DD|Hz6Lq}CO$Mk
z*n;J?##}Q)uo>)371x)3DjK7z8uIx{ds&YbV+m7@igWI|3!;forqp0iol>JQ3v*zI
zMj?+3VlIz^YC!)|F>lE=1C3g8@?GpIO-c&f!q?KIDBt;Q8`B{NsjKk=(=^&Q;j|Aj
zj!%kM#V)}@o)1&ngs@9{eZGK(HZ_)h8da^B7_-GR8l?nc7Pm5r_61SS9RCW_upFb4
zl=dj3Y3Ox4Kg${0p%Zk(L|q@X=nsn?%*H7g0+URDFHPKU!n)Sun$#Kg|74u(X1
zeRrl(;YYin6@<9EAu0QZ!|A3-OS&)2QQ?%;60EAK@2;;0007rl4hl$mw1m#bD78p7
z1af5#1d5c51}Fr9BZg0iSO~htgX|8+GdVCt%ci&FJg$~7$DGuS=Zp$v{@}#|>a>WD
zc0p}fu;AP^ef^4UMWdFjB%hC}M+y#S*Z~pxAqfy%u!m^`Vp)*Bc4ym6vk42#RRz;-KxyaJuU}IJ(F}0<+
z)NrIajazx_ZpFMCWeKO*!xN1Myb3l1hhgQKi^;5b#~#MVJ!&j&G|n`tL7z9KmVUWm
z!+s$qp<8Z&^c@=;3o1tZ%}0I=oN)9<=7(`=z;FAqF2N85=wMfpEFQ0wEWSUQ?Vp9)
zUz#N|zMBW_G0BW0(ablux?Fhc&Ye5m=Wk^PI00}T7|$HMxwba+h|8gOm8N#N&uCV8
zE}KBRz)g~Jyb3M-eQ4c4F<*cl#pCS`H`?p6Mg9(B1HLjU_|=~*D-_bz)#*adS^1{s
zc--%^tza-+-FaSDmk?cD=XF-6gF#DEH4%?DHRm&;p#ki_*xTFKAOs})n5k--Py+ZT
zJpKJ=p3y(x5&Wk3{gxSvhC)oD-S6M!^FiwYB8JWwqN8%lxp(anmGl!ymqlA$HqH
zZ(lw1>bm;A-jS=XUe(*HD80R_uFgP4n*@;R>Uw$?E$Z#5s}p&pr?6s0p+_lARm}5M
zQr3lJin<^MvI>NuDc??1A(X`N{aok%<7J7LYhaRvz$Gs(%pF`H5dCanOjAw`TxPi(
z&gN(*Vn?}@y)s6YJ2!@30!+YdX2;MOAvu0%sb2~T&iFYtri2_pL`(2FqxjP^dU|SV
zL|tuf&!R#zhEWJz_nV<$b-MeUo&u!QKugPL4GY!U{b)q|vk4x@-eLv>+S@ac=p*jchN$Qr~fn6qM&sh0j(mLCk7qQ!agdNaCsUFmVB
z_aW75l^znS`K`1iq`G{58fCNOH%m1@68@W|8Vn=4Q8>}!IODL2O19xVuK_R3>LSMxV=L5@D?ml#E`^P62FnDbBIBc#1nSInvRgC>`xfAkw6^NfTmS
zZRa+3%sM(oIKehpHdqYc?+2ZFrltKn!yKcmb(DF7w5{?ij@b^N=M>5^
z!2do#52TKH5r2;9fbqw9=NOLT?{bbT^Iev9UvG5gy8F7iF|!)+Gm6FfD!*D=duB^Z
zOCqW1t;^n<@T!RwZEfLdf%r3WGJZ*aRSbf$tsBUe_W8nr`j%KUVgy6AwLSByJDb%+
z+#B(DZP+lQurh>#wY9yny^L2(M`1J`^NmBPE-z%}Dh1(5Ni1W`Six)&K%-?*xq?r>
z3g2_MAoIQHbBhBK!b)q~!i8FvcF!mcR_BX?=IYr5}4m)pS1O0RK&aziX
zV!ww$DtQScFm*cQm*Up@-_PCO;}5~YBPLnSDm@}DVK|ny1f+~0d9=d#0V?w4(NAbK
zKw`H%pz&;}VwVW{FMESO6!uU0V+rG?%l+Z7|MHtqhi_6v9U*aM=}RG)^SCZwtn>wO
z4&FkgFNzg0AJ-|(d1d%;+rblOdA3v{Tstk}0+s~C%~Fk3@4sI)H8o^^_``N661@L@
z7^v{9Mxe7k{d7Z($C2w`9jd%8U;V8)9DR
z7ZMT1_^tF^QNwQ;nCMM$rDU~uDt&;ToN{Rra0kDRvVkTZhRVstG`Z9f219AdZCmH4
zH0z}4d302kJ_VhnG=UG&Z0*dtvb5`W}wYuDvDp2S&t
zctb?7V4@CarV**G%Bn(m{AVrn`P}iP8Nd%SQdvigK`UfVo2Uf~l8OR!2FOTI6^a83
z0a*#tXUAB#v$|BZ%VO0KGz{Y_%C4%ZNeflJVpR)YR)>(vFpw_1iu1@JR97{pk+5mC
zD&Nr*z)*W-ng-El*vp-nNY3aPE}6p!n8QJSDCK#wmg^)C=cWjDM20zJHvmNS*D}K?
zgP*6?{yr$TJgZ3MQ7S+gC4TN~ThHYo(a$}xKZxX^5$ftDZfNr=G?dpj=8@?62}SFby)n{@q(#SE}rn1@uQTbr0Ok)t*o^2ypJqU6>F=iLaUTtvX5J#n}
zf|XI)de$ccfvUG-*)9^UUeB;NT^vXZ^fs+9|Bd4)!gJsab|YZahgoY#p#E9`;k!e?
z$huH8_rRWC839df2&x}XFtWW&qDe>jXyBgk2M>D$FqL7cgmFY_-wjNDbIW)PdQLkI
zyk@j6-^7UX?A}V#A$KwqV=TY6$|2tGF4wU$L9HE6R97eB_Fq}B#nP*;PoA>CmpQRq
zwn?~k;7e%+*bKcHGb$VT_A*Mj>xUvggA@rH{}OxI4uGsUyYr+aS{`GK*UbR3QZ2UX_iF)|+eB4W^M2Lq1yF*@
zd4WJo`kM6A)eEJkXGLp6+elkuZqQk1QoX+Nk`tbGM6v-LEWFEeB^M*QyH{B0>Xu9Q
zX1tL|XrQS{5%umUL#=3PDvGO}Ce1aDpDtjzOi{F|bj$0StEvRd*;w9*92%^t^?6l{
zoN4Blx#)09tg~Z2_amQdYfDbB4KW~mUM%F4AAa0Y1@*wvv-2%8yt02FkgKf?4xaS}
zO;wcZrbKhoKq0%Wnrj4<%X^q!)boRAW*Q6qmRCP^DUuQ@CrDJ2qmbbMncWgdSqn*=`LzV+O
zsTur7A|pH8FzPLahd^iKKHrv?I%5Xv*-@#^Z@MPp+NhlXl%x#s2sYF4{C+LMvM
z3r+p~xlSQE=Pewb*V5Ps@l*?&A-D|H=USVqyoy(lmw70d^E72KJFW(`L&|cfRZ76*oNY`Ji7(9whzFYf8BtrN=N;DuY5dpbsi(zBHc4b#LI6~9kQ
z$K$5y@q{<{yk2iKo376USHVaI=LDm^CKF1#OU5%{bJ4=}PRUZ=TD*SYA~WpF#R=t@
zRI|#aE3Sz7qZEdLe-m^qpe4DUGm%K9g-1ublo;kPL1*gVL{hMEl3>o3QV!k#!+fDJ
z$+HX|d5&kG_GIxO=U3zd5h6a3M7?0yBg_eEn-?u=ej|h8RwEiqrD9QIIT*zVvzz5^
z%&q+WjkVoMZB1>hhrufR{;H}WOz}a{m(KY7h!H_gExs$=wOy=Oj7jFl^@O?=rJI4_
z%p2g2nGCZH=aoM+8Fe1~6QMeY?;el8mP@PkdAtzj5yju?j3!oDq#iyk={8KaWBQI^
zPG%se4z&*^{aTqJLe
za1*gS(krJ4R>2)>x?m9*P=ke3;gIio&9Hit6saa$NH1r=jG(kx*iXm=Z*0LZ)y|F@
zgQ7f(ha7*FkQjN5P-NN60X>g#hKnhW1b^YN3b|86h6mE&mDA!C@fCO^Zl-qtU*&As
zqB0o+piJ8!?D7+X9wg2&JO~oXNXKzV4=&3eWEPpdtf9-#j#lnuWvvN+m=;_cj~r%<
zNlyG%psj7NzAlof^7yJ78wPW&mfuq!w5qGU9?f>XHKg#(FjC1AzN+`wy5@z~O(v7?
z(iOwBT3b6a8NFqJ8{aTb#@jg=-#qkYIU}297&D4#M!s-japi`{%1&&E@SWJmhSOBm
zkZ~$Ixe+oxDx69&`GqW#`Gw@Okg2`|oo7BRqE%ocEY+|X4E88Ytq|X(w`kmn0q{Hy
z@%O`8HGs($qLBR5-@t!y02t^G>6Ygz$g*d8ynlsJ7$j*~@xLbGrMPABn+TNliKGGF
z0n-YJ>i`OlEj=JED?RWdW)A1#8>ZcJ#e0RgLWQ57WUhmWNJP6r*RRkbk%Su;RIe!g
z1FT+1E(j%|f3FZH-dzs!FVFqAE!R+>LhR0a}Uoa3Giv|P!KpI_2D4&yHQ>y#ltSbI7zoOoH
zZvc_O*9NFB9X}16j^A8}n)ny(i8e|NUDIT$(Z-m872|XsY#Ds{WcV$D9DdnrfZwZP
zOfwLs0jhohx)895rf{o#`qP9rtjr7zcTDvC9v*&ZO|(H$DY%G
zYfnCtIR=y(br&dSVYa0VC};g|8Zv7PQtKjUC>VS6M)r^SJziUKFs7dpJx`nxg_L=2
zyclS8^i$l$`nhN4+ta5cX=-8`Xj(PcwqPkgE#;@n+ZLP}efdWIzVXDAEK@lAVFYqm
z9G3GT{OS!APpio$f%m;0unGtY7(!;p(uGkj#h{zalZ(x&bY^D(eWA$VED$ryQg!*Z
zWn^StFf_&87!1M)R>ewVNotKLcmf86{vc*C!L!TWy+`NrarV)X5s|j69Tz4%p2V&5
zf=C~G%2jQjirI*m`T8%A6D9oO{`+Tj^l5k;Eu{--E6+huo*+Q0>fF@Nb?*_2piBb
zHj`Abi__s?@bDEA6GA-(`^$Exut=wFxRo`+AX0CJJkT49HC|Km)y!3WdE5>J?6{oA
z19ohe!=0rIc%cz)I%?32e~fG5DnAxCgBl#P_Zr6D#FbZm1J$YDV0?0HBew#ds;CA2
z{99S#YF;cF`in_SHD!%@v5CT&<|3mnSxb;{Mx0p~JAnMpBj;`gQsM_i034
z#AU7=09y-7Q!Cf4YlD71Gq?uq$h{b?_B2@lly
zx=1h>_+E|2zkt{17T9W3vn|g8PxNcoZwTtjR?C`(mDr9y#G*p_>u&u)aVcy7Zr!m!
z;Ir@#X>Gu!3qNd*cBVdo#e%w^UlE3PO>NbvZe3tO@@tKewYnDZQ5
zpC$V_OqUYG9G*81^cFxlpbD62u+*tAQ7ImjcR~b{msrQ@x6h+`Jf2LC>m-5&CE>&B
zvL+F|jO{`5By6`Zgmc(l`W5y*c+3W$ufg>Ae2T?S*1J!7mubW%HWI*W;e#`~>o+K%
z>ZZGAm`j4VaLHnLPD1!d=md2C53b?lT1yX{5`|=ybdjQFD$)(Ko%sBwRZ&n10e%p{Fe;5^FVKWNXA3Z$HefnpVU9xEuSOD9_?d)|iJL&ZXwSXOsYJpJ3@2iSNl8x2XCeqafg270g?#0Fv
zkH?!Hi27rmxT@>ks7GIuP_JI#_tYr1twmLv(G%v4>#v9fZ>%5)tI9IJ7JpTecw~*&
z5Q;xo7dP}oea41=o8K3WHslmh3yQI84BONqaQV8j5KUiz1rV>-yui{&)3x6j@@Y#w
zwx#uitzpn5mR%fvwHP$fBz-n7q$?orutZ#m=**yUtO#P7Q<*|ASAf%$i2`DcryMPb
zM-EQ1nI{TX!`a)0rx2Ea_|sfcu>=@Ai`Y|sW3MVECKBl?pQ;;*0EXx05ONdGn@V4w
zT=ZVj*9RA`SIE&JovV^q0467e1P~Qwh`$GOp2Om*Bv|yOP1i>Q?QyU0DvAI;|GkUu
zkjxKrU90>0a7AV~X!R}8oC(#rZbEFXWdWy>RyOHx%yN*UTkF8;v)GCw)wjN!ibW#W
zN3&(_9Rnuv!UyE!vVkU>E5h-N)ji;4zuJ$<7Z{raSHLc=J25(us4!ODWEjBIp>~F=(b%K3a2^#9xna%H`7?^jZKF@
zNeA6l90W~;d{a|AZ!#R&w)iyZ@S2A|Su>0<(*9X&_Orc$WhzFzvOvic4D!Z8IVWon
zBNLA2TU3;$VPOx#kx|!0aPi_xxVB3cFAnxbi-Rjx3=T$0ZxSrlMj|z5Vw0a~1lJD_
z8+USx?=**p*IUaw*>=~t+@TGuGxOfb4jRGeo&(xw;HppBJBf7(Ob7A;6$(PWyo5a%
zY)2-Rrg%pt4g+@ae!hs2SI8Bx#q3i^1h4XAo$V^-K5osWc%jgFF?TaipA?DC}6J->+M@17|l#8Tf>L{@;5EQ_%mtga5bg
zJ-B5{S-$^&+&4Lb|JT9$oBI~~nKN`hi`fAT-T1g1w;5#wI+y|9&iS+q*eR70siwnv
zG{>JoC2)O&83X7jzdAl?(8Q!u4!i()*8#A)LGA|Ty-!RK2}LS?$N2f!E*Hxd4&Xrf
zcB8~ZX?nIVBkmI@vE+1UBq%QVq~_~Xlun;E`*6E!%pR56Yk8Fl9e5CZN^^sSR;~l7+#*{8HHJpBPT1)
z4C}8`$`)SC#C%)6q)@{hAII9y=y7(oipLzhiEWlkalQnFjq#
z!;h#FmNNDwDoDi(0CUz>;Ax4NawJ2*{Qz8(2Hn0QBU!zp&+%-ItsrbtbVme}y4?N6
zaAoRK$ZfHEFU?f0f>b{98c0MBR@r(H&_Gk*uCKO2lnji7OkL;&Obq=?*&%TzNh#0N4*1Q<$d}MH^!8cYf$HX3
zD4gYEHfFGc5NHL6#M&BkwIbUy9DfkVof2`%w8VU0N{ID*Hy$XnMlc8&9Lg>n9IBe9zn$e97zzo>)1_l&mXlUKKp&>=I=0;Y|
zAM{{j_h9kLVQlTriE#+hFq#CQq&mivpLEL;4wU+g-wZo4eR=)wRzUw`2tg@H`TJst;uHtRUsyP%Kp;@>PZ+0}=gOxR?|OyGYWL$Sq$p?lw!_bUN8AYm;Q
zZ>@kRCeUD?Znz2gu7zBH8etRg)%{A_YaPK;AvNjmlEYyS!GjYpEe>uP=8f#w$r@+|
z4{?Cb_r(Q?;}WFZzV0(>>oWiS=ygR*IeNTqUDgpdG44yHfDw}ciiwrQ5DrZ2j_nD~
z4-Wb|2<)aUr*_ghDOr$ljJggtbxL9DRZ$FAH@FrhzUScsGvA6ttU_a>!F!3!j*j7h
zw#I=KYX%1cy#L7R?mp8>B&?PBypk75~4bWv%)ds^Z7n)k^qffRJ15`c(iz(m)*&-xeEKTuBE4%E$UkVT}
zBdDCA0er;4umOj&91c!F25HihqXJ&s3>M9!;3R?vc3I3)w=n+6MU(N_rz_%0vMPTi
zJRNG`W0$UKTdu>Oxd;K!*al03%%CKvi|3#7rcXp`C)}=0)MCYQ1zZoEf<{(o;5vRy
zv^g=-*3F;ra1%C?nTxz$pFR|*PB*sK)u}f}BQYbx6&>Uw17e)=7)0~2%;erbVylZg
zO!2iFtBU+_FJI%Llin~tDb6X4+ph4iLM9ULmLj+#g^SuG7q;rX@j7|2HDs4sPlW2y(6b&^jm1q0Q1}CD+!&
zn1ffr|8N`H9fLgLF3W-{;J+4U!v))&9N}1Qyl4MX{Gq{Y+=XbD^WNn=go6Sf6ngYj918#`W+ZtE$T0z&oY;<89})_xAPl
z{yTI%Xy_tmkJ9{e2V(O8yl
zV*j=%fR|t;ofoxvIr$UkwZ;4WIB?*GY&wPN);B66wKZN;5y|!R^!2tc(6I$A+1SvO
zZEC7VMUhBH`DZT6Uzcl1zflMre1keP9HtSKvL4$4W*|+nPRZV#zz7fq
zWEZJ2fxg^FFe`vU>I-28BxDuH#J#gBB<9aqp;s9>x`@9G_rdOS_xUq
z?Ndefl2Nu@Mjhj21Fwy@V6}UWA3)6D7aYwZf}hZ*+y*)dPfg6}%xu4B9}@TDY$5A@
zKlX-}4r6yHOp@>%gaZuhG~9CzkeUF9P)q@xo(Qi@q=(_O=X5aoqR`{<(w__qrJ{7p
z_zWk7;D^h87yhojm*JGb=nl{rVNQ}zg6=Pea1KID4gVdCu+c^m5+LZzNt~5q3Q5Re
zTo{8$a$d)!B?n;r!HSiBcOtlAaK(Q$fC+57G>qnCQaaY2)z!(C*|oj3_{5aWEsR|Q^25X9Eh)!DGLo1J;Om$vovbZJ_;eyiW#
zj`j6O)LR{mM4DsqV7NMs^HWG=I*~rmE}fhSt!TYmO>!(Ou58c9wHOj?p=^Jtfbt18
z7pO|CDar-fS?#@7m3DZ!AiK>)kn*&H-8?QFE3Frmbn!?uV1)D7IvmNL$+^emB^tp#
z;yfRtl;?e!6@*qsEXPta?UwE!HO6kP=pic-4P=aP)Xu!lMXtvJC^%!|c&CiJuFiN?
z2VJR8LWXHE#yebHn-jC%cni-ZuTF<$Cu5MCWWiv{;MSZGYmc}x>SfWiDf3e&Ha7uR
zLvHUZ>CHXJ)!;~^R<1)=$6|W<7^xZv8W^a?nbYIYd(4SfMWExHuMRSprgQ1RU<&gu
z)`{U8oQT(P6mZ5{=B?v6Bc}r}nGbA{8jw8F&GGJJZyLE|#bOJ05C%C+xvbkX!`ld!
zh6ZeIfx+fL!XI)DaSMs~_nUmdVEmKuV9?vli&bo4k%nR{WS9OR)KB?E_7%!v%l{Na
zVB{O;^W1Qm`f8lnMf|IrCGU#a^5IEUee%iDzvc7rOP|B_Dp&w|VTHSd#-YpcIY(t>
zpa_?62w_knFd}dV_Q?~EFxFC^E3bRVwF8wI!)xuPrxHM0uuX$e6qmSZTZ)y(6{2Qd
zd`b1^`N=l(yy0@pO{OGn`ddJAs1m3%Tos3{aGS+>Wf=%(Hg4F8iIqS200aL+Vx5cr
zJ6;1QvDa@F^sYQh@Db$mI?jMC;oY5#$1!(+aQIrQ$N^vMALnXmMHe&k5W_H-rn3~=z^;v7&C;JJDKiH>gSdKQwwuDOccCRo@eS^=pLC1MQA1>cz+*?jn
z1)V}m`N{&gKv%vX=o3MlXpn_x*qGFLD|;wZoH)S_gJ2Ub6mlMk^{=(t_DS6w9U8jv
z11EuE!)xujSW(&COBO5`se}b~OrD|&zqbC@zgquK?mLcnC~wRD-}Zma$$cNXap-^7
z{SR06{gR;}arNKQ{R(_f!#a8qJZ$Dp8FUbu(bf?cF{L#!mPU9q3U@Y$`
z^z}NfY6Zy@r6U@b!XFC|KTops(W^C8P*su@b7-Wjqt*+U*{TZpbI;8e;0fblG=8$S
zt9!|k?ylN&p|Efv4*w|q$(;_}`}C_p^q?O
%~v1(@o5n$6W;PBRY!cv6AznRViPu8{=-VLcArl}?n>D4tcZh5(+CVvtk@DfUP>
zh1_Vz*3WMfZj|FZ;=WbhXY;#}*yU5MK-AsHk2jh=pL!p
zL5`aaQbJgBN*Qz?cAfGtn|R9oG#fLUYqp%(-i}HIc#mP|tE)D%=&`wKjb<2I#>YoS
zn2sEuCZ2=X7QpLOYccCWGCg6h8oS-F^9?&svgs$MCUa^rw;0?(ExOYZ&&xSSl9f|*
zuQVZ+k0!%!ZC=@p4PolMO+l~MSQ%DSKfv?)*8?i>QjM%M;3Rgvy?nVne@#=Z
z1(XctBhoD$iihMgENg_B5%t5r*>&aunnH*NuFgd?y;E5*c>C9b~LxbaC(NoRqd1h>S%7
zrtQ2++IExh9n15fR7UkzU0>T$Csgdv&I>iej=Q)VE#L7n?X1LO84CsdguSGU;PX#6fOX@$UEQ3$Bco3GBpUxiFLmuLT=bRmAe^tO9`{p)+U)`5@(Yh04poGWVFWsKJ9MrgI+Ipl-TxA-R9{J3=q9?`u{Hp>av005>E(gKw7}D)
zbjz0dwtx#Co3jcHymLj3BROy$iUP0DVi~Q#=S*QB3PtcO@TUR>J&qW}VuX@8j1STy
z4@Rm85Ar^EVr2^~*EvpX#R7VHRU+Hi(b1SqT;&q<$uZ)Q^UwEqN?-GM&OiUXK^t3@
z&q->Y25%T!618O5+nKZjHHmBOU`;aF9rkjh^F5iYLGn%>m4F89VDu2+8+TPTMq{yP
zW7S;@Z|4N1yQ&&u_}AdX@o_(;SK?K%P&gdo5UYx>o~;cPonP6GkI2?IwV@fc3AY*7
zVUs9U-SOY%A+EFmg(2x}#)#a8IbsU*H9K!J<}*2AzCG#8JV$zwrgNUbvq>ICnU-HM
z=fk0R?kmdx{Jj_Mvam&haIusrEh&W}&lVUY3?i?-$-(ujy{Z$%A5RsOln~o1X1(HJ
zp5WzShj4H$jj;7>!ZoN=w=7F`&l{4fkOKqf4bAILE^C=x0h&z~?g=DejteFOJz>r|
z!mL@EOeXTexI$^un?4Y
zHC=~MzE?`M%oba6fWM=jt2})C;={Q$a!fIX?m1;Vco1lLbrjzUj%4QuY&@cJaQPLR
z`N4xhWzfu{J-x+#&>pT#eGXP35zkptR*O1g45CG3VL4lo*_u4!nv^qcjQGd-d`5Tu
zXf|QA(p~g|8%1GcJC;Y-td}W@m+A(KK3BhT|)7&f$sYE2j$D@mC5E37%_NGO{bg7f?yj~Da7h#9N30a?0(iTSZKX-pu4Mx)p%EYlpb-fFvodQ
z)Vvmy>8=N`43L8FSPSfJdH!vMBAb(Vp<13n;)nncsX%Lf$OjMzAOXN?KTxLihOa?)P2yTQ73@kn`*&GixQYR#Q3WDqZ{MMZeQ6lRM+Ccky{G
zN!U}H`F91-BH)PX@ZYi?-K*j!JY+B6=FYC~@WGMI??vL94&j&u^8wYjz1;kPWy`YJ
zw|Tuw%w_(xf0?laD}tZm7XRigQ=#y@@54U?y9Bm7O%6{Z@$FvU5@VUa%D>E90MxI+?!N$=9nX3=htV^-7a1C7#t_Z0)UV!T}Je;v=CYNL(G`PAypPka5
zRC9a?J|r;!AH9GEB!H#?Q3k-15^5cDix??pGV`C(6Ln^wPxlRL^OEttgei
zZn!KK*R^XhUS*^?Sy1?*vAXP%``*-0vop05ha;Pt8q-lj^_Y#?`FUjUVo5GBj0njS)hNgzC6Yb-W>JR5eX?)DDipod=tk
z8muTY&ZyO}zPZnxF8i84?mBjSe0>b=|MnB^wD&|n4+di{<23AGqmX)c=`)SI-)l_M
z#v-Br-{AyaDy2~O7=7O9lu#?+gn2>K|G$OP_ZUv!``^Lo2X?Tb^jRscpWEQVDU8GA
zDrG!g=i@cg6~L+M9Lbvz2*?95O)5UG`sk61SW;Y*xYi(%4cV}4&VmALpN{$?<#>7E
zQNyXL06VyW9L8V$;V2J%#>ED)m!G7?>YMofFQ|id+B1;?o
zx|D5M8+otH#%RzAE&Z#@?eJ4ej*kQLHpat+()(!w{0$8LgsnLzL7;N&&2x&))blq%
zS8D5X@Z4r<{ZPrV{K}V588p=+0FCZfgNJ3bynvta9=bWB=idVJR#`zS%WAU_OAWj?0=jfI7y)7ccjdb=*{6u2pkO(YT
zbuy^OT8b4j^ALh!La)JCFM%5K7`cDS+jGJJx5{?^B2WoM8T6oMY
z!P)$XRo}A%c%1dSrNavjnh#xz7bV{d7b>k`Hq|I%OK}~a&%stJ5e8h!Z>~!GnJb9@4
zPM4~*p>o^~x+RXg53_Y(j>O^x{NqPnIfn7U`J1z_!tdJr9=|si7a{yaRU$M?OyFbK
zXgDDzKvlf*y@>8&t7NgPNb@ngju?soE9=}br6R?V|1e1BBcv&T4i-jj2$g6Z4h+cw-^P>ExeN79V-!FXrO&MV^tQS?=8A1Y9szQrP9T
ze%gJQbRRBHLYh%(t2;Xe2N%Csc7N=WU
zdV7b5dwW}2uv2@R?HX~SI
zXPZwjgngsobOeX_=r}%DHUtW{g45P`@NniDUYy2Q=78f3JmB?*Jf4u>Teh{2fHt#`
zinhZtG6mVFa$FdM64p`#cSo*}mJ(_Ru$0@uk!%m8_(MO=Cd04q(5IM-XPSFrO4s&c#TNY>eWpV1E(C~
zpGUF(DC#rw=4EhhhFQJzthD7VeUyK_Xw-`7I2d763F%S%uAg@lTf^~dZKGmI!fvnP
zpBbuZw-Z(*oN7!Y0=23Z2qY4Xsc^(<3d5yH$8iUCT!#~ijh~K4s!;mH_3<(5ROh*`DX{^LlD3=$Vp^y_Jj1=W%
zNqpkLbB8Gb_e$xeQXW*!`sY}Jw=o#bZU(K-U_bnLjIHVr9d1uoHPt1OYUxoJyy}{&
z(!G2Hc9poR3S-sK`&OK^t)`lqaN<872f3oVTZo#PrlwS|nBkww$P5l&V}2r!1{4VdwXL;
z6sI_38yD7hbaZ!jbkr|w%z`0Gc>#X3ytgb1{d^PFb04I~=m}6qrKhr7f5GmalefxC
zXhN%y3pG;909>IwK-EYxcar{7&SpO+*8TY`=k5RF?MK5;(Yl6f{?@{
zXU^9F^2H~aWE8$6I5|m9Cz%j(2Fl;>fA4!$uOzi;kz_1)y;rZ^cJKY~E1LZgdUOd^
zcr*^VUCk6C(|U(?&2Y!wYiH)9zO24b_osCB3g^AX*dEL5l54l!aCbC&SmlBZW4;x(
zQSE$i%;_#G`h&?9WF>TP8r!FRvKpGzbgx-O+i(TDjm}=WV;%Os9Q$h+K1NpE*U>x1
zuj3fHSGiD2u2S|1(bar%p*)9oNV__8THd7-ex9z%*;VgnTD4Z?;PwxrI|2c~fYiTV
zB46Pq->pb4CIU$6=jjAijY+naO$-hhv=DRv&2;QKXk!W(;tD1#5G%iAWX@5Ub$)?7
zv-%vDO7Pkvx^bMwoffl#?L?4TlrGY5n%Q22lP
zdgCOM=WMhD!z$I5s*M(<2z_zXF1NTF(HGgw5YK3p?V2?_Z0R*zN~haTSENH3VkD<4
zDj_Pc$F<|EGk4Fzvh`xg^DyA7xj-keUQFRme7|Nof=)X60SQje)%=WUIs-&=rJ-Xw
zJrN*h@@5b^x&aWHJQZ9M7!nFCJikq;yXeso4GyXE2HXx@5z6KJzulk9VIz!|F1tk%
zDNB86G0>>gSh#SN=)(g8jBe$l@!Hy^3y1Dj;6?taW!+Jj??>JOPP7qAd%(>X$zH`6-t$XHtcHN1!^j=MN+>zZo5^$L&j?C}#P1fW_KsLA
z8eIxvGiS5v{jwro*3B>LFS=?<+~Ub>+Hk%H_b
zb=Xvk2jn!Co9v{T`tH01<;rUO>wN>iunzrhLj)1)9Ml?rv55D2Hlh0kfbqt}~-_jG+q8b=U
zMHrTgEp_wDB9WIRvh7dPg0iIU%qHlLa^*euw7;fKXbD-r_5%`?VVb3l3tq_kZdpG3
z>t$wbiT9;gi>_X}OMQ=;cA|?V6C#~yiX)s6^caF0w%YtGHFsX`TEkSwWtm1z2Xj^G
z^`YRg&6IkyDcZxh0O5)>dR`HjSE~ndg4v#EexKZ`8+IS0eC*S{N1HE}LA|&s7p>U#
zirl7WJVoD>9uEd6ARO0$irUuv7|D#IWApCTOLK(=tF?8|8FX#o
znjlhKe%BI&$P}Bd>Mz2FIgQVAfQIlD$;w|H=nItkRu9$bqmbJ4K1d#Temj-FuwrhM
zj@8PgV5u~+B9G}1&QY{w_KT52*zt
zRZ)NiCz&;~LlFYABhDhA3-`C)(zBg&m`ygKzeD%N>*ctM1+(B~pGnMJ;x}Kb4_KHn};G0Dd!xGontu
ziloA!WF%P#gj1;yk&aZ+P7&=Gjgzy>r6DRPacMeD`L(QieoN4Q^Q!VscT
zg!Uwo>?G9(F*c<9fkHf)4*JE^qGUXl&7>r=^ifp-GV~*XLV_9@;S@@pLbHvM84@kf
zSX(YF#yXdVVkzb<7EMIr;aD<~&e`F3GG-T~o*VXzB%&;#x`|Xg7Kk*)<_9f*Jf6Cl
zLjM2n-fta>Y`=A9Bvg|plVO*!1Sy8=jAb#DK(%)sPd7LRoQr1%aY6)wIU6_)
z1^e?!%F2<#lT2IO<+-W;tEUde0~lR`A$mCmayQ=aGr=H67eJx?qa^YVb=3F>Cs%~s
z(z2zf?#>5-L#b@h4iqvLeIGC)6zB**^MF(~QRt7xGTBsQpb`w?*{3F7A`uD~sLvi8
zOmmIGtbqPR?+f~S=gQPL^{Yfa78=ZwvSr2cB$se%ifc0I#NY^*KC2LnADp^c42&vB
z$AMSea098OsnS5<<<86LS3E^@Fs3@`TVrAZeCSOjWSZ-xUJ_<;O|ADst>sTxp$KIB
z58s^D;r5s7MiSI4!5ScyfM&!1?yyR2)6rZMCW{zE^4ZV-ARRhNsn+;Qhv^ue+xH0N
zQT<1P*&F+aVT_ha!^;QH&%EqMshF+WtBT600k?3fI-~cJsUlT7+iT3p#=1&xq5!DD
zEZ#FJ(6leeEWtzqgPF{kt#gEFo;V@Vn#6CObMJGGP&2=d+8o!i976{mmKgUHIu4=%
zZBD7WSQ90NgwY^@O1*9gfi&MFtQYW(>*?Ad)J=l91B4&`#HUkA2UGX6{!cVt3E4kB?y!uE|3k-xGx<>^!X2zTH%+wY`l
zg3N)`?h`M`b-u5{!SR;P_4<*5-4-%k=g62u+R#*{dxWz}G98VDmUP8MgtGYrc0}$q
zH7rQol$NRjC_2!DN=Wk(pE$eFLNlxrNTDMYwf7&%6R<)%m#jvCN7PAXlL_9o7qV9Z
zR)POuCstuP5SV7qnqos8%gzDW^S8ge(`!2%|D}4`7EH?LheMPX%9g2;IX;n(M2S67
zk+75iF5EWUY);m$oAG0F7{9D`ZEJNQ7WvXLTH05f)dq_+Nta9@P1$
zmGWIxRDt~}Uc#jGJi%id$M_W^;4Q?hqt@qP6f0o&vSW?2ykTfsP0AY$-nD-Iphu;MjTjIVHNnaK$cnxGy@3v1Eoxs#@YNglxI^aL%O&}Ih%{_JNC;JQUyzX
zin0bnIeZIbiE7y;DHR5Kd7ifl=lCBRyJ#?X{dgHyjdu{)sVx4ujZ!)
z2h^Zg<2q8jde=iCJVq}`1yv{*IVJlyoBdzjH!!GjxylJYX8u5?@d?iPhltWj+@4MYY9
z_dU1$*PUVVqNf-jGe&Lj?#|%A#6YdDKSp3`B4a0ef5nN>jTY|E!*y_A7(Vzs>V!yS
zw)CC_wx%4O000*kL@_QdG;N)zLtR$n9fT>iI^!BP00#iHfICeBLv-zvb7p5|=VrzL
z@fkZmJyNh|jH0BT8wiH{W5@*Q#7SLv{?0s~&2HYHksxfXHjqDp*jAf?ezyNCN(A~jEF4b;H(8{ZU+~4nuD-I7#
zYx>4~iM}m*;3hTWFDHWYl*BoW=_bP6rk^ziQ==d6HS=Z$_sAEC_87%$KQ|
zr(syA&UAy+de+GSk;aJ>)R~b+?94tiK<3`iio9(dTY6iPzVD-h1NBO&oOz=&7q`e<
zwEuKOtR7>7*C)~kiFFE6JU)_0BOmELGVPDn`x>$6^xK1$KTu2g=_(d|&JBy>$Fh+l
zHp;9t9qKIWt#qCL`*Bq;*D`D+SeBd
zSz?J>GAdod`Z!3ULWll2p!@>~dLpXut?!>C&?$9o&L1Oq#E+zRFfuDT3=UyB5Na9a
zH1iuJi{n0`V^0%H{!ZV2)o`f^sq{hAKilw1IVL0)u+;NyW*s+x1SE
z#ma5YWM=2*Bp`ya0zx4Lgdxd7?TbQNou`Qj*WK-$rweY2<3S`vy`pMMT*0~=k)Ifw
zcq~42U~;y;a@l1;mB~o0b1O9(iI(!Cqx1GOEfnZ{mPVnQ3kOQ2K)7I1hzK_)Vf-XPBr{tgFA^ETX?q_yw#}X;!RS$?PkY)mY6%
zv`qT9Tb)S_27g}s8=i%Gs4_C{S=(V8uz%dMkm+>aU3PXFv61H%EY^%2{;{5B$Ez1*
z@M_*e08yXvmzmgok{DF_Nw8Z^ChA~6=lVdSvY-d
zA}Bm(MdhpzwfYIa?>#RVdKJJel-zX6kahXH?pj`T>u#j*>TRS@rB(zYA%fXz4s*q$
zfgP^{eX|p`osV{2ntHD&f!ki15*yow7FZP?BdkfUt*q~;!L>`Hj%!p271}BBy!}@S
zS#;n)bchVGAXiBx2LON&I$=AkwkSP^qwOQomxi_m-#Hj1*vDklFLM5dig7LXh^Y-m*CLph|BPQ)#(0d%
z_8;?|^?kwjkKz{=43zcdPfYGY(&Ud-FGx%Q=-&Aq0YRVv@}U33Jm7SKk~4Gv{zPM5
zEDV}j)H`H@tQGSouMG3k-5lk0^`9ApKEn*EVT#5Y%O)XcjpjEcUdoPT<9)UrEMs`D
zT#3RTvLksb3X)5j$xu3-wEWlB0%~w*oVo0eXKFc&^U3#-MNU0}Wb77E(&!Ty7ifzY
z!_qvKjG!=)55{^x1Vor*q+QO!trF}#FKCB?Z<8CzKW*{RFg#eh7VR#b9vVjNjHhBz
zD^C+#VEf8Sh@w+8z$quPSltK)OUm2TGVy-aeSCf)A8LU}`x|SaNnLvOApm=4D`a0;seGqF#
zWmzwN?O>XKNt^da>17ru;eiF!#;nrUPiNma>C#Tj4GR4xQNv9tY~4r%+v|Lf0o9HK
zJv$BbfRzQ{RcmxWjQHq*6^v1J%o5v!gljvF_|3gAm=tVDjt1K`(o@>m`~o@{qZ#6!
zFvPk@fiObhdYY5Yh(xEEVslLhT#FfCmGKy68%sjQP-?VVR&8x3YF($Y`^%EP!|GB4
z%QeJb?juJ4KOut4OQOS+KT;CCX(^dpGG5%09FX0mWa_1l3bi>or5+FeT^k{@$G|z_OYTDxxQ&vdh?|u*tk}J|k#V^dBbz~(;e;#WrklRW1dkoo<
z{wVbcpv)BiclMfpJ4WW!_xzU1FdIIElgk0JQ~R@5lIr