@bakung-ui/bakung.css
Version:
HTML UI library pure CSS, lightweight, no javascript
2,507 lines (1,927 loc) • 160 kB
CSS
@charset "UTF-8";
/*************************
Sizes
(--size-lg: ≥ 1600px)
--size-md: ≥ 1280px
816px
--size-sm: ≥ 768px
--size-xs: ≥ 640px
576px
######################
>>> TABLE OF CONTENTS:
######################
## Set up new styles and overrides for minimax.css
## Component (Widget) & Element
### Avatar
### Badge
└ Chip
### Button
### Checkbox & Radio button
* Removeable
* Switchable
* Toggle
### Divider
### Media
* Image (+ Picture)
* Video
//TODO: Change this to flex so that the popover menu can open from right to left when it's stacked vertically.
### Navbar
└ Breadcrumb
### Steps
### Tabs
### Tooltip
### Dialog
### Notice (info)
└ Notify (toast)
### Popper (Popover)
### Panel
### Floater
### Appear
└ Off canvas
### Accordions
### Cards
├ Scrollable
└ Slide
//TODO: slide__item-description Set a maximum height to prevent the element from expanding indefinitely when the text content is long
### Slide (Carousel)
// └ Gallery // desain lain carousel ❗
### Group
//TODO: Create a class so that when displaying or in a specific state (error, success), it can trigger border changes, display supporting icons, or both.
### Form
//└ Compact/Normal/Spacious ❗
### Container
### Row, Column
//### Description List
//### File
//### Image Comparison ❗
//### List group
//### Progress
//### Slider (Range)
### Table ❗
### @Container
### @Media screen
## Visual component & Visual helpers
### Landmark
* Be-icon
├ Burger menu
├ Caret
├ Chevron
├ Circle
├ Exclamation
├ External link
├ Info (i)
├ Left check
├ Loading
├ Rectangle
├ Stop
├ Triangle
└ Close / remove (x)
* visual-aside
* visual-indicator
* Stack
### Placeholder (empty, skeleton)
### Interactions
* pointer-events-none
* txt-select-all
* txt-select-auto
* txt-select-none
### Be-animation
├ Pulse
├ Rotate
└ Tilt-shake
## Utilities
### Appearance
* Background
- colors
- opacity
* Border
- colors
- opacity
- radius
- width
* Cursors
* Text
- colors
- text opacity
- text-*
* Views
- fade
- shadow
- opacity
* Visibilities
- invisible
- visible
### Layout
* Dimensions
- height
- width
- scale
- size
* Displays
- displays
- flex-*
- grid-*
- overflow
- flip
- rotate
- clearfix
* Positions
- float*
- position*
- inset*
- top, right, bottom, left
- align*
- justify*
- vertical*
- stretch
- Offset
- Order
* Spaces
- gap
- column gap
- row gap
- margin
- padding
- grid*
* Index
### Typography & Font
* Header
* Subheader & Subtext
* Font size, weight, style
* Text align, transform, decoration, wrap, muted, truncate
* Line height
### @Container
### @Media screen
*************************/
@import '_variables.css';
/* INFO: Comment out this line when in development mode when you manually link the file in HTML <head>. */
@import "@bakung-ui/minimax.css/css/_minimax.css";
/* INFO: Set up new styles and overrides for minimax.css */
@layer base {
}
@layer ui {
/*
## Component (Widget) & Element
*/
/*
### Avatar
*/
.avatar {
font: 300 calc(var(--avatar--font-size, .75rem) * var(--avatar-size)) var(--font-family);
background: var(--color-base-6);
border-radius: .125em;
height: var(--avatar--height, 2em);
width: var(--avatar--width, 2em);
position: relative;
display: inline-block;
text-align: center;
}
[data-avatar-name]::before {
content: attr(data-avatar-name);
font-size: .5em;
width: 80%;
position: absolute;
inset: 50% auto auto 50%;
translate: -50% -50%;
overflow: hidden;
}
.avatar__img {
border-radius: inherit;
height: 100%;
width: 100%;
position: absolute;
inset: 0 auto auto 0;
z-index: 1;
}
.avatar__figure:not(img) {
border-radius: inherit;
position: absolute;
inset: 50% auto auto 50%;
display: block;
translate: -50% -50%;
z-index: 1;
}
.avatar__indicator {
background: var(--bg-color-off);
border-radius: 50%;
box-shadow: 0 0 0 1px var(--color-base-5);
height: var(--avatar__indicator--height, .65em);
width: var(--avatar__indicator--width, .65em);
position: absolute;
inset: 0 -.25em auto auto;
text-align: center;
z-index: 1;
}
.avatar--circle {
border-radius: 50%;
.avatar__indicator {
inset: 0 0 auto auto;
translate: 0;
}
}
/*
### Badge
*/
.badge {
user-select: none;
font: normal normal calc(var(--badge--font-size, .9rem) * var(--badge-size)) / 1 var(--font-family);
color: var(--badge--color, var(--color-base-50));
background: var(--badge--bg-color, var(--color-base-6));
border: 0 var(--badge--border-style, solid) var(--badge--border-color, var(--border-color-boundary));
border-width: var(--badge--borders-width, 1px);
border-radius: var(--badge--borders-radius, 1rem);
white-space: nowrap;
min-height: var(--badge--min-height, .75rem);
min-width: var(--badge--min-width, .75rem);
display: inline-block;
margin: 0; /*reset fieldset > label margin*/
padding: .125rem .5rem .25rem;
display: inline-flex;
align-items: baseline;
a& {
text-decoration: none;
}
}
.badge--accent {
color: white;
background: var(--accent-color);
border-color: var(--accent-color);
}
.badge--low {
background: var(--color-low-10);
border-color: var(--color-low-20);
}
.badge--normal {
background: var(--color-normal-10);
border-color: var(--color-normal-20);
}
.badge--important {
background: var(--color-important-10);
border-color: var(--color-important-20);
}
.badge--critical {
background: var(--color-critical-10);
border-color: var(--color-critical-20);
}
.badge--success {
background: var(--color-success-10);
border-color: var(--color-success-20);
}
.badge--info {
background: var(--color-info-10);
border-color: var(--color-info-20);
}
.badge--caution {
background: var(--color-caution-10);
border-color: var(--color-caution-20);
}
.badge--warning {
background: var(--color-warning-10);
border-color: var(--color-warning-20);
}
.badge--error {
background: var(--color-error-10);
border-color: var(--color-error-20);
}
.badge--danger {
color: var(--color-danger-70);
background: var(--color-danger-10);
border-color: var(--color-danger-20);
}
/**************** Chip ****************/
.badge--chip {
background: var(--bg-color);
border: 1px solid currentColor;
border-radius: .25rem;
transition: color 200ms ease-out, background 200ms ease-out, border 200ms ease-out;
:where(&) .btn--icon {
color: inherit;
}
&:where(.badge--accent) {
color: var(--accent-color);
}
&:where(.badge--low) {
color: var(--color-low-50);
}
&:where(.badge--normal) {
color: var(--color-normal-50);
}
&:where(.badge--important) {
color: var(--color-important-50);
}
&:where(.badge--critical) {
color: var(--color-critical-50);
}
&:where(.badge--success) {
color: var(--color-success-50);
}
&:where(.badge--info) {
color: var(--color-info-50);
}
&:where(.badge--caution) {
color: var(--color-caution-50);
}
&:where(.badge--warning) {
color: var(--color-warning-50);
}
&:where(.badge--error) {
color: var(--color-error-50);
}
&:where(.badge--danger) {
color: var(--color-danger-50);
}
}
/*
### Button
*/
.btn {
--btn--font-size: calc(var(--btn--font-size, 1rem) * var(--btn-size));
transition: color 500ms ease-out, background 500ms ease-out, border 500ms ease-out;
}
.btn:not(:where(button, [type="button"], [type="reset"], [type="submit"])) {
padding: var(--as-btn--paddings, .21lh 1em .26lh);
}
.btn--icon {
background: none;
border: none;
border-radius: 50%;
line-height: 1;
min-height: auto;
margin: 0;
padding: 0;
box-shadow: none;
&:focus,
&:hover {
scale: 1.1;
}
&:hover {
box-shadow: none;
}
.badge & {
translate: 0 .125em;
}
}
.btn--accent, .btn--low, .btn--normal, .btn--important, .btn--critical, .btn--success, .btn--info, .btn--caution, .btn--warning, .btn--error, .btn--danger {
&:not(:disabled):focus,
&:not(:disabled):hover {
filter: brightness(105%);
}
&:not(:disabled):active {
filter: brightness(110%);
}
}
.btn--accent {
color: white;
background: var(--accent-color);
border-color: var(--accent-color);
}
.btn--low {
background: var(--color-low-30);
border-color: var(--color-low-40);
}
.btn--normal {
background: var(--color-normal-30);
border-color: var(--color-normal-40);
}
.btn--important {
background: var(--color-important-30);
border-color: var(--color-important-40);
}
.btn--critical {
background: var(--color-critical-30);
border-color: var(--color-critical-40);
}
.btn--success {
background: var(--color-success-30);
border-color: var(--color-success-40);
}
.btn--info {
background: var(--color-info-30);
border-color: var(--color-info-40);
}
.btn--caution {
background: var(--color-caution-30);
border-color: var(--color-caution-40);
}
.btn--warning {
background: var(--color-warning-30);
border-color: var(--color-warning-40);
}
.btn--error {
background: var(--color-error-30);
border-color: var(--color-error-40);
}
.btn--danger {
background: var(--color-danger-30);
border-color: var(--color-danger-40);
}
.btn--ghost {
background: oklch(from var(--accent-color) l c h / .05);
border: 0;
box-shadow: none;
text-decoration: underline 2px dotted var(--color-base-9);
&:focus {
text-decoration-style: solid;
}
&:active {
background: oklch(from var(--accent-color) l c h / .25);
}
}
.btn--bordered {
background: revert-layer;
border-color: currentColor;
:where(&).btn--accent {
color: var(--accent-color);
}
:where(&).btn--low {
color: var(--color-low-50);
}
:where(&).btn--normal {
color: var(--color-normal-50);
}
:where(&).btn--important {
color: var(--color-important-50);
}
:where(&).btn--critical {
color: var(--color-critical-50);
}
:where(&).btn--success {
color: var(--color-success-50);
}
:where(&).btn--info {
color: var(--color-info-50);
}
:where(&).btn--caution {
color: var(--color-caution-50);
}
:where(&).btn--warning {
color: var(--color-warning-50);
}
:where(&).btn--error {
color: var(--color-error-50);
}
:where(&).btn--danger {
color: var(--color-danger-50);
}
}
/*
### Checkbox & Radio button
*/
/**************** Removeable ****************/
[be-removeable] {
user-select: none;
display: inline-flex;
align-items: flex-end; /*INFO: align sub items*/
opacity: 1;
transition: opacity 350ms linear, display 350ms allow-discrete, scale 200ms linear;
:where(&) > .btn {
margin: auto auto auto .75em;
}
&:has([data-state-handler]:not(:checked)) {
scale: 85%;
opacity: 0;
display: none;
}
&:has([data-state-handler]:focus-visible) {
outline: var(--focus-outline);
}
}
/**************** Switchable ****************/
[be-switchable] {
user-select: none;
cursor: pointer;
color: var(--font-color-alt-2);
border-color: var(--border-color-control);
:where(&) > .visual-indicator {
margin: 0 .5em 0 0;
overflow: clip;
transition: opacity 350ms ease-out, width 200ms ease-out, margin 200ms ease-out;
}
&:has([data-state-handler]:focus-visible) {
outline: var(--focus-outline);
}
}
[selected], :has(> [data-state-handler]:checked) {
[be-switchable]:not(&) {
.active-visible {
opacity: 0;
width: 0;
margin: 0;
}
}
[be-switchable]:is(&) {
color: white;
background: var(--accent-color);
border-color: var(--accent-color);
.active-invisible {
opacity: 0;
width: 0;
margin: 0;
}
}
}
/**************** Toggle ****************/
.toggle {
display: inline-flex;
align-items: baseline;
&:has(:is([data-toggle-handler-on], [data-toggle-handler-off-on]):not(:checked)) .active-visible,
&:has([data-toggle-handler-off]:not(:checked)) .active-invisible {
display: none;
}
}
.toggle__control {
--the-size: var(--toggle-size, 1);
align-self: center;
border: none;
height: calc(.75em * var(--the-size));
width: calc(1.5em * var(--the-size));
position: relative;
display: flex;
margin: 0 .5em;
padding: 0;
& > label {
cursor: pointer;
height: inherit;
width: inherit;
position: absolute;
display: block;
z-index: 1;
&:has(:is([data-toggle-handler-off], [data-toggle-handler-on]):checked) {
opacity: 0;
height: 0;
width: 0;
z-index: -1;
}
}
&:has([data-toggle-handler-off]:focus-visible, [data-toggle-handler-on]:focus-visible, [data-toggle-handler-off-on]:focus-visible)::after {
outline: var(--focus-outline);
}
&:has(:is([data-toggle-handler-on], [data-toggle-handler-off-on]):checked)::after {
inset: 0 0 auto auto;
}
&:has(:is([data-toggle-handler-off], [data-toggle-handler-on], [data-toggle-handler-off-on]):disabled) > label {
cursor: not-allowed;
}
&::before,
&::after {
content:"";
position: absolute;
display: block;
}
/* path */
&::before {
background: var(--bg-color-off);
border: var(--controls--border);
border-radius: calc(1em * var(--the-size));
height: calc(.5em * var(--the-size));
width: 100%;
transition: background 200ms ease-in-out;
transform: translate(0, 25%);
}
/* indicator */
&::after {
background: var(--bg-color-clickable);
border: var(--controls--border);
border-radius: 50%;
box-shadow: none;
height: calc(.75em * var(--the-size));
width: calc(.75em * var(--the-size));
position: absolute;
inset: 0 calc(100% - calc(.75em * var(--the-size))) auto auto;
transition: inset 200ms ease-in-out;
}
}
.toggle__control:has(:is([data-toggle-handler-on], [data-toggle-handler-off-on]):checked),
.toggle:is(.toggle--mutual) .toggle__control {
&::before {
background: var(--color-base-5);
}
&::after {
background: var(--accent-color);
}
}
.toggle--vertical {
display: inline-flex;
flex-flow: column-reverse;
> .toggle__control {
margin: .5em 0;
transform: rotate(270deg);
}
}
/*
### Divider
*/
.divider {
align-self: stretch;
border-color: var(--border-color-boundary);
margin: .75rem .5rem;
position: relative;
inset: 0;
height: auto;
}
[be-divider-caption]::after {
content: attr(be-divider-caption, 'or');
font-size: .8rem;
color: var(--font-color-alt-2);
background: var(--bg-color);
position: absolute;
inset: auto auto auto 50%;
padding: 0;
translate: -50% -50%;
padding: .125rem .5rem;
}
.divider--vertical {
border-width: 0 1px 0 0;
margin: .5rem 1rem;
:where(&)[be-divider-caption]::after {
inset: 50% auto auto;
}
}
/*
### Media
*/
/**************** Figure ****************/
/**************** Image (+ Picture) ****************/
.img--fluid {
height: auto;
width: 100%;
max-width: 100%;
max-width: -webkit-fill-available;
display: block;
}
.img--thumbnail {
background: var(--bg-color);
border: var(--boundary--border);
border-radius: 0.375rem;
height: auto;
width: 100%;
max-width: 100%;
max-width: -webkit-fill-available;
display: block;
padding: 0.25em;
}
.img--fit-cover {
object-fit: cover;
}
.img--fit-contain {
object-fit: contain;
}
/**************** Video ****************/
.video--fluid {
height: auto;
width: 100%;
max-width: 100%;
position: relative;
display: block;
padding: 0;
overflow: hidden;
}
.video--fluid::before {
content: none;
}
.video--scale-4-3::before {
padding-bottom: 75%;
}
.video--scale-1-1::before {
padding-bottom: 100%;
}
/*
### Navbar
*/
.navbar {
display: flex;
flex-flow: row wrap;
align-items: center;
& a {
text-decoration: none;
}
> .nav > .nav__item > .nav {
filter: var(--shadow-float-alt-1);
}
.navbar__toggle,
.active-visible,
.active-invisible {
border-radius: 50%;
display: none;
z-index: 1;
}
/* .navbar--*compact */
&:has([data-toggle-navbar-handler]:checked) {
.active-invisible {
display: none;
}
.active-visible {
display: block;
}
}
}
.navbar__brand {
display: inline-block;
}
.navbar__toggle {
cursor: pointer;
padding: .5rem;
box-shadow: none;
&:is(:focus, :focus-within) {
outline: var(--focus-outline);
}
}
.nav {
background: var(--bg-color);
width: max-content;
display: inline-flex;
flex-flow: row wrap;
margin: 0;
padding: 0;
list-style: none;
.nav {
background: var(--bg-color);
position: absolute;
inset: 100% auto auto 0;
display: none;
flex-flow: column nowrap;
margin: 0;
padding: 0;
transform: translateY(-.25rem);
z-index: var(--z-index-popover);
transition: display 200ms allow-discrete, transform 200ms ease-in-out;
.nav {
inset: 0 auto auto 100%;
}
}
}
.nav__item-line::before {
content: "";
border: var(--boundary--border);
border-width: 0 0 1px;
height: 0;
display: block;
padding: 0;
}
.nav__item {
flex: 0 0 auto;
position: relative;
padding: .5rem 1rem;
&:has(.nav) > a::after {
content: "";
position: relative;
display: inline-block;
margin: auto auto auto 1em;
border-right: .25em solid transparent;
border-bottom: .25em solid currentColor;
border-left: .25em solid transparent;
inset: auto auto .25em auto;
transition: transform 350ms ease-in-out;
}
&:hover {
background-color: var(--bg-color-active);
& > a::after {
transform: scaleY(-1);
transform-origin: center;
}
}
> .visual-indicator,
> * > .visual-indicator {
margin: 0 0 0 1em;
padding: 0;
transform: rotate(90deg) scaleX(-1);
transition: transform 350ms ease-in-out;
}
&:is(:hover, :focus, :focus-within) {
> .visual-indicator,
> * > .visual-indicator {
transform: rotate(90deg) scaleX(1);
}
> .nav {
display: inline-flex;
transform: translateY(0);
@starting-style {
transform: translateY(-.25rem);
}
}
}
}
.navbar--no-indicator .nav__item > a::after {
display: none;
}
.navbar--vertical {
flex-flow: column;
align-items: initial;
.navbar__brand {
padding: .5rem 1rem;
}
.nav {
inset: 0 auto auto 100%;
flex-flow: column;
}
}
.navbar--compact {
justify-content: space-between;
.navbar__toggle,
.active-invisible {
display: block;
}
> .nav {
display: none;
overflow: hidden;
transition: display 200ms allow-discrete, margin-top 200ms ease-in-out;
> .nav__item > .nav {
filter: none;
}
> .nav__item:first-child {
margin-top: -110%; /* INFO: for animation */
transition: margin-top 350ms ease-in-out;
}
}
.nav {
background: transparent;
position: static;
width: 100%;
.nav {
width: calc(100% + 2rem);
display: none;
margin: .5rem -1rem -.5rem -1rem;
padding: 0 0 0 1rem;
transition: none;
}
}
.nav__item {
.nav__item:first-child {
margin: 0;
}
.nav__item:last-child {
padding: .5rem 1rem;
}
&:hover {
filter: brightness(98%);
}
}
.nav__item:is(:focus, :focus-within),
&:not(.navbar--no-hover) .nav__item:hover {
> .nav {
display: block;
}
}
:where(&).navbar--compact-expand,
&:has([data-toggle-navbar-handler]:checked) {
> .nav {
display: block;
> .nav__item:first-child {
margin-top: 0;
@starting-style {
margin-top: -110%;
}
}
}
}
}
/**************** Breadcrumb ****************/
.navbar--breadcrumb {
--breadcrumb-divider: attr(be-breadcrumb-divider, '/');
.navbar__brand::after,
> .nav > .nav__item:not(:last-child)::after {
content: var(--breadcrumb-divider);
color: var(--font-color-alt-2);
margin: 0 .5em;
}
> .nav > .nav__item {
padding: 0;
&:hover {
background: inherit;
}
}
}
/*
### Steps
*/
.steps {
display: grid;
grid: max-content min-content / auto-flow 200px;
gap: 1rem;
list-style: none;
}
.step {
grid-area: span 2 / auto;
grid: subgrid [row-1-start] [row-1-end row-2-start] [row-2end] / subgrid [col];
display:grid;
text-align: center;
}
.step__header {
display: flex;
margin: .5rem;
}
.step__trail {
position: relative;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
&::before,
&::after {
content: "";
background: var(--bg-color-off);
position: absolute;
z-index: -1;
}
:where(.step:not(:last-child)) &::after {
height: 1px;
width: calc(100% + 2rem);
transform: translate(50%, 0);
}
}
.step__indicator {
background: var(--bg-color-off);
border: 0 var(--step__indicator--border-style) var(--step__indicator--border-color, var(--bg-color));
border-width: var(--step__indicator--borders-width, 0);
border-radius: 50%;
min-height: .5rem;
min-width: .5rem;
display: inline-flex;
&:has(.visual-aside, .visual-indicator) {
padding: .25rem;
}
.visual-aside,
.visual-indicator {
translate: 0;
}
}
.step__body {
color: var(--step__body--color, var(--font-color-alt-2));
padding: .5rem;
}
.steps--vertical {
grid: auto-flow min-content / min-content minmax(auto, 1fr);
.step {
grid-area: auto / span 2;
text-align: left;
}
.step__header {
justify-content: center;
}
.step__trail {
margin-top: .25lh;
align-items: baseline;
justify-content: center;
.step:not(:last-child) &::after {
height: calc(100% + 2.5rem);
width: 1px;
transform: none;
}
}
}
.step--active {
.step:has(~ &) {
.step__trail {
&::before, &::after {
background: var(--accent-color);
}
}
.step__indicator {
background: var(--accent-color);
min-height: .75rem;
min-width: .75rem;
}
.step__body {
color: revert-layer;
}
}
.step__trail::before {
background: var(--accent-color);
}
.step__indicator {
background: var(--bg-color);
border: 0 var(--step--active__-step__indicator--border-style, solid) var(--accent-color);
border-width: var(--step--active__-step__indicator--border-width, .125rem);
min-height: .75rem;
min-width: .75rem;
}
.step__body {
color: revert-layer;
}
}
.steps--done {
.step__trail {
&::before, &::after {
background: var(--accent-color);
}
}
.step__indicator:not(:has(.visual-aside, .visual-indicator)) {
background: var(--accent-color);
min-height: .75rem;
min-width: .75rem;
}
.step__body {
color: revert-layer;
}
}
/*
### Tabs
*/
.tabs {
display: flex;
flex-flow: column nowrap;
filter: var(--shadow-border);
margin: auto auto 1rem;
}
.tabs__nav {
border: 0 var(--tabs__nav--border-style, solid) var(--tabs__nav--border-color, var(--border-color-boundary));
border-width: 0;
display: flex;
}
.tab__nav {
cursor: pointer;
background: var(--bg-color-clickable);
border: var(--boundary--border);
border-width: 1px 1px 0;
border-radius: .125rem .125rem 0 0;
position: relative;
padding: .25rem .75rem;
box-shadow: none;
&:is(&:focus, &:focus-within) {
text-decoration: underline 2px dashed var(--color-base-9);
/* INFO: when using button as trigger */
box-shadow: none;
outline: none;
scale: none;
}
}
.tab__nav[data-tab-active],
.tab__nav:has([data-tab-select-handler]:checked) {
background: var(--bg-color);
z-index: 100;
}
.tabs__content {
background: var(--bg-color);
border: var(--boundary--border);
border-width: 1px;
position: relative;
margin: -1px 0 0;
padding: 1rem;
z-index: 99;
}
.tab__content {
border: 0 solid var(--border-color-boundary);
display: none;
}
.tab__content[data-tab-active],
.tabs:has(.tab__nav:nth-child(1) [data-tab-select-handler]:checked)
.tab__content:nth-child(1),
.tabs:has(.tab__nav:nth-child(2) [data-tab-select-handler]:checked)
.tab__content:nth-child(2),
.tabs:has(.tab__nav:nth-child(3) [data-tab-select-handler]:checked)
.tab__content:nth-child(3),
.tabs:has(.tab__nav:nth-child(4) [data-tab-select-handler]:checked)
.tab__content:nth-child(4),
.tabs:has(.tab__nav:nth-child(5) [data-tab-select-handler]:checked)
.tab__content:nth-child(5),
.tabs:has(.tab__nav:nth-child(6) [data-tab-select-handler]:checked)
.tab__content:nth-child(6),
.tabs:has(.tab__nav:nth-child(7) [data-tab-select-handler]:checked)
.tab__content:nth-child(7),
.tabs:has(.tab__nav:nth-child(8) [data-tab-select-handler]:checked)
.tab__content:nth-child(8),
.tabs:has(.tab__nav:nth-child(9) [data-tab-select-handler]:checked)
.tab__content:nth-child(9),
.tabs:has(.tab__nav:nth-child(10) [data-tab-select-handler]:checked)
.tab__content:nth-child(10),
.tabs:has(.tab__nav:nth-child(11) [data-tab-select-handler]:checked)
.tab__content:nth-child(11),
.tabs:has(.tab__nav:nth-child(12) [data-tab-select-handler]:checked)
.tab__content:nth-child(12),
.tabs:has(.tab__nav:nth-child(13) [data-tab-select-handler]:checked)
.tab__content:nth-child(13),
.tabs:has(.tab__nav:nth-child(14) [data-tab-select-handler]:checked)
.tab__content:nth-child(14),
.tabs:has(.tab__nav:nth-child(15) [data-tab-select-handler]:checked)
.tab__content:nth-child(15) {
display: block;
}
.tabs--right {
flex-flow: row-reverse nowrap;
.tabs__nav {
flex: 0 0 auto;
flex-flow: column;
}
.tab__nav {
border-width: 1px 1px 0 0;
border-radius: 0 .125rem .125rem 0;
&:last-child {
border-width: 1px 1px 1px 0;
}
}
.tabs__content {
flex: 1 0 auto;
margin: 0 -1px 0 0;
}
}
.tabs--bottom {
flex-flow: column-reverse nowrap;
.tabs__nav {
flex: 0 0 auto;
flex-flow: row;
}
.tab__nav {
border-width: 0 0 1px 1px;
border-radius: 0 0 .125rem .125rem;
&:last-child {
border-width: 0 1px 1px 1px;
}
}
.tabs__content {
flex: 1 0 auto;
margin: 0 0 -1px 0;
}
}
.tabs--left {
flex-flow: row nowrap;
.tabs__nav {
flex: 0 0 auto;
flex-flow: column;
}
.tab__nav {
border-width: 1px 0 0 1px;
border-radius: .125rem 0 0 .125rem;
&:last-child {
border-width: 1px 0 1px 1px;
}
}
.tabs__content {
flex: 1 0 auto;
margin: 0 0 0 -1px;
}
}
/*
### Tooltip
*/
[be-tooltip] {
&::before {
content: "";
border-left: .4rem solid transparent;
border-right: .4rem solid transparent;
border-bottom: .4rem solid var(--bg-color-text);
position: absolute;
inset: 0 auto auto 50%;
opacity: 0;
transform: scaleY(-1) translateX(-50%);
z-index: 1;
transition: opacity 200ms ease-in-out, inset 200ms ease-in-out;
}
&:is(.tooltip--active)::before,
&:is(.tooltip--focus):focus::before,
&:hover::before {
inset: -.5rem auto auto 50%;
opacity: 1;
}
&::after {
pointer-events: none;
font-size: .7rem;
color: revert-layer;
background: var(--bg-color-text);
border-radius: .125rem;
opacity: 0;
max-width: clamp(200px, 100vw - 1.5rem, 50rem);
position: absolute;
inset: auto auto 100% 50%;
display: block;
overflow: hidden;
padding: .25rem .5rem;
content: attr(be-tooltip);
white-space: pre;
text-overflow: ellipsis;
transform: translateX(-50%);
z-index: var(--z-index-tooltip);
transition: opacity 200ms ease-in-out, inset 200ms ease-in-out;
}
&:is(.tooltip--active)::after,
&:is(.tooltip--focus):focus::after,
&:hover::after {
inset: auto auto calc(100% + .5rem) 50%;
opacity: 1;
}
&:disabled {
pointer-events: auto;
}
}
.tooltip--right {
&::before {
inset: 50% auto auto calc(100% - .5rem);
transform: rotate(-90deg);
translate: 0 -50%;
}
&:is(.tooltip--active)::before,
&:is(.tooltip--focus):focus::before,
&:hover::before {
inset: 50% auto auto 100%;
}
&::after {
inset: 50% auto auto 100%;
transform: translateY(-50%);
}
&:is(.tooltip--active)::after,
&:is(.tooltip--focus):focus::after,
&:hover::after {
inset: 50% auto auto calc(100% + .55rem);
}
}
.tooltip--bottom {
&::before {
inset: auto auto 0 50%;
transform: rotate(0deg) translateX(-50%);
}
&:is(.tooltip--active)::before,
&:is(.tooltip--focus):focus::before,
&:hover::before {
inset: auto auto -.5rem 50%;
}
&::after {
inset: 100% auto auto 50%;
transform: translateX(-50%);
}
&:is(.tooltip--active)::after,
&:is(.tooltip--focus):focus::after,
&:hover::after {
inset: calc(100% + .5rem) auto auto 50%;
}
}
.tooltip--left {
&::before {
inset: 50% calc(100% - .5rem) auto auto;
transform: rotate(90deg);
translate: 0 -50%;
}
&:is(.tooltip--active)::before,
&:is(.tooltip--focus):focus::before,
&:hover::before {
inset: 50% 100% auto auto;
}
&::after {
inset: 50% 100% auto auto;
transform: translateY(-50%);
}
&:is(.tooltip--active)::after,
&:is(.tooltip--focus):focus::after,
&:hover::after {
inset: 50% calc(100% + .55rem) auto auto;
}
}
.tooltip--no-pointer {
&::before {
display: none;
}
&:hover::after {
translate: 0 .25rem;
}
&:is(.tooltip--right):hover::after {
translate: -.25rem;
}
&:is(.tooltip--bottom):hover::after {
translate: 0 -.25rem;
}
&:is(.tooltip--left):hover::after {
translate: .25rem;
}
}
/*
### Dialog
*/
.dialog {
color: var(--dialog--font-color, revert-layer);
background: var(--dialog--bg-color, var(--bg-color));
border: 0 var(--dialog--border-style, solid) var(--dialog--border-color, var(--border-color-light));
border-width: var(--dialog--borders-width, 1px);
border-radius: .125rem;
display: grid;
gap: .5rem 0;
grid: "top-start top-middle top-end" auto
"middle-start center middle-end" 1fr
"bottom-start bottom-middle bottom-end" min-content / min-content;
z-index: var(--z-index-modal);
&:not([open], [popover]:popover-open) {
display: none;
}
}
.dialog__header {
grid-area: auto / top-middle / auto / top-end;
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--dialog__header--gap, .5rem);
& > :where(h1, h2, h3, h4, h5, h6) {
margin: 0;
}
}
.dialog__aside {
grid-area: top-start / auto / bottom-start / auto;
align-content: flex-start;
text-align: center;
padding: .25rem;
}
.dialog__content {
grid-area: auto / center / auto / bottom-end;
overflow: auto;
}
.dialog__footer {
grid-area: auto / bottom-middle / auto / bottom-end;
}
.dialog--md {
height: clamp(13rem, 100vh - 2rem, 458px);
width: clamp(280px, 100vw - 4rem, 590px);
}
.dialog--lg {
height: clamp(13rem, 100vh - 4rem, 796px);
width: clamp(280px, 100vw - 4rem, 1024px);
}
/*
### Notice (info)
*/
.notice {
color: var(--notice--font-color, revert-layer);
background: var(--notice--bg-color, var(--bg-color));
border: 0 var(--notice--border-style, solid) var(--notice--border-color, var(--border-color-boundary));
border-width: var(--notice--borders-width, 1px);
border-radius: var(--notice--borders-radius, .125rem);
box-shadow: var(--notice--box-shadow, );
position: relative;
display: flex;
gap: .5rem;
flex-flow: var(--notice--flex-flow, row wrap);
text-align: initial;
margin: auto auto 1rem;
padding: 1rem;
}
.notice__header {
flex: 1 1 100%;
font-size: 1.25rem;
display: block;
}
.notice__aside {
}
.notice__content {
flex: 1 1 0;
align-content: space-evenly;
overflow-y: auto;
}
.notice__footer {
}
.notice--accent {
background-color: var(--accent-color);
border-color: var(--accent-color);
color: white;
.notice__aside {
color: var(--accent-color);
}
}
.notice--low {
background-color: var(--color-low-10);
border-color: var(--color-low-20);
.notice__aside {
color: var(--color-low-80);
}
}
.notice--normal {
background-color: var(--color-normal-10);
border-color: var(--color-normal-20);
.notice__aside {
color: var(--color-normal-80);
}
}
.notice--important {
background-color: var(--color-important-10);
border-color: var(--color-important-20);
.notice__aside {
color: var(--color-important-80);
}
}
.notice--critical {
background-color: var(--color-critical-10);
border-color: var(--color-critical-20);
.notice__aside {
color: var(--color-critical-80);
}
}
.notice--success {
background-color: var(--color-success-10);
border-color: var(--color-success-20);
.notice__aside {
color: var(--color-success-80);
}
}
.notice--info {
background-color: var(--color-info-10);
border-color: var(--color-info-20);
.notice__aside {
color: var(--color-info-80);
}
}
.notice--caution {
background-color: var(--color-caution-10);
border-color: var(--color-caution-20);
.notice__aside {
color: var(--color-caution-80);
}
}
.notice--warning {
background-color: var(--color-warning-10);
border-color: var(--color-warning-20);
.notice__aside {
color: var(--color-warning-80);
}
}
.notice--error {
background-color: var(--color-error-10);
border-color: var(--color-error-20);
.notice__aside {
color: var(--color-error-80);
}
}
.notice--danger {
background-color: var(--color-danger-10);
border-color: var(--color-danger-20);
.notice__aside {
color: var(--color-danger-80);
}
}
/**************** Notify (toast) ****************/
.notice--notify {
background: var(--color-base-5);
border: 0 var(--notice--notify--border-style, solid) var(--notice--border-color, var(--border-color-boundary));
border-width: var(--notice--notify--borders-width, 0);
border-radius: var(--notice--notify--borders-radius, .125rem);
box-shadow: var(--shadow-float);
height: auto;
max-height: 40vh;
min-width: 250px;
width: max-content;
max-width: clamp(250px, 100vw - 3rem, 992px);
position: fixed;
inset: auto auto 0 50%;
display: none;
flex-flow: row nowrap;
padding: .25rem 1rem;
padding: 0 1rem;
padding: 0 .5rem;
z-index: var(--z-index-popover);
/* Start fade in, end fade out. */
opacity: 0;
transform: translate(-50%, 0) scale(0.85);
transition:
opacity 350ms ease-in-out,
transform 350ms ease-in-out,
overlay 350ms allow-discrete,
display 350ms allow-discrete;
/* End fade in; start fade out. */
&[data-notify-open] {
display: flex;
opacity: 1;
transform: translate(-50%, 0) scale(1);
@starting-style {
/* Start values vor fade in. */
opacity: 0;
transform: translate(-50%, 0) scale(0.85);
}
}
.notice__aside {
align-content: center;
}
.notice__content {
margin: .5rem 0;
}
.notice__footer {
margin: .5rem 0;
}
&.notice--accent {
background: var(--accent-color);
}
&.notice--low {
background: var(--color-low-5);
border-color: var(--color-low-10);
}
&.notice--normal {
background: var(--color-normal-5);
border-color: var(--color-normal-10);
}
&.notice--important {
background: var(--color-important-5);
border-color: var(--color-important-10);
}
&.notice--critical {
background: var(--color-critical-5);
border-color: var(--color-critical-10);
}
&.notice--success {
background: var(--color-success-5);
border-color: var(--color-success-10);
}
&.notice--info {
background: var(--color-info-5);
border-color: var(--color-info-10);
}
&.notice--caution {
background: var(--color-caution-5);
border-color: var(--color-caution-10);
}
&.notice--warning {
background: var(--color-warning-5);
border-color: var(--color-warning-10);
}
&.notice--error {
background: var(--color-error-5);
border-color: var(--color-error-10);
}
&.notice--danger {
background: var(--color-danger-5);
border-color: var(--color-danger-10);
}
}
/*
### Popper (Popover)
*/
.popper-container {
position: relative;
display: inline-flex;
}
.popper {
--the-space: var(--popper-space, 1);
background: var(--bg-color);
border: 0 var(--popper--border-style, solid) var(--popper--border-color, var(--border-color-light));
border-width: var(--popper--borders-width, 1px);
border-radius: var(--popper--borders-radius, .125rem);
position: absolute;
inset: auto auto calc(100% + (.25rem * var(--the-space))) 50%;
max-height: 75vh;
min-width: 5rem;
width: max-content;
max-width: clamp(200px, 100vw - 5rem, 816px);
padding: 1rem;
translate: -50%;
z-index: var(--z-index-popover);
filter: var(--shadow-float-alt-1);
&::before {
content: "";
height: calc(100% + (1rem * var(--the-space)));
width: calc(100% + (1rem * var(--the-space)));
position: absolute;
inset: calc(-.5rem * var(--the-space)) auto auto calc(-.5rem * var(--the-space));
z-index: -1;
}
@media screen and (max-height: 576px) {
& {
max-height: calc(100vh - 5rem);
}
}
}
.popper--list {
> .popper__content {
display: flex;
flex-flow: column nowrap;
margin: -1rem;
padding: .25rem;
}
}
.popper__content {
height: 100%;
max-height: inherit;
overflow-y: auto;
overflow-x: hidden;
}
.popper__item {
width: 100%;
border: none;
border-radius: unset;
box-shadow: none;
margin: 0;
padding: .25rem 1rem;
outline: none;
&:focus {
text-decoration: underline 2px dashed var(--color-base-9);
}
&:where(a:not(.btn)):hover {
background-color: var(--bg-color-active);
}
}
.popper__line::before {
content: "";
border: var(--boundary--border);
border-width: 0 0 1px;
height: 0;
display: block;
padding: 0;
}
.popper--tl {
inset: auto auto calc(100% + (.25rem * var(--the-space))) 0;
translate: 0;
}
.popper--tr {
inset: auto 0 calc(100% + (.25rem * var(--the-space))) auto;
translate: 0;
}
.popper--bl {
inset: calc(100% + (.25rem * var(--the-space))) auto auto 0;
translate: 0;
}
.popper--bm {
inset: calc(100% + (.25rem * var(--the-space))) auto auto 50%;
}
.popper--br {
inset: calc(100% + (.25rem * var(--the-space))) 0 auto auto;
translate: 0;
}
.popper--lt {
inset: 0 calc(100% + (.25rem * var(--the-space))) auto auto;
translate: 0;
}
.popper--lm {
inset: 50% calc(100% + (.25rem * var(--the-space))) auto auto;
translate: 0 -50%;
}
.popper--lb {
inset: auto calc(100% + (.25rem * var(--the-space))) 0 auto;
translate: 0;
}
.popper--rt {
inset: 0 auto auto calc(100% + (.25rem * var(--the-space)));
translate: 0;
}
.popper--rm {
inset: 50% auto auto calc(100% + (.25rem * var(--the-space)));
translate: 0 -50%;
}
.popper--rb {
inset: auto auto 0 calc(100% + (.25rem * var(--the-space)));
translate: 0;
}
.popper--pointer {
&::after {
content: "";
position: absolute;
inset: auto auto -.375rem 50%;
border-left: .5rem solid transparent;
border-right: .5rem solid transparent;
border-bottom: .5rem solid var(--bg-color);
opacity: 1;
transform: rotate(180deg);
translate: -50%;
}
&:is(.popper--tl)::after {
inset: auto auto -.375rem .8rem;
translate: 0;
}
&:is(.popper--tr)::after {
inset: auto .8rem -.375rem auto;
translate: 0;
}
&:is(.popper--bl)::after {
inset: -.375rem auto auto .8rem;
translate: 0;
transform: rotate(0deg);
}
&:is(.popper--bm)::after {
inset: -.375rem auto auto 50%;
translate: -50%;
transform: rotate(0deg);
}
&:is(.popper--br)::after {
inset: -.375rem .8rem auto auto;
translate: 0;
transform: rotate(0deg);
}
&:is(.popper--lt)::after {
inset: .8rem -.65rem auto auto;
translate: 0;
transform: rotate(90deg);
}
&:is(.popper--lm)::after {
inset: 50% -.65rem auto auto;
translate: 0 -50%;
transform: rotate(90deg);
}
&:is(.popper--lb)::after {
inset: auto -.65rem .8rem auto;
translate: 0;
transform: rotate(90deg);
}
&:is(.popper--rt)::after {
inset: .8rem auto auto -.65rem;
translate: 0;
transform: rotate(-90deg);
}
&:is(.popper--rm)::after {
inset: 50% auto auto -.65rem;
translate: 0 -50%;
transform: rotate(-90deg);
}
&:is(.popper--rb)::after {
inset: auto auto .8rem -.65rem;
translate: 0;
transform: rotate(-90deg);
}
}
.popper {
transition: display 200ms allow-discrete, opacity 200ms ease-in-out, transform 200ms ease-in-out;
/* exit styles */
display: none;
opacity: 0;
transform: translateY(calc(.25rem * var(--the-space)));
&:is(.popper--bl, .popper--bm, .popper--br) {
transform: translateY(calc(-.25rem * var(--the-space)));
}
&:is(.popper--lt, .popper--lm, .popper--lb) {
transform: translateX(calc(.25rem * var(--the-space)));
}
&:is(.popper--rt, .popper--rm, .popper--rb) {
transform: translateX(calc(-.25rem * var(--the-space)));
}
&[data-popper-active],
&:hover,
&:focus,
&:focus-within,
*:has(+ .popper--hover):hover + &,
*:has(+ .popper--focus):focus + & {
/* after-change styles */
display: block;
opacity: 1;
transform: translateY(0);
/* before-change styles */
@starting-style {
opacity: 0;
transform: translateY(calc(.25rem * var(--the-space)));
&:is(.popper--bl, .popper--bm, .popper--br) {
transform: translateY(calc(-.25rem * var(--the-space)));
}
&:is(.popper--lt, .popper--lm, .popper--lb) {
transform: translateX(calc(.25rem * var(--the-space)));
}
&:is(.popper--rt, .popper--rm, .popper--rb) {
transform: translateX(calc(-.25rem * var(--the-space)));
}
}
}
}
/*
### Panel
*/
.panel {
display: flex;
flex-flow: column nowrap;
gap: 1rem;
padding: 1rem;
}
.panel__header {
}
.panel__body {
display: flex;
gap: 1rem;
flex-flow: column nowrap;
padding: 0 .5rem;
align-items: center;
overflow: auto;
& > * {
position: relative;
inset: auto;
max-height: 40vh;
width: auto;
margin: unset;
transform: none;
}
}
:where(.panel__header, .panel__body) > * {
margin: unset
}
/*
### Floater
*/
.floater {
position: fixed;
height: auto;
min-width: 280px;
width: max-content;
max-width: clamp(280px, calc(100% - 2rem), 640px);
z-index: var(--z-index-fixed);
@media screen and (max-height: 576px) {
& {
max-height: calc(100% - 2rem);
}
}
@media screen and (min-height: 576px) {
& {
max-height: 80vh;
}
}
@media screen and (max-width: 576px) {
& {
max-width: 100%;
}
}
}
.floater--top {
inset: 0 50% auto;
transform: translate(-50%, 0);
}
.floater--top-left {
inset: 0 auto auto 0;
transform: none;
}
.floater--top-right {
inset: 0 0 auto auto;
transform: none;
}
.floater--bottom {
inset: auto 50% 0;
transform: translate(-50%, 0);
}
.floater--bottom-right {
inset: auto 0 0 auto;
transform: none;
}
.floater--bottom-left {
inset: auto auto 0 0;
transform: none;
}
@media screen and (max-width: 816px) {
.floater--top, .floater--top-left, .floater--top-right {
inset: 0 50% auto;
transform: translate(-50%, 0);
}
.floater--bottom, .floater--bottom-right, .floater--bottom-left {
inset: auto 50% 0;
transform: translate(-50%, 0);
}
}
.floater--md {
height: clamp(13rem, 100vh - 2rem, 474px);
max-height: revert-layer;
width: clamp(280px, 100vw - 2rem, 610px);
max-width: revert-layer;
}
.floater--lg {
height: clamp(13rem, 100vh - 2rem, 902px);
max-height: revert-layer;
width: clamp(280px, 100vw - 2rem, 1160px);
max-width: revert-layer;
}
.floater--fluid {
max-height: calc(100vh - 2rem);
max-width: calc(100vw - 2rem);
max-width: revert-layer;
}
.floater:where([popover]) {
pointer-events: initial;
opacity: 1;
/* INFO: Testing
*
* position-anchor: var(--anchor-name, --anchor-name);
* inset: anchor(top) anchor(right) anchor(bottom) anchor(left);
*/
position: fixed;
inset: 0;
min-width: initial;
display: block;
z-index: 1;
transition:
transform 350ms ease-in-out,
display 350ms allow-discrete;
&:not([popover]:popover-open) {
box-shadow: none;
position: relative;
height: calc(100% - 1rem); /* INFO: Prevent img overflow */
max-height: unset;
width: initial;
max-width: unset;
overflow: clip;
translate: 50% 50%;
transform: translate(-50%, -50%);
.active-invisible {
display: block;
}
.active-visible {
display: none;
}
}
}
.floater[popover]:popover-open {
position: fixed;
inset: 50% auto auto 50%;
transform: translate(-50%, -50%) scale(1.01);
.active-invisible {
display: none;
}
.active-visible {
display: block;
}
}
/*
### Appear
*/
.appear {
display: grid;
grid: 0fr / 100%;
/* INFO: If you are certain the container's dimensions won't change, use fixed sizes to ensure a smoother expansion animation. Uncomment the next line */
/* grid: 0 / 100%;*/
max-height: 40vh;
visibility: collapse;
transition: grid 350ms ease-in-out, visibility 350ms ease-in-out;
&:has(> :where([data-appear-handler]:checked)) {
grid: 1fr / 100%;
/* INFO: If you are certain the container's dimensions won't change, use fixed sizes to ensure a smoother expansion animation. Uncomment the next line */
/* grid: 300px / 100%; */
vis