@datalayer/core
Version:
**Datalayer Core**
684 lines (571 loc) • 16.1 kB
CSS
/*
* Copyright (c) 2023-2025 Datalayer, Inc.
* Distributed under the terms of the Modified BSD License.
*/
.SubNav__container {
position: absolute;
width: 100%;
z-index: 2;
}
.SubNav__container--with-anchor-nav {
display: unset;
position: relative;
}
.SubNav {
width: 100%;
display: flex;
padding: var(--base-size-16);
z-index: 1;
}
[data-color-mode='dark'] .SubNav {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.SubNav__heading {
font-weight: var(--base-text-weight-semibold);
color: var(--brand-color-text-default);
font-family: var(--brand-heading-fontFamily);
text-decoration: none;
}
.SubNav__heading:hover {
color: var(--brand-color-text-muted);
text-decoration: none ; /* dotcom override */
}
.SubNav--header-container-outer {
width: 100%;
}
.SubNav__heading-container {
position: relative;
z-index: 9998;
display: inline-block;
margin-inline-end: var(--base-size-16);
}
.SubNav--has-shadow {
box-shadow: var(--brand-SubNav-shadow);
background-color: var(--brand-color-canvas-default);
}
.SubNav--full-width {
padding-inline: 0;
}
.SubNav__action-container {
margin-left: auto;
}
.SubNav__sub-menu-icon {
display: none ;
}
.SubNav__sub-menu-children {
display: contents;
}
.SubNav__links-overlay {
list-style: none;
margin: 0;
padding: 0;
}
.SubNav__links-overlay > span {
display: none;
}
.SubNav__sub-menu-toggle {
display: none;
}
.SubNav__heading-separator {
position: relative;
top: var(--base-size-2);
color: var(--brand-color-text-muted);
}
/*
* Anchor Nav Submenu
*/
.SubNav__anchor-menu-outer-container {
position: sticky;
top: -1px;
z-index: 91; /* must be higher than subdomain nav bar */
}
.SubNav__anchor-menu-container {
opacity: 0;
background-color: transparent;
transform: translateY(var(--brand-animation-variant-slideInDown-distance));
transition: opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default),
background-color var(--brand-animation-duration-default) var(--brand-animation-easing-default);
}
.SubNav__anchor-menu-outer-container--stuck .SubNav__anchor-menu-container {
transform: translateY(0);
opacity: 1;
background-color: var(--brand-color-canvas-default);
}
.SubNav__anchor-menu-outer-container {
height: 0;
transition: height var(--brand-animation-duration-default) var(--brand-animation-easing-default);
}
.SubNav__anchor-menu-outer-container--stuck {
height: auto;
}
.SubNav__sub-menu--anchor {
opacity: 0;
visibility: hidden;
transform: translateY(var(--brand-animation-variant-slideInDown-distance));
transition: opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default),
height var(--brand-animation-duration-default) var(--brand-animation-easing-default),
transform var(--brand-animation-duration-default) var(--brand-animation-easing-default);
}
.SubNav__anchor-menu-outer-container--stuck .SubNav__sub-menu--anchor {
visibility: visible;
opacity: 1;
transform: translateY(0);
}
.SubNav__sub-menu--anchor {
display: flex;
padding-block-start: var(--base-size-12);
padding-block-end: var(--base-size-20);
}
.SubNav__sub-menu--anchor .SubNav__sub-menu-list {
display: inline-flex;
list-style-type: none;
margin: 0;
padding: 0;
gap: var(--base-size-20);
}
.SubNav__sub-menu--anchor .SubNav__link--is-in-view .SubNav__link-label {
color: var(--brand-color-text-default);
}
.SubNav__sub-menu--anchor .SubNav__link--is-in-view .SubNav__link-label::after,
.SubNav__link:hover .SubNav__link-label::after,
.SubNav__link:focus-visible .SubNav__link-label::after,
.SubNav__link[aria-current]:not([aria-current='false']) .SubNav__link-label::after {
opacity: 1;
transform: scale(0.8, 1);
}
.SubNav__sub-menu--anchor .SubNav__link--is-in-view .SubNav__link-label::after,
.SubNav__link:active .SubNav__link-label::after {
border-color: var(--brand-color-text-default);
transform: scale(0.9, 1);
}
.SubNav__link[data-active='true'] .SubNav__link-label::after,
.SubNav__sub-menu--anchor .SubNav__link--is-in-view .SubNav__link-label::after {
border-color: var(--brand-color-text-default);
opacity: 1;
}
.SubNav__link:focus-visible .SubNav__link-label::after,
.SubNav__sub-menu--anchor .SubNav__link--is-in-view:focus-visible .SubNav__link-label::after {
opacity: 0;
}
.SubNav__link:hover .SubNav__link-label::after,
.SubNav__link[aria-current]:not([aria-current='false']) * {
color: var(--brand-SubNav-color-link-active);
text-decoration: none ; /* dotcom override */
}
.SubNav__link-label::after {
content: '';
position: absolute;
bottom: calc(var(--base-size-2) * -1);
left: 0;
width: 100%;
height: 2px;
border-width: 2px;
border-bottom: var(--base-size-2) solid var(--brand-color-text-muted);
transition: opacity var(--brand-animation-duration-fast), transform var(--brand-animation-duration-fast),
border-color var(--brand-animation-duration-fast);
opacity: 1;
transform: scale(0);
transform-origin: center;
}
.SubNav__link[aria-current]:not([aria-current='false']) .SubNav__link-label::after {
border-color: var(--brand-color-text-default);
}
.SubNav__link:hover .SubNav__link-label {
transition: color var(--brand-animation-duration-fast) var(--brand-animation-easing-default);
color: var(--brand-SubNav-color-link-active);
}
.SubNav__link:hover .SubNav__link-label::after {
border-color: var(--brand-color-text-default);
}
/*
* Narrow breakpoint
*/
@media screen and (max-width: 63.24rem) {
.SubNav {
position: relative;
}
.SubNav::before {
content: '';
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
opacity: 0;
z-index: 9997;
}
.SubNav::after {
content: '';
z-index: -1;
position: fixed;
background-color: var(--base-color-scale-black-0);
opacity: 0;
visibility: hidden;
top: 0;
right: 0;
left: 0;
bottom: 0;
width: 100%;
height: 100%;
}
.SubNav--open::after {
opacity: 0.3;
visibility: visible;
transition: visibility var(--brand-animation-duration-default) var(--brand-animation-easing-default),
opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default);
}
.SubNav__heading {
font-size: var(--base-size-16);
line-height: var(--base-size-24);
}
.SubNav--open {
display: block;
}
.SubNav--open + .SubNav__anchor-menu-outer-container {
z-index: -1;
}
.SubNav--open::before {
background-color: var(--brand-color-canvas-default);
animation: fade-in 0.3s var(--brand-animation-easing-glide) forwards;
}
.SubNav__header-container {
display: flex;
width: 100%;
white-space: pre;
}
.SubNav__heading-separator {
margin-inline-end: var(--base-size-16);
z-index: 9998;
}
.SubNav__heading-separator:not(.SubNav__heading-separator--has-adjacent-label) {
display: none;
}
.SubNav__links-overlay {
position: relative;
display: flex;
flex: auto;
flex-direction: column;
justify-content: center;
z-index: 9998;
display: none;
}
.SubNav__links-overlay--open {
display: flex;
flex-direction: column;
gap: var(--base-size-8);
padding-block-start: var(--base-size-16);
padding-block-end: var(--base-size-16);
}
.SubNav__links-overlay--open .SubNav__link:hover .SubNav__link-label {
color: var(--brand-color-text-default);
}
.SubNav__links-overlay--open .SubNav__link--has-sub-menu:hover .SubNav__link-label {
color: var(--brand-color-text-muted);
}
.SubNav__overlay-toggle {
background-color: transparent;
border: none;
cursor: pointer;
display: flex;
position: relative;
width: 100%;
display: flex;
order: 1;
z-index: 9999;
padding-inline: 0;
justify-content: end;
}
.SubNav__overlay-toggle-content {
justify-content: space-between;
width: 100%;
}
.SubNav--full-width .SubNav__overlay-toggle {
right: 0;
}
.SubNav__link,
.SubNav__action-container {
display: none;
text-decoration: none;
}
.SubNav__links-overlay--open .SubNav__link-label {
position: relative;
}
.SubNav__links-overlay--open .SubNav__link[aria-current]:not([aria-current='false']) * {
color: var(--brand-SubNav-color-link-active);
}
.SubNav__links-overlay--open .SubNav__link,
.SubNav__links-overlay--open .SubNav__action-container {
display: block;
padding: var(--base-size-8) 0;
animation: fade-in 0.3s var(--brand-animation-easing-glide) forwards;
}
.SubNav__links-overlay--open .SubNav__link--has-sub-menu {
padding-block: 0;
}
.SubNav__links-overlay--open .SubNav__action-container {
width: 100%;
}
.SubNav__links-overlay--open .SubNav__action {
width: 100%;
}
.SubNav__sub-menu {
list-style: none;
padding: 0;
margin: 0;
padding-inline-start: var(--base-size-16);
}
.SubNav__sub-menu--dropdown .SubNav__link:hover .SubNav__link-label {
color: var(--brand-color-text-default) ;
}
.SubNav__anchor-menu-container {
z-index: 99;
overflow-x: auto;
overflow-y: hidden;
width: 100%;
}
.SubNav__anchor-menu-outer-container {
position: sticky;
top: -1px;
}
.SubNav__anchor-menu-outer-container::after {
content: '';
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: var(--base-size-32);
background: linear-gradient(to left, var(--brand-color-canvas-default), transparent);
pointer-events: none;
z-index: 100;
}
.SubNav__link-label {
font-size: var(--brand-text-size-200);
font-weight: var(--base-text-weight-semibold);
padding-block-end: var(--base-size-6);
}
.SubNav__sub-menu--anchor {
padding-inline: var(--base-size-16);
padding-block-end: var(--base-size-16);
padding-block-start: var(--base-size-16);
}
.SubNav__sub-menu--anchor .SubNav__link-label {
font-size: var(--brand-text-size-100);
line-height: var(--brand-text-lineHeight-100);
letter-spacing: var(--brand-text-letterSpacing-100);
}
.SubNav__sub-menu--anchor .SubNav__sub-menu-list {
padding-inline-end: var(--base-size-32);
}
.SubNav__sub-menu--anchor .SubNav__link {
display: block;
white-space: pre;
position: relative;
}
.SubNav .SubNav__link-label::after {
opacity: 0;
transform: scale(0);
bottom: 0;
}
.SubNav__link:hover .SubNav__link-label::after,
.SubNav__link:focus-visible .SubNav__link-label::after,
.SubNav__link[aria-current]:not([aria-current='false']) .SubNav__link-label::after {
opacity: 1;
transform: scale(1);
}
}
.SubNav__overlay-toggle-icon {
fill: var(--brand-color-text-default);
}
.SubNav__overlay-toggle-content {
display: flex;
align-items: center;
gap: var(--base-size-8);
/* optical alignment */
position: relative;
top: calc(var(--base-size-4) / 4 * -1);
}
.SubNav__overlay-toggle-content--end {
justify-content: flex-end;
}
@media screen and (min-width: 48rem) {
.SubNav {
padding: var(--base-size-16) var(--base-size-24);
}
.SubNav--full-width {
padding-inline: 0;
}
.SubNav__sub-menu--anchor {
padding-inline: var(--base-size-24);
}
}
.SubNav__heading-label {
white-space: pre;
}
/*
* Wide breakpoint
*/
@media screen and (min-width: 63.25rem) {
.SubNav {
padding: var(--base-size-16) var(--base-size-32);
align-items: center;
display: flex;
z-index: 92;
}
.SubNav:has(+ .SubNav__anchor-menu-container) {
padding-block-end: 0;
}
.SubNav--full-width {
padding-inline: 0;
}
.SubNav__overlay-toggle {
display: none;
}
.SubNav__heading {
font-size: calc(var(--base-size-20) - 2px);
line-height: var(--base-size-24);
}
.SubNav__heading-separator {
margin-inline-end: var(--base-size-20);
}
.SubNav--header-container-outer {
display: flex;
align-items: center;
}
.SubNav__heading-container {
margin-inline-end: var(--base-size-20);
}
.SubNav__links-overlay {
align-items: center;
display: flex;
gap: var(--base-size-20);
z-index: 92;
flex-grow: 1;
}
.SubNav__link {
text-decoration: none ; /* dotcom override */
transition: color 0.2s var(--brand-animation-easing-glide);
position: relative;
padding: var(--base-size-4) 0;
}
.SubNav__link-label {
font-size: var(--brand-text-size-100);
line-height: var(--brand-text-lineHeight-100);
}
.SubNav__link--has-sub-menu {
padding: var(--base-size-4) 0;
}
/* To fix hover distance between link and dropdown */
.SubNav__link--has-sub-menu::after {
content: '';
position: absolute;
bottom: calc(var(--base-size-12) * -1);
left: 0;
width: 100%;
height: var(--base-size-12);
background: transparent;
}
.SubNav__sub-menu.SubNav__sub-menu--dropdown {
background-clip: padding-box;
background-color: var(--brand-SubNav-color-subMenu-bgColor);
border: var(--borderWidth-thin, max(1px, 0.0625rem)) solid var(--borderColor-default, var(--color-border-default));
border-radius: var(--brand-borderRadius-xlarge, 0.375rem);
box-shadow: var(--shadow-floating-legacy, var(--color-shadow-large));
left: 0;
list-style: none;
margin-block-start: var(--base-size-8);
padding: var(--base-size-24);
padding-inline-end: var(--base-size-24);
position: absolute;
top: 100%;
z-index: 9998;
transition-timing-function: var(--brand-animation-easing-glide);
transition-duration: var(--brand-animation-duration-fast);
transition-property: opacity, transform;
left: calc(var(--base-size-4) / 4 * -16);
visibility: hidden;
opacity: 0;
transform: scale(0.99) translateY(-0.7em) translateX(-8px);
transform-origin: top;
display: flex;
flex-direction: column;
gap: var(--base-size-8);
width: var(--brand-SubNav-width-subMenu);
}
.SubNav__link--expanded .SubNav__sub-menu.SubNav__sub-menu--dropdown {
visibility: visible;
opacity: 1;
transform: scale(1) translateY(0) translateX(-8px);
box-shadow: var(--brand-SubNav-shadow);
}
.SubNav__sub-menu-toggle {
border: none;
padding: 0;
margin: 0;
background: none;
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.SubNav__sub-menu .SubNav__link {
display: block;
}
.SubNav__sub-menu--dropdown .SubNav__link:hover .SubNav__link-label {
color: var(--brand-color-text-default) ;
}
.SubNav__sub-menu--dropdown .SubNav__link-label::after {
opacity: 1;
transform: scale(0);
}
.SubNav__link--has-sub-menu {
position: relative;
display: inline-flex;
align-items: center;
gap: var(--base-size-4);
cursor: pointer;
}
.SubNav__sub-menu--dropdown .SubNav__link-label {
position: relative;
padding: var(--base-size-4) 0;
}
/* Show underline on submenu parent when child has aria-current */
.SubNav__link--has-sub-menu:has(.SubNav__link[aria-current]:not([aria-current='false']))
> .SubNav__link
.SubNav__link-label::after {
opacity: 1;
transform: scale(0.8, 1);
}
.SubNav__link--has-sub-menu .SubNav__link[aria-current]:not([aria-current='false']) .SubNav__link-label::after,
.SubNav__link--has-sub-menu .SubNav__link:hover .SubNav__link-label::after {
opacity: 1;
transform: scale(1);
}
.SubNav__sub-menu-icon {
display: inline-block ;
fill: var(--brand-color-text-muted);
transition: transform var(--brand-animation-duration-fast);
}
.SubNav__link--has-sub-menu:hover .SubNav__sub-menu-icon {
transform: translateY(2px);
}
.SubNav__sub-menu--anchor {
padding-inline: var(--base-size-32);
}
}
@keyframes fade-in {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes fade-in-down {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}