Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 149 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,156 @@
# Changelog

## V4.1.2 or V4.2.0
## v4.2.0

**Note this upgrade is mainly a migration from Bootstrap 3 to Bootstrap 5.**

Note that this will have a significant impact on any scss and html customizations you may have made to your fork of this project.

The following links will be helpful:

[Get started with Bootstrap v5.2.3](https://getbootstrap.com/docs/5.2/getting-started/introduction/)<br>
[Migrating to v4](https://getbootstrap.com/docs/4.0/migration)<br>
[How to Migrate from Bootstrap Version 3 to 4](https://designmodo.com/migrate-bootstrap-4/)<br>
[Migrating to v5](https://getbootstrap.com/docs/5.0/migration)<br>
[How to Migrate from Bootstrap Version 4 to 5](https://designmodo.com/migrate-bootstrap-5/)<br>
[Use Bootstrap 5 with Ruby on Rails 6 and webpack](https://medium.com/daily-web-dev/use-bootstrap-4-with-ruby-on-rails-6-and-webpack-fe7300604267)<br>
[What happened to $grid-float-breakpoint in Bootstrap 4. And screen size breakpoint shift from 3 -> 4](
https://bibwild.wordpress.com/2019/06/10/what-happened-to-grid-float-breakpoint-in-bootstrap-4-and-screen-size-breakpoint-shift-from-3-4/)<br>
[What are media queries in Bootstrap 4?](https://www.educative.io/answers/what-are-media-queries-in-bootstrap-4)<br>

### Key changes

- Node package changes:
* Changed version of `bootstrap "^3.4.1"` --> `"^5.2.3"`
* Added `@popperjs/core.`
* Removed `bootstrap-3-typeahead, bootstrap-sass & popper.js`
- Stylesheet changes
* In `app/assets/stylesheets/application.scss`:
+ removed `bootstrap-sass` import <br>
and replaced with<br>
`@import "../../../node_modules/bootstrap/scss/bootstrap";`

* The order of the `import` statements have been changed to import the `blocks/` and `utils/` after the default bootstrap stylesheets

* In `app/assets/stylesheets/blocks/`:
+ Replaced in relevant files:
+ `@use "../../../../node_modules/bootstrap-sass/assets/stylesheets/_bootstrap.scss" as * ;`<br>
with <br>
`@use "../../../../node_modules/bootstrap/scss/bootstrap" as *;`
+ Enclosed all division calculations using symbol `/` with `calc()` function,<br>
e.g., replaced<br>
`padding-right: $grid-gutter-width / 2;`<br>
with<br>
`padding-right: calc($grid-gutter-width / 2);`<br>
+ Replaced breaking media queries since Bootstrap 3:
- `@media (max-width: $grid-float-breakpoint-max) {}`<br>
with<br>
`@include media-breakpoint-down(md){}`

- `@media (max-width: $grid-float-breakpoint-max) {}`<br>
with<br>
`@include media-breakpoint-down(md) {}`
* Deleted `app/javascript/src/utils/popoverHelper.js`.
+ Mixins
- Media query mixins parameters have changed for a more logical approach.
* `media-breakpoint-down()` uses the breakpoint itself instead of the next breakpoint (e.g., `media-breakpoint-down(lg)` instead of `media-breakpoint-down(md)` targets viewports smaller than lg).
+ Color system
- All `lighten()`and `darken()` functions replaced. These functions will mix the color with either white or black instead of changing its lightness by a fixed amount.
* Replaced `lighten()` by `tint-color()`.
* Replaced `darken()` by `shade-color()`.

#### Components & HTML

Note many of these Bootstrap changes has required us to rewrite or change some of the Javascript files.

When we use a native DOM element in Javascript, we obtain it by applying get() to the Jquery element (cf., https://api.jquery.com/get/).
We sometimes use the button native Dom element to programmatically click, as the Jquery button element with trigger('click') won't work because the trigger() function cannot be used to mimic native browser events, such as clicking (cf., https://learn.jquery.com/events/triggering-event-handlers/ )

+ Accordion & spinners
- Bespoke versions replaced by Bootstrap 5 accordion and spinner now.
- Accordion
* Changed the default Bootstrap arrow icon for the accordion to use the fontawesome icons plus and minus icons. Created a several accordion specific colour variables:
<br>// Accordion colors
<br> `$color-accordion-button: $color-primary-text`;
<br> `$color-accordion-button-icon: $color-primary-text`;
<br> `$color-accordion-button-bg: $color-primary-background`;
<br> `$color-accordion-button-active-bg: shade-color($color-accordion-button-bg, 30%)`;
<br>(See `app/assets/stylesheets/blocks/_accordion.scss` and `app/assets/stylesheets/variables/_colours.scss` for details.)
* The drag icon in `app/views/org_admin/sections/_section.html.erb` now appears after the plus (or minus) icon.
- The spinner block now uses class`d-none` instead of`hidden` to hide.
- In views with multiple accordion sections with "expand all" or "collapse all" links, we use the native Dom element of the accordion buttons to programmatically click, (cf. to note above).
+ Buttons
- Bootstrap dropped `btn-block` class for utilities. So we removed any styling using it.
- Close Buttons: Renamed `close` to`btn-close`.
- Renamed `btn-default` to `btn-secondary` and variable `$btn-default-color` changed to `$btn-secondary-color`.
+ Dropdowns
- Dropdown list items with class `dropdown` have class `dropdown-item` added usually with`px-3` for positioning.
- Added new `dropdown-menu-dark` variant and associated variables for on-demand dark dropdowns.
- Data attributes changes required by Bootstrap 5 (as used by accordion and dropdown buttons):
* `data-display` --> `data-bs-display`
* `data-parent` --> `data-bs-parent`
* `data-target` --> `data-bs-target`
* `data-toggle` --> `data-bs-toggle`
- Bootstrap 5 Popover added to some dropdown-menu items by adding attribute `data-bs-toggle="popover"`
+ Form
- `form-group` class replaced with `form-control`.
- Form labels now require `form-label` or `form-check-label` to go with `form-control` and `form-check` respectively. So all obsolete `control-label` replaced by `form-label` and missing ones added.
- Dropped form-specific layout classes for our grid system. Use Bootstrap grid and utilities instead of `form-group`, `form-row`, or `form-inline`.
- `form-text` no longer sets display, allowing you to create inline or block help text as you wish just by changing the HTML element.
- Input group addons are now specific to their placement relative to an input. So `input-group-addon` and in our case we replaced with
`input-group-addon`.
- Renamed `checkbox` and `radio` into `form-check`.
+ Images
- Renamed `img-responsive` to `img-fluid`.
+ Labels and badges
- Class `label` has been removed and replaced by `badge` to disambiguate from the `<label>` element.
* Renamed `label` class to `badge`
* Replaced `label-default` by `bg-secondary`
* Replaced `label-info` by `bg-info`
* Replaced `label-warning` by `bg-warning .text-dark`
* Replaced `label-danger` by `bg-danger`
+ Links
- Links are underlined by default (not just on hover), unless they're part of specific components. So we had to add css to remove underline in many cases.
+ Modals
- To programmatically show or hide a Bootstrap modal, we have followed both these approaches:
* Either, get access to the Jquery modal element and call functions `modal('show')` or `modal('hide')`.
* Or, apply click() to the native Dom element of the button to trigger the modal (cf. to note above).
+ Navs & navbars
- Bootstrap rewrote component with flexbox. Dropped nearly all > selectors for simpler styling via un-nested classes.
Instead of HTML-specific selectors like .nav > li > a, we use separate classes for `navs, nav-items, and nav-links`. (Note because the `nav-link` class has not always been added as it comes with styles not appropriate for our styling for links.)
This makes your HTML more flexible while bringing along increased extensibility. So we have dropped HTML-specific selectors and css in `_navs.scss`
e.g.,
<br>`.nav-tabs > li > a:hover` --> `nav-tabs nav-link:hover`,
<br>`.nav-pills > li > a:hover` -->`nav-pills .nav-link:hover`.
- Pages with css classes `nav` and`navbar` updated to work with Bootstrap 5. So `app/assets/stylesheets/blocks/_navbars.scss` and `app/assets/stylesheets/blocks/_navs.scss` updated.
* Replaced`nav navbar-nav` combination --> `navbar-nav`
* Replaced`navbar-toggle` --> `navbar-toggler`
* Replaced multiple spans in`navbar-toggle` button with class`icon-bar`<br> --> single span with`toggler-icon`
* Lists with `nav navbar-nav` have class`nav-item` added to list elements.
- Note because the `nav-link` class include styling that is not appropriate in many places, we have not included it in those cases.
+ Notifications
- Notifications now use classes `d-block` and `d-none` to show and hide respectively.
+ Panels, thumbnails & wells (replacements)
- Bootstrap 5 dropped panels, thumbnails and wells. So pages with them updated with Bootstrap 5 replacements.
* All views with css classes`panel, panel-body, panel-*` Have panel replaced by card to give `card, card_body, card-*`, etc.
* As `panel-default` and some otherpanel css classes don't have card equivalents with same suffixes we have added these classes temporarily in `_cards.sccs`, e.g.,`.card-default`, etc.
+ Utilities
- Bootstrap renamed several utilities to use logical property names instead of directional names with the addition of RTL support:
* Renamed `left-*` and `right-*` to `start-*` and `end-*`.
* Renamed `float-left` and `float-right` to `float-start` and `float-end`.
* Renamed `ml-*` and `mr-*` to `ms-*` and `me-*`.
* Renamed `pl-*` and `pr-*` to `ps-*` and `pe-*`.
* Renamed `text-left` and `text-right` to `text-start` and `text-end`.
- The `hidden` and `show` classes have been removed because they conflicted with jQuery's.
* Replaced `hidden` with `d-none`.
- Text utilities
* As Bootstrap 5.2 dropped class `text-justify` we have created a custom version based on comment https://github.com/twbs/bootstrap/pull/29793#issuecomment-1814683346
* `text-*` utilities do not add hover and focus states to links anymore. `link-*` helper classes can be used instead.

### Fixed
- Fixed rubocop errors after V4.1.1 release
- Fixed rubocop errors after Bootstrap upgrade
- Fixed RSpec tests after Bootstrap upgrade

## V4.1.1

### Added
Expand Down
30 changes: 25 additions & 5 deletions app/assets/stylesheets/application.scss
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
// Import locally defined variables. Load this before 'bootstrap'

@use "variables";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I need to learn more about the SASS rules, but I worry about this being @use "variables";, rather than @use "variables" as *; (or maybe @import "variables";)

// app/assets/stylesheets/variables/_bootstrap.scss
$link-decoration: none !default;
// node_modules/bootstrap/scss/_variables.scss
$link-decoration:                         underline !default;

I think we want our $link-decoration: none !default; to override the Bootstrap default.

// .gitignore
# /app/assets/builds/* Commented out see diff while testing

I ran rake assets:clobber && rake assets:precompile with @use "variables"; and commited the changes.
Next, I ran rake assets:clobber && rake assets:precompile with @use "variables" as *;. Here are some of the resultant differences in app/assets/builds/application.css (it looks like some of those Bootstrap overrides were being missed):

Screenshot from 2024-03-14 10-57-14

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CHANGELOG.md mentions "Links are underlined by default (not just on hover), unless they're part of specific components. So we had to add css to remove underline in many cases."
If we implement the above change, maybe we can remove the extra css that was added to handle the underlines?


@use "blocks";
@use "utils";

// Pull in the webpacker managed copy of Bootstrap Stylesheets
@import "../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We may be able to simplify all of the node_modules imports within .scss files.

We're using the cssbundling-rails gem, and the README includes the following:

How do I include 3rd party stylesheets from node_modules in my bundle?

Use an @import statement and path to a specific stylesheet, omitting the node_modules/ segment and the file's extension. For example:

/* Desired file is at at node_modules/select2/dist/css/select2.css */
@import "select2/dist/css/select2";

@import "../../../node_modules/bootstrap/scss/bootstrap";
@import "../../../node_modules/bootstrap-select/sass/bootstrap-select.scss";

// Pull in the webapcker managed copy of JQuery-UI Stylesheets
Expand All @@ -19,3 +15,27 @@ $fa-font-path: '.';
// @import '@fortawesome/fontawesome-free/scss/brands';
@import '@fortawesome/fontawesome-free/scss/regular';
@import '@fortawesome/fontawesome-free/scss/solid';

// Custom.scss
// Option B: Include parts of Bootstrap

// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc)
@import "../../../node_modules/bootstrap/scss/functions";

// 2. Include any default variable overrides here

// 3. Include remainder of required Bootstrap stylesheets
@import "../../../node_modules/bootstrap/scss/variables";
@import "../../../node_modules/bootstrap/scss/mixins";

// 4. Include any optional Bootstrap components as you like
@import "../../../node_modules/bootstrap/scss/root";
@import "../../../node_modules/bootstrap/scss/reboot";
@import "../../../node_modules/bootstrap/scss/type";
@import "../../../node_modules/bootstrap/scss/images";
@import "../../../node_modules/bootstrap/scss/containers";
@import "../../../node_modules/bootstrap/scss/grid";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the overriding of bootstrap variables is working as it should here (this seems to solve some issues I'm encountering while merging release v4.1.0 into DMP Assistant).

However, there may be some redundant import statements here. https://getbootstrap.com/docs/5.0/customize/sass/#importing states "You have two options: include all of Bootstrap, or pick the parts you need." I think we may be unnecessarily be adding both options.

e.g. node_modules/bootstrap/scss/bootstrap.scss includes the following:

@import "functions";
@import "variables";
@import "maps";
@import "mixins";
@import "utilities";

// Layout & components
@import "root";
@import "reboot";
@import "type";
@import "images";
@import "containers";
@import "grid";


//Importing customised stylesheets after Bootstrap defaults
@import "blocks";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not really due to this PR, but I noticed that the following ends up being added to app/assets/builds/application.css twice:

@font-face {
    font-family: 'GillSansLight';
    src: url(asset-path('GillSans-Light.ttf')) format("truetype");
    font-weight: normal;
  }

This code comes from app/assets/stylesheets/variables/_typography.scss. It must be getting added twice because of the way at-rules are handled. Also, app/assets/stylesheets/variables/_index.scss includes @forward 'typography' and @use '../variables/typography' as *; is mentioned in some of the app/assets/stylesheets/blocks/ files. Maybe the at-rule and the SASS variable in app/assets/stylesheets/variables/_typography.scss should each exist in separate directories?

@import "utils";
2 changes: 1 addition & 1 deletion app/assets/stylesheets/blocks/_accessibility.scss
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ div.skip a:focus {
}

/** Focus outline required for accessibility */
a, input, select, .form-control {
a, input, select, .form-control input, .form-control textarea {
&:focus,
&:hover,
&:active {
Expand Down
82 changes: 82 additions & 0 deletions app/assets/stylesheets/blocks/_accordion.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
@use '../variables/colours' as *;

@import "../../../../node_modules/bootstrap/scss/functions";
@import "../../../../node_modules/bootstrap/scss/variables";


// An explanation of how we change the Bootstrap arrow icon for the accordion to use the fontawesome icons.
// First we get the fontawesome plus.svg and minus.svg for use in background image from:
// node_modules/@fortawesome/fontawesome-free/svgs/solid/plus.svg (in .accordion-button.collapsed::after)
// node_modules/@fortawesome/fontawesome-free/svgs/solid/minus.svg
// We then encode the svg.
// Next the svg fill attribute is added with color set by a variable $color-accordion-button-icon in the _colours.scss.
// This allows us to change color of symbols.
// "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='#{$color-accordion-button-icon}'
// SVG we are using are encoded with fill added as fill='#{$color-accordion-button-icon}':
// After encoding # symbols in svg with the unicode %23. Hence the use of the replace function.
// We could have done this without str-replace by adding encoded fill='%23{$color-accordion-button-icon}'.
// Example of process for version Font Awesome Free 6.4.0 (node_modules/@fortawesome/fontawesome-free).
// Get svgs
// node_modules/@fortawesome/fontawesome-free/svgs/solid/plus.svg:
// <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z"/></svg>
// Encode using a "URL-encoder for SVG" like https://yoksel.github.io/url-encoder/
// %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3C!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E
// Repeat for
// node_modules/@fortawesome/fontawesome-free/svgs/solid/minus.svg
// <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"/></svg>
// Encode using a "URL-encoder for SVG"
// %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3C!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --%3E%3Cpath d='M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z'/%3E%3C/svg%3E?
// We now use svgs as the background-image for the .accordion-button class as follows leaving a space.
// After viewBox='0 0 448 512' we add fill='#{$color-accordion-button-icon}' as follows:
// For node_modules/@fortawesome/fontawesome-free/svgs/solid/plus.svg:
// %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='#{$color-accordion-button-icon}'%3E%3C!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E
// node_modules/@fortawesome/fontawesome-free/svgs/solid/minus.svg:
// %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='#{$color-accordion-button-icon}'%3E%3C!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --%3E%3Cpath d='M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z'/%3E%3C/svg%3E??
// Now add to scss with a str-replace javascript function (which replaces '#' with '%23' after evaluation of #{$color-accordion-button-icon}.
// background-image: str-replace(url("data:image/svg+xml, ENCODED_SVG, , '#', '%23');

// Change when fontawesome library upgraded. Using Font Awesome Free 6.4.0 (node_modules/@fortawesome/fontawesome-free). See above explanation on how it is done.
.accordion-button::after, .accordion-button.collapsed::after {
background-image: str-replace(url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='#{$color-accordion-button-icon}'%3E%3C!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E"), '#', '%23');
}

.accordion-button:not(.collapsed)::after {
background-image: str-replace(url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='#{$color-accordion-button-icon}'%3E%3C!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --%3E%3Cpath d='M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z'/%3E%3C/svg%3E"), '#', '%23');
transition: all 0.5s;
}


// // move fa-arrows-alt to right
h2.accordion-header {
display: flex;
align-items: center;
color: $color-accordion-button;
background-color: $color-accordion-button-bg;
font-size: 1rem;
}

h2.accordion-header > a.i {
margin-left: auto;
}

// Remove box-shadow and highlight from Accordion button
a.accordion-button,
a.accordion-button.collapsed,
a.accordion-button:not(.collapsed),
a.accordion-button:hover,
a.accordion-button:active,
a.accordion-button:focus,
a.accordion-button:focus-visible,
button.accordion-button.collapsed,
button.accordion-button:not(.collapsed),
button.accordion-button,
button.accordion-button:hover,
button.accordion-button:active,
button.accordion-button:focus,
button.accordion-button:focus-visible {
color: $color-accordion-button;
background-color: $color-accordion-button-bg;
text-decoration: none !important;
box-shadow: none !important;
outline: none !important;
}
Loading