@openeuropa/bcl-theme-default 1.10.7 → 1.10.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/css/color-scheme.min.css +1 -1
  2. package/css/color-scheme.min.css.map +1 -1
  3. package/css/oe-bcl-ckeditor5.min.css +1 -1
  4. package/css/oe-bcl-ckeditor5.min.css.map +1 -1
  5. package/css/oe-bcl-default.css +315 -174
  6. package/css/oe-bcl-default.css.map +1 -1
  7. package/css/oe-bcl-default.min.css +1 -1
  8. package/css/oe-bcl-default.min.css.map +1 -1
  9. package/icons/bcl-default-icons.svg +1 -1
  10. package/icons/bootstrap-icons.svg +1 -1
  11. package/js/oe-bcl-default.bundle.js +86 -14
  12. package/js/oe-bcl-default.bundle.js.map +1 -1
  13. package/js/oe-bcl-default.bundle.min.js +1 -1
  14. package/js/oe-bcl-default.bundle.min.js.map +1 -1
  15. package/js/oe-bcl-default.esm.js +85 -14
  16. package/js/oe-bcl-default.esm.js.map +1 -1
  17. package/js/oe-bcl-default.esm.min.js +1 -1
  18. package/js/oe-bcl-default.esm.min.js.map +1 -1
  19. package/js/oe-bcl-default.umd.js +86 -14
  20. package/js/oe-bcl-default.umd.js.map +1 -1
  21. package/js/oe-bcl-default.umd.min.js +1 -1
  22. package/js/oe-bcl-default.umd.min.js.map +1 -1
  23. package/package.json +7 -7
  24. package/src/icons/icons.js +2 -0
  25. package/src/js/accordion-toggle/accordion-toggle.js +24 -9
  26. package/src/js/header/header.js +91 -0
  27. package/src/js/index.esm.js +2 -0
  28. package/src/js/index.umd.js +2 -0
  29. package/src/scss/_header.scss +27 -82
  30. package/src/scss/_input.scss +72 -31
  31. package/src/scss/_mega-menu.scss +50 -61
  32. package/src/scss/_multiselect-2.scss +33 -11
  33. package/src/scss/_pagination-v2.scss +86 -0
  34. package/src/scss/_pagination.scss +1 -0
  35. package/src/scss/_search-form.scss +4 -0
  36. package/src/scss/base/_mixins.scss +21 -0
  37. package/src/scss/base/_utilities.scss +8 -0
  38. package/src/scss/base/_variables.scss +3 -0
  39. package/src/scss/oe-bcl-default.scss +1 -0
  40. package/templates/bcl-base-templates/listing-page.html.twig +17 -19
  41. package/templates/bcl-contact-form/contact-form.html.twig +3 -3
  42. package/templates/bcl-content-banner/content-banner.html.twig +3 -0
  43. package/templates/bcl-dropdown/dropdown.html.twig +12 -7
  44. package/templates/bcl-event/event.html.twig +5 -5
  45. package/templates/bcl-file/file.html.twig +1 -1
  46. package/templates/bcl-glossary/glossary-detail.html.twig +4 -5
  47. package/templates/bcl-glossary/glossary-listing.html.twig +5 -5
  48. package/templates/bcl-group/group-landing.html.twig +5 -5
  49. package/templates/bcl-group/group.html.twig +3 -3
  50. package/templates/bcl-header/header.html.twig +43 -50
  51. package/templates/bcl-landing-page/landing-page.html.twig +5 -8
  52. package/templates/bcl-language-list/language-list-modal.html.twig +58 -5
  53. package/templates/bcl-links-block/links-block.html.twig +1 -1
  54. package/templates/bcl-mega-menu/mega-menu-submenu.html.twig +10 -7
  55. package/templates/bcl-modal/modal.html.twig +20 -7
  56. package/templates/bcl-navigation/navigation.html.twig +8 -0
  57. package/templates/bcl-page/page.html.twig +5 -5
  58. package/templates/bcl-pagination-v2/pagination-item.html.twig +90 -0
  59. package/templates/bcl-pagination-v2/pagination.html.twig +213 -0
  60. package/templates/bcl-person/person.html.twig +5 -5
  61. package/templates/bcl-project/project.html.twig +7 -7
  62. package/templates/bcl-project-status/project-contributions.html.twig +1 -1
  63. package/templates/bcl-search/search.html.twig +3 -3
  64. package/templates/bcl-subscription/subscription.html.twig +5 -5
  65. package/templates/{bcl-toast → bcl-toasts}/toasts.html.twig +17 -8
  66. package/templates/bcl-user/user-terms.html.twig +3 -3
  67. package/templates/bcl-user/user.html.twig +3 -3
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@openeuropa/bcl-theme-default",
3
3
  "author": "European Commission",
