UNPKG

@bakung-ui/bakung.css

Version:

HTML UI library pure CSS, lightweight, no javascript

2,507 lines (1,927 loc) 160 kB
@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