-
Notifications
You must be signed in to change notification settings - Fork 8.5k
[Core UI] Home Page Redesign Class & Style Tweaks #74037
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Core UI] Home Page Redesign Class & Style Tweaks #74037
Conversation
Adds auto scroll to advanced setting provided in the URL hash Registered plugins to feature catalogue to be displayed on home page Rearrange add data section Fix solution panel conditional rendering Removed extraneous import Remmoved environment update from observability plugin Registrered features to feature catalog for ingest manager, ml, and index lifecycle management Fixed import Added max width to Kibana solution card Fixed feature id Fixed enterprise search link Updated solutions logos Fixed beta label on ingest manager card Fixed logos Cleaned up CSS Change home route redirects user to advanced settings Conditionally renders default route advanced setting link Restored app search logo Hides graph description on home page on basic license Style home page header and other misc design tweaks (elastic#72481)
* layout tweaks, responsive styles * address feedback, improve bg color setup * use EUI var for header height
…catalogue [Design PR] Card images as backgrounds, consolidate styles, BEM changes
|
Pinging @elastic/kibana-core-ui (Team:Core UI) |
ryankeairns
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for cleaning things up. All the additional flex work and class changes are good with me. As you'll see in the comments, there are two main threads I think we need to discuss further:
- Whether to treat the solution cards more like branded elements (i.e. not switching between light/dark mode)
- Keeping the home page agnostic / not hard coding solution id's. Instead, having the solution plugin register content to the home page and using a more generic styling mechanism.
| <EuiPanel | ||
| paddingSize="none" | ||
| className="homSolutionsSection__panel" | ||
| className={`homSolutionPanel homSolutionPanel--${solution.id}`} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@cqliu1 should clarify, but there was feedback on the dev side that we should not hard code solution id's. Instead, the home page should remain agnostic while the plugins themselves push content into the home page.
As seen below, this results in the plugin registering a CSS class name which is unconventional, but allows us to push some complexity down the roadmap. In other words, we know this could be improved but we don't have a current need (nor do we anticipate any in the near team) for additional solutions to be added. At the point another solution or further content is needed, then we could improve upon the plugin registration format (i.e. use an enumerated prop instead of a class name).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, @cqliu1 and I spoke about the hard-coding of classes issue. I thought it was more the issue of hard-coding the solution classes (versus dynamically generating the classes, as I'm doing here by concatenating the solution.id prop to a class prefix string) was the issue. But perhaps I misunderstood the issue? If I have, then I'm not sure why classifying based on the content type (in this case, solution name) would be frowned upon if that is the case. Would it be possible to elaborate, assuming I've misunderstood?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since all the home plugin code lives in OSS, we want to avoid hardcoding names or other things that refer to licensed features, which I would assume includes CSS selectors as well. Would it be possible to use generic selectors that weren't solution or color specific?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Forgive me, but I'm still struggling to understand why this approach would be frowned upon. For the OSS situation, since the solution panels wouldn't be rendered on the home page, wouldn't these classes be absent from the OSS version of Kibana? Or do you mean simply having those classes present in the SCSS/CSS is problematic (regardless if the elements with these classes are rendered)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If I understand correctly, OSS code is rendering an element with a CSS class that is derived from the name of a solution that is registered via X-Pack. Is the CSS that applies to these CSS classes also in X-pack? If so, that seems reasonable. The only downside is that X-Pack will need to know the details of how these CSS classes are derived from the name of the solution, and this is somewhat brittle.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I ended up not needing to use DEFAULT_APP_CATEGORIES and found a way to refactor all of the home page redesign code without leaving any reference to features unavailable in OSS. These CSS classes are the only place where these solution IDs would appear. I was trying to avoid any mention of specific features/solutions in the home plugin code, but I don't feel that strongly against it if it's not a big deal to have solution specific selectors in Home plugin CSS files.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I ended up not needing to use DEFAULT_APP_CATEGORIES and found a way to refactor all of the home page redesign code without leaving any reference to features unavailable in OSS
That's great, and even better than I thought!! Given that, I think it makes sense to explore alternatives to hard-coding these solution specific styles in OSS. Ideally, OSS wouldn't know anything about X-Pack specific concerns. This ensures that we're creating OSS APIs in a truly extensible manner.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to make sure I understand, even though the only place that these solution-specific modifier classes would appear in the OSS version of Kibana is that one CSS file, we still wish to change them to no longer reference the solutions?
If so, anyone have any recommendations that aren't solution or style oriented?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this may circle back to what was previously in place and started this thread.
Say we have generic named classes that define several alternatives for card 'branding'. With those in place, the solution can define which brand it wants to follow. I realize this is all a little artificial feeling since solutions don't have defined brands afaik... although the solutions do have logos that we can lean on for color selection (as we've done already).
We could, in the future, expand this concept so that each solution plugin defines their brand settings in the plugin (register a brand color, namely). Catherine and I discussed this, but decided it was a bit much to bite off at the moment which is how we landed on the somewhat clunky class name approach. If it feels better, we could have each solution pass a brand color that is used for the header background color. In that case though, we might then need to do without the background images as that starts to get more complex and messy for this first version.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure I've got a good alternative... I'll keep brainstorming, but let's go ahead and merge in these changes and leave the solution specific CSS selectors in there for now.
| path: '/app/dashboards', | ||
| order: 400, | ||
| className: 'homSolutionsSection__blueCard', | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See comment above regarding why we likely need to keep this (or something similar to it).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My reasoning for changing this class (and similar classes) is because I'm attempting to avoid classifying elements based on the styles they will convey. Instead, I'm trying to classify elements based on their content and/or role. Doing so will prove more sustainable maintenance-wise.
For example, if we were to change the color of this element from blue to purple, we'd have to update both the CSS and the class name. With the class structure I'm proposing, we'd only have to update the CSS. Thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's get a better understanding of the id usage here. Generally speaking, I agree that putting the color in the class name is not great.
| path: '/app/enterprise_search/app_search', // TODO: update this link to enterprise search landing page | ||
| order: 100, | ||
| className: 'homSolutionsSection__greenCard', | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See comment above regarding why we likely need to keep this (or something similar to it).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See my comment above as well :)
| path: '/app/observability', | ||
| order: 200, | ||
| className: 'homSolutionsSection__magentaCard', | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See comment above regarding why we likely need to keep this (or something similar to it).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See my comment above as well :)
| icon: APP_ICON, | ||
| path: APP_OVERVIEW_PATH, | ||
| order: 300, | ||
| className: 'homSolutionsSection__blackCard', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See comment above regarding why we likely need to keep this (or something similar to it).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See my comment above as well :)
| } | ||
| } | ||
| .homSolutionPanel__icon { | ||
| background-color: $euiColorEmptyShade !important; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm thinking we should treat the card header designs more as branded elements meaning they don't change between light and dark themes. In the dark theme we do adjust colors for added contrast which then gets applied to buttons, icons, etc. In this case however, I feel this lightening leads to a less desirable visual treatment for the cards.
I'd like to hear other opinions, but I am in favor of treating the card headers more like brand elements - keeping the richer colors/not changing between themes/hard coding those values. This would include the background color, text color, and icon colors.
For those following along, this PR results in a dark mode that looks like:
Prior to this PR, it looks like:
cc:/ @alexfrancoeur
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While I like the concept of considering these card "branded" to some degree, I do personally prefer the high contrast colored header areas that is provided by using the EUI color variables. I like the attention it demands and the resulting look is one that doesn't offend me. Perhaps the branding concept and changing the colors between light and dark themes need not be mutually exclusive?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's subjective, I know, but on first sight I did not prefer the light shades of green and pink.
We're following the color variables religiously throughout Kibana - and for good reason - but this situation strikes me as a possible exception.
| .homSolutionsSection__multiple { | ||
| max-width: 50%; | ||
| .homSolutionPanel__header { | ||
| background-color: $euiColorPrimary; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I won't pepper this on each related change, but see the comment above regarding the solution card header design.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cool, left a comment above :)
3a841cb to
32c1448
Compare
…-class-tweaks # Conflicts: # src/plugins/advanced_settings/public/plugin.ts # src/plugins/home/public/application/components/__snapshots__/home.test.js.snap # src/plugins/home/public/application/components/_index.scss # src/plugins/home/public/application/components/add_data/add_data.tsx # src/plugins/home/public/application/components/change_home_route/__snapshots__/change_home_route.test.tsx.snap # src/plugins/home/public/application/components/change_home_route/change_home_route.test.tsx # src/plugins/home/public/application/components/change_home_route/change_home_route.tsx # src/plugins/home/public/application/components/home.js # src/plugins/home/public/application/components/home.test.js # src/plugins/home/public/application/components/manage_data/manage_data.tsx # src/plugins/home/public/plugin.ts # src/plugins/management/public/plugin.ts # src/plugins/saved_objects_management/public/plugin.ts # x-pack/plugins/apm/public/plugin.ts # x-pack/plugins/enterprise_search/public/plugin.ts # x-pack/plugins/infra/server/features.ts # x-pack/plugins/ingest_manager/kibana.json # x-pack/plugins/observability/public/plugin.ts # x-pack/plugins/painless_lab/public/plugin.tsx # x-pack/plugins/reporting/public/plugin.tsx # x-pack/plugins/searchprofiler/public/plugin.ts # x-pack/plugins/security_solution/public/plugin.tsx # x-pack/plugins/uptime/public/apps/plugin.ts
💔 Build Failed
Failed CI Steps
Test Failures"before all" hook for "navigates to the Overview page".Kibana navigation to all pages in the Security app "before all" hook for "navigates to the Overview page"Stack TraceFirefox UI Functional Tests.test/functional/apps/home/_home·js.homepage app Kibana takes you home clicking on console on homepage should take you to console appStandard OutStack TraceFirefox UI Functional Tests.test/functional/apps/home/_home·js.homepage app Kibana takes you home clicking on console on homepage should take you to console appStandard OutStack Traceand 75 more failures, only showing the first 3. Build metricsasync chunks size
page load bundle size
History
To update your PR or re-run it, just comment with: |
Adds auto scroll to advanced setting provided in the URL hash
Registered plugins to feature catalogue to be displayed on home page
Rearrange add data section
Fix solution panel conditional rendering
Removed extraneous import
Remmoved environment update from observability plugin
Registrered features to feature catalog for ingest manager, ml, and index lifecycle management
Fixed import
Added max width to Kibana solution card
Fixed feature id
Fixed enterprise search link
Updated solutions logos
Fixed beta label on ingest manager card
Fixed logos
Cleaned up CSS
Change home route redirects user to advanced settings
Conditionally renders default route advanced setting link
Restored app search logo
Hides graph description on home page on basic license
Style home page header and other misc design tweaks (#72481)
Fixed home page header links spacing
Hide solutions wrapper when no solutions are available
Design PR: layout tweaks, responsive styles (#72944)
* layout tweaks, responsive styles
* address feedback, improve bg color setup
* use EUI var for header height
Fixed merge conflict
Fixed click handler for change home route button
Updated app directory link
Moved app directory link from ChangeHomeRoute component to home component
Updated tests
Added FeatureCatalogueRegistryStart type
Home page refactor
Fixed prop types
Fixed nav links
Removed images from solution card components
card images as backgrounds, consolidate styles, BEM changes
style token icons for dark mode
fix page height
Updated home page feature order values
Added solutions registry to feature catalogue
Renamed solutions_panel to solutions_section
Updated copy
Removed imports
Chore: makes home plugin optional dependency
Fixed merge conflict
Added tests for new home components
Reverted component rename
[Core UI] Home Page Redesign Class & Style Tweaks (#74037)
Co-authored-by: Catherine Liu <catherine.liu@elastic.co>
Co-authored-by: Ryan Keairns <contactryank@gmail.com>
Co-authored-by: Catherine Liu <catherineqliu@outlook.com>
Fixed i18n errors
Adde feature catalogue registry tests
Rename components
Adds auto scroll to advanced setting provided in the URL hash
Registered plugins to feature catalogue to be displayed on home page
Rearrange add data section
Fix solution panel conditional rendering
Removed extraneous import
Remmoved environment update from observability plugin
Registrered features to feature catalog for ingest manager, ml, and index lifecycle management
Fixed import
Added max width to Kibana solution card
Fixed feature id
Fixed enterprise search link
Updated solutions logos
Fixed beta label on ingest manager card
Fixed logos
Cleaned up CSS
Change home route redirects user to advanced settings
Conditionally renders default route advanced setting link
Restored app search logo
Hides graph description on home page on basic license
Style home page header and other misc design tweaks (#72481)
Fixed home page header links spacing
Hide solutions wrapper when no solutions are available
Design PR: layout tweaks, responsive styles (#72944)
* layout tweaks, responsive styles
* address feedback, improve bg color setup
* use EUI var for header height
Fixed merge conflict
Fixed click handler for change home route button
Updated app directory link
Moved app directory link from ChangeHomeRoute component to home component
Updated tests
Added FeatureCatalogueRegistryStart type
Home page refactor
Fixed prop types
Fixed nav links
Removed images from solution card components
card images as backgrounds, consolidate styles, BEM changes
style token icons for dark mode
fix page height
Updated home page feature order values
Added solutions registry to feature catalogue
Renamed solutions_panel to solutions_section
Updated copy
Removed imports
Chore: makes home plugin optional dependency
Fixed merge conflict
Added tests for new home components
Reverted component rename
[Core UI] Home Page Redesign Class & Style Tweaks (#74037)
Co-authored-by: Catherine Liu <catherine.liu@elastic.co>
Co-authored-by: Ryan Keairns <contactryank@gmail.com>
Co-authored-by: Catherine Liu <catherineqliu@outlook.com>
Fixed i18n errors
Adde feature catalogue registry tests
Rename components
Adds auto scroll to advanced setting provided in the URL hash
Registered plugins to feature catalogue to be displayed on home page
Rearrange add data section
Fix solution panel conditional rendering
Removed extraneous import
Remmoved environment update from observability plugin
Registrered features to feature catalog for ingest manager, ml, and index lifecycle management
Fixed import
Added max width to Kibana solution card
Fixed feature id
Fixed enterprise search link
Updated solutions logos
Fixed beta label on ingest manager card
Fixed logos
Cleaned up CSS
Change home route redirects user to advanced settings
Conditionally renders default route advanced setting link
Restored app search logo
Hides graph description on home page on basic license
Style home page header and other misc design tweaks (#72481)
Fixed home page header links spacing
Hide solutions wrapper when no solutions are available
Design PR: layout tweaks, responsive styles (#72944)
* layout tweaks, responsive styles
* address feedback, improve bg color setup
* use EUI var for header height
Fixed merge conflict
Fixed click handler for change home route button
Updated app directory link
Moved app directory link from ChangeHomeRoute component to home component
Updated tests
Added FeatureCatalogueRegistryStart type
Home page refactor
Fixed prop types
Fixed nav links
Removed images from solution card components
card images as backgrounds, consolidate styles, BEM changes
style token icons for dark mode
fix page height
Updated home page feature order values
Added solutions registry to feature catalogue
Renamed solutions_panel to solutions_section
Updated copy
Removed imports
Chore: makes home plugin optional dependency
Fixed merge conflict
Added tests for new home components
Reverted component rename
[Core UI] Home Page Redesign Class & Style Tweaks (#74037)
Co-authored-by: Catherine Liu <catherine.liu@elastic.co>
Co-authored-by: Ryan Keairns <contactryank@gmail.com>
Co-authored-by: Catherine Liu <catherineqliu@outlook.com>
Fixed i18n errors
Adde feature catalogue registry tests
Rename components
Switched solution descriptions to static strings
Fixed registered features
Fixed i18n errors
Show/hide solutions based on available nav links
Removed solution property from feature catalogue entry
Revert text changes
Updated security link
Updated snapshots
Fixed home plugin tests
Added solutions section tests
Removed mock
Fixed tutorial directory a11y tests
Fix ui capabilities catalogue test
Turned solution title into link
Added tests
Fixed security solution tests
Fixed ts errors
Updated snapshots
Revert vega snapshot changes
Retrieves height of global nav when scrolling to a field in advanced settings
Removed a tag from solution panel title
Apply a11y feedback
Updated snapshots
Added proptypes
Updated chrome ui header snapshots
Fixed manage data tests
Adds auto scroll to advanced setting provided in the URL hash
Registered plugins to feature catalogue to be displayed on home page
Rearrange add data section
Fix solution panel conditional rendering
Removed extraneous import
Remmoved environment update from observability plugin
Registrered features to feature catalog for ingest manager, ml, and index lifecycle management
Fixed import
Added max width to Kibana solution card
Fixed feature id
Fixed enterprise search link
Updated solutions logos
Fixed beta label on ingest manager card
Fixed logos
Cleaned up CSS
Change home route redirects user to advanced settings
Conditionally renders default route advanced setting link
Restored app search logo
Hides graph description on home page on basic license
Style home page header and other misc design tweaks (#72481)
Fixed home page header links spacing
Hide solutions wrapper when no solutions are available
Design PR: layout tweaks, responsive styles (#72944)
* layout tweaks, responsive styles
* address feedback, improve bg color setup
* use EUI var for header height
Fixed merge conflict
Fixed click handler for change home route button
Updated app directory link
Moved app directory link from ChangeHomeRoute component to home component
Updated tests
Added FeatureCatalogueRegistryStart type
Home page refactor
Fixed prop types
Fixed nav links
Removed images from solution card components
card images as backgrounds, consolidate styles, BEM changes
style token icons for dark mode
fix page height
Updated home page feature order values
Added solutions registry to feature catalogue
Renamed solutions_panel to solutions_section
Updated copy
Removed imports
Chore: makes home plugin optional dependency
Fixed merge conflict
Added tests for new home components
Reverted component rename
[Core UI] Home Page Redesign Class & Style Tweaks (#74037)
Co-authored-by: Catherine Liu <catherine.liu@elastic.co>
Co-authored-by: Ryan Keairns <contactryank@gmail.com>
Co-authored-by: Catherine Liu <catherineqliu@outlook.com>
Fixed i18n errors
Adde feature catalogue registry tests
Rename components
Switched solution descriptions to static strings
Fixed registered features
Fixed i18n errors
Show/hide solutions based on available nav links
Removed solution property from feature catalogue entry
Revert text changes
Updated security link
Updated snapshots
Fixed home plugin tests
Added solutions section tests
Removed mock
Fixed tutorial directory a11y tests
Fix ui capabilities catalogue test
Turned solution title into link
Added tests
Fixed security solution tests
Fixed ts errors
Updated snapshots
Revert vega snapshot changes
Retrieves height of global nav when scrolling to a field in advanced settings
Removed a tag from solution panel title
Apply a11y feedback
Updated snapshots
Added proptypes
Updated chrome ui header snapshots
Fixed manage data tests
Adds auto scroll to advanced setting provided in the URL hash
Registered plugins to feature catalogue to be displayed on home page
Rearrange add data section
Fix solution panel conditional rendering
Removed extraneous import
Remmoved environment update from observability plugin
Registrered features to feature catalog for ingest manager, ml, and index lifecycle management
Fixed import
Added max width to Kibana solution card
Fixed feature id
Fixed enterprise search link
Updated solutions logos
Fixed beta label on ingest manager card
Fixed logos
Cleaned up CSS
Change home route redirects user to advanced settings
Conditionally renders default route advanced setting link
Restored app search logo
Hides graph description on home page on basic license
Style home page header and other misc design tweaks (#72481)
Fixed home page header links spacing
Hide solutions wrapper when no solutions are available
Design PR: layout tweaks, responsive styles (#72944)
* layout tweaks, responsive styles
* address feedback, improve bg color setup
* use EUI var for header height
Fixed merge conflict
Fixed click handler for change home route button
Updated app directory link
Moved app directory link from ChangeHomeRoute component to home component
Updated tests
Added FeatureCatalogueRegistryStart type
Home page refactor
Fixed prop types
Fixed nav links
Removed images from solution card components
card images as backgrounds, consolidate styles, BEM changes
style token icons for dark mode
fix page height
Updated home page feature order values
Added solutions registry to feature catalogue
Renamed solutions_panel to solutions_section
Updated copy
Removed imports
Chore: makes home plugin optional dependency
Fixed merge conflict
Added tests for new home components
Reverted component rename
[Core UI] Home Page Redesign Class & Style Tweaks (#74037)
Co-authored-by: Catherine Liu <catherine.liu@elastic.co>
Co-authored-by: Ryan Keairns <contactryank@gmail.com>
Co-authored-by: Catherine Liu <catherineqliu@outlook.com>
Fixed i18n errors
Adde feature catalogue registry tests
Rename components
Switched solution descriptions to static strings
Fixed registered features
Fixed i18n errors
Show/hide solutions based on available nav links
Removed solution property from feature catalogue entry
Revert text changes
Updated security link
Updated snapshots
Fixed home plugin tests
Added solutions section tests
Removed mock
Fixed tutorial directory a11y tests
Fix ui capabilities catalogue test
Turned solution title into link
Added tests
Fixed security solution tests
Fixed ts errors
Updated snapshots
Revert vega snapshot changes
Retrieves height of global nav when scrolling to a field in advanced settings
Removed a tag from solution panel title
Apply a11y feedback
Updated snapshots
Added proptypes
Updated chrome ui header snapshots
Fixed manage data tests


Summary
Hey, @cqliu1! Here's my stab at classing the solution panels like we were discussing earlier. Made a few additional tweaks while I was poking around, as well. Whenever you have a moment, take a peek and let me know if you have any questions/suggestions. Changes include:
homSolutionsSectionrelated classes.idprop.Also, I had a general question regarding the current use of a
buttonelement on the solution panels to link to the landing pages. Does it absolutely need to be abutton? Semantically speaking, I'm thinking anaelement might be more appropriate. Also, switching to anaelement avoids rendering invalid HTML (which is currently happening because of the use ofdivs and such as children of thebuttonelement). Thoughts?Parent Issue: #70571