4
4
  "license": "EUPL-1.2",
5
- "version": "1.10.7",
5
+ "version": "1.10.9",
6
6
  "description": "OE - BCL theme default",
7
7
  "scripts": {
8
8
  "align-templates": "lerna --scope \"@openeuropa/bcl-twig-templates\" run prepublish",
@@ -22,14 +22,14 @@
22
22
  "@ecl/resources-ec-logo": "3.7.1",
23
23
  "@ecl/resources-eu-logo": "3.7.1",
24
24
  "@ecl/resources-flag-icons": "3.7.1",
25
- "@openeuropa/bcl-bootstrap": "^1.10.7",
26
- "@openeuropa/bcl-builder": "^1.10.7",
27
- "@openeuropa/bcl-twig-templates": "^1.10.7",
25
+ "@openeuropa/bcl-bootstrap": "^1.10.9",
26
+ "@openeuropa/bcl-builder": "^1.10.9",
27
+ "@openeuropa/bcl-twig-templates": "^1.10.9",
28
28
  "@rollup/plugin-replace": "6.0.2",
29
29
  "copyfiles": "2.4.1",
30
- "cross-env": "7.0.3",
30
+ "cross-env": "10.1.0",
31
31
  "flag-icons": "6.9.2",
32
- "glob": "11.0.1",
32
+ "glob": "11.0.3",
33
33
  "npm-run-all": "4.1.5",
34
34
  "slim-select": "1.27.1",
35
35
  "slim-select-2": "github:tibi2303/slim-select#master"
@@ -51,5 +51,5 @@
51
51
  "design-system",
52
52
  "twig"
53
53
  ],
54
- "gitHead": "5f7e5c2fd90eceb81c0ffcf52dcf8e3921c3acae"
54
+ "gitHead": "cb9864341bfc98404071520d61568bd18e17e1fe"
55
55
  }
@@ -56,6 +56,7 @@ module.exports = [
56
56
  "exclamation-lg.svg",
57
57
  "question-lg.svg",
58
58
  "info-lg.svg",
59
+ "x.svg",
59
60
  "x-lg.svg",
60
61
  "plus-lg.svg",
61
62
  "dash-lg.svg",
@@ -115,6 +116,7 @@ module.exports = [
115
116
  "trash.svg",
116
117
  "trash-fill.svg",
117
118
  "link.svg",
119
+ "list.svg",
118
120
 
119
121
  // Social.svg
120
122
  "skype.svg",
@@ -3,8 +3,6 @@ import EventHandler from "@openeuropa/bcl-bootstrap/js/src/dom/event-handler";
3
3
  import SelectorEngine from "@openeuropa/bcl-bootstrap/js/src/dom/selector-engine";
4
4
 
5
5
  class AccordionToggle {
6
- static isInitialized = false;
7
-
8
6
  constructor(buttonElement) {
9
7
  this.buttonElement = buttonElement;
10
8
  this.targetAccordionId = buttonElement.getAttribute("data-target");
@@ -36,16 +34,33 @@ class AccordionToggle {
36
34
  });
37
35
  }
38
36
 
39
- static init() {
40
- if (AccordionToggle.isInitialized) {
41
- return;
42
- }
37
+ static init(root = document.documentElement) {
38
+ const context = root instanceof Document ? root.documentElement : root;
39
+
40
+ const toggleButtons =
41
+ context instanceof Element
42
+ ? SelectorEngine.find('[data-action][data-target]', context)
43
+ : context && typeof context.querySelectorAll === "function"
44
+ ? Array.from(context.querySelectorAll('[data-action][data-target]'))
45
+ : SelectorEngine.find('[data-action][data-target]');
43
46
 
44
- const toggleButtons = SelectorEngine.find('[data-action][data-target]');
45
- toggleButtons.forEach(buttonElement => new AccordionToggle(buttonElement));
47
+ toggleButtons.forEach((buttonElement) => {
48
+ if (buttonElement.dataset.accordionToggleInitialized === "true") {
49
+ return;
50
+ }
46
51
 
47
- AccordionToggle.isInitialized = true;
52
+ new AccordionToggle(buttonElement);
53
+ buttonElement.dataset.accordionToggleInitialized = "true";
54
+ });
48
55
  }
49
56
  }
50
57
 
58
+ const initializeAccordionToggle = () => AccordionToggle.init();
59
+
60
+ if (document.readyState === "loading") {
61
+ document.addEventListener("DOMContentLoaded", initializeAccordionToggle);
62
+ } else {
63
+ initializeAccordionToggle();
64
+ }
65
+
51
66
  export default AccordionToggle;
@@ -0,0 +1,91 @@
1
+ import EventHandler from "@openeuropa/bcl-bootstrap/js/src/dom/event-handler";
2
+ import SelectorEngine from "@openeuropa/bcl-bootstrap/js/src/dom/selector-engine";
3
+
4
+ const HEADER_SELECTOR = ".bcl-header";
5
+ const TOGGLER_SELECTOR = ".bcl-navbar-toggler";
6
+ const OFFSET_VARIABLE = "--oel-mega-menu-offset-top";
7
+
8
+ class Header {
9
+ scheduleUpdate = () => {
10
+ if (this.frameRequest) {
11
+ return;
12
+ }
13
+
14
+ this.frameRequest = window.requestAnimationFrame(() => {
15
+ this.frameRequest = null;
16
+ this.updateOffset();
17
+ });
18
+ };
19
+
20
+ constructor(element) {
21
+ this.element = element;
22
+ this.frameRequest = null;
23
+ this.resizeObserver = null;
24
+
25
+ this.init();
26
+ }
27
+
28
+ init() {
29
+ this.updateOffset();
30
+
31
+ EventHandler.on(window, "resize", this.scheduleUpdate);
32
+ EventHandler.on(window, "orientationchange", this.scheduleUpdate);
33
+
34
+ const togglers = SelectorEngine.find(TOGGLER_SELECTOR, this.element);
35
+ togglers.forEach((toggler) => {
36
+ // Some layouts move the header when the nav toggler expands; keep offset in sync.
37
+ EventHandler.on(toggler, "click", this.scheduleUpdate);
38
+ });
39
+ }
40
+
41
+ updateOffset() {
42
+ if (!this.element) {
43
+ return;
44
+ }
45
+
46
+ const rect = this.element.getBoundingClientRect();
47
+ const offset = Math.max(0, rect.top);
48
+ const value = `${offset}px`;
49
+
50
+ if (this.element.style.getPropertyValue(OFFSET_VARIABLE) === value) {
51
+ return;
52
+ }
53
+
54
+ this.element.style.setProperty(OFFSET_VARIABLE, value);
55
+ }
56
+
57
+ static init(root) {
58
+ if (typeof document === "undefined" || typeof window === "undefined") {
59
+ return;
60
+ }
61
+
62
+ const resolvedRoot = root || document;
63
+ const context =
64
+ resolvedRoot instanceof Element
65
+ ? resolvedRoot
66
+ : resolvedRoot.documentElement || document.documentElement;
67
+
68
+ const headers = SelectorEngine.find(HEADER_SELECTOR, context);
69
+
70
+ headers.forEach((headerElement) => {
71
+ if (headerElement.dataset.headerOffsetInitialized === "true") {
72
+ return;
73
+ }
74
+
75
+ headerElement.dataset.headerOffsetInitialized = "true";
76
+ new Header(headerElement);
77
+ });
78
+ }
79
+ }
80
+
81
+ if (typeof document !== "undefined") {
82
+ const initializeHeaderOffset = () => Header.init();
83
+
84
+ if (document.readyState === "loading") {
85
+ document.addEventListener("DOMContentLoaded", initializeHeaderOffset);
86
+ } else {
87
+ initializeHeaderOffset();
88
+ }
89
+ }
90
+
91
+ export default Header;
@@ -23,6 +23,7 @@ import Tooltip from "@openeuropa/bcl-bootstrap/js/src/tooltip";
23
23
  import Gallery from "@openeuropa/bcl-theme-default/src/js/gallery/gallery";
24
24
  import AccordionToggle from "@openeuropa/bcl-theme-default/src/js/accordion-toggle/accordion-toggle";
25
25
  import AccessibleToggle from "@openeuropa/bcl-theme-default/src/js/accessible-toggle/accessible-toggle";
26
+ import Header from "@openeuropa/bcl-theme-default/src/js/header/header";
26
27
 
27
28
  export {
28
29
  Alert,
@@ -43,4 +44,5 @@ export {
43
44
  Gallery,
44
45
  AccessibleToggle,
45
46
  AccordionToggle,
47
+ Header,
46
48
  };
@@ -23,6 +23,7 @@ import Tooltip from "@openeuropa/bcl-bootstrap/js/src/tooltip";
23
23
  import AccordionToggle from "@openeuropa/bcl-theme-default/src/js/accordion-toggle/accordion-toggle";
24
24
  import Gallery from "@openeuropa/bcl-theme-default/src/js/gallery/gallery";
25
25
  import AccessibleToggle from "@openeuropa/bcl-theme-default/src/js/accessible-toggle/accessible-toggle";
26
+ import Header from "@openeuropa/bcl-theme-default/src/js/header/header";
26
27
 
27
28
  export default {
28
29
  Alert,
@@ -43,4 +44,5 @@ export default {
43
44
  Gallery,
44
45
  AccessibleToggle,
45
46
  AccordionToggle,
47
+ Header,
46
48
  };
@@ -4,25 +4,37 @@ $header-background-start: #039 !default;
4
4
  $header-background-end: #1b4ac3 !default;
5
5
  $header-link-active-background: #003776 !default;
6
6
 
7
- .bcl-header__project {
8
- background: linear-gradient(
9
- 90deg,
10
- $header-background-start 0%,
11
- $header-background-end 100%
12
- );
13
- }
14
-
15
7
  .bcl-header .nav-link {
16
8
  color: $eu-blue;
17
9
  display: flex;
18
10
  align-items: center;
19
11
  }
20
12
 
13
+ .bcl-navbar-toggler {
14
+ background: transparent;
15
+ border: none;
16
+ border-radius: var(--bs-border-radius-sm);
17
+ padding: map-get($spacers, "1-5") map-get($spacers, "2-5");
18
+ color: $link-color;
19
+ line-height: 1;
20
+ @extend .rounded-2;
21
+ .active-icon {
22
+ display: none;
23
+ }
24
+ &[aria-expanded="true"] {
25
+ background-color: $primary;
26
+ color: $white;
27
+ .active-icon {
28
+ display: block;
29
+ }
30
+ .default-icon {
31
+ display: none;
32
+ }
33
+ }
34
+ }
35
+
21
36
  .bcl-header--ec,
22
37
  .ec__header {
23
- .bcl-header__project {
24
- background: $header-background;
25
- }
26
38
  /* stylelint-disable-next-line no-descending-specificity */
27
39
  .nav-link {
28
40
  color: $ec-blue;
@@ -33,21 +45,8 @@ $header-link-active-background: #003776 !default;
33
45
  align-items: flex-end;
34
46
  }
35
47
 
36
- .bcl-header--neutral {
37
- .bcl-header__project {
38
- background: $gray-700;
39
- }
40
- }
41
-
42
- .bcl-header:not(.bcl-header--neutral) .bcl-header__project {
43
- padding-top: map-get($spacers, 3);
44
- }
45
-
46
48
  .bcl-header {
47
- .navbar-brand img {
48
- width: 100px;
49
- }
50
-
49
+ --oel-mega-menu-offset-top: 0px;
51
50
  .notification {
52
51
  position: relative;
53
52
  padding-right: 0;
@@ -64,16 +63,6 @@ $header-link-active-background: #003776 !default;
64
63
  }
65
64
  }
66
65
 
67
- .bcl-header__project .bcl-header__site-name {
68
- display: inline-block;
69
- margin-bottom: 0;
70
- font-size: 1.3rem;
71
- font-weight: 300;
72
- color: $white;
73
- vertical-align: middle;
74
- max-width: 80%;
75
- }
76
-
77
66
  .bcl-header__navbar.navbar {
78
67
  padding: 0;
79
68
  .dropdown-toggle,
@@ -87,12 +76,6 @@ $header-link-active-background: #003776 !default;
87
76
  }
88
77
  }
89
78
 
90
- @media only screen and (max-width: 400px) {
91
- .bcl-header--neutral .bcl-header__project-logo {
92
- display: none;
93
- }
94
- }
95
-
96
79
  @include media-breakpoint-up(md) {
97
80
  .bcl-header--ec,
98
81
  .ec__header {
@@ -114,33 +97,17 @@ $header-link-active-background: #003776 !default;
114
97
  header:has(.bcl-header__navbar #main-navbar.show),
115
98
  header:has(.bcl-header__navbar.collapsing),
116
99
  header:has(.bcl-header__navbar.show) {
117
- height: 100vh;
100
+ height: calc(100vh - var(--oel-mega-menu-offset-top, 0px));
118
101
  display: flex;
119
102
  flex-flow: column;
120
- overflow: auto;
121
103
 
122
104
  > div:has(.breadcrumb) {
123
105
  display: none;
124
106
  }
125
107
  }
126
108
 
127
- .bcl-header__project {
128
- padding: map-get($spacers, 3) 0;
129
- }
130
-
131
109
  .bcl-header {
132
- .bcl-header__project {
133
- z-index: 1040; // Make sure project bar is above the mega menu
134
- position: relative;
135
- box-shadow: var(--bs-box-shadow);
136
- flex-shrink: 0;
137
- }
138
- }
139
-
140
- .bcl-header:not(:has(.bcl-header__project)) {
141
- > .navbar:first-child {
142
- box-shadow: var(--bs-box-shadow);
143
- }
110
+ box-shadow: var(--bs-box-shadow);
144
111
  }
145
112
 
146
113
  .bcl-header nav + nav {
@@ -160,6 +127,7 @@ $header-link-active-background: #003776 !default;
160
127
  z-index: 1030;
161
128
  width: 100%;
162
129
  align-items: flex-start;
130
+ overflow: auto;
163
131
  .navbar-nav {
164
132
  width: 100%;
165
133
  margin-top: 1rem;
@@ -225,12 +193,6 @@ $header-link-active-background: #003776 !default;
225
193
  }
226
194
 
227
195
  @include media-breakpoint-up(lg) {
228
- .bcl-header__project.light,
229
- .bcl-header--ec .bcl-header__project.light,
230
- .ec__header .bcl-header__project.light {
231
- background: $white;
232
- }
233
-
234
196
  .bcl-header__navbar {
235
197
  background: linear-gradient(
236
198
  90deg,
@@ -256,33 +218,16 @@ $header-link-active-background: #003776 !default;
256
218
  }
257
219
  }
258
220
 
259
- .bcl-header__site-name {
260
- margin-left: map-get($spacers, 4);
261
- font-weight: 500;
262
- }
263
-
264
- .bcl-header__project.light .bcl-header__site-name {
265
- color: $black;
266
- }
267
-
268
221
  .bcl-header .navbar-toggler {
269
222
  position: relative;
270
223
  right: 0;
271
224
  bottom: 0;
272
225
  }
273
226
 
274
- .bcl-header .navbar-brand img {
275
- width: auto;
276
- }
277
-
278
227
  .bcl-header__navbar .bcl-mega-menu {
279
228
  --bcl-mega-menu-zindex: 1050; // Make sure dropdown overlaps the search offcanvas
280
229
  }
281
230
 
282
- .bcl-header:not(.bcl-header--neutral) .bcl-header__project {
283
- padding-bottom: map-get($spacers, 3);
284
- }
285
-
286
231
  .bcl-header__navbar.collapse {
287
232
  display: block;
288
233
  }
@@ -1,15 +1,57 @@
1
1
  /* stylelint-disable no-duplicate-selectors, selector-no-qualifying-type, no-descending-specificity */
2
2
 
3
+ $default-border-color: $gray-600;
4
+
3
5
  .form-select {
4
6
  padding-top: $input-padding-y-lg;
5
7
  padding-bottom: $input-padding-y-lg;
6
8
  padding-left: $input-padding-x-lg;
7
9
  font-size: $form-font-size-lg;
10
+ border-color: $default-border-color;
11
+ &:focus-visible {
12
+ border-color: $default-border-color;
13
+ box-shadow: none;
14
+ @include form-focus-ring();
15
+ &.is-valid {
16
+ outline-color: $success;
17
+ &:focus {
18
+ box-shadow: none;
19
+ border-color: $default-border-color;
20
+ }
21
+ }
22
+ &.is-invalid {
23
+ outline-color: $danger;
24
+ &:focus {
25
+ box-shadow: none;
26
+ border-color: $default-border-color;
27
+ }
28
+ }
29
+ }
30
+ &:focus {
31
+ box-shadow: none;
32
+ border-color: $default-border-color;
33
+ }
34
+ &.is-valid,
35
+ &.is-invalid {
36
+ &:focus {
37
+ box-shadow: none;
38
+ }
39
+ }
40
+ }
41
+
42
+ .form-check-input {
43
+ border-color: $primary;
8
44
  &:focus-visible {
9
- outline: 2px solid $primary;
45
+ &[type="radio"] {
46
+ border-radius: 50%;
47
+ }
48
+ }
49
+ &:focus {
50
+ border-color: $primary;
10
51
  box-shadow: none;
11
- border-radius: 4px;
12
- outline-offset: -1px;
52
+ }
53
+ &:focus-visible {
54
+ @include form-focus-ring(1px);
13
55
  }
14
56
  }
15
57
 
@@ -18,16 +60,35 @@
18
60
  padding: $input-padding-y-lg $input-padding-x-lg;
19
61
  font-size: $form-font-size-lg;
20
62
  border-radius: 0.3rem;
63
+ border-color: $default-border-color;
21
64
  &::file-selector-button {
22
65
  padding: $input-padding-y-lg $input-padding-x-lg;
23
66
  margin: (-$input-padding-y-lg) $input-padding-x-lg (-$input-padding-y-lg)
24
67
  (-$input-padding-x-lg);
25
68
  }
26
- &:focus-visible {
27
- outline: 2px solid $primary;
28
- box-shadow: none;
29
- border-radius: 4px;
30
- outline-offset: -1px;
69
+ &:focus:focus-visible {
70
+ border-color: $default-border-color;
71
+ @include form-focus-ring();
72
+ }
73
+ &.is-valid,
74
+ &.is-invalid {
75
+ &:focus {
76
+ box-shadow: none;
77
+ }
78
+ }
79
+ &.is-valid {
80
+ &:focus:focus-visible {
81
+ transition: none;
82
+ border-color: $default-border-color;
83
+ @include form-focus-ring($outline-color: $success);
84
+ }
85
+ }
86
+ &.is-invalid {
87
+ &:focus:focus-visible {
88
+ transition: none;
89
+ border-color: $default-border-color;
90
+ @include form-focus-ring($outline-color: $danger);
91
+ }
31
92
  }
32
93
  }
33
94
  .form-check:not(.form-switch) {
@@ -41,20 +102,6 @@
41
102
  margin-top: 0.15rem;
42
103
  }
43
104
  }
44
- .form-check-input {
45
- &:focus-visible {
46
- outline: 4px solid $primary;
47
- box-shadow: none;
48
- border-radius: 4px;
49
- outline-offset: 0;
50
- &[type="radio"] {
51
- border-radius: 50%;
52
- }
53
- }
54
- &:checked:focus-visible {
55
- border-color: $white;
56
- }
57
- }
58
105
 
59
106
  @include media-breakpoint-up(md) {
60
107
  .form-check:not(.form-switch) {
@@ -90,24 +137,18 @@
90
137
  textarea.form-control,
91
138
  .form-control {
92
139
  &.is-invalid {
93
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM8 4C7.46459 4 7.04623 4.46229 7.0995 4.99504L7.45025 8.50248C7.47849 8.78492 7.71616 9 8 9C8.28384 9 8.52151 8.78492 8.54975 8.50248L8.9005 4.99504C8.95377 4.46228 8.53541 4 8 4ZM8.00154 10C7.44926 10 7.00154 10.4477 7.00154 11C7.00154 11.5523 7.44926 12 8.00154 12C8.55383 12 9.00154 11.5523 9.00154 11C9.00154 10.4477 8.55383 10 8.00154 10Z' fill='%23D72E3D'/%3E%3C/svg%3E%0A");
140
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM8 4C7.46459 4 7.04623 4.46229 7.0995 4.99504L7.45025 8.50248C7.47849 8.78492 7.71616 9 8 9C8.28384 9 8.52151 8.78492 8.54975 8.50248L8.9005 4.99504C8.95377 4.46228 8.53541 4 8 4ZM8.00154 10C7.44926 10 7.00154 10.4477 7.00154 11C7.00154 11.5523 7.44926 12 8.00154 12C8.55383 12 9.00154 11.5523 9.00154 11C9.00154 10.4477 8.55383 10 8.00154 10Z' fill='%23A51F2C'/%3E%3C/svg%3E%0A");
94
141
  }
95
142
  &.is-valid {
96
143
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM12.0303 4.96967C11.7374 4.67678 11.2626 4.67678 10.9697 4.96967C10.9626 4.97674 10.9559 4.98424 10.9498 4.9921L7.4774 9.41674L5.38388 7.32322C5.09098 7.03033 4.61611 7.03033 4.32322 7.32322C4.03032 7.61612 4.03032 8.09099 4.32322 8.38388L6.96966 11.0303C7.26256 11.3232 7.73743 11.3232 8.03032 11.0303C8.03685 11.0238 8.043 11.0169 8.04876 11.0097L12.041 6.01947C12.3232 5.72582 12.3196 5.25897 12.0303 4.96967Z' fill='%2328A745'/%3E%3C/svg%3E%0A");
97
144
  }
98
145
  }
99
146
 
100
- .form-select:not([multiple]):not([size]) {
101
- &:focus-visible {
102
- outline: 2px solid $primary;
103
- box-shadow: none;
104
- border-radius: 4px;
105
- outline-offset: -1px;
106
- }
147
+ select.form-select:not([multiple]):not([size]) {
107
148
  &.is-invalid {
108
149
  background-image:
109
150
  url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E"),
110
- url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM8 4C7.46459 4 7.04623 4.46229 7.0995 4.99504L7.45025 8.50248C7.47849 8.78492 7.71616 9 8 9C8.28384 9 8.52151 8.78492 8.54975 8.50248L8.9005 4.99504C8.95377 4.46228 8.53541 4 8 4ZM8.00154 10C7.44926 10 7.00154 10.4477 7.00154 11C7.00154 11.5523 7.44926 12 8.00154 12C8.55383 12 9.00154 11.5523 9.00154 11C9.00154 10.4477 8.55383 10 8.00154 10Z' fill='%23D72E3D'/%3E%3C/svg%3E%0A");
151
+ url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM8 4C7.46459 4 7.04623 4.46229 7.0995 4.99504L7.45025 8.50248C7.47849 8.78492 7.71616 9 8 9C8.28384 9 8.52151 8.78492 8.54975 8.50248L8.9005 4.99504C8.95377 4.46228 8.53541 4 8 4ZM8.00154 10C7.44926 10 7.00154 10.4477 7.00154 11C7.00154 11.5523 7.44926 12 8.00154 12C8.55383 12 9.00154 11.5523 9.00154 11C9.00154 10.4477 8.55383 10 8.00154 10Z' fill='%23A51F2C'/%3E%3C/svg%3E%0A");
111
152
  }
112
153
  &.is-valid {
113
154
  background-image: