Signed-off-by: kevin <kevin@lmve.net>
This commit is contained in:
2025-06-05 20:09:52 +08:00
parent 9d3eb0cea9
commit d2c1683898
4103 changed files with 916397 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
// Layout & components
@import "bootstrap/scss/root";
@import "bootstrap/scss/reboot";
@import "bootstrap/scss/type";
@import "bootstrap/scss/images";
@import "bootstrap/scss/containers";
@import "bootstrap/scss/grid";
@import "bootstrap/scss/tables";
@import "bootstrap/scss/forms";
@import "bootstrap/scss/buttons";
@import "bootstrap/scss/transitions";
@import "bootstrap/scss/dropdown";
@import "bootstrap/scss/button-group";
@import "bootstrap/scss/nav";
@import "bootstrap/scss/navbar";
@import "bootstrap/scss/card";
@import "bootstrap/scss/breadcrumb";
@import "bootstrap/scss/pagination";
@import "bootstrap/scss/progress";
@import "bootstrap/scss/list-group";
@import "bootstrap/scss/toasts";
@import "bootstrap/scss/modal";
@import "bootstrap/scss/tooltip";
@import "bootstrap/scss/popover";
@import "bootstrap/scss/carousel";
@import "bootstrap/scss/spinners";
@import "bootstrap/scss/offcanvas";
@import "bootstrap/scss/placeholders";
// Utilities
@import "bootstrap/scss/utilities/api";
+7
View File
@@ -0,0 +1,7 @@
// Config
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
+78
View File
@@ -0,0 +1,78 @@
@mixin caret($direction: down) {
$selector: "after";
@if $direction == "left" {
$selector: "before";
}
&:#{$selector} {
content: "";
display: inline-block;
vertical-align: $caret-vertical-align;
width: $caret-width;
height: $caret-width;
border-bottom: 1px var(--#{$prefix}border-style);
border-left: 1px var(--#{$prefix}border-style);
margin-right: 0.1em;
@if $direction != "left" {
margin-left: $caret-spacing;
} @else {
margin-right: $caret-spacing;
}
@if $direction == down {
transform: rotate(-45deg);
} @else if $direction == up {
transform: rotate(135deg);
} @else if $direction == end {
transform: rotate(-135deg);
} @else {
transform: rotate(45deg);
}
}
@if $direction == "left" {
&:after {
content: none;
}
}
}
@mixin alert-variant($background: null, $border: null, $color: null) {
// Override bootstrap core
}
@mixin button-variant(
$background: null,
$border: null,
$color: null,
$hover-background: null,
$hover-border: null,
$hover-color: null,
$active-background: null,
$active-border: null,
$active-color: null,
$disabled-background: null,
$disabled-border: null,
$disabled-color: null
) {
// Override bootstrap core
}
@mixin button-outline-variant(
$color: null,
$color-hover: null,
$active-background: null,
$active-border: null,
$active-color: null
) {
// Override bootstrap core
}
//
// TODO: remove when https://github.com/twbs/bootstrap/pull/37425/ will be released
//
@function opaque($background, $foreground) {
@return mix(rgba($foreground, 1), $background, opacity($foreground) * 100%);
}
+9
View File
@@ -0,0 +1,9 @@
@import "bootstrap/scss/functions";
@import "mixins";
@import "variables";
@import "variables-dark";
@import "utilities";
@import "bootstrap-config";
@import "bootstrap-override";
+83
View File
@@ -0,0 +1,83 @@
@import "config";
@import "bootstrap-components";
@import "props";
@import "fonts/webfonts";
@import "layout/root";
@import "layout/animations";
@import "layout/core";
@import "layout/navbar";
@import "layout/page";
@import "layout/footer";
@import "layout/dark";
@import "ui/accordion";
@import "ui/alerts";
@import "ui/avatars";
@import "ui/badges";
@import "ui/breadcrumbs";
@import "ui/buttons";
@import "ui/button-group";
@import "ui/calendars";
@import "ui/carousel";
@import "ui/cards";
@import "ui/close";
@import "ui/dropdowns";
@import "ui/datagrid";
@import "ui/empty";
@import "ui/grid";
@import "ui/icons";
@import "ui/images";
@import "ui/forms";
@import "ui/forms/form-icon";
@import "ui/forms/form-colorinput";
@import "ui/forms/form-imagecheck";
@import "ui/forms/form-selectgroup";
@import "ui/forms/form-custom";
@import "ui/forms/form-check";
@import "ui/forms/validation";
@import "ui/legend";
@import "ui/lists";
@import "ui/loaders";
@import "ui/login";
@import "ui/modals";
@import "ui/nav";
@import "ui/stars";
@import "ui/pagination";
@import "ui/popovers";
@import "ui/progress";
@import "ui/ribbons";
@import "ui/markdown";
@import "ui/placeholder";
@import "ui/segmented";
@import "ui/steps";
@import "ui/status";
@import "ui/switch-icon";
@import "ui/tables";
@import "ui/tags";
@import "ui/toasts";
@import "ui/toolbar";
@import "ui/tracking";
@import "ui/timeline";
@import "ui/type";
@import "ui/charts";
@import "ui/offcanvas";
@import "ui/chat";
@import "ui/signature";
@import "helpers/index";
@import "utils/background";
@import "utils/colors";
@import "utils/scroll";
@import "utils/sizing";
@import "utils/opacity";
@import "utils/shadow";
@import "utils/text";
@import "debug";
@import "debug";
+49
View File
@@ -0,0 +1,49 @@
$debug: false;
@if $debug {
$colors: (
"blue": $blue,
"azure": $azure,
"indigo": $indigo,
"purple": $purple,
"pink": $pink,
"red": $red,
"orange": $orange,
"yellow": $yellow,
"lime": $lime,
"green": $green,
"teal": $teal,
"cyan": $cyan,
);
@each $name, $color in $colors {
@debug ("#{$name}: '#{$color}'");
@debug ("#{$name}-100: '#{tint-color($color, 8)}'");
@debug ("#{$name}-200: '#{tint-color($color, 6)}'");
@debug ("#{$name}-300: '#{tint-color($color, 4)}'");
@debug ("#{$name}-400: '#{tint-color($color, 2)}'");
@debug ("#{$name}-500: '#{$color}'");
@debug ("#{$name}-600: '#{shade-color($color, 2)}'");
@debug ("#{$name}-700: '#{shade-color($color, 4)}'");
@debug ("#{$name}-800: '#{shade-color($color, 6)}'");
@debug ("#{$name}-900: '#{shade-color($color, 8)}'");
}
@debug ("gray: '#{$gray-500}'");
@debug ("gray-100: '#{$gray-100}'");
@debug ("gray-200: '#{$gray-200}'");
@debug ("gray-300: '#{$gray-300}'");
@debug ("gray-400: '#{$gray-400}'");
@debug ("gray-500: '#{$gray-500}'");
@debug ("gray-600: '#{$gray-600}'");
@debug ("gray-700: '#{$gray-700}'");
@debug ("gray-800: '#{$gray-800}'");
@debug ("gray-900: '#{$gray-900}'");
@debug ("border-color: '#{$border-color}'");
@debug ("text-secondary: '#{$text-secondary}'");
@each $name, $color in $social-colors {
@debug ("#{$name}: '#{$color}'");
}
}
+2
View File
@@ -0,0 +1,2 @@
@import "mixins/mixins";
@import "mixins/functions";
+91
View File
@@ -0,0 +1,91 @@
@import "config";
:root,
:host {
/** Fonts */
--#{$prefix}font-monospace: #{$font-family-monospace};
--#{$prefix}font-sans-serif: #{$font-family-sans-serif};
--#{$prefix}font-serif: #{$font-family-serif};
--#{$prefix}font-comic: #{$font-family-comic};
/** Gray colors */
--#{$prefix}gray-50: #{$gray-50};
--#{$prefix}gray-100: #{$gray-100};
--#{$prefix}gray-200: #{$gray-200};
--#{$prefix}gray-300: #{$gray-300};
--#{$prefix}gray-400: #{$gray-400};
--#{$prefix}gray-500: #{$gray-500};
--#{$prefix}gray-600: #{$gray-600};
--#{$prefix}gray-700: #{$gray-700};
--#{$prefix}gray-800: #{$gray-800};
--#{$prefix}gray-900: #{$gray-900};
--#{$prefix}gray-950: #{$gray-950};
--#{$prefix}white: #{$white};
--#{$prefix}black: #{$black};
--#{$prefix}dark: #{$dark};
--#{$prefix}light: #{$light};
/** Brand colors */
--#{$prefix}brand: #{$primary};
/** Theme colors */
@each $name, $color in map-merge($theme-colors, $social-colors) {
--#{$prefix}#{$name}: #{$color};
--#{$prefix}#{$name}-rgb: #{to-rgb($color)};
--#{$prefix}#{$name}-fg: #{if(contrast-ratio($color) > $min-contrast-ratio, var(--#{$prefix}light), var(--#{$prefix}dark))};
--#{$prefix}#{$name}-darken: #{theme-color-darker($color)};
--#{$prefix}#{$name}-darken: color-mix(in oklab, var(--#{$prefix}#{$name}), transparent 20%);
--#{$prefix}#{$name}-lt: #{theme-color-lighter($color)};
--#{$prefix}#{$name}-lt: color-mix(in oklab, var(--#{$prefix}#{$name}) 10%, transparent);
--#{$prefix}#{$name}-200: color-mix(in oklab, var(--#{$prefix}#{$name}) 20%, transparent);
--#{$prefix}#{$name}-lt-rgb: #{to-rgb(theme-color-lighter($color))};
}
/** Gray colors */
@each $name, $color in $gray-colors {
--#{$prefix}#{$name}-fg: #{if(contrast-ratio($color, white) > $min-contrast-ratio, var(--#{$prefix}white), var(--#{$prefix}body-color))};
}
/** Spacers */
@each $name, $value in $spacers {
--#{$prefix}spacer-#{$name}: #{$value};
}
/** Font sizes */
@each $name, $value in $font-weights {
--#{$prefix}font-weight-#{$name}: #{$value};
}
@each $name, $value in $font-sizes {
--#{$prefix}font-size-h#{$name}: #{$value};
}
@each $name, $value in $line-heights {
--#{$prefix}line-height-#{$name}: #{$value};
}
/** Shadows */
@each $name, $value in $box-shadows {
--#{$prefix}shadow#{if($name, '-#{$name}', '')}: #{$value};
}
/** Border radiuses */
--#{$prefix}border-radius-scale: 1;
@each $name, $value in $border-radiuses {
@if $name {
--#{$prefix}border-radius-#{$name}: calc(#{$value} * var(--#{$prefix}border-radius-scale, 1));
} @else {
--#{$prefix}border-radius: #{$value};
}
}
/** Backdrops */
--#{$prefix}backdrop-opacity: #{$backdrop-opacity};
--#{$prefix}backdrop-bg: var(--#{$prefix}bg-surface-dark);
@each $name, $value in $backdrops {
--#{$prefix}backdrop-bg#{if($name, '-#{$name}', '')}: #{$value};
}
--#{$prefix}backdrop-blur: #{$backdrop-blur};
--#{$prefix}backdrop-filter: blur(var(--#{$prefix}backdrop-blur));
}
+209
View File
@@ -0,0 +1,209 @@
$negative-spacers-extra: if(
$enable-negative-margins,
negativify-map(map-merge($spacers, $spacers-extra)),
null
);
$utilities: (
// Margin utilities
"margin":
(
responsive: true,
property: margin,
class: m,
values: $spacers-extra,
),
"margin-x": (
responsive: true,
property: margin-right margin-left,
class: mx,
values: $spacers-extra,
),
"margin-y": (
responsive: true,
property: margin-top margin-bottom,
class: my,
values: $spacers-extra,
),
"margin-top": (
responsive: true,
property: margin-top,
class: mt,
values: $spacers-extra,
),
"margin-end": (
responsive: true,
property: margin-right,
class: me,
values: $spacers-extra,
),
"margin-bottom": (
responsive: true,
property: margin-bottom,
class: mb,
values: $spacers-extra,
),
"margin-start": (
responsive: true,
property: margin-left,
class: ms,
values: $spacers-extra,
),
// Negative margin utilities
"negative-margin":
(
responsive: true,
property: margin,
class: m,
values: $negative-spacers-extra,
),
"negative-margin-x": (
responsive: true,
property: margin-right margin-left,
class: mx,
values: $negative-spacers-extra,
),
"negative-margin-y": (
responsive: true,
property: margin-top margin-bottom,
class: my,
values: $negative-spacers-extra,
),
"negative-margin-top": (
responsive: true,
property: margin-top,
class: mt,
values: $negative-spacers-extra,
),
"negative-margin-end": (
responsive: true,
property: margin-right,
class: me,
values: $negative-spacers-extra,
),
"negative-margin-bottom": (
responsive: true,
property: margin-bottom,
class: mb,
values: $negative-spacers-extra,
),
"negative-margin-start": (
responsive: true,
property: margin-left,
class: ms,
values: $negative-spacers-extra,
),
// Padding utilities
"padding":
(
responsive: true,
property: padding,
class: p,
values: $spacers-extra,
),
"padding-x": (
responsive: true,
property: padding-right padding-left,
class: px,
values: $spacers-extra,
),
"padding-y": (
responsive: true,
property: padding-top padding-bottom,
class: py,
values: $spacers-extra,
),
"padding-top": (
responsive: true,
property: padding-top,
class: pt,
values: $spacers-extra,
),
"padding-end": (
responsive: true,
property: padding-right,
class: pe,
values: $spacers-extra,
),
"padding-bottom": (
responsive: true,
property: padding-bottom,
class: pb,
values: $spacers-extra,
),
"padding-start": (
responsive: true,
property: padding-left,
class: ps,
values: $spacers-extra,
),
// Gap utility
"gap":
(
responsive: true,
property: gap,
class: gap,
values: $spacers-extra,
),
"row-gap": (
responsive: true,
property: row-gap,
class: row-gap,
values: $spacers-extra,
),
"column-gap": (
responsive: true,
property: column-gap,
class: column-gap,
values: $spacers-extra,
),
// Letter spacing
"spacing":
(
property: letter-spacing,
class: tracking,
values: (
tight: $spacing-tight,
normal: $spacing-normal,
wide: $spacing-wide,
),
),
"width": (
property: width,
class: w,
values: $spacers-extra,
),
"height": (
property: height,
class: h,
values: $spacers-extra,
),
"filter": (
property: filter,
class: filter,
values: (
grayscale: grayscale(100%),
),
),
"gutter-x": (
responsive: true,
css-var: true,
css-variable-name: gutter-x,
class: gx,
values: $spacers-extra,
),
"gutter-y": (
responsive: true,
css-var: true,
css-variable-name: gutter-y,
class: gy,
values: $spacers-extra,
),
"gutter": (
responsive: true,
css-var: true,
css-variable-name: gutter-x,
class: g,
values: $spacers-extra,
)
);
+135
View File
@@ -0,0 +1,135 @@
$border-values: (
null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)
var(--#{$prefix}border-color-translucent),
wide: $border-width-wide var(--#{$prefix}border-style)
var(--#{$prefix}border-color-translucent),
0: 0,
);
$utilities-border-colors: map-loop((
"red": red,
"green": green,
), rgba-css-var, "$key", "border") !default;
//Utilities
$utilities: (
"object": (
property: object-fit,
class: object,
values: (
contain: contain,
cover: cover,
fill: fill,
scale-down: scale-down,
none: none,
),
),
"cursor": (
property: cursor,
class: cursor,
values: (
auto: auto,
pointer: pointer,
move: move,
not-allowed: not-allowed,
zoom-in: zoom-in,
zoom-out: zoom-out,
default: default,
none: none,
help: help,
progress: progress,
wait: wait,
text: text,
v-text: vertical-text,
grab: grab,
grabbing: grabbing,
crosshair: crosshair,
),
),
"border": (
property: border,
values: $border-values,
),
"border-top": (
property: border-top,
values: $border-values,
),
"border-end": (
class: border-end,
property: border-right,
values: $border-values,
),
"border-bottom": (
property: border-bottom,
values: $border-values,
),
"border-start": (
class: border-start,
property: border-left,
values: $border-values,
),
"border-x": (
class: border-x,
property: border-left border-right,
values: $border-values,
),
"border-y": (
class: border-y,
property: border-top border-bottom,
values: $border-values,
),
"width": (
property: width,
class: w,
values: $size-values,
),
"height": (
property: height,
class: h,
values: $size-values,
),
"columns": (
property: columns,
class: columns,
responsive: true,
values: 2 3 4,
),
"bg-pattern": (
property: background,
class: bg-pattern,
values: (
transparent: #{url-svg(
'<svg width="16" height="16" viewBox="0 0 16 16"><rect x="0" y="0" width="8" height="8" fill="rgba(130, 130, 130, .1)" /><rect x="8" y="8" width="8" height="8" fill="rgba(130, 130, 130, .1)" /></svg>'
)} repeat center/16px 16px,
)
),
"bg-gradient": (
property: background,
class: bg-gradient,
values: (
null: linear-gradient(var(--#{$prefix}gradient-direction, to right), var(--#{$prefix}gradient-stops, var(--#{$prefix}gradient-from, transparent), var(--#{$prefix}gradient-to, transparent))) no-repeat,
),
),
"bg-gradient-direction": (
property: --#{$prefix}gradient-direction,
class: bg-gradient,
values: (
to-t: to top,
to-te: to top right,
to-e: to right,
to-be: to bottom right,
to-b: to bottom,
to-bs: to bottom left,
to-s: to left,
to-ts: to top left,
),
),
"table-layout": (
property: table-layout,
class: table,
values: (
auto: auto,
fixed: fixed,
),
),
) !default;
+19
View File
@@ -0,0 +1,19 @@
@use "sass:color";
//
// Dark mode
//
$darken-dark: color.adjust($dark, $lightness: -2%) !default;
$lighten-dark: color.adjust($dark, $lightness: 2%) !default;
$border-color-dark: color.adjust($dark, $lightness: 8%) !default;
$border-color-translucent-dark: rgba(72, 110, 149, .14) !default;
$border-dark-color-dark: color.adjust($dark, $lightness: 4%) !default;
$border-active-color-dark: color.adjust($dark, $lightness: 12%) !default;
//new bootsrap variables
$body-color-dark: $gray-200 !default;
$body-emphasis-color-dark: $white !default;
$code-color-dark: var(--#{$prefix}gray-300) !default;
$text-secondary-dark: rgba(153, 159, 164, 1) !default;
View File
File diff suppressed because it is too large Load Diff
+15
View File
@@ -0,0 +1,15 @@
@if $font-google {
$google-font-url: "https://fonts.googleapis.com/css2?family=" + str-replace($font-google, " ", "+") + ":wght@300;400;500;600;700&display=swap" !default;
@import url($google-font-url);
}
@if $font-google-monospaced {
$google-font-monospaced-url: "https://fonts.googleapis.com/css2?family=" + str-replace($font-google-monospaced, " ", "+") + ":wght@300;400;500;600;700&display=swap" !default;
@import url($google-font-monospaced-url);
}
@if $font-icons {
@each $icon-font in $font-icons {
@import url($icon-font);
}
}
+143
View File
@@ -0,0 +1,143 @@
//
// Clearfix
//
.clearfix {
@include clearfix();
}
//
// Text truncation
//
.text-truncate {
@include text-truncate();
}
//
// Vertical rule
//
.vr {
display: inline-block;
align-self: stretch;
width: $vr-border-width;
min-height: 1em;
background-color: currentcolor;
opacity: $hr-opacity;
}
//
// Stretched link
//
.stretched-link {
&::#{$stretched-link-pseudo-element} {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: $stretched-link-z-index;
content: "";
}
}
//
// Visually hidden
//
.visually-hidden,
.visually-hidden-focusable:not(:focus):not(:focus-within) {
@include visually-hidden();
}
//
// Stacks
//
.hstack {
display: flex;
flex-direction: row;
align-items: center;
align-self: stretch;
}
.vstack {
display: flex;
flex: 1 1 auto;
flex-direction: column;
align-self: stretch;
}
//
// Position
//
// Shorthand
.fixed-top {
position: fixed;
top: 0;
right: 0;
left: 0;
z-index: $zindex-fixed;
}
.fixed-bottom {
position: fixed;
right: 0;
bottom: 0;
left: 0;
z-index: $zindex-fixed;
}
// Responsive sticky top and bottom
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.sticky#{$infix}-top {
position: sticky;
top: 0;
z-index: $zindex-sticky;
}
.sticky#{$infix}-bottom {
position: sticky;
bottom: 0;
z-index: $zindex-sticky;
}
}
}
//
// Aspect ratio
//
.ratio {
position: relative;
width: 100%;
&::before {
display: block;
padding-top: var(--#{$prefix}aspect-ratio);
content: "";
}
> * {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
@each $key, $ratio in $aspect-ratios {
.ratio-#{$key} {
--#{$prefix}aspect-ratio: #{$ratio};
}
}
//
// Focus ring
//
.focus-ring:focus {
outline: 0;
// By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values
box-shadow: var(--#{$prefix}focus-ring-x, 0) var(--#{$prefix}focus-ring-y, 0) var(--#{$prefix}focus-ring-blur, 0) var(--#{$prefix}focus-ring-width) var(--#{$prefix}focus-ring-color);
}
+63
View File
@@ -0,0 +1,63 @@
@keyframes pulse {
from {
opacity: 1;
transform: scale3d(.8, .8, .8)
}
50% {
transform: scale3d(1, 1, 1);
opacity: 1
}
to {
opacity: 1;
transform: scale3d(.8, .8, .8)
}
}
@keyframes tada {
0% {
transform: scale3d(1, 1, 1)
}
10%, 5% {
transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -5deg)
}
15%, 25%, 35%, 45% {
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 5deg)
}
20%, 30%, 40% {
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -5deg)
}
50% {
transform: scale3d(1, 1, 1)
}
}
@keyframes rotate-360 {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes blink {
from {
opacity: 0;
}
50% {
opacity: 1;
}
to {
opacity: 0;
}
}
+62
View File
@@ -0,0 +1,62 @@
// stylelint-disable property-no-vendor-prefix
body {
letter-spacing: $body-letter-spacing;
touch-action: manipulation;
text-rendering: optimizeLegibility;
font-feature-settings: "liga" 0, "cv03", "cv04", "cv11";
position: relative;
min-height: 100%;
height: 100%;
padding: 0;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
@media print {
background: transparent;
}
}
@include scrollbar;
//
// Fluid container
//
.layout-fluid {
.container,
[class^="container-"],
[class*=" container-"] {
max-width: 100%;
}
}
//
// Boxed container
//
.layout-boxed {
--#{$prefix}theme-boxed-border-radius: 0;
--#{$prefix}theme-boxed-width: #{map-get($container-max-widths, xxl)};
@include media-breakpoint-up(md) {
background: $dark linear-gradient(to right, rgba(#fff, .1), transparent) fixed;
padding: 1rem;
--#{$prefix}theme-boxed-border-radius: #{$border-radius};
}
.page {
margin: 0 auto;
max-width: var(--#{$prefix}theme-boxed-width);
border-radius: var(--#{$prefix}theme-boxed-border-radius);
color: var(--#{$prefix}body-color);
@include media-breakpoint-up(md) {
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
background: var(--#{$prefix}body-bg);
}
> .navbar:first-child {
border-top-left-radius: var(--#{$prefix}theme-boxed-border-radius);
border-top-right-radius: var(--#{$prefix}theme-boxed-border-radius);
}
}
}
+74
View File
@@ -0,0 +1,74 @@
@use "sass:color";
// stylelint-disable declaration-no-important
@if $enable-dark-mode {
:root {
&:not(.theme-dark):not([data-bs-theme="dark"]) {
.hide-theme-light {
display: none !important;
}
.img-dark {
display: none !important;
}
}
&.theme-dark,
&[data-bs-theme="dark"] {
.hide-theme-dark {
display: none !important;
}
.img-light {
display: none !important;
}
}
}
@include color-mode(dark, true) {
color-scheme: dark;
--#{$prefix}body-color: var(--#{$prefix}gray-200);
--#{$prefix}secondary: var(--#{$prefix}gray-400);
--#{$prefix}body-bg: var(--#{$prefix}gray-900);
--#{$prefix}emphasis-color: #{$body-emphasis-color-dark};
--#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};
--#{$prefix}bg-forms: var(--#{$prefix}gray-900);
--#{$prefix}bg-surface: var(--#{$prefix}gray-800);
--#{$prefix}bg-surface-inverted: var(--#{$prefix}gray-100);
--#{$prefix}bg-surface-secondary: var(--#{$prefix}gray-900);
--#{$prefix}bg-surface-tertiary: var(--#{$prefix}gray-800);
--#{$prefix}text-inverted: var(--#{$prefix}gray-800);
--#{$prefix}link-color: var(--#{$prefix}primary);
--#{$prefix}link-hover-color: color-mix(in srgb, var(--#{$prefix}primary), black 20%);
--#{$prefix}active-bg: #{$lighten-dark};
--#{$prefix}disabled-color: #{color-transparent(var(--#{$prefix}body-color), .4)};
--#{$prefix}border-color: var(--#{$prefix}gray-700);
--#{$prefix}border-color-translucent: var(
--#{$prefix}dark-mode-border-color-translucent
);
--#{$prefix}border-dark-color: var(--#{$prefix}dark-mode-border-dark-color);
--#{$prefix}border-active-color: var(
--#{$prefix}dark-mode-border-active-color
);
--#{$prefix}btn-color: #{$darken-dark};
.navbar-brand-autodark {
.navbar-brand-image {
@include autodark-image;
}
}
}
body[data-bs-theme=dark] [data-bs-theme=light] {
@extend [data-bs-theme=dark];
}
}
+12
View File
@@ -0,0 +1,12 @@
.footer {
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) $footer-border-color;
background-color: $footer-bg;
padding: $footer-padding-y 0;
color: $footer-color;
margin-top: auto;
}
.footer-transparent {
background-color: transparent;
border-top: 0;
}
+392
View File
@@ -0,0 +1,392 @@
@mixin navbar-vertical-nav {
.navbar-collapse {
flex-direction: column;
[class^="container"] {
flex-direction: column;
align-items: stretch;
padding: 0;
}
.navbar-nav {
margin-left: 0;
margin-right: 0;
.nav-link {
padding: 0.5rem calc(#{$container-padding-x} / 2);
justify-content: flex-start;
}
}
.dropdown-menu-columns {
flex-direction: column;
}
.dropdown-menu {
padding: 0;
background: transparent;
position: static;
color: inherit;
box-shadow: none;
border: none;
min-width: 0;
margin: 0;
.dropdown-item {
min-width: 0;
display: flex;
width: auto;
padding-left: add(calc(#{$container-padding-x} / 2), 1.75rem);
color: inherit;
&.disabled {
color: var(--#{$prefix}disabled-color);
pointer-events: none;
background-color: transparent;
}
&.active,
&:active {
background: var(--#{$prefix}navbar-active-bg);
}
}
.dropdown-menu .dropdown-item {
padding-left: add(calc(#{$container-padding-x} / 2), 3.25rem);
}
.dropdown-menu .dropdown-menu .dropdown-item {
padding-left: add(calc(#{$container-padding-x} / 2), 4.75rem);
}
}
.dropdown-toggle:after {
margin-left: auto;
}
.nav-item.active:after {
border-bottom-width: 0;
border-left-width: 3px;
right: auto;
top: 0;
bottom: 0;
}
}
}
/**
Navbar
*/
.navbar {
--#{$prefix}navbar-bg: var(--#{$prefix}bg-surface);
--#{$prefix}navbar-border-width: #{$navbar-border-width};
--#{$prefix}navbar-active-border-color: #{$navbar-active-border-color};
--#{$prefix}navbar-active-bg: #{$navbar-light-active-bg};
--#{$prefix}navbar-border-color: #{$navbar-border-color};
--#{$prefix}navbar-hover-color: #{$navbar-hover-color};
align-items: stretch;
min-height: $navbar-height;
box-shadow: inset 0 calc(-1 * var(--#{$prefix}navbar-border-width)) 0 0 var(--#{$prefix}navbar-border-color);
background: var(--#{$prefix}navbar-bg);
color: var(--#{$prefix}navbar-color);
.navbar-collapse & {
flex-grow: 1;
}
&.collapsing {
min-height: 0;
}
.dropdown-menu {
position: absolute;
z-index: $zindex-fixed;
}
.navbar-nav {
min-height: subtract($navbar-height, 2 * $navbar-padding-y);
.nav-link {
position: relative;
min-width: 2.5rem;
min-height: 2.5rem;
justify-content: center;
border-radius: var(--#{$prefix}border-radius);
.badge {
position: absolute;
top: 0.375rem;
right: 0.375rem;
transform: translate(50%, -50%);
}
}
}
}
.navbar-expand {
@each $breakpoint in map-keys($grid-breakpoints) {
$next: breakpoint-next($breakpoint, $grid-breakpoints);
$infix: breakpoint-infix($next, $grid-breakpoints);
&#{$infix} {
@include media-breakpoint-down(breakpoint-next($breakpoint)) {
@include navbar-vertical-nav;
}
@include media-breakpoint-up($next) {
.navbar-collapse {
width: auto;
flex: 1 1 auto;
}
.nav-item.active {
position: relative;
.nav-link {
color: var(--#{$prefix}navbar-active-color);
}
&:after {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: -0.25rem;
border: 0 var(--#{$prefix}border-style) var(--#{$prefix}navbar-active-border-color);
border-bottom-width: 2px;
}
}
&.navbar-vertical {
box-shadow: inset calc(-1 * var(--#{$prefix}navbar-border-width)) 0 0 0 var(--#{$prefix}navbar-border-color);
&.navbar-right {
box-shadow: inset calc(1 * var(--#{$prefix}navbar-border-width)) 0 0 0 var(--#{$prefix}navbar-border-color);
}
}
&.navbar-vertical {
~ .navbar,
~ .page-wrapper {
margin-left: $sidebar-width;
}
}
&.navbar-vertical.navbar-right {
~ .navbar,
~ .page-wrapper {
margin-left: 0;
margin-right: $sidebar-width;
}
}
}
}
}
}
/**
Navbar brand
*/
.navbar-brand {
display: inline-flex;
align-items: center;
font-weight: $navbar-brand-font-weight;
margin: 0;
line-height: 1;
gap: $spacer-2;
}
.navbar-brand-image {
height: $navbar-brand-image-height;
width: auto;
}
/**
Navbar toggler
*/
.navbar-toggler {
border: 0;
width: $navbar-brand-image-height;
height: $navbar-brand-image-height;
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.navbar-toggler-icon {
height: 2px;
width: 1.25em;
background: currentColor;
border-radius: 10px;
@include transition(
top $navbar-toggler-animation-time $navbar-toggler-animation-time,
bottom $navbar-toggler-animation-time $navbar-toggler-animation-time,
transform $navbar-toggler-animation-time,
opacity 0s $navbar-toggler-animation-time
);
position: relative;
&:before,
&:after {
content: "";
display: block;
height: inherit;
width: inherit;
border-radius: inherit;
background: inherit;
position: absolute;
left: 0;
@include transition(inherit);
}
&:before {
top: -0.45em;
}
&:after {
bottom: -0.45em;
}
.navbar-toggler[aria-expanded="true"] & {
transform: rotate(45deg);
@include transition(top $transition-time, bottom $transition-time, transform $transition-time $transition-time, opacity 0s $transition-time);
&:before {
top: 0;
transform: rotate(-90deg);
}
&:after {
bottom: 0;
opacity: 0;
}
}
}
/**
Navbar transparent
*/
.navbar-transparent {
--#{$prefix}navbar-border-color: transparent !important;
background: transparent !important;
}
/**
Navbar nav
*/
.navbar-nav {
--#{$prefix}nav-link-hover-bg: #{color-transparent(var(--#{$prefix}nav-link-color), 0.04)};
margin: 0;
padding: 0;
align-items: stretch;
.nav-item {
display: flex;
flex-direction: column;
justify-content: center;
}
}
/**
Navbar side
*/
.navbar-side {
margin: 0;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-around;
}
/**
Navbar vertical
*/
@if $enable-navbar-vertical {
.navbar-vertical {
&.navbar-expand {
@each $breakpoint in map-keys($grid-breakpoints) {
$next: breakpoint-next($breakpoint, $grid-breakpoints);
$infix: breakpoint-infix($next, $grid-breakpoints);
&#{$infix} {
@include media-breakpoint-up($next) {
width: $sidebar-width;
position: fixed;
top: 0;
left: 0;
bottom: 0;
z-index: $zindex-fixed;
align-items: flex-start;
@include transition(transform $transition-time);
overflow-y: scroll;
padding: 0;
&.navbar-right {
left: auto;
right: 0;
}
.navbar-brand {
padding: (($navbar-height - $navbar-brand-image-height) * 0.5) 0;
justify-content: center;
}
.navbar-collapse {
align-items: stretch;
}
.navbar-nav {
flex-direction: column;
flex-grow: 1;
min-height: auto;
.nav-link {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
}
> [class^="container"] {
flex-direction: column;
align-items: stretch;
min-height: 100%;
justify-content: flex-start;
padding: 0;
}
~ .page {
padding-left: $sidebar-width;
[class^="container"] {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
}
&.navbar-right ~ .page {
padding-left: 0;
padding-right: $sidebar-width;
}
@include navbar-vertical-nav;
}
}
}
}
}
}
.navbar-overlap {
&:after {
content: "";
height: $navbar-overlap-height;
position: absolute;
top: 100%;
left: 0;
right: 0;
background: inherit;
z-index: -1;
box-shadow: inherit;
}
}
+170
View File
@@ -0,0 +1,170 @@
.page {
display: flex;
flex-direction: column;
position: relative;
min-height: 100%;
}
.page-center {
justify-content: center;
}
.page-wrapper {
flex: 1;
display: flex;
flex-direction: column;
@media print {
margin: 0 !important;
}
}
.page-wrapper-full {
.page-body:first-child {
margin: 0;
border-top: 0;
}
}
// Content body
.page-body {
margin-top: var(--#{$prefix}page-padding-y);
margin-bottom: var(--#{$prefix}page-padding-y);
display: flex;
flex-direction: column;
flex: 1;
}
.page-body-card {
background: var(--#{$prefix}bg-surface);
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) $card-border-color;
padding: var(--#{$prefix}page-padding) 0;
margin-bottom: 0;
flex: 1;
.page-body ~ & {
margin-top: 0;
}
}
.page-cover {
background: no-repeat center/cover;
min-height: 9rem;
@include media-breakpoint-up(md) {
min-height: 12rem;
}
@include media-breakpoint-up(lg) {
min-height: 15rem;
}
}
.page-cover-overlay {
position: relative;
&:after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image: $overlay-gradient;
}
}
.page-header {
display: flex;
flex-wrap: wrap;
min-height: 2.25rem;
flex-direction: column;
justify-content: center;
max-width: 100%;
.page-wrapper & {
margin: var(--#{$prefix}page-padding-y) 0 0;
}
}
.page-header-border {
border-bottom: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
padding: var(--#{$prefix}page-padding-y) 0;
margin: 0 !important;
background-color: var(--#{$prefix}bg-surface);
}
.page-pretitle {
@include subheader;
}
.page-title {
margin: 0;
font-size: $page-title-font-size;
line-height: $page-title-line-height;
font-weight: $page-title-font-weight;
color: inherit;
display: flex;
align-items: center;
svg {
width: 1.5rem;
height: 1.5rem;
margin-right: .25rem;
}
}
.page-title-lg {
font-size: $h1-font-size;
line-height: $h1-line-height;
}
.page-subtitle {
margin-top: .25rem;
color: var(--#{$prefix}secondary);
}
//
// Page cover
//
.page-cover {
--#{$prefix}page-cover-blur: 20px;
--#{$prefix}page-cover-padding: 1rem;
min-height: 6rem;
padding: var(--#{$prefix}page-cover-padding) 0;
position: relative;
overflow: hidden;
}
.page-cover-img {
position: absolute;
top: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
left: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
right: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
bottom: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
pointer-events: none;
filter: blur(var(--#{$prefix}page-cover-blur));
object-fit: cover;
background-size: cover;
background-position: center;
z-index: -1;
}
//
// Page tabs
//
.page-tabs {
margin-top: .5rem;
position: relative;
}
.page-header-tabs {
.nav-bordered {
border: 0;
}
+ .page-body-card {
margin-top: 0;
}
}
+64
View File
@@ -0,0 +1,64 @@
:root,
:host {
font-size: 16px;
height: 100%;
@include media-breakpoint-up(lg) {
margin-left: calc(100vw - 100%);
margin-right: 0;
}
}
:root,
:host,
[data-bs-theme="light"] {
color-scheme: light;
--#{$prefix}spacer: var(--#{$prefix}spacer-2);
--#{$prefix}bg-surface: var(--#{$prefix}bg-surface-primary);
--#{$prefix}bg-surface-primary: var(--#{$prefix}white);
--#{$prefix}bg-surface-secondary: var(--#{$prefix}gray-50);
--#{$prefix}bg-surface-tertiary: var(--#{$prefix}gray-50);
--#{$prefix}bg-surface-dark: var(--#{$prefix}gray-900);
--#{$prefix}bg-surface-inverted: var(--#{$prefix}gray-900);
--#{$prefix}bg-forms: var(--#{$prefix}bg-surface);
--#{$prefix}text-inverted: var(--#{$prefix}gray-100);
--#{$prefix}body-color: var(--#{$prefix}gray-700);
--#{$prefix}body-bg: var(--#{$prefix}bg-surface-secondary);
--#{$prefix}link-color: var(--#{$prefix}primary);
--#{$prefix}link-hover-color: color-mix(in srgb, var(--#{$prefix}primary), #000 20%);
--#{$prefix}secondary: var(--#{$prefix}gray-500);
--#{$prefix}tertiary: var(--#{$prefix}gray-400);
--#{$prefix}border-color: #{$border-color};
--#{$prefix}border-color-translucent: #{$border-color-translucent};
--#{$prefix}border-dark-color: #{$border-dark-color};
--#{$prefix}border-dark-color-translucent: #{$border-dark-color-translucent};
--#{$prefix}border-active-color: #{$border-active-color};
--#{$prefix}icon-color: #{$icon-color};
--#{$prefix}active-bg: #{$active-bg};
--#{$prefix}disabled-bg: #{$disabled-bg};
--#{$prefix}disabled-color: #{$disabled-color};
--#{$prefix}code-color: #{$code-color};
--#{$prefix}code-bg: #{$code-bg};
--#{$prefix}dark-mode-border-color: #{$border-color-dark};
--#{$prefix}dark-mode-border-color-translucent: #{$border-color-translucent-dark};
--#{$prefix}dark-mode-border-active-color: #{$border-active-color-dark};
--#{$prefix}dark-mode-border-dark-color: #{$border-dark-color-dark};
--#{$prefix}page-padding: #{$page-padding};
--#{$prefix}page-padding-y: #{$page-padding-y};
@include media-breakpoint-down($cards-grid-breakpoint) {
--#{$prefix}page-padding: #{$page-padding-sm};
}
}
+67
View File
@@ -0,0 +1,67 @@
//
// Browser
//
.browser {
border-radius: var(--#{$prefix}border-radius-lg);
box-shadow: 0 0 0 1px var(--#{$prefix}border-color);
background: var(--#{$prefix}bg-surface-secondary);
overflow: hidden;
}
.browser-header {
padding: .25rem 1rem;
background: var(--#{$prefix}border-color-light) linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .03));
border-bottom: 1px solid var(--#{$prefix}border-color);
border-radius: calc(var(--#{$prefix}border-radius-lg) - 1px) calc(var(--#{$prefix}border-radius-lg) - 1px) 0 0;
}
.browser-dots {
margin-right: 3rem;
display: flex;
}
.browser-dots-colored {
.browser-dot {
&:nth-child(1) {
background: #fb6058;
}
&:nth-child(2) {
background: #fcbe3b;
}
&:nth-child(3) {
background: #2ccb4c;
}
}
}
.browser-dot {
margin-right: .5rem;
width: .75rem;
min-width: .75rem;
height: .75rem;
background: var(--#{$prefix}border-color);
border-radius: 50%;
border: 1px solid var(--#{$prefix}border-color-dark);
}
.browser-input {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
padding: .25rem;
color: var(--#{$prefix}secondary);
font-size: var(--#{$prefix}font-size-h5);
border-radius: var(--#{$prefix}border-radius);
line-height: 1;
cursor: pointer;
box-shadow: 0 0 0 1px rgba(0, 0, 0, .05), 0 1px 2px 0 rgba(0, 0, 0, 0.05);
background-image: linear-gradient(to bottom, var(--#{$prefix}bg-surface), var(--#{$prefix}bg-surface-secondary));
&:hover {
text-decoration: none;
}
}
+8
View File
@@ -0,0 +1,8 @@
.body-marketing {
--#{$prefix}body-font-size: 1rem;
--#{$prefix}body-line-height: 1.75;
}
.body-gradient {
background: var(--#{$prefix}bg-surface) linear-gradient(to bottom, var(--#{$prefix}bg-surface-secondary) 12%, var(--#{$prefix}bg-surface) 99%) repeat-x top center/100% 100vh;
}
View File
+69
View File
@@ -0,0 +1,69 @@
//
// Hero
//
.hero {
text-align: center;
padding: 6.5rem 0;
}
.hero-title {
font-size: 3rem;
font-weight: var(--#{$prefix}font-weight-black);
letter-spacing: $spacing-tight;
line-height: $headings-line-height;
@include media-breakpoint-down(md) {
font-size: 2rem;
}
}
.hero-description {
color: var(--#{$prefix}secondary);
font-size: var(--#{$prefix}font-size-h2);
line-height: 1.5;
margin: 0 auto;
max-width: 45rem;
@include media-breakpoint-down(sm) {
font-size: var(--#{$prefix}font-size-h3);
}
}
.hero-description-wide {
max-width: 61.875rem;
}
//
// Hero subheader
//
.hero-subheader {
@include subheader;
margin-bottom: 0.5rem;
}
.hero-img {
margin: 4rem auto;
max-width: 65rem;
border-radius: $border-radius-lg;
position: relative;
z-index: 1;
//box-shadow: 0 10px 15px -3px rgba($color-text, 0.1),
// 0 4px 6px -2px rgba($color-text, 0.05);
img,
svg {
max-width: 100%;
height: auto;
display: block;
position: relative;
}
}
//
//.hero-img-side {
// img,
// svg {
// max-width: 100%;
// height: auto;
// display: block;
// }
//}
+111
View File
@@ -0,0 +1,111 @@
$pricing-card-width: 22rem;
.pricing {
display: flex;
flex-direction: column;
margin: 0 auto;
justify-content: center;
@include media-breakpoint-up(md) {
flex-direction: row;
}
}
.pricing-card {
flex: 1;
display: flex;
flex-direction: column;
background: var(--#{$prefix}bg-surface);
border: 1px solid $border-color;
padding: 2rem;
margin: 0 0 1rem;
position: relative;
box-shadow: $box-shadow-card;
text-align: center;
border-radius: $border-radius-lg;
@include media-breakpoint-up(md) {
margin: 1rem -1px;
max-width: $pricing-card-width;
&:first-child {
border-radius: $border-radius-lg 0 0 $border-radius-lg;
}
&:last-child {
border-radius: 0 $border-radius-lg $border-radius-lg 0;
}
}
&.featured {
z-index: 1;
border: 2px solid var(--#{$prefix}primary);
order: -1;
@include media-breakpoint-up(md) {
order: unset;
margin-top: 0;
margin-bottom: 0;
box-shadow: $box-shadow-card;
border-radius: $border-radius-lg;
}
}
}
.pricing-title {
font-size: $h2-font-size;
line-height: $h2-line-height;
}
.pricing-label {
position: absolute;
top: 0;
left: 0;
transform: translateY(-50%);
vertical-align: bottom;
right: 0;
display: flex;
align-items: center;
justify-content: center;
}
.pricing-btn {
margin-top: auto;
padding-top: 2rem;
}
.pricing-price {
display: flex;
justify-content: center;
font-size: 2.5rem;
line-height: 1;
font-weight: $font-weight-black;
margin: 0.75rem 0;
}
.pricing-price-currency {
font-size: $h2-font-size;
line-height: 1.5;
margin-right: 0.25rem;
font-weight: $font-weight-bold;
}
.pricing-price-description {
font-size: $h4-font-size;
line-height: $h4-line-height;
font-weight: $font-weight-normal;
color: $text-secondary;
align-self: center;
margin-left: 0.5rem;
}
.pricing-features {
margin: 1rem 0 0;
padding: 0;
list-style: none;
text-align: left;
> li:not(:first-child) {
margin-top: 0.25rem;
}
}
+124
View File
@@ -0,0 +1,124 @@
@keyframes move-forever1 {
0% {
transform: translate(85px, 0%);
}
100% {
transform: translate(-90px, 0%);
}
}
@keyframes move-forever2 {
0% {
transform: translate(-90px, 0%);
}
100% {
transform: translate(85px, 0%);
}
}
@keyframes move-forever3 {
0% {
transform: translate(-90px, 0%);
}
100% {
transform: translate(85px, 0%);
}
}
//
// Sections
//
.section {
--section-bg: transparent;
background: var(--section-bg);
position: relative;
padding: 5rem 0;
}
.section-sm {
padding: 4rem 0;
}
.section-white {
--section-bg: var(--#{$prefix}bg-surface);
}
.section-light {
--section-bg: var(--#{$prefix}bg-surface-secondary);
}
.section-primary {
--section-bg: var(--#{$prefix}primary);
color: $white;
}
.section-dark {
--section-bg: var(--#{$prefix}dark);
color: $white;
}
.section-header {
text-align: center;
max-width: 45rem;
margin: 0 auto 5rem;
@at-root .section-sm & {
margin-bottom: 4rem;
}
}
.section-title {
font-size: var(--#{$prefix}font-size-h1);
font-weight: var(--#{$prefix}font-weight-bold);
line-height: 1.2;
}
.section-title-lg {
font-size: 2rem;
}
.section-description {
color: var(--#{$prefix}secondary);
font-size: var(--#{$prefix}font-size-h3);
line-height: var(--#{$prefix}line-height-h3);
margin-top: 1rem;
}
//
// Section divider
//
.section-divider {
position: absolute;
bottom: 100%;
pointer-events: none;
height: 5rem;
width: 100%;
path {
fill: var(--section-bg);
}
.wave-1 {
animation: move-forever1 30s linear infinite;
animation-delay: -2s;
}
.wave-2 {
animation: move-forever2 24s linear infinite;
opacity: .5;
animation-delay: -2s;
}
.wave-3 {
animation: move-forever3 18s linear infinite;
opacity: .3;
animation-delay: -2s;
}
}
.section-divider-auto {
height: auto;
}
+31
View File
@@ -0,0 +1,31 @@
.shape {
--#{$prefix}shape-size: #{$avatar-size};
--#{$prefix}shape-icon-size: #{$avatar-icon-size};
background-color: var(--#{$prefix}primary-lt);
color: var(--#{$prefix}primary);
border-radius: 35%;
display: inline-flex;
align-items: center;
justify-content: center;
height: var(--#{$prefix}shape-size);
width: var(--#{$prefix}shape-size);
.icon {
width: var(--#{$prefix}shape-icon-size);
height: var(--#{$prefix}shape-icon-size);
}
}
@each $avatar-size, $size in $avatar-sizes {
.shape-#{$avatar-size} {
--#{$prefix}shape-size: #{map-get($size, size)};
--#{$prefix}shape-icon-size: #{map-get($size, icon-size)};
}
}
@each $name, $color in $colors {
.shape-#{$name} {
background: var(--#{$prefix}#{$name}-lt);
color: var(--#{$prefix}#{$name});
}
}
+96
View File
@@ -0,0 +1,96 @@
@function theme-color-lighter($color, $background: #fff) {
@return mix($color, $background, 10%);
}
@function theme-color-darker($color) {
@return shade-color($color, 10%);
}
//
// Replace all occurrences of a substring within a string.
//
@function str-replace($string, $search, $replace: "") {
$index: str-index($string, $search);
@if $index {
@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
}
@return $string;
}
@mixin media-breakpoint-down-than($name, $breakpoints: $grid-breakpoints) {
$prev: breakpoint-prev($name);
@if $prev == null {
@content;
} @else {
$max: breakpoint-max($prev, $breakpoints);
@if $max {
@media (max-width: $max) {
@content;
}
} @else {
@content;
}
}
}
@function breakpoint-prev($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
$n: index($breakpoint-names, $name);
@if not $n {
@error "breakpoint `#{$name}` not found in `#{$breakpoints}`";
}
@return if($n > 1, nth($breakpoint-names, $n - 1), null);
}
//
// Escape SVG strings.
//
@function escape-svg($string) {
@if str-index($string, "data:image/svg+xml") {
@each $char, $encoded in $escaped-characters {
// Do not escape the url brackets
@if str-index($string, "url(") == 1 {
$string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}");
} @else {
$string: str-replace($string, $char, $encoded);
}
}
}
@return $string;
}
/**
* Converts a given value to a percentage string.
*
* @param {Number} $value - The value to be converted to a percentage.
* @return {String} - The percentage representation of the value.
*/
@function to-percentage($value) {
@return if(unitless($value), percentage($value), $value);
}
/**
* Generates a transparent version of the given color.
*
* @param {Color} $color - The base color to be made transparent.
* @param {Number} $alpha - The level of transparency, ranging from 0 (fully transparent) to 1 (fully opaque). Default is 1.
* @return {Color} - The resulting color with the specified transparency.
*/
@function color-transparent($color, $alpha: 1, $background: transparent) {
@if $alpha == 1 {
@return $color;
} @else {
@return color-mix(in srgb, #{$color} #{to-percentage($alpha)}, $background);
}
}
@function url-svg($svg) {
$svg: str-replace($svg, '#', '%23');
$svg: str-replace($svg, '<svg', '<svg xmlns="http://www.w3.org/2000/svg"');
@return url('data:image/svg+xml;charset=UTF-8,#{$svg}');
}
+68
View File
@@ -0,0 +1,68 @@
@mixin subheader($include-color: true, $include-line-height: true) {
font-size: $h5-font-size;
font-weight: var(--#{$prefix}font-weight-medium);
text-transform: uppercase;
letter-spacing: .04em;
@if $include-line-height {
line-height: $h5-line-height;
}
@if ($include-color) {
color: var(--#{$prefix}secondary);
}
}
@mixin scrollbar {
#{if(&, "&", "*")} {
scrollbar-color: color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), .20) transparent;
}
#{if(&, "&", "*")}::-webkit-scrollbar {
width: 1rem;
height: 1rem;
@include transition(background $transition-time);
}
#{if(&, "&", "*")}::-webkit-scrollbar-thumb {
border-radius: 1rem;
border: 5px solid transparent;
box-shadow: inset 0 0 0 1rem color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), .20);
}
#{if(&, "&", "*")}::-webkit-scrollbar-track {
background: transparent;
}
#{if(&, "&", "*")}:hover::-webkit-scrollbar-thumb {
box-shadow: inset 0 0 0 1rem color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), .40);
}
#{if(&, "&", "*")}::-webkit-scrollbar-corner {
background: transparent;
}
}
@mixin autodark-image {
filter: brightness(0) invert(1);
}
//
// Elements list
//
@mixin elements-list($gap: .5rem) {
--#{$prefix}list-gap: #{$gap};
display: flex;
flex-wrap: wrap;
gap: var(--#{$prefix}list-gap);
}
@mixin focus-ring($show-border: false) {
outline: 0;
box-shadow: 0 0 $focus-ring-blur $focus-ring-width rgba(var(--#{$prefix}primary-rgb), 0.25);
@if($show-border) {
border-color: rgba(var(--#{$prefix}primary-rgb), 0.25);
}
}
+2
View File
@@ -0,0 +1,2 @@
@import "config";
@import "ui/flags";
+13
View File
@@ -0,0 +1,13 @@
@import "config";
@import "variables";
@import "utilities-marketing";
@import "marketing/core";
@import "marketing/hero";
@import "marketing/browser";
@import "marketing/sections";
@import "marketing/filters";
@import "marketing/pricing";
@import "marketing/shape";
@import "bootstrap/scss/utilities/api";
+2
View File
@@ -0,0 +1,2 @@
@import "config";
@import "ui/payments";
+1
View File
@@ -0,0 +1 @@
@import "props"
+2
View File
@@ -0,0 +1,2 @@
@import "config";
@import "ui/social";
+121
View File
@@ -0,0 +1,121 @@
@import "config";
[data-bs-theme-base="slate"] {
--#{$prefix}gray-50: #f8fafc;
--#{$prefix}gray-100: #f1f5f9;
--#{$prefix}gray-200: #e2e8f0;
--#{$prefix}gray-300: #cbd5e1;
--#{$prefix}gray-400: #94a3b8;
--#{$prefix}gray-500: #64748b;
--#{$prefix}gray-600: #475569;
--#{$prefix}gray-700: #334155;
--#{$prefix}gray-800: #1e293b;
--#{$prefix}gray-900: #0f172a;
--#{$prefix}gray-950: #020617;
}
[data-bs-theme-base="gray"] {
--#{$prefix}gray-50: #f9fafb;
--#{$prefix}gray-100: #f3f4f6;
--#{$prefix}gray-200: #e5e7eb;
--#{$prefix}gray-300: #d1d5db;
--#{$prefix}gray-400: #9ca3af;
--#{$prefix}gray-500: #6b7280;
--#{$prefix}gray-600: #4b5563;
--#{$prefix}gray-700: #374151;
--#{$prefix}gray-800: #1f2937;
--#{$prefix}gray-900: #111827;
--#{$prefix}gray-950: #030712;
}
[data-bs-theme-base="zinc"] {
--#{$prefix}gray-50: #fafafa;
--#{$prefix}gray-100: #f4f4f5;
--#{$prefix}gray-200: #e4e4e7;
--#{$prefix}gray-300: #d4d4d8;
--#{$prefix}gray-400: #a1a1aa;
--#{$prefix}gray-500: #71717a;
--#{$prefix}gray-600: #52525b;
--#{$prefix}gray-700: #3f3f46;
--#{$prefix}gray-800: #27272a;
--#{$prefix}gray-900: #18181b;
--#{$prefix}gray-950: #09090b;
}
[data-bs-theme-base="neutral"] {
--#{$prefix}gray-50: #fafafa;
--#{$prefix}gray-100: #f5f5f5;
--#{$prefix}gray-200: #e5e5e5;
--#{$prefix}gray-300: #d4d4d4;
--#{$prefix}gray-400: #a3a3a3;
--#{$prefix}gray-500: #737373;
--#{$prefix}gray-600: #525252;
--#{$prefix}gray-700: #404040;
--#{$prefix}gray-800: #262626;
--#{$prefix}gray-900: #171717;
--#{$prefix}gray-950: #0a0a0a;
}
[data-bs-theme-base="stone"] {
--#{$prefix}gray-50: #fafaf9;
--#{$prefix}gray-100: #f5f5f4;
--#{$prefix}gray-200: #e7e5e4;
--#{$prefix}gray-300: #d6d3d1;
--#{$prefix}gray-400: #a8a29e;
--#{$prefix}gray-500: #78716c;
--#{$prefix}gray-600: #57534e;
--#{$prefix}gray-700: #44403c;
--#{$prefix}gray-800: #292524;
--#{$prefix}gray-900: #1c1917;
--#{$prefix}gray-950: #0c0a09;
}
[data-bs-theme-base="pink"] {
--#{$prefix}gray-50: #fdf2f8;
--#{$prefix}gray-100: #fce7f3;
--#{$prefix}gray-200: #fbcfe8;
--#{$prefix}gray-300: #f9a8d4;
--#{$prefix}gray-400: #f472b6;
--#{$prefix}gray-500: #ec4899;
--#{$prefix}gray-600: #db2777;
--#{$prefix}gray-700: #be185d;
--#{$prefix}gray-800: #9d174d;
--#{$prefix}gray-900: #831843;
--#{$prefix}gray-950: #500724;
}
@each $name, $value in $extra-colors {
[data-bs-theme-primary="#{$name}"] {
--#{$prefix}primary: #{$value};
--#{$prefix}primary-rgb: #{to-rgb($value)};
}
}
@each $value in (0, .5, 1, 1.5, 2) {
[data-bs-theme-radius="#{$value}"] {
--#{$prefix}border-radius-scale: #{$value};
}
}
[data-bs-theme-primary="inverted"] {
--#{$prefix}primary: var(--#{$prefix}gray-800);
--#{$prefix}primary-fg: var(--#{$prefix}light);
--#{$prefix}primary-rgb: #{to-rgb($dark)};
&[data-bs-theme="dark"],
[data-bs-theme="dark"] {
--#{$prefix}primary: #{$light};
--#{$prefix}primary-fg: var(--#{$prefix}dark);
--#{$prefix}primary-rgb: #{to-rgb($light)};
}
}
@each $name, $value in (monospace: $font-family-monospace, sans-serif: $font-family-sans-serif, serif: $font-family-serif, comic: $font-family-comic) {
[data-bs-theme-font="#{$name}"] {
--#{$prefix}body-font-family: var(--#{$prefix}font-#{$name});
@if $name == "monospace" {
--#{$prefix}body-font-size: 80%;
}
}
}
+16
View File
@@ -0,0 +1,16 @@
@import "config";
@import "vendor/nouislider";
@import "vendor/litepicker";
@import "vendor/tom-select";
@import "vendor/apexcharts";
@import "vendor/jsvectormap";
@import "vendor/dropzone";
@import "vendor/fslightbox";
@import "vendor/plyr";
@import "vendor/wysiwyg";
@import "vendor/stars-rating";
@import "vendor/coloris";
@import "vendor/typed";
@import "vendor/turbo";
@import "vendor/fullcalendar";
+2
View File
@@ -0,0 +1,2 @@
@import "core";
+177
View File
@@ -0,0 +1,177 @@
.accordion {
--#{$prefix}accordion-color: var(--#{$prefix}body-color);
--#{$prefix}accordion-border-color: var(--#{$prefix}border-color);
--#{$prefix}accordion-border-radius: #{$accordion-border-radius};
--#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};
--#{$prefix}accordion-padding-x: #{$accordion-body-padding-x};
--#{$prefix}accordion-gap: 0;
--#{$prefix}accordion-active-color: #{$accordion-button-active-color};
--#{$prefix}accordion-btn-color: var(--#{$prefix}accordion-color);
--#{$prefix}accordion-btn-bg: #{$accordion-button-bg};
--#{$prefix}accordion-btn-toggle-width: 1.25rem;
--#{$prefix}accordion-btn-padding-x: var(--#{$prefix}accordion-padding-x);
--#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};
--#{$prefix}accordion-btn-font-weight: var(--#{$prefix}font-weight-medium);
--#{$prefix}accordion-body-padding-x: var(--#{$prefix}accordion-padding-x);
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
display: flex;
flex-direction: column;
gap: var(--#{$prefix}accordion-gap);
}
.accordion-button {
position: relative;
display: flex;
align-items: center;
width: 100%;
padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-padding-x);
color: inherit;
text-align: inherit;
background-color: transparent;
border: 0;
font-size: inherit;
font-weight: var(--#{$prefix}accordion-btn-font-weight);
gap: .75rem;
&:not(.collapsed) {
border-bottom-color: transparent;
box-shadow: none;
color: var(--#{$prefix}accordion-active-color);
}
}
.accordion-header {
margin: 0;
position: relative;
display: flex;
gap: 1rem;
align-items: center;
width: 100%;
color: var(--#{$prefix}accordion-btn-color);
text-align: left;
background-color: transparent;
border: 0;
overflow-anchor: none;
transition: transform $transition-time;
&:hover {
z-index: 2;
}
&:focus {
z-index: 3;
outline: 0;
box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);
&:not(:focus-visible) {
outline: none;
box-shadow: none;
}
}
}
.accordion-button-icon {
color: var(--#{$prefix}secondary);
}
.accordion-button-toggle {
display: flex;
line-height: 1;
transition: $transition-time transform;
margin-left: auto;
margin-right: 0;
color: var(--#{$prefix}secondary);
width: var(--#{$prefix}accordion-btn-toggle-width);
height: var(--#{$prefix}accordion-btn-toggle-width);
.accordion-button:not(.collapsed) & {
transform: rotate(-180deg);
color: var(--#{$prefix}accordion-active-color);
}
path {
transition: $transition-time opacity;
}
}
.accordion-button-toggle-plus {
.accordion-button:not(.collapsed) & {
path:first-child {
opacity: 0;
}
}
}
.accordion-item {
color: var(--#{$prefix}accordion-color);
border: var(--#{$prefix}border-width) solid var(--#{$prefix}accordion-border-color);
&:first-of-type {
@include border-top-radius(var(--#{$prefix}accordion-border-radius));
> .accordion-header {
@include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));
}
}
&:not(:first-of-type) {
border-top: 0;
}
&:last-of-type {
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
> .accordion-header {
&.collapsed {
@include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));
}
}
> .accordion-collapse {
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
}
}
}
.accordion-body {
color: var(--#{$prefix}secondary);
padding: 0 var(--#{$prefix}accordion-body-padding-x) var(--#{$prefix}accordion-body-padding-y);
}
.accordion-flush {
> .accordion-item {
border-right: 0;
border-left: 0;
@include border-radius(0);
&:first-child {
border-top: 0;
}
&:last-child {
border-bottom: 0;
}
> .accordion-collapse,
> .accordion-header .accordion-button,
> .accordion-header .accordion-button.collapsed {
@include border-radius(0);
}
}
}
.accordion-tabs {
--#{$prefix}accordion-gap: 0.75rem;
> .accordion-item {
border: var(--#{$prefix}border-width) solid var(--#{$prefix}accordion-border-color);
border-radius: var(--#{$prefix}accordion-border-radius);
}
}
.accordion-inverted {
.accordion-button-toggle {
order: -1;
margin-left: 0;
}
}
+101
View File
@@ -0,0 +1,101 @@
.alert {
// scss-docs-start alert-variables
--#{$prefix}alert-color: var(--#{$prefix}body-color);
--#{$prefix}alert-bg: #{color-transparent(var(--#{$prefix}alert-color), .1)};
--#{$prefix}alert-padding-x: #{$alert-padding-x};
--#{$prefix}alert-padding-y: #{$alert-padding-y};
--#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};
--#{$prefix}alert-border-color: #{color-transparent(var(--#{$prefix}alert-color), .2)};
--#{$prefix}alert-border: var(--#{$prefix}border-width) solid var(--#{$prefix}alert-border-color);
--#{$prefix}alert-border-radius: var(--#{$prefix}border-radius);
--#{$prefix}alert-link-color: inherit;
--#{$prefix}alert-heading-font-weight: var(--#{$prefix}font-weight-medium);
// scss-docs-end
position: relative;
padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);
margin-bottom: var(--#{$prefix}alert-margin-bottom);
background-color: color-mix(in srgb, var(--#{$prefix}alert-bg), var(--#{$prefix}bg-surface));
border-radius: var(--#{$prefix}alert-border-radius);
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}alert-border-color);
display: flex;
flex-direction: row;
gap: 1rem;
}
.alert-heading {
color: inherit;
margin-bottom: .25rem; // todo: use variable
font-weight: var(--#{$prefix}alert-heading-font-weight);
}
.alert-description {
color: var(--#{$prefix}secondary);
}
.alert-icon {
color: var(--#{$prefix}alert-color);
width: 1.25rem !important; // todo: use variable
height: 1.25rem !important;
}
.alert-action {
color: var(--#{$prefix}alert-color);
text-decoration: underline;
&:hover {
text-decoration: none;
}
}
.alert-list {
margin: 0;
}
.alert-link {
font-weight: $alert-link-font-weight;
color: var(--#{$prefix}alert-link-color);
&,
&:hover {
color: var(--#{$prefix}alert-color);
}
}
.alert-dismissible {
padding-right: 3rem; //todo: use variable
.btn-close {
position: absolute;
top: calc(var(--#{$prefix}alert-padding-x) / 2 - 1px);
right: calc(var(--#{$prefix}alert-padding-y) / 2 - 1px);
z-index: 1;
padding: calc(var(--#{$prefix}alert-padding-y) * 1.25) var(--#{$prefix}alert-padding-x);
}
}
.alert-important {
border-color: var(--#{$prefix}alert-color);
background-color: var(--#{$prefix}alert-color);
color: var(--#{$prefix}white);
.alert-description {
color: inherit;
}
.alert-icon {
color: inherit;
}
}
.alert-minor {
background: transparent;
border-color: var(--tblr-border-color);
}
@each $name, $color in $theme-colors {
.alert-#{$name} {
--#{$prefix}alert-color: var(--#{$prefix}#{$name});
}
}
+145
View File
@@ -0,0 +1,145 @@
.avatar {
--#{$prefix}avatar-size: var(--#{$prefix}avatar-list-size, #{$avatar-size});
--#{$prefix}avatar-status-size: #{$avatar-status-size};
--#{$prefix}avatar-bg: #{$avatar-bg};
--#{$prefix}avatar-box-shadow-color: var(--#{$prefix}border-color-translucent);
--#{$prefix}avatar-box-shadow: inset 0 0 0 1px var(--#{$prefix}avatar-box-shadow-color);
--#{$prefix}avatar-font-size: #{$avatar-font-size};
--#{$prefix}avatar-icon-size: #{$avatar-icon-size};
--#{$prefix}avatar-brand-size: #{$avatar-brand-size};
position: relative;
width: var(--#{$prefix}avatar-size);
height: var(--#{$prefix}avatar-size);
font-size: var(--#{$prefix}avatar-font-size);
font-weight: var(--#{$prefix}font-weight-medium);
line-height: 1;
display: inline-flex;
align-items: center;
justify-content: center;
color: var(--#{$prefix}secondary);
text-align: center;
text-transform: uppercase;
vertical-align: bottom;
user-select: none;
background: var(--#{$prefix}avatar-bg) no-repeat center/cover;
border-radius: $avatar-border-radius;
box-shadow: var(--#{$prefix}avatar-box-shadow);
transition: color $transition-time, background-color $transition-time, box-shadow $transition-time;
.icon {
width: var(--#{$prefix}avatar-icon-size);
height: var(--#{$prefix}avatar-icon-size);
}
.badge {
position: absolute;
right: 0;
bottom: 0;
border-radius: $border-radius-pill;
box-shadow: 0 0 0 calc(var(--#{$prefix}avatar-status-size) / 4) $card-bg;
}
@at-root a#{&} {
cursor: pointer;
&:hover {
color: var(--#{$prefix}primary);
--#{$prefix}avatar-box-shadow-color: var(--#{$prefix}primary);
}
}
}
.avatar-rounded {
border-radius: $border-radius-pill;
}
@each $avatar-size, $size in $avatar-sizes {
.avatar-#{$avatar-size} {
--#{$prefix}avatar-size: #{map-get($size, size)};
--#{$prefix}avatar-status-size: #{map-get($size, status-size)};
--#{$prefix}avatar-font-size: #{map-get($size, font-size)};
--#{$prefix}avatar-icon-size: #{map-get($size, icon-size)};
--#{$prefix}avatar-brand-size: #{map-get($size, brand-size)};
.badge:empty {
width: map-get($size, status-size);
height: map-get($size, status-size);
}
}
}
//
// Avatar list
//
.avatar-list {
--#{$prefix}avatar-list-size: #{$avatar-size};
@include elements-list;
a.avatar {
&:hover {
z-index: 1;
}
}
}
.avatar-list-stacked {
display: block;
--#{$prefix}list-gap: 0;
.avatar {
margin-right: calc(#{$avatar-list-spacing} * var(--#{$prefix}avatar-size)) !important;
box-shadow: var(--#{$prefix}avatar-box-shadow), 0 0 0 2px var(--#{$prefix}card-bg, var(--#{$prefix}bg-surface));
}
}
@each $avatar-size, $size in $avatar-sizes {
.avatar-list-#{$avatar-size} {
--#{$prefix}avatar-list-size: #{map-get($size, size)};
}
}
//
// Avatar upload
//
.avatar-upload {
border: var(--#{$prefix}border-width) dashed var(--#{$prefix}border-color);
background: $form-check-input-bg;
box-shadow: none;
flex-direction: column;
@include transition(color $transition-time, background-color $transition-time);
svg {
width: 1.5rem;
height: 1.5rem;
stroke-width: 1;
}
&:hover {
border-color: var(--#{$prefix}primary);
color: var(--#{$prefix}primary);
text-decoration: none;
}
}
.avatar-upload-text {
font-size: $h6-font-size;
line-height: 1;
margin-top: .25rem;
}
.avatar-cover {
margin-top: calc(-.5 * var(--#{$prefix}avatar-size));
box-shadow: 0 0 0 .25rem var(--#{$prefix}card-bg, var(--#{$prefix}body-bg));
}
.avatar-brand {
width: var(--#{$prefix}avatar-brand-size);
height: var(--#{$prefix}avatar-brand-size);
position: absolute;
right: -2px;
bottom: -2px;
z-index: 1000;
background: var(--#{$prefix}bg-surface);
border-radius: var(--#{$prefix}border-radius);
border: 1px solid var(--#{$prefix}border-color);
}
+113
View File
@@ -0,0 +1,113 @@
.badge {
--#{$prefix}badge-padding-x: #{$badge-padding-x};
--#{$prefix}badge-padding-y: #{$badge-padding-y};
--#{$prefix}badge-font-size: #{$badge-font-size};
--#{$prefix}badge-font-weight: #{$badge-font-weight};
--#{$prefix}badge-color: #{$badge-color};
--#{$prefix}badge-border-radius: #{$badge-border-radius};
--#{$prefix}badge-icon-size: 1em;
--#{$prefix}badge-line-height: 1;
display: inline-flex;
padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);
font-weight: var(--#{$prefix}badge-font-weight);
font-size: var(--#{$prefix}badge-font-size);
color: var(--#{$prefix}badge-color);
text-align: center;
white-space: nowrap;
justify-content: center;
align-items: center;
gap: .25rem;
background: $badge-bg-color;
overflow: hidden;
user-select: none;
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) transparent;
border-radius: var(--#{$prefix}badge-border-radius);
min-width: calc(1em + var(--#{$prefix}badge-padding-y) * 2 + 2px);
letter-spacing: 0.04em;
vertical-align: bottom;
line-height: var(--#{$prefix}badge-line-height);
@at-root a#{&} {
background: var(--#{$prefix}bg-surface-secondary);
}
.icon {
width: 1em;
height: 1em;
font-size: var(--#{$prefix}badge-icon-size);
stroke-width: 2;
}
}
.badge:empty,
.badge-dot {
display: inline-block;
width: $badge-empty-size;
height: $badge-empty-size;
min-width: 0;
min-height: auto;
padding: 0;
border-radius: $border-radius-pill;
vertical-align: baseline;
}
//
// Outline badge
//
.badge-outline {
background-color: transparent;
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) currentColor;
}
//
// Pill badge
//
.badge-pill {
border-radius: $border-radius-pill;
}
//
// Badges list
//
.badges-list {
@include elements-list;
}
//
// Notification badge
//
.badge-notification {
position: absolute !important;
top: 0 !important;
right: 0 !important;
transform: translate(50%, -50%);
z-index: 1;
}
.badge-blink {
animation: blink 2s infinite;
}
//
// Badge sizes
//
.badge-sm {
--#{$prefix}badge-font-size: #{$badge-font-size-sm};
--#{$prefix}badge-icon-size: 1em;
--#{$prefix}badge-padding-y: 2px;
--#{$prefix}badge-padding-x: 0.25rem;
}
.badge-lg {
--#{$prefix}badge-font-size: #{$badge-font-size-lg};
--#{$prefix}badge-icon-size: 1em;
--#{$prefix}badge-padding-y: 0.25rem;
--#{$prefix}badge-padding-x: 0.5rem;
}
//
// Badge with only icon
//
.badge-icononly {
--#{$prefix}badge-padding-x: 0;
}
+50
View File
@@ -0,0 +1,50 @@
.breadcrumb {
--#{$prefix}breadcrumb-item-active-font-weight: #{$breadcrumb-active-font-weight};
--#{$prefix}breadcrumb-item-disabled-color: #{$breadcrumb-disabled-color};
--#{$prefix}breadcrumb-link-color: #{$breadcrumb-link-color};
padding: 0;
margin: 0;
background: transparent;
a {
color: var(--#{$prefix}breadcrumb-link-color);
&:hover {
text-decoration: underline;
}
}
}
.breadcrumb-muted {
--#{$prefix}breadcrumb-link-color: var(--#{$prefix}secondary);
}
.breadcrumb-item {
&.active {
font-weight: var(--#{$prefix}breadcrumb-item-active-font-weight);
a {
color: inherit;
pointer-events: none;
}
}
&.disabled {
color: var(--#{$prefix}breadcrumb-item-disabled-color);
&:before {
color: inherit;
}
a {
color: inherit;
pointer-events: none;
}
}
}
@each $name, $symbol in $breadcrumb-variants {
.breadcrumb-#{$name} {
--#{$prefix}breadcrumb-divider: "#{quote($symbol)}";
}
}
+16
View File
@@ -0,0 +1,16 @@
.btn-group,
.btn-group-vertical {
box-shadow: $input-box-shadow;
> .btn-check:checked + .btn,
> .btn:active,
> .btn.active {
z-index: 5;
}
> .btn-check:focus + .btn,
> .btn:hover,
> .btn:focus {
z-index: 1;
}
}
+261
View File
@@ -0,0 +1,261 @@
@use "sass:color";
//
// Button
//
.btn {
--#{$prefix}btn-icon-size: #{$input-btn-icon-size};
--#{$prefix}btn-bg: var(--#{$prefix}bg-surface);
--#{$prefix}btn-color: var(--#{$prefix}body-color);
--#{$prefix}btn-border-color: #{$btn-border-color};
--#{$prefix}btn-hover-bg: var(--#{$prefix}btn-bg);
--#{$prefix}btn-hover-border-color: var(--#{$prefix}border-active-color);
--#{$prefix}btn-box-shadow: var(--#{$prefix}shadow-input);
--#{$prefix}btn-active-color: #{$active-color};
--#{$prefix}btn-active-bg: #{$active-bg};
--#{$prefix}btn-active-border-color: #{$active-border-color};
display: inline-flex;
align-items: center;
justify-content: center;
white-space: nowrap;
box-shadow: var(--#{$prefix}btn-box-shadow);
position: relative;
.icon {
width: var(--#{$prefix}btn-icon-size);
height: var(--#{$prefix}btn-icon-size);
min-width: var(--#{$prefix}btn-icon-size);
font-size: var(--#{$prefix}btn-icon-size);
margin: 0 calc(var(--#{$prefix}btn-padding-x) / 2) 0 calc(var(--#{$prefix}btn-padding-x) / -4);
vertical-align: bottom;
color: inherit;
}
.avatar {
width: var(--#{$prefix}btn-icon-size);
height: var(--#{$prefix}btn-icon-size);
margin: 0 calc(var(--#{$prefix}btn-padding-x) / 2) 0 calc(var(--#{$prefix}btn-padding-x) / -4);
}
.icon-right {
margin: 0 calc(var(--#{$prefix}btn-padding-x) / -4) 0 calc(var(--#{$prefix}btn-padding-x) / 2);
}
.badge {
top: auto;
}
.btn-check + &:hover {
color: var(--#{$prefix}btn-hover-color);
background-color: var(--#{$prefix}btn-hover-bg);
border-color: var(--#{$prefix}btn-hover-border-color);
}
}
.btn-link {
color: #{color.adjust($primary, $lightness: 5%)};
background-color: transparent;
border-color: transparent;
box-shadow: none;
.icon {
color: inherit;
}
&:hover {
color: $link-hover-color;
border-color: transparent;
}
}
//
// Button color variations
//
@each $color, $value in map-merge($theme-colors, $social-colors) {
.btn-#{$color} {
@if $color == 'dark' {
--#{$prefix}btn-border-color: var(--#{$prefix}dark-mode-border-color);
--#{$prefix}btn-hover-border-color: var(--#{$prefix}dark-mode-border-active-color);
--#{$prefix}btn-active-border-color: var(--#{$prefix}dark-mode-border-active-color);
} @else {
--#{$prefix}btn-border-color: transparent;
--#{$prefix}btn-hover-border-color: transparent;
--#{$prefix}btn-active-border-color: transparent;
}
--#{$prefix}btn-color: var(--#{$prefix}#{$color}-fg, #{$white});
--#{$prefix}btn-bg: var(--#{$prefix}#{$color});
--#{$prefix}btn-hover-color: var(--#{$prefix}#{$color}-fg);
--#{$prefix}btn-hover-bg: var(--#{$prefix}#{$color}-darken);
--#{$prefix}btn-active-color: var(--#{$prefix}#{$color}-fg);
--#{$prefix}btn-active-bg: var(--#{$prefix}#{$color}-darken);
--#{$prefix}btn-disabled-bg: var(--#{$prefix}#{$color});
--#{$prefix}btn-disabled-color: var(--#{$prefix}#{$color}-fg);
--#{$prefix}btn-box-shadow: var(--#{$prefix}shadow-input);
}
.btn-outline-#{$color} {
--#{$prefix}btn-color: var(--#{$prefix}#{$color});
--#{$prefix}btn-bg: transparent;
--#{$prefix}btn-border-color: var(--#{$prefix}#{$color});
--#{$prefix}btn-hover-color: var(--#{$prefix}#{$color}-fg);
--#{$prefix}btn-hover-border-color: transparent;
--#{$prefix}btn-hover-bg: var(--#{$prefix}#{$color});
--#{$prefix}btn-active-color: var(--#{$prefix}#{$color}-fg);
--#{$prefix}btn-active-bg: var(--#{$prefix}#{$color});
--#{$prefix}btn-disabled-color: var(--#{$prefix}#{$color});
--#{$prefix}btn-disabled-border-color: var(--#{$prefix}#{$color});
}
.btn-ghost-#{$color} {
--#{$prefix}btn-color: var(--#{$prefix}#{$color});
--#{$prefix}btn-bg: transparent;
--#{$prefix}btn-border-color: transparent;
--#{$prefix}btn-hover-color: var(--#{$prefix}#{$color}-fg);
--#{$prefix}btn-hover-bg: var(--#{$prefix}#{$color});
--#{$prefix}btn-hover-border-color: var(--#{$prefix}#{$color});
--#{$prefix}btn-active-color: var(--#{$prefix}#{$color}-fg);
--#{$prefix}btn-active-bg: var(--#{$prefix}#{$color});
--#{$prefix}btn-active-border-color: transparent;
--#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};
--#{$prefix}btn-disabled-color: var(--#{$prefix}#{$color});
--#{$prefix}btn-disabled-bg: transparent;
--#{$prefix}btn-disabled-border-color: transparent;
--#{$prefix}gradient: none;
--#{$prefix}btn-box-shadow: none;
}
}
//
// Button sizes
//
.btn-sm, .btn-group-sm > .btn {
--#{$prefix}btn-line-height: #{$input-btn-line-height-sm};
--#{$prefix}btn-icon-size: #{$input-btn-icon-size-sm};
}
.btn-lg, .btn-group-lg > .btn {
--#{$prefix}btn-line-height: #{$input-btn-line-height-lg};
--#{$prefix}btn-icon-size: #{$input-btn-icon-size-lg};
}
//
// Button shapes
//
.btn-pill {
padding-right: 1.5em;
padding-left: 1.5em;
border-radius: 10rem;
&[class*="btn-icon"] {
padding: 0.375rem 15px;
}
}
.btn-square {
border-radius: 0;
}
//
// Icon button
//
.btn-icon {
min-width: calc((var(--#{$prefix}btn-line-height) * var(--#{$prefix}btn-font-size)) + (var(--#{$prefix}btn-padding-y) * 2) + (var(--#{$prefix}btn-border-width) * 2));
min-height: calc((var(--#{$prefix}btn-line-height) * var(--#{$prefix}btn-font-size)) + (var(--#{$prefix}btn-padding-y) * 2) + (var(--#{$prefix}btn-border-width) * 2));
padding-left: 0;
padding-right: 0;
.icon {
margin: calc(-1 * var(--#{$prefix}btn-padding-x));
}
}
//
// Button list
//
.btn-list {
@include elements-list;
}
//
// Button floating
//
.btn-floating {
position: fixed;
z-index: $zindex-fixed;
bottom: 1rem;
left: 1rem;
box-shadow: var(--#{$prefix}shadow-dropdown);
}
//
// Button loading
//
.btn-loading {
position: relative;
color: transparent !important;
text-shadow: none !important;
pointer-events: none;
> * {
opacity: 0;
}
&:after {
content: "";
display: inline-block;
vertical-align: text-bottom;
border: $spinner-border-width var(--#{$prefix}border-style) currentColor;
border-right-color: transparent;
border-radius: $border-radius-pill;
color: var(--#{$prefix}btn-color);
position: absolute;
width: var(--#{$prefix}btn-icon-size);
height: var(--#{$prefix}btn-icon-size);
left: calc(50% - var(--#{$prefix}btn-icon-size) / 2);
top: calc(50% - var(--#{$prefix}btn-icon-size) / 2);
animation: spinner-border .75s linear infinite;
}
}
//
// Action button
//
.btn-action {
--#{$prefix}border-color: transparent;
padding: 0;
border: 0;
color: var(--#{$prefix}secondary);
display: inline-flex;
width: 2rem;
height: 2rem;
align-items: center;
justify-content: center;
border-radius: var(--#{$prefix}border-radius);
background: transparent;
box-shadow: none;
&:after {
content: none;
}
&:focus {
outline: none;
box-shadow: none;
}
&:hover,
&.show {
color: var(--#{$prefix}body-color);
background: var(--#{$prefix}active-bg);
}
&.show {
color: var(--#{$prefix}primary);
}
}
.btn-actions {
display: flex;
}
+104
View File
@@ -0,0 +1,104 @@
.calendar {
display: block;
font-size: $font-size-sm;
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
border-radius: var(--#{$prefix}border-radius);
}
.calendar-nav {
display: flex;
align-items: center;
}
.calendar-title {
flex: 1;
text-align: center;
}
.calendar-body,
.calendar-header {
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
padding: .5rem 0;
}
.calendar-header {
color: var(--#{$prefix}secondary);
}
.calendar-date {
flex: 0 0 calc(100% / 7);
max-width: calc(100% / 7);
padding: .2rem;
text-align: center;
border: 0;
&.prev-month,
&.next-month {
opacity: .25;
}
.date-item {
position: relative;
display: inline-block;
width: 1.4rem;
height: 1.4rem;
line-height: 1.4rem;
color: #66758c;
text-align: center;
text-decoration: none;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
background: 0 0;
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) transparent;
border-radius: $border-radius-pill;
outline: 0;
@include transition(background $transition-time, border $transition-time, box-shadow .32s, color $transition-time);
&:hover {
color: var(--#{$prefix}primary);
text-decoration: none;
background: #fefeff;
border-color: var(--#{$prefix}border-color);
}
}
.date-today {
color: var(--#{$prefix}primary);
border-color: var(--#{$prefix}border-color);
}
}
.calendar-range {
position: relative;
&:before {
position: absolute;
top: 50%;
right: 0;
left: 0;
height: 1.4rem;
content: "";
background: rgba(var(--#{$prefix}primary-rgb), .1);
transform: translateY(-50%);
}
&.range-start,
&.range-end {
.date-item {
color: $white;
background: var(--#{$prefix}primary);
border-color: var(--#{$prefix}primary);
}
}
&.range-start:before {
left: 50%;
}
&.range-end:before {
right: 50%;
}
}
+595
View File
@@ -0,0 +1,595 @@
.card {
@include transition(transform $transition-time ease-out, opacity $transition-time ease-out, box-shadow $transition-time ease-out);
@media print {
border: none;
box-shadow: none;
}
@at-root a#{&} {
color: inherit;
&:hover {
text-decoration: none;
box-shadow: $box-shadow-card-hover;
}
}
.card {
box-shadow: none;
}
}
// Card borderless
.card-borderless {
&,
.card-header,
.card-footer {
border-color: transparent;
}
}
// Card stamp
.card-stamp {
--#{$prefix}stamp-size: 7rem;
position: absolute;
top: 0;
right: 0;
width: calc(var(--#{$prefix}stamp-size) * 1);
height: calc(var(--#{$prefix}stamp-size) * 1);
max-height: 100%;
border-top-right-radius: $border-radius;
opacity: $card-stamp-opacity;
overflow: hidden;
pointer-events: none;
}
.card-stamp-lg {
--#{$prefix}stamp-size: 13rem;
}
.card-stamp-icon {
background: var(--#{$prefix}secondary);
color: var(--#{$prefix}card-bg, var(--#{$prefix}bg-surface));
display: flex;
align-items: center;
justify-content: center;
border-radius: $border-radius-pill;
width: calc(var(--#{$prefix}stamp-size) * 1);
height: calc(var(--#{$prefix}stamp-size) * 1);
position: relative;
top: calc(var(--#{$prefix}stamp-size) * -.25);
right: calc(var(--#{$prefix}stamp-size) * -.25);
font-size: calc(var(--#{$prefix}stamp-size) * .75);
transform: rotate(10deg);
.icon {
stroke-width: 2;
width: calc(var(--#{$prefix}stamp-size) * .75);
height: calc(var(--#{$prefix}stamp-size) * .75);
}
}
// Card image
.card-img,
.card-img-start {
@include border-start-radius($card-inner-border-radius);
}
.card-img,
.card-img-end {
@include border-end-radius($card-inner-border-radius);
}
.card-img-overlay {
display: flex;
flex-direction: column;
justify-content: flex-end;
}
.card-img-overlay-dark {
background-image: $overlay-gradient;
}
.card-inactive {
pointer-events: none;
box-shadow: none;
.card-body {
opacity: .64;
}
}
.card-active {
--#{$prefix}card-border-color: var(--#{$prefix}primary);
--#{$prefix}card-bg: var(--#{$prefix}active-bg);
}
.card-btn {
display: flex;
align-items: center;
justify-content: center;
padding: $card-spacer-y $card-spacer-x;
text-align: center;
@include transition(background $transition-time);
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
flex: 1;
color: inherit;
font-weight: var(--#{$prefix}font-weight-medium);
&:hover {
text-decoration: none;
background: $active-bg;
}
& + & {
border-left: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
}
}
/**
Stacked card
*/
.card-stacked {
--#{$prefix}card-stacked-offset: .25rem;
position: relative;
&:after {
position: absolute;
top: calc(-1 * var(--#{$prefix}card-stacked-offset));
right: var(--#{$prefix}card-stacked-offset);
left: var(--#{$prefix}card-stacked-offset);
height: var(--#{$prefix}card-stacked-offset);
content: "";
background: var(--#{$prefix}card-bg, var(--#{$prefix}bg-surface));
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}card-border-color);
border-radius: var(--#{$prefix}card-border-radius) var(--#{$prefix}card-border-radius) 0 0;
}
}
.card-cover {
position: relative;
padding: $card-spacer-y $card-spacer-x;
background: #666666 no-repeat center/cover;
&:before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
content: "";
background: rgba($dark, .48);
}
&:first-child,
&:first-child:before {
border-radius: $border-radius $border-radius 0 0;
}
}
.card-cover-blurred {
&:before {
backdrop-filter: blur(2px);
}
}
.card-actions {
margin: -.5rem -.5rem -.5rem auto;
padding-left: .5rem;
a {
text-decoration: none;
}
}
// Card header
.card-header {
color: inherit;
display: flex;
align-items: center;
background: transparent;
&:first-child {
border-radius: var(--#{$prefix}card-border-radius) var(--#{$prefix}card-border-radius) 0 0;
}
}
.card-header-light {
border-bottom-color: transparent;
background: var(--#{$prefix}bg-surface-tertiary);
}
.card-header-tabs {
background: $card-header-tabs-bg;
flex: 1;
margin: calc(var(--#{$prefix}card-cap-padding-y) * -1) calc(var(--#{$prefix}card-cap-padding-x) * -1) calc(var(--#{$prefix}card-cap-padding-y) * -1);
padding: calc(var(--#{$prefix}card-cap-padding-y) * .5) calc(var(--#{$prefix}card-cap-padding-x) * .5) 0;
border-radius: var(--#{$prefix}card-border-radius) var(--#{$prefix}card-border-radius) 0 0;
}
.card-header-pills {
flex: 1;
margin-top: -.5rem;
margin-bottom: -.5rem;
}
// Card rotate
.card-rotate-left {
transform: rotate(-1.5deg);
}
.card-rotate-right {
transform: rotate(1.5deg);
}
// Card link
.card-link {
color: inherit;
&:hover {
color: inherit;
text-decoration: none;
box-shadow: 0 1px 6px 0 rgba(0, 0, 0, .08);
}
}
.card-link-rotate:hover {
transform: rotate(1.5deg);
opacity: 1
}
.card-link-pop:hover {
transform: translateY(-2px);
opacity: 1
}
// Card footer
.card-footer {
margin-top: auto;
&:last-child {
border-radius: 0 0 var(--#{$prefix}card-border-radius) var(--#{$prefix}card-border-radius);
}
}
.card-footer-transparent {
background: transparent;
border-color: transparent;
padding-top: 0;
}
.card-footer-borderless {
border-top: none;
}
// Card progress
.card-progress {
height: .25rem;
&:last-child {
border-radius: 0 0 2px 2px;
}
&:first-child {
border-radius: 2px 2px 0 0;
}
}
.card-meta {
color: var(--#{$prefix}secondary);
}
.card-title {
display: block;
margin: 0 0 1rem;
font-size: $h3-font-size;
font-weight: var(--#{$prefix}font-weight-medium);
color: $headings-color;
line-height: 1.5rem;
@at-root a#{&}:hover {
color: inherit;
}
.card-header & {
margin: 0;
}
}
.card-subtitle {
margin-bottom: $card-title-spacer-y;
color: var(--#{$prefix}secondary);
font-weight: normal;
.card-header & {
margin: 0;
}
.card-title & {
margin: 0 0 0 .25rem;
font-size: $h4-font-size;
}
}
.card-body {
position: relative;
> :last-child {
margin-bottom: 0;
}
.card-sm > & {
padding: 1rem;
}
.card-md > & {
@include media-breakpoint-up(md) {
padding: 2.5rem;
}
}
.card-lg > & {
@include media-breakpoint-up(md) {
padding: 2rem;
}
@include media-breakpoint-up(lg) {
padding: 4rem;
}
}
@media print {
padding: 0;
}
& + & {
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
}
}
.card-body-scrollable {
overflow: auto;
}
/**
Card optinos
*/
.card-options {
top: 1.5rem;
right: .75rem;
display: flex;
margin-left: auto;
}
.card-options-link {
display: inline-block;
min-width: 1rem;
margin-left: .25rem;
color: var(--#{$prefix}secondary);
}
/**
Card status
*/
.card-status-top {
position: absolute;
top: 0;
right: 0;
left: 0;
height: $card-status-size;
border-radius: var(--#{$prefix}card-border-radius) var(--#{$prefix}card-border-radius) 0 0;
}
.card-status-start {
position: absolute;
right: auto;
bottom: 0;
width: $card-status-size;
height: 100%;
border-radius: var(--#{$prefix}card-border-radius) 0 0 var(--#{$prefix}card-border-radius);
}
.card-status-bottom {
position: absolute;
top: initial;
bottom: 0;
width: 100%;
height: $card-status-size;
border-radius: 0 0 var(--#{$prefix}card-border-radius) var(--#{$prefix}card-border-radius);
}
/**
Card table
*/
.card-table {
margin-bottom: 0 !important;
tr {
td,
th {
&:first-child {
padding-left: $card-spacer-x;
border-left: 0;
}
&:last-child {
padding-right: $card-spacer-x;
border-right: 0;
}
}
}
thead,
tbody,
tfoot {
tr {
&:first-child {
border-top: 0;
td,
th {
border-top: 0;
}
}
}
}
.card-body + & {
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}table-border-color);
}
}
/*
Card code
*/
.card-code {
padding: 0;
.highlight {
margin: 0;
border: 0;
}
pre {
margin: 0 !important;
border: 0 !important;
}
}
/*
Card chart
*/
.card-chart {
position: relative;
z-index: 1;
height: 3.5rem;
}
/**
Card avatar
*/
.card-avatar {
margin-left: auto;
margin-right: auto;
box-shadow: 0 0 0 .25rem var(--#{$prefix}card-bg, var(--#{$prefix}bg-surface));
margin-top: calc(-1 * calc(var(--#{$prefix}avatar-size) * .5));
}
/*
Card list group
*/
.card-list-group {
.card-body + & {
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
}
.list-group-item {
padding-right: $card-spacer-x;
padding-left: $card-spacer-x;
border-right: 0;
border-left: 0;
border-radius: 0;
&:last-child {
border-bottom: 0;
}
&:first-child {
border-top: 0;
}
}
}
// Card tabs
.card-tabs {
.nav-tabs {
position: relative;
z-index: $zindex-dropdown;
border-bottom: 0;
.nav-link {
background: $card-cap-bg;
border: $card-border-width var(--#{$prefix}border-style) $card-border-color;
&.active,
&:active,
&:hover {
border-color: $card-border-color;
color: var(--#{$prefix}body-color);
}
&.active {
color: $headings-color;
background: var(--#{$prefix}card-bg, var(--#{$prefix}bg-surface));
border-bottom-color: transparent;
}
}
.nav-item {
&:not(:first-child) {
.nav-link {
border-top-left-radius: 0;
}
}
&:not(:last-child) {
.nav-link {
border-top-right-radius: 0;
}
}
+ .nav-item {
margin-left: calc(-1 * #{$card-border-width});
}
}
}
.nav-tabs-bottom {
margin-bottom: 0;
.nav-link {
margin-bottom: 0;
&.active {
border-top-color: transparent;
}
}
.nav-item {
margin-top: calc(-1 * #{$card-border-width});
margin-bottom: 0;
.nav-link {
border-bottom: $card-border-width var(--#{$prefix}border-style) $card-border-color;
border-radius: 0 0 $card-border-radius $card-border-radius;
}
&:not(:first-child) .nav-link {
border-bottom-left-radius: 0;
}
&:not(:last-child) .nav-link {
border-bottom-right-radius: 0;
}
}
}
.card {
border-bottom-left-radius: 0;
}
.nav-tabs + .tab-content .card {
border-bottom-left-radius: var(--#{$prefix}card-border-radius);
border-top-left-radius: 0;
}
}
/**
Card note
*/
.card-note {
--#{$prefix}card-bg: #fff7dd;
--#{$prefix}card-border-color: #fff1c9;
}
+68
View File
@@ -0,0 +1,68 @@
.carousel {
}
.carousel-indicators-vertical {
left: auto;
top: 0;
margin: 0 1rem 0 0;
flex-direction: column;
[data-bs-target] {
margin: $carousel-indicator-spacer 0 $carousel-indicator-spacer;
width: $carousel-indicator-height;
height: $carousel-indicator-width;
border: 0;
border-left: $carousel-indicator-hit-area-height var(--#{$prefix}border-style) transparent;
border-right: $carousel-indicator-hit-area-height var(--#{$prefix}border-style) transparent;
}
}
.carousel-indicators-dot {
[data-bs-target] {
width: $carousel-indicator-dot-width;
height: $carousel-indicator-dot-width;
border-radius: $border-radius-pill;
border: $carousel-indicator-hit-area-height var(--#{$prefix}border-style) transparent;
margin: 0;
}
}
.carousel-indicators-thumb {
[data-bs-target] {
width: $carousel-indicator-thumb-width * .5;
height: auto;
background: no-repeat center/cover;
border: 0;
border-radius: var(--#{$prefix}border-radius);
box-shadow: $box-shadow;
margin: 0 $carousel-indicator-spacer;
opacity: $carousel-indicator-thumb-opacity;
@include media-breakpoint-up(lg) {
width: $carousel-indicator-thumb-width;
}
&:before {
content: "";
padding-top: var(--#{$prefix}aspect-ratio, 100%);
display: block;
}
}
&.carousel-indicators-vertical {
[data-bs-target] {
margin: $carousel-indicator-spacer 0;
}
}
}
.carousel-caption-background {
background: red;
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 90%;
background: linear-gradient(0deg, rgba($dark, .9), rgba($dark, 0));
}
+61
View File
@@ -0,0 +1,61 @@
.chart {
display: block;
min-height: 10rem;
text {
font-family: inherit;
}
}
.chart-sm {
height: 2.5rem;
}
.chart-lg {
height: 15rem;
}
.chart-square {
height: 5.75rem;
}
/**
Chart sparkline
*/
.chart-sparkline {
position: relative;
width: 4rem;
height: 2.5rem;
line-height: 1;
min-height: 0 !important;
}
.chart-sparkline-sm {
height: 1.5rem;
}
.chart-sparkline-square {
width: 2.5rem;
}
.chart-sparkline-wide {
width: 6rem;
}
.chart-sparkline-label {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: $h6-font-size;
.icon {
width: 1rem;
height: 1rem;
font-size: 1rem;
}
}
+38
View File
@@ -0,0 +1,38 @@
.chat {
}
.chat-bubbles {
display: flex;
flex-direction: column;
gap: 1rem;
}
.chat-bubble {
background: var(--#{$prefix}bg-surface-secondary);
border-radius: var(--#{$prefix}border-radius-lg);
padding: 1rem;
position: relative;
}
.chat-bubble-me {
background-color: var(--#{$prefix}primary-lt);
box-shadow: none;
}
.chat-bubble-title {
margin-bottom: 0.25rem;
}
.chat-bubble-author {
font-weight: 600;
}
.chat-bubble-date {
color: var(--#{$prefix}secondary);
}
.chat-bubble-body {
> *:last-child {
margin-bottom: 0;
}
}
View File
+60
View File
@@ -0,0 +1,60 @@
.btn-close {
--#{$prefix}btn-close-color: currentColor;
--#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };
--#{$prefix}btn-close-opacity: #{$btn-close-opacity};
--#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};
--#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};
--#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};
--#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};
--#{$prefix}btn-close-size: #{$btn-close-width};
width: var(--#{$prefix}btn-close-size);
height: var(--#{$prefix}btn-close-size);
padding: $btn-close-padding-y $btn-close-padding-x;
color: var(--#{$prefix}btn-close-color);
mask: var(--#{$prefix}btn-close-bg) no-repeat center/calc(var(--#{$prefix}btn-close-size) * .75);
background-color: var(--#{$prefix}btn-close-color);
border: 0;
border-radius: var(--tblr-border-radius);
opacity: var(--#{$prefix}btn-close-opacity);
cursor: pointer;
display: block;
&:hover {
color: var(--#{$prefix}btn-close-color);
text-decoration: none;
opacity: var(--#{$prefix}btn-close-hover-opacity);
}
&:focus {
outline: 0;
box-shadow: var(--#{$prefix}btn-close-focus-shadow);
opacity: var(--#{$prefix}btn-close-focus-opacity);
}
&:disabled,
&.disabled {
pointer-events: none;
user-select: none;
opacity: var(--#{$prefix}btn-close-disabled-opacity);
}
}
// @mixin btn-close-white() {
// --#{$prefix}btn-close-filter: #{$btn-close-filter-dark};
// }
// .btn-close-white {
// @include btn-close-white();
// }
// :root,
// [data-bs-theme="light"] {
// --#{$prefix}btn-close-filter: #{$btn-close-filter};
// }
// @if $enable-dark-mode {
// @include color-mode(dark, true) {
// @include btn-close-white();
// }
// }
+17
View File
@@ -0,0 +1,17 @@
//
// Base styles
//
.datagrid {
--#{$prefix}datagrid-padding: #{$datagrid-padding};
--#{$prefix}datagrid-item-width: #{$datagrid-item-width};
display: grid;
grid-gap: var(--#{$prefix}datagrid-padding);
grid-template-columns: repeat(auto-fit, minmax(var(--#{$prefix}datagrid-item-width), 1fr));
}
.datagrid-title {
@include subheader;
margin-bottom: .25rem;
}
+120
View File
@@ -0,0 +1,120 @@
.dropdown-menu {
user-select: none;
background-clip: border-box;
&.card {
padding: 0;
min-width: $dropdown-max-width;
display: none;
&.show {
display: flex;
}
}
}
.dropdown-item {
min-width: $dropdown-min-width;
display: flex;
align-items: center;
margin: 0;
line-height: $line-height-base;
gap: .5rem;
}
.dropdown-item-icon {
width: $icon-size !important;
height: $icon-size !important;
margin-right: .5rem;
color: var(--#{$prefix}secondary);
opacity: $text-secondary-opacity;
text-align: center;
}
.dropdown-item-indicator {
margin-right: .5rem;
margin-left: -.25rem;
height: 1.25rem;
display: inline-flex;
line-height: 1;
vertical-align: bottom;
align-items: center;
}
.dropdown-header {
@include subheader;
padding-bottom: .25rem;
pointer-events: none;
}
.dropdown-menu-scrollable {
height: auto;
max-height: $dropdown-scrollable-height;
overflow-x: hidden;
}
.dropdown-menu-column {
min-width: $dropdown-min-width;
.dropdown-item {
min-width: 0;
}
}
.dropdown-menu-columns {
display: flex;
flex: 0 .25rem;
}
.dropdown-menu-arrow {
&:before {
content: "";
position: absolute;
top: -.25rem;
left: .75rem;
display: block;
background: inherit;
width: 14px;
height: 14px;
/*rtl:ignore*/
transform: rotate(45deg);
transform-origin: center;
border: 1px solid;
border-color: inherit;
z-index: -1;
clip: rect(0px, 9px, 9px, 0px);
}
&.dropdown-menu-end {
&:before {
right: .75rem;
left: auto;
}
}
}
.dropend {
> .dropdown-menu {
margin-top: subtract(-$dropdown-padding-y, 1px);
margin-left: -.25rem;
}
.dropdown-toggle {
&:after {
margin-left: auto;
}
}
}
.dropdown-menu-card {
padding: 0;
min-width: 20rem;
> .card {
margin: 0;
border: 0;
box-shadow: none;
}
}
+60
View File
@@ -0,0 +1,60 @@
.empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
padding: 1rem;
text-align: center;
@include media-breakpoint-up(md) {
padding: 3rem;
}
}
.empty-icon {
margin: 0 0 1rem;
width: 3rem;
height: 3rem;
line-height: 1;
color: var(--#{$prefix}secondary);
svg {
width: 100%;
height: 100%;
}
}
.empty-img {
margin: 0 0 2rem;
line-height: 1;
}
.empty-header {
margin: 0 0 1rem;
font-size: 4rem;
font-weight: var(--#{$prefix}font-weight-light);
line-height: 1;
color: var(--#{$prefix}secondary);
}
.empty-title {
font-size: $h2-font-size;
line-height: $h2-line-height;
font-weight: $headings-font-weight;
}
.empty-title,
.empty-subtitle {
margin: 0 0 .5rem;
}
.empty-action {
margin-top: 1.5rem;
}
.empty-bordered {
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
border-radius: var(--#{$prefix}border-radius);
}
+31
View File
@@ -0,0 +1,31 @@
$countries: (
'ad', 'af', 'ae', 'afrun', 'ag', 'ai', 'al', 'am', 'ao', 'aq', 'ar', 'as', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'bj', 'bl', 'bm', 'bn', 'bo', 'bq-bo', 'bq-sa', 'bq-se', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'cr', 'cu', 'cv', 'cw', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb-eng', 'gb-sct', 'gb', 'gb-wls', 'gb-nir', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mf', 'mg', 'mh', 'mk', 'ml', 'mm', 'mn', 'mo', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nc', 'ne', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'ps', 'pt', 'pw', 'py', 'qa', 'rainbow', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'ss', 'st', 'sv', 'sx', 'sy', 'sz', 'tc', 'td', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tr', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'um', 'unasur', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'za', 'zm', 'zw'
);
.flag {
position: relative;
display: inline-block;
height: $avatar-size;
aspect-ratio: 1.33333;
background: no-repeat center/cover;
box-shadow: $flag-box-shadow;
border-radius: $flag-border-radius;
vertical-align: bottom;
&.flag-country-np {
box-shadow: none;
border-radius: 0;
}
}
@each $country in $countries {
.flag-country-#{$country} {
background-image: url("#{$assets-base}/img/flags/#{$country}.svg");
}
}
@each $flag-size, $size in $flag-sizes {
.flag-#{$flag-size} {
height: map-get($size, size);
}
}
+251
View File
@@ -0,0 +1,251 @@
textarea {
&[cols] {
height: auto;
}
}
/**
Form label
*/
.col-form-label,
.form-label {
display: block;
font-weight: var(--#{$prefix}font-weight-medium);
&.required {
&:after {
content: "*";
margin-left: .25rem;
color: $red;
}
}
}
.form-label-description {
float: right;
font-weight: var(--#{$prefix}font-weight-normal);
color: $form-secondary-color;
}
/**
Form hint
*/
.form-hint {
display: block;
color: $form-secondary-color;
&:last-child {
margin-bottom: 0;
}
& + .form-control {
margin-top: .25rem;
}
.form-label + & {
margin-top: -.25rem;
}
.input-group + &,
.form-control + &,
.form-select + & {
margin-top: .5rem;
color: $form-secondary-color;
}
}
/**
Form select
*/
.form-select {
&:-moz-focusring {
color: var(--#{$prefix}body-color);
}
}
/**
Form control
*/
.form-control {
&:-webkit-autofill {
box-shadow: 0 0 0 1000px var(--#{$prefix}bg-surface-secondary) inset;
color: var(--#{$prefix}body-color);
-webkit-text-fill-color: var(--#{$prefix}body-color);
}
&:disabled,
&.disabled {
color: $form-secondary-color;
user-select: none;
}
&[size] {
width: auto;
}
}
.form-control-light {
background-color: var(--#{$prefix}gray-100);
border-color: transparent;
}
.form-control-dark {
background-color: rgba($black, .1);
color: $white;
border-color: transparent;
&:focus {
background-color: rgba($black, .1);
box-shadow: none;
border-color: rgba($white, .24);
}
&::placeholder {
color: rgba($white, .6);
}
}
.form-control-rounded {
border-radius: 10rem;
}
.form-control-flush {
padding: 0;
background: none !important;
border-color: transparent !important;
resize: none;
box-shadow: none !important;
line-height: inherit;
}
.form-footer {
margin-top: 2rem;
}
.form-fieldset {
padding: 1rem;
margin-bottom: 1rem;
background: var(--#{$prefix}bg-surface-secondary);
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
border-radius: var(--#{$prefix}border-radius);
}
fieldset:empty {
display: none;
}
/**
Form help
*/
.form-help {
display: inline-flex;
font-weight: var(--#{$prefix}font-weight-bold);
align-items: center;
justify-content: center;
width: 1.125rem;
height: 1.125rem;
font-size: .75rem;
color: $form-secondary-color;
text-align: center;
text-decoration: none;
cursor: pointer;
user-select: none;
background: var(--#{$prefix}gray-100);
border-radius: $border-radius-pill;
@include transition(background-color $transition-time, color $transition-time);
&:hover,
&[aria-describedby] {
color: $white;
background: var(--#{$prefix}primary);
}
}
/**
Input group
*/
.input-group {
box-shadow: $input-box-shadow;
border-radius: $input-border-radius;
.form-control,
.btn {
box-shadow: none;
}
}
.input-group-link {
font-size: $h5-font-size;
}
.input-group-flat {
&:focus-within {
box-shadow: $input-focus-box-shadow;
border-radius: $input-border-radius;
.form-control,
.input-group-text {
border-color: $input-focus-border-color !important;
}
}
.form-control {
&:focus {
border-color: $input-border-color;
box-shadow: none;
}
&:not(:last-child) {
border-right: 0;
}
&:not(:first-child) {
border-left: 0;
}
}
.input-group-text {
background: $form-check-input-bg;
@include transition($input-transition);
&:first-child {
padding-right: 0;
}
&:last-child {
padding-left: 0;
}
}
}
/**
Upload files
*/
.form-file-button {
margin-left: 0;
border-left: 0;
}
/**
Floating inputs
*/
// Fix for the bug in twbs/bootstrap v5.3.3. Issue #39080. Should be fixed in v5.3.4
label[for="floating-input"] {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/**
Forms on mobile devices
*/
.form-control,
.form-select {
@include media-breakpoint-down(sm) {
font-size: 1rem;
}
}
+115
View File
@@ -0,0 +1,115 @@
.row > * {
min-width: 0;
}
.col-separator {
border-left: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
}
.container {
@each $variation, $size in $container-variations {
&-#{$variation} {
@include make-container();
max-width: $size;
}
}
}
@each $name, $value in (0: 0, sm: .375rem, md: 1.5rem, lg: 3rem) {
.row-#{$name} {
margin-right: (-$value);
margin-left: -($value);
> .col,
> [class*="col-"] {
padding-right: $value;
padding-left: $value;
}
.card {
margin-bottom: 2 * $value;
}
}
}
.row-deck {
> .col,
> [class*="col-"] {
display: flex;
align-items: stretch;
.card {
flex: 1 1 auto;
}
}
}
.row-cards {
--#{$prefix}gutter-x: #{$cards-grid-gap};
--#{$prefix}gutter-y: #{$cards-grid-gap};
min-width: 0;
.row-cards {
flex: 1;
}
}
@each $name, $size in map-merge((null: $spacer), $spacers) {
$name-prefixed: if($name == null, null, '-#{$name}');
.space-y#{$name-prefixed} {
display: flex;
flex-direction: column;
gap: $size;
}
.space-x#{$name-prefixed} {
display: flex;
gap: $size;
}
}
@each $name, $size in map-merge((null: $spacer), $spacers) {
$name-prefixed: if($name == null, null, '-#{$name}');
.divide-y#{$name-prefixed} {
> :not(template) ~ :not(template) {
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color-translucent) !important;
}
> :not(template):not(:first-child) {
padding-top: $size !important;
}
> :not(template):not(:last-child) {
padding-bottom: $size !important;
}
}
.divide-x#{$name-prefixed} {
> :not(template) ~ :not(template) {
border-left: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color-translucent) !important;
}
> :not(template):not(:first-child) {
padding-left: $size !important;
}
> :not(template):not(:last-child) {
padding-right: $size !important;
}
}
}
.divide-y-fill {
display: flex;
flex-direction: column;
height: 100%;
> :not(template) {
flex: 1;
display: flex;
justify-content: center;
flex-direction: column;
}
}
+72
View File
@@ -0,0 +1,72 @@
//
// Icon component
//
.icon {
--#{$prefix}icon-size: #{$font-size-base * $line-height-base};
width: var(--#{$prefix}icon-size);
height: var(--#{$prefix}icon-size);
font-size: var(--#{$prefix}icon-size);
vertical-align: bottom;
@if $icon-stroke-width {
stroke-width: $icon-stroke-width;
}
&:hover {
text-decoration: none;
}
}
//
// Inline icon
//
.icon-inline {
--#{$prefix}icon-size: 1rem;
vertical-align: -.2rem;
}
//
// Filled icon
//
.icon-filled {
fill: currentColor;
}
//
// Icon size
//
.icon-sm {
--#{$prefix}icon-size: 1rem;
stroke-width: 1;
}
.icon-md {
--#{$prefix}icon-size: 2.5rem;
stroke-width: 1;
}
.icon-lg {
--#{$prefix}icon-size: 3.5rem;
stroke-width: 1;
}
//
// Icons animation
//
.icon-pulse {
transition: all .15s ease 0s;
animation: pulse 2s ease infinite;
animation-fill-mode: both
}
.icon-tada {
transition: all .15s ease 0s;
animation: tada 3s ease infinite;
animation-fill-mode: both
}
.icon-rotate {
transition: all .15s ease 0s;
animation: rotate-360 3s linear infinite;
animation-fill-mode: both
}
+19
View File
@@ -0,0 +1,19 @@
.img-responsive {
--#{$prefix}img-responsive-ratio: #{percentage(.75)};
background: no-repeat center/cover;
padding-top: var(--#{$prefix}img-responsive-ratio);
}
.img-responsive-grid {
padding-top: calc(var(--#{$prefix}img-responsive-ratio) - calc(var(--#{$prefix}gutter-y) / 2));
}
@each $key, $ratio in $aspect-ratios {
.img-responsive-#{$key} {
--#{$prefix}img-responsive-ratio: #{$ratio};
}
}
.img-bg {
background: no-repeat center/cover;
}
+12
View File
@@ -0,0 +1,12 @@
/**
Legend
*/
.legend {
--#{$prefix}legend-size: #{$legend-size};
display: inline-block;
background: $legend-bg;
width: var(--#{$prefix}legend-size);
height: var(--#{$prefix}legend-size);
border-radius: $legend-border-radius;
border: 1px solid var(--#{$prefix}border-color-translucent);
}
+124
View File
@@ -0,0 +1,124 @@
.list-group {
margin-left: 0;
margin-right: 0;
}
.list-group-header {
background: $list-group-header-bg;
padding: .5rem $list-group-item-padding-x;
font-size: $h5-font-size;
font-weight: var(--#{$prefix}font-weight-medium);
line-height: 1;
text-transform: uppercase;
color: $list-group-header-color;
border-bottom: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
.list-group-flush > & {
&:last-child {
border-bottom-width: 0;
}
}
}
.list-group-item {
background-color: inherit;
}
.list-group-item.active {
background-color: $dropdown-link-hover-bg;
border-left-color: $component-active-bg;
border-left-width: $border-width-wide;
}
.list-group-item {
&:active,
&:focus,
&:hover {
background-color: $dropdown-link-hover-bg;
}
}
.list-group-item {
&.disabled,
&:disabled {
color: $gray-500;
background-color: $dropdown-link-hover-bg;
}
}
.list-bordered {
.list-item {
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
margin-top: -1px;
&:first-child {
border-top: none;
}
}
}
.list-group-hoverable {
.list-group-item-actions {
opacity: 0;
@include transition(opacity $transition-time);
}
.list-group-item:hover .list-group-item-actions,
.list-group-item-actions.show {
opacity: 1;
}
}
.list-group-transparent {
--#{$prefix}list-group-border-radius: 0;
margin: 0 (- $list-group-item-padding-x);
.list-group-item {
background: none;
border: 0;
.icon {
color: var(--#{$prefix}secondary);
}
&.active {
font-weight: var(--#{$prefix}font-weight-bold);
color: inherit;
background: $list-group-active-bg;
.icon {
color: inherit;
}
}
}
}
/**
Seprated list
*/
.list-separated {
display: flex;
flex-direction: column;
gap: $spacer;
}
/**
Inline list
*/
.list-inline {
margin: 0;
}
.list-inline-item:not(:last-child) {
margin-right: auto;
margin-inline-end: $list-inline-padding;
}
.list-inline-dots {
.list-inline-item + .list-inline-item:before {
content: ' · ';
margin-inline-end: $list-inline-padding;
}
}
+72
View File
@@ -0,0 +1,72 @@
.loader {
position: relative;
display: block;
width: $loader-size;
height: $loader-size;
color: $blue;
vertical-align: middle;
&:after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
content: "";
border: 1px var(--#{$prefix}border-style);
border-color: transparent;
border-top-color: currentColor;
border-left-color: currentColor;
border-radius: $border-radius-pill;
animation: rotate-360 .6s linear;
animation-iteration-count: infinite;
}
}
/**
Dimmer
*/
.dimmer {
position: relative;
.loader {
position: absolute;
top: 50%;
right: 0;
left: 0;
display: none;
margin: 0 auto;
transform: translateY(-50%);
}
&.active {
.loader {
display: block;
}
.dimmer-content {
pointer-events: none;
opacity: .1;
}
}
}
@keyframes animated-dots {
0% {
transform: translateX(-100%);
}
}
.animated-dots {
display: inline-block;
overflow: hidden;
vertical-align: bottom;
&:after {
display: inline-block;
content: "...";
animation: animated-dots 1.2s steps(4, jump-none) infinite;
}
}
+3
View File
@@ -0,0 +1,3 @@
//.col-login {
// max-width: 24rem;
//}
+53
View File
@@ -0,0 +1,53 @@
/**
Markdown
*/
.markdown {
line-height: $line-height-xl;
> :first-child {
margin-top: 0;
}
> :last-child,
> :last-child .highlight {
margin-bottom: 0;
}
> hr {
@include media-breakpoint-up(md) {
margin-top: 3em;
margin-bottom: 3em;
}
}
> {
h1, h2, h3, h4, h5, h6 {
font-weight: var(--#{$prefix}font-weight-bold);
}
h2, h3, h4, h5, h6 {
margin-top: 2.5rem;
}
}
> table {
font-size: var(--#{$prefix}body-font-size);
@extend .table, .table-bordered, .table-sm;
}
> blockquote {
font-size: $h3-font-size;
margin: 1.5rem 0;
padding: .5rem 1.5rem;
}
> img,
> p > img {
border-radius: var(--#{$prefix}border-radius);
border: 1px solid var(--#{$prefix}border-color);
}
pre {
max-height: 20rem;
}
}
+67
View File
@@ -0,0 +1,67 @@
.modal-content, .modal-header {
> .btn-close {
position: absolute;
top: 0;
right: 0;
width: $modal-header-height;
height: $modal-header-height;
margin: 0;
padding: 0;
z-index: 10;
}
}
.modal-body {
@include scrollbar;
.modal-title {
margin-bottom: 1rem;
}
& + & {
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
}
}
.modal-status {
position: absolute;
top: 0;
left: 0;
right: 0;
height: $modal-status-size;
background: var(--#{$prefix}secondary);
border-radius: $modal-content-border-radius $modal-content-border-radius 0 0;
}
.modal-header {
align-items: center;
min-height: $modal-header-height;
background: $modal-header-bg;
padding: 0 $modal-header-height 0 $modal-inner-padding;
}
.modal-title {
font-size: $h3-font-size;
font-weight: $headings-font-weight;
color: $headings-color;
line-height: $line-height-base;
}
.modal-footer {
@if $modal-footer-border-width == 0 {
padding-top: 0;
} @else {
padding-top: .75rem;
}
padding-bottom: .75rem;
}
.modal-blur {
backdrop-filter: blur($modal-backdrop-blur);
}
.modal-full-width {
max-width: none;
margin: 0 $modal-dialog-margin;
}
+110
View File
@@ -0,0 +1,110 @@
.nav {
--#{$prefix}nav-link-hover-bg: #{color-transparent(var(--#{$prefix}nav-link-color), 0.04)};
}
.nav-vertical {
&,
.nav {
flex-direction: column;
flex-wrap: nowrap;
}
.nav {
margin-left: 1.25rem;
border-left: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
padding-left: .5rem;
}
.nav-link.active,
.nav-item.show .nav-link {
font-weight: var(--#{$prefix}font-weight-bold);
color: var(--#{$prefix}nav-link-active-color);
}
&.nav-pills {
margin: 0 (-$nav-link-padding-x);
}
}
//
// Nav bordered
//
.nav-bordered {
border-bottom: $nav-bordered-border-width var(--#{$prefix}border-style) $nav-bordered-border-color;
.nav-item {
+ .nav-item {
margin-left: $nav-bordered-margin-x;
}
}
.nav-link {
padding-left: 0;
padding-right: 0;
margin: 0 0 calc(-1 * #{$nav-bordered-border-width});
border: 0;
border-bottom: $nav-bordered-link-active-border-width var(--#{$prefix}border-style) transparent;
&:hover {
background-color: transparent;
}
}
.nav-link.active,
.nav-item.show .nav-link {
color: $nav-bordered-link-active-color;
border-color: $nav-bordered-link-active-border-color;
}
}
.nav-underline {
.nav-link {
border-radius: 0;
}
}
.nav-link {
display: flex;
@include transition(color $transition-time, background-color $transition-time);
align-items: center;
&:hover,
&:focus {
background-color: var(--#{$prefix}nav-link-hover-bg);
}
}
.nav-link-toggle {
margin-left: auto;
padding: 0 .25rem;
@include transition(transform $transition-time);
@include caret();
&:after {
margin: 0;
}
@at-root .nav-link[aria-expanded="true"] & {
transform: rotate(180deg);
}
}
.nav-link-icon {
width: $nav-link-icon-size;
height: $nav-link-icon-size;
margin-right: .5rem;
color: $nav-link-icon-color;
svg {
display: block;
height: 100%;
}
}
.nav-fill {
.nav-item {
.nav-link {
justify-content: center;
}
}
}
+17
View File
@@ -0,0 +1,17 @@
.offcanvas-header {
border-bottom: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
}
.offcanvas-footer {
padding: $offcanvas-padding-y $offcanvas-padding-x;
}
.offcanvas-title {
font-size: $h3-font-size;
font-weight: var(--#{$prefix}font-weight-medium);
line-height: 1.5rem;
}
.offcanvas-narrow {
width: 20rem;
}
+71
View File
@@ -0,0 +1,71 @@
.pagination {
margin: 0;
--#{$prefix}pagination-gap: .25rem;
user-select: none;
gap: var(--#{$prefix}pagination-gap);
line-height: var(--#{$prefix}body-line-height);
}
.page-link {
min-width: 2rem;
border-radius: var(--#{$prefix}pagination-border-radius);
&:hover {
background: var(--#{$prefix}pagination-hover-bg);
}
}
.page-text {
padding-left: .5rem;
padding-right: .5rem;
}
.page-item {
text-align: center;
&.page-prev,
&.page-next {
flex: 0 0 50%;
text-align: left;
}
&.page-next {
margin-left: auto;
text-align: right;
}
}
.page-item-subtitle {
margin-bottom: 2px;
font-size: 12px;
color: var(--#{$prefix}secondary);
text-transform: uppercase;
.page-item.disabled & {
color: $pagination-disabled-color;
}
}
.page-item-title {
font-size: $h3-font-size;
font-weight: var(--#{$prefix}font-weight-normal);
color: var(--#{$prefix}body-color);
.page-link:hover & {
color: $link-color;
}
.page-item.disabled & {
color: $pagination-disabled-color;
}
}
.pagination-outline {
--#{$prefix}pagination-border-color: var(--#{$prefix}border-color);
--#{$prefix}pagination-disabled-border-color: var(--#{$prefix}border-color);
--#{$prefix}pagination-border-width: 1px;
}
.pagination-circle {
--#{$prefix}pagination-border-radius: var(--tblr-border-radius-pill);
}
+28
View File
@@ -0,0 +1,28 @@
$payment-icons: ("2c2p", "2checkout", "adyen", "affirm", "alipay-plus", "alipay", "allegro-pay", "amazon-pay", "amazon", "americanexpress", "applepay", "authorize", "autopay", "bancontact", "binance-usd", "bitcoin", "bitpay", "bkash", "blik", "braintree", "cash-app", "chime", "cirrus", "clickandbuy", "coinkite", "dinersclub", "directdebit", "discover", "dotpay", "dwolla", "easypaisa", "ebay", "elo", "epayco", "esewa", "ethereum", "eway", "fonepay", "giropay", "google-pay", "googlewallet", "hubspot", "ingenico", "ideal", "imepay", "jcb", "khalti", "klarna", "laser", "litecoin", "maestro", "mastercard", "mercado-pago", "metamask", "mir", "monero", "moneygram", "neteller", "ogone", "okpay", "opensea", "paybox", "payconiq", "payka", "payline", "paymill", "payone", "payoneer", "paypal", "paypo", "paysafe", "paysafecard", "payu", "payza", "poli", "przelewy24", "revolut-pay", "ripple", "sage", "samsung-pay", "sepa", "shop-pay", "shopify", "skrill", "solana", "solo", "spingo", "square", "stax", "stripe", "switch", "tether", "tpay", "troy", "true-usd", "ukash", "unionpay", "venmo", "verifone", "verisign", "visa", "we-chat-pay", "webmoney", "westernunion", "wise", "worldpay", "zelle");
.payment {
height: $avatar-size;
aspect-ratio: 1.66666;
display: inline-block;
background: no-repeat center/100% 100%;
vertical-align: bottom;
font-style: normal;
box-shadow: 0 0 1px 1px rgba(0, 0, 0, .1);
border-radius: 2px;
}
@each $payment in $payment-icons {
.payment-provider-#{$payment} {
background-image: url("#{$assets-base}/img/payments/#{$payment}.svg");
}
.payment-provider-#{$payment}-dark {
background-image: url("#{$assets-base}/img/payments/#{$payment}-dark.svg");
}
}
@each $payment-size, $size in $payment-sizes {
.payment-#{$payment-size} {
height: map-get($size, size);
}
}
+9
View File
@@ -0,0 +1,9 @@
.placeholder {
&:not(.btn):not([class*="bg-"]) {
background-color: currentColor !important;
}
&:not(.avatar):not([class*="card-img-"]), {
border-radius: var(--#{$prefix}border-radius);
}
}
+2
View File
@@ -0,0 +1,2 @@
.popover {
}
+107
View File
@@ -0,0 +1,107 @@
@keyframes progress-indeterminate {
0% {
right: 100%;
left: -35%;
}
100%,
60% {
right: -90%;
left: 100%;
}
}
/**
Progress
*/
.progress {
position: relative;
width: 100%;
line-height: $progress-height;
appearance: none;
&::-webkit-progress-bar {
background: var(--#{$prefix}progress-bg);
}
&::-webkit-progress-value {
background-color: var(--#{$prefix}primary);
}
&::-moz-progress-bar {
background-color: var(--#{$prefix}primary);
}
&::-ms-fill {
background-color: var(--#{$prefix}primary);
border: none;
}
}
.progress-sm {
height: .25rem;
}
/**
Progress bar
*/
.progress-bar {
height: 100%;
}
.progress-bar-indeterminate {
&:after,
&:before {
position: absolute;
top: 0;
bottom: 0;
left: 0;
content: "";
background-color: inherit;
will-change: left, right;
}
&:before {
animation: progress-indeterminate 1.5s cubic-bezier(.65, .815, .735, .395) infinite;
}
}
.progress-separated {
.progress-bar {
box-shadow: 0 0 0 2px var(--#{$prefix}card-bg, var(--#{$prefix}bg-surface));
}
}
/**
Progressbg
*/
.progressbg {
position: relative;
padding: .25rem .5rem;
display: flex;
}
.progressbg-text {
position: relative;
z-index: 1;
@include text-truncate;
}
.progressbg-progress {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 0;
height: 100%;
background: transparent;
pointer-events: none;
}
.progressbg-value {
font-weight: var(--#{$prefix}font-weight-medium);
margin-left: auto;
padding-left: 2rem;
}
+157
View File
@@ -0,0 +1,157 @@
// stylelint-disable declaration-no-important
.ribbon {
--#{$prefix}ribbon-margin: #{$card-ribbon-margin};
--#{$prefix}ribbon-border-radius: #{$card-ribbon-border-radius};
position: absolute;
top: .75rem;
right: calc(-1 * var(--#{$prefix}ribbon-margin));
z-index: 1;
padding: .25rem .75rem;
font-size: $card-ribbon-font-size;
font-weight: var(--#{$prefix}font-weight-bold);
line-height: 1;
color: $white;
text-align: center;
text-transform: uppercase;
background: var(--#{$prefix}primary);
border-color: var(--#{$prefix}primary);
border-radius: var(--#{$prefix}ribbon-border-radius) 0 var(--#{$prefix}ribbon-border-radius) var(--#{$prefix}ribbon-border-radius);
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 2rem;
min-width: 2rem;
&:before {
position: absolute;
right: 0;
bottom: 100%;
width: 0;
height: 0;
content: "";
filter: brightness(70%);
border: calc(var(--#{$prefix}ribbon-margin) * .5) var(--#{$prefix}border-style);
border-color: inherit;
border-top-color: transparent;
border-right-color: transparent;
}
@if $enable-extra-colors {
@each $color, $value in $extra-colors {
&.bg-#{$color} {
border-color: var(--#{$prefix}#{$color});
}
&.bg-#{$color}-lt {
border-color: rgba(var(--#{$prefix}#{$color}-rgb), .1) !important;
}
}
}
.icon {
width: 1.25rem;
height: 1.25rem;
font-size: 1.25rem;
}
}
.ribbon-top {
top: calc(-1 * var(--#{$prefix}ribbon-margin));
right: .75rem;
width: 2rem;
padding: .5rem 0;
border-radius: 0 var(--#{$prefix}ribbon-border-radius) var(--#{$prefix}ribbon-border-radius) var(--#{$prefix}ribbon-border-radius);
&:before {
top: 0;
right: 100%;
bottom: auto;
border-color: inherit;
border-top-color: transparent;
border-left-color: transparent;
}
&.ribbon-start {
right: auto;
left: .75rem;
&:before {
top: 0;
right: 100%;
left: auto;
}
}
}
.ribbon-start {
right: auto;
left: calc(-1 * var(--#{$prefix}ribbon-margin));
border-radius: 0 var(--#{$prefix}ribbon-border-radius) var(--#{$prefix}ribbon-border-radius) var(--#{$prefix}ribbon-border-radius);
&:before {
top: auto;
bottom: 100%;
left: 0;
border-color: inherit;
border-top-color: transparent;
border-left-color: transparent;
}
}
.ribbon-bottom {
top: auto;
bottom: .75rem;
}
.ribbon-bookmark {
padding-left: .25rem;
border-radius: 0 0 var(--#{$prefix}ribbon-border-radius) 0;
&:after {
position: absolute;
top: 0;
right: 100%;
display: block;
width: 0;
height: 0;
content: "";
border: 1rem var(--#{$prefix}border-style);
border-color: inherit;
border-right-width: 0;
border-left-color: transparent;
border-left-width: .5rem;
}
&.ribbon-left {
padding-right: .5rem;
&:after {
right: auto;
left: 100%;
border-right-color: transparent;
border-right-width: .5rem;
border-left-width: 0;
}
}
&.ribbon-top {
padding-right: 0;
padding-bottom: .25rem;
padding-left: 0;
border-radius: 0 var(--#{$prefix}ribbon-border-radius) 0 0;
&:after {
top: 100%;
right: 0;
left: 0;
border-color: inherit;
border-width: 1rem;
border-top-width: 0;
border-bottom-color: transparent;
border-bottom-width: .5rem;
}
}
}
+101
View File
@@ -0,0 +1,101 @@
.nav-segmented {
--#{$prefix}nav-bg: var(--#{$prefix}bg-surface-tertiary);
--#{$prefix}nav-padding: 2px;
--#{$prefix}nav-height: 2.5rem;
--#{$prefix}nav-gap: .25rem;
--#{$prefix}nav-active-bg: var(--#{$prefix}bg-surface);
--#{$prefix}nav-font-size: inherit;
--#{$prefix}nav-radius: 6px;
--#{$prefix}nav-link-disabled-color: var(--#{$prefix}disabled-color);
--#{$prefix}nav-link-gap: .25rem;
--#{$prefix}nav-link-padding-x: .75rem;
--#{$prefix}nav-link-icon-size: 1.25rem;
display: inline-flex;
flex-wrap: wrap;
gap: var(--#{$prefix}nav-gap);
padding: var(--#{$prefix}nav-padding);
list-style: none;
background: var(--#{$prefix}nav-bg);
border-radius: calc(var(--#{$prefix}nav-radius) + var(--#{$prefix}nav-padding));
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .04);
.nav-link {
display: inline-flex;
gap: calc(.25rem + var(--#{$prefix}nav-link-gap));
align-items: center;
margin: 0;
font-size: var(--#{$prefix}nav-font-size);
min-width: calc(var(--#{$prefix}nav-height) - 2 * var(--#{$prefix}nav-padding));
height: calc(var(--#{$prefix}nav-height) - 2 * var(--#{$prefix}nav-padding));
padding: 0 calc(var(--#{$prefix}nav-link-padding-x) - 2px);
border: 1px solid transparent;
background: transparent;
color: var(--#{$prefix}secondary);
text-align: center;
text-decoration: none;
white-space: nowrap;
cursor: pointer;
transition: background-color $transition-time, color $transition-time;
border-radius: var(--#{$prefix}nav-radius);
flex-grow: 1;
justify-content: center;
&:hover,
&.hover {
background: rgba(0, 0, 0, .04);
color: var(--#{$prefix}body-color);
}
&.disabled,
&:disabled {
color: var(--#{$prefix}nav-link-disabled-color);
cursor: not-allowed;
}
}
.nav-link-input:checked + .nav-link,
.nav-link.active {
color: var(--#{$prefix}body-color);
background: var(--#{$prefix}nav-active-bg);
border-color: var(--#{$prefix}border-color);
}
.nav-link-input {
display: none;
}
.nav-link-icon {
width: var(--#{$prefix}nav-link-icon-size);
height: var(--#{$prefix}nav-link-icon-size);
margin: 0 -.25rem;
color: inherit;
}
}
.nav-segmented-vertical {
flex-direction: column;
.nav-link {
justify-content: flex-start;
}
}
.nav-sm {
--#{$prefix}nav-height: 2rem;
--#{$prefix}nav-font-size: var(--tblr-font-size-h5);
--#{$prefix}nav-radius: 4px;
--#{$prefix}nav-link-padding-x: .5rem;
--#{$prefix}nav-link-gap: .25rem;
--#{$prefix}nav-link-icon-size: 1rem;
}
.nav-lg {
--#{$prefix}nav-height: 3rem;
--#{$prefix}nav-font-size: var(--tblr-font-size-h3);
--#{$prefix}nav-radius: 8px;
--#{$prefix}nav-link-padding-x: 1rem;
--#{$prefix}nav-link-gap: .5rem;
--#{$prefix}nav-link-icon-size: 1.5rem;
}
+15
View File
@@ -0,0 +1,15 @@
.signature {
--#{$prefix}signature-padding: var(--#{$prefix}spacer-1);
--#{$prefix}signature-border-radius: var(--#{$prefix}border-radius);
border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color);
padding: var(--#{$prefix}signature-padding);
border-radius: var(--#{$prefix}border-radius);
}
.signature-canvas {
border: var(--#{$prefix}border-width) dashed var(--#{$prefix}border-color);
border-radius: calc(var(--#{$prefix}signature-border-radius) - var(--#{$prefix}signature-padding));
display: block;
cursor: crosshair;
width: 100%;
}
+52
View File
@@ -0,0 +1,52 @@
$apps: (
"apple",
"discord",
"dribbble",
"facebook",
"figma",
"github",
"google",
"instagram",
"linkedin",
"medium",
"meta",
"metamask",
"pinterest",
"reddit",
"signal",
"skype",
"snapchat",
"spotify",
"telegram",
"tiktok",
"tumblr",
"twitch",
"vk",
"x",
"youtube"
);
.social {
position: relative;
display: inline-block;
height: $avatar-size;
aspect-ratio: 1;
background: no-repeat center/cover;
vertical-align: bottom;
}
@each $app in $apps {
.social-app-#{$app} {
background-image: url("#{$assets-base}/img/social/#{$app}.svg");
&.social-gray {
background-image: url("#{$assets-base}/img/social/#{$app}-gray.svg");
}
}
}
@each $flag-size, $size in $flag-sizes {
.social-#{$flag-size} {
height: map-get($size, size);
}
}
+13
View File
@@ -0,0 +1,13 @@
.stars {
display: inline-flex;
color: $gray-400;
font-size: $h5-font-size;
.star:not(:first-child) {
margin-left: .25rem;
}
}
.star {
}
+163
View File
@@ -0,0 +1,163 @@
@keyframes status-pulsate-main {
40% {
transform: scale(1.25, 1.25);
}
60% {
transform: scale(1.25, 1.25);
}
}
@keyframes status-pulsate-secondary {
10% {
transform: scale(1, 1)
}
30% {
transform: scale(3, 3)
}
80% {
transform: scale(3, 3)
}
100% {
transform: scale(1, 1)
}
}
@keyframes status-pulsate-tertiary {
25% {
transform: scale(1, 1);
}
80% {
transform: scale(3, 3);
opacity: 0;
}
100% {
transform: scale(3, 3);
opacity: 0;
}
}
//
// Status
//
.status {
--#{$prefix}status-height: #{$status-height};
--#{$prefix}status-color: #{$text-secondary};
--#{$prefix}status-color-rgb: #{to-rgb($text-secondary)};
display: inline-flex;
align-items: center;
height: var(--#{$prefix}status-height);
padding: .25rem .75rem;
gap: .5rem;
color: var(--#{$prefix}status-color);
background: rgba(var(--#{$prefix}status-color-rgb), .1);
font-size: $font-size-base;
text-transform: none;
letter-spacing: normal;
border-radius: $border-radius-pill;
font-weight: var(--#{$prefix}font-weight-medium);
line-height: 1;
margin: 0;
.status-dot {
background: var(--#{$prefix}status-color);
}
.icon {
font-size: 1.25rem;
}
}
.status-lite {
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color) !important;
background: transparent !important;
color: var(--#{$prefix}body-color) !important;
}
@each $name, $color in $theme-colors {
.status-#{$name} {
--#{$prefix}status-color: #{$color};
--#{$prefix}status-color-rgb: #{to-rgb($color)};
}
}
//
// Status dot
//
.status-dot {
--#{$prefix}status-dot-color: var(--#{$prefix}status-color, #{$text-secondary});
--#{$prefix}status-size: #{$status-dot-size};
position: relative;
display: inline-block;
width: var(--#{$prefix}status-size);
height: var(--#{$prefix}status-size);
background: var(--#{$prefix}status-dot-color);
border-radius: $border-radius-pill;
}
.status-dot-animated {
&:before {
content: "";
position: absolute;
inset: 0;
z-index: 0;
background: inherit;
border-radius: inherit;
opacity: .6;
animation: 1s linear 2s backwards infinite status-pulsate-tertiary;
}
}
//
// Status indicator
//
.status-indicator {
--#{$prefix}status-indicator-size: 2.5rem;
--#{$prefix}status-indicator-color: var(--#{$prefix}status-color, #{$text-secondary});
display: block;
position: relative;
width: var(--#{$prefix}status-indicator-size);
height: var(--#{$prefix}status-indicator-size);
}
.status-indicator-circle {
--#{$prefix}status-circle-size: .75rem;
position: absolute;
left: 50%;
top: 50%;
margin: calc(var(--#{$prefix}status-circle-size) / -2) 0 0 calc(var(--#{$prefix}status-circle-size) / -2);
width: var(--#{$prefix}status-circle-size);
height: var(--#{$prefix}status-circle-size);
border-radius: $border-radius-pill;
background: var(--#{$prefix}status-color);
&:nth-child(1) {
z-index: 3;
}
&:nth-child(2) {
z-index: 2;
opacity: .1;
}
&:nth-child(3) {
z-index: 1;
opacity: .3;
}
}
.status-indicator-animated {
.status-indicator-circle {
&:nth-child(1) {
animation: 2s linear 1s infinite backwards status-pulsate-main;
}
&:nth-child(2) {
animation: 2s linear 1s infinite backwards status-pulsate-secondary;
}
&:nth-child(3) {
animation: 2s linear 1s infinite backwards status-pulsate-tertiary;
}
}
}
+156
View File
@@ -0,0 +1,156 @@
//
// Steps
//
.steps {
--#{$prefix}steps-color: #{$steps-color};
--#{$prefix}steps-inactive-color: #{$steps-inactive-color};
--#{$prefix}steps-dot-size: .5rem;
--#{$prefix}steps-border-width: #{$steps-border-width};
display: flex;
flex-wrap: nowrap;
width: 100%;
padding: 0;
margin: 0;
list-style: none;
}
@each $name, $color in $extra-colors {
.steps-#{$name} {
--#{$prefix}steps-color: var(--#{$prefix}#{$name});
&-lt {
--#{$prefix}steps-color: var(--#{$prefix}#{$name}-lt);
}
}
}
//
// Step item
//
.step-item {
position: relative;
flex: 1 1 0;
min-height: 1rem;
margin-top: 0;
color: inherit;
text-align: center;
cursor: default;
padding-top: calc(var(--#{$prefix}steps-dot-size));
@at-root a#{&} {
cursor: pointer;
&:hover {
color: inherit;
}
}
&:after,
&:before {
background: var(--#{$prefix}steps-color);
}
&:not(:last-child):after {
position: absolute;
left: 50%;
width: 100%;
content: "";
transform: translateY(-50%);
}
&:after {
top: calc(var(--#{$prefix}steps-dot-size) * .5);
height: var(--#{$prefix}steps-border-width);
}
&:before {
content: "";
position: absolute;
top: 0;
left: 50%;
z-index: 1;
box-sizing: content-box;
display: flex;
align-items: center;
justify-content: center;
border-radius: $border-radius-pill;
transform: translateX(-50%);
color: var(--#{$prefix}white);
width: var(--#{$prefix}steps-dot-size);
height: var(--#{$prefix}steps-dot-size);
}
&.active {
font-weight: var(--#{$prefix}font-weight-bold);
&:after {
background: var(--#{$prefix}steps-inactive-color);
}
& ~ .step-item {
color: var(--#{$prefix}disabled-color);
&:after,
&:before {
background: var(--#{$prefix}steps-inactive-color);
}
}
}
}
//
// Steps counter
//
.steps-counter {
--#{$prefix}steps-dot-size: 1.5rem;
counter-reset: steps;
.step-item {
counter-increment: steps;
&:before {
content: counter(steps);
}
}
}
//
// Steps vertical
//
.steps-vertical {
--#{$prefix}steps-dot-offset: 6px;
flex-direction: column;
&.steps-counter {
--#{$prefix}steps-dot-offset: -2px;
}
.step-item {
text-align: left;
padding-top: 0;
padding-left: calc(var(--#{$prefix}steps-dot-size) + 1rem);
min-height: auto;
&:not(:first-child) {
margin-top: 1rem;
}
&:before {
top: var(--#{$prefix}steps-dot-offset);
left: 0;
transform: translate(0, 0);
}
&:not(:last-child) {
&:after {
position: absolute;
content: '';
transform: translateX(-50%);
top: var(--#{$prefix}steps-dot-offset);
left: calc(var(--#{$prefix}steps-dot-size) * 0.5);
width: var(--#{$prefix}steps-border-width);
height: calc(100% + 1rem);
}
}
}
}
+211
View File
@@ -0,0 +1,211 @@
.switch-icon {
display: inline-block;
line-height: 1;
border: 0;
padding: 0;
background: transparent;
width: $icon-size;
height: $icon-size;
vertical-align: bottom;
position: relative;
cursor: pointer;
&.disabled {
pointer-events: none;
opacity: $btn-disabled-opacity;
}
&:focus {
outline: none;
}
svg {
display: block;
width: 100%;
height: 100%;
}
.switch-icon-a,
.switch-icon-b {
display: block;
width: 100%;
height: 100%;
}
.switch-icon-a {
opacity: 1;
}
.switch-icon-b {
position: absolute;
top: 0;
left: 0;
opacity: 0;
}
&.active {
.switch-icon-a {
opacity: 0;
}
.switch-icon-b {
opacity: 1;
}
}
}
// Fade variant
.switch-icon-fade {
.switch-icon-a,
.switch-icon-b {
@include transition(opacity .5s);
}
}
// Scale variant
.switch-icon-scale {
.switch-icon-a,
.switch-icon-b {
@include transition(opacity .5s, transform .0s .5s);
}
.switch-icon-b {
transform: scale(1.5);
}
&.active {
.switch-icon-a,
.switch-icon-b {
@include transition(opacity .0s, transform .5s);
}
.switch-icon-b {
transform: scale(1);
}
}
}
// Flip variant
.switch-icon-flip {
perspective: 10em;
.switch-icon-a,
.switch-icon-b {
backface-visibility: hidden;
transform-style: preserve-3d;
@include transition(opacity 0s .2s, transform .4s ease-in-out);
}
.switch-icon-a {
opacity: 1;
transform: rotateY(0deg);
}
.switch-icon-b {
opacity: 1;
transform: rotateY(-180deg);
}
&.active {
.switch-icon-a {
opacity: 1;
transform: rotateY(180deg);
}
.switch-icon-b {
opacity: 1;
transform: rotateY(0deg);
}
}
}
// Slide variant
.switch-icon-slide-up,
.switch-icon-slide-left,
.switch-icon-slide-right,
.switch-icon-slide-down {
overflow: hidden;
.switch-icon-a,
.switch-icon-b {
@include transition(opacity $transition-time, transform $transition-time);
}
.switch-icon-a {
transform: translateY(0);
}
.switch-icon-b {
transform: translateY(100%);
}
&.active {
.switch-icon-a {
transform: translateY(-100%);
}
.switch-icon-b {
transform: translateY(0);
}
}
}
.switch-icon-slide-left {
.switch-icon-a {
transform: translateX(0);
}
.switch-icon-b {
transform: translateX(100%);
}
&.active {
.switch-icon-a {
transform: translateX(-100%);
}
.switch-icon-b {
transform: translateX(0);
}
}
}
.switch-icon-slide-right {
.switch-icon-a {
transform: translateX(0);
}
.switch-icon-b {
transform: translateX(-100%);
}
&.active {
.switch-icon-a {
transform: translateX(100%);
}
.switch-icon-b {
transform: translateX(0);
}
}
}
.switch-icon-slide-down {
.switch-icon-a {
transform: translateY(0);
}
.switch-icon-b {
transform: translateY(-100%);
}
&.active {
.switch-icon-a {
transform: translateY(100%);
}
.switch-icon-b {
transform: translateY(0);
}
}
}
+177
View File
@@ -0,0 +1,177 @@
.table {
thead {
th {
background: $table-th-bg;
@include subheader;
padding-top: $table-th-padding-y;
padding-bottom: $table-th-padding-y;
white-space: nowrap;
@media print {
background: transparent;
}
}
}
}
.table-responsive {
.table {
margin-bottom: 0;
}
+ .card-footer {
border-top: 0;
}
}
.table-transparent {
thead {
th {
background: transparent;
}
}
}
.table-nowrap {
> :not(caption) > * > * {
white-space: nowrap;
}
}
.table-vcenter {
> :not(caption) > * > * {
vertical-align: middle;
}
}
.table-center {
> :not(caption) > * > * {
text-align: center;
}
}
.td-truncate {
max-width: 1px;
width: 100%;
}
.table-mobile {
@each $breakpoint, $breakpoint-max-widthin in $grid-breakpoints {
&#{breakpoint-infix($breakpoint)} {
@include media-breakpoint-down($breakpoint) {
display: block;
thead {
display: none;
}
tbody,
tr {
display: flex;
flex-direction: column;
}
td {
display: block;
padding: $table-cell-padding-x $table-cell-padding-y !important;
border: none;
color: var(--#{$prefix}body-color) !important;
&[data-label] {
&:before {
@include subheader;
content: attr(data-label);
display: block;
}
}
}
tr {
border-bottom: var(--#{$prefix}border-width)
var(--#{$prefix}border-style) $table-border-color;
}
.btn {
display: block;
}
}
}
}
}
/**
Table sort
*/
.table-sort {
font: inherit;
color: inherit;
text-transform: inherit;
letter-spacing: inherit;
border: 0;
background: inherit;
display: block;
width: 100%;
text-align: inherit;
@include transition(color $transition-time);
margin: (-$table-th-padding-y) (-$table-th-padding-x);
padding: $table-th-padding-y $table-th-padding-x;
&:hover,
&.asc,
&.desc {
color: var(--#{$prefix}body-color);
}
&:after {
content: "";
display: inline-flex;
width: 1rem;
height: 1rem;
vertical-align: bottom;
mask-image: $table-sort-bg-image;
background: currentColor;
margin-left: .25rem;
}
&.asc:after {
mask-image: $table-sort-desc-bg-image;
}
&.desc:after {
mask-image: $table-sort-asc-bg-image;
}
}
.table-borderless {
thead th {
background: transparent;
}
}
//
// Table selectable
//
.table-selectable {
tbody tr {
.on-checked {
display: none;
}
.on-unchecked {
display: initial;
}
&:has(.table-selectable-check:checked) {
background-color: $table-active-bg;
.on-checked {
display: initial;
}
.on-unchecked {
display: none;
}
}
}
}
+57
View File
@@ -0,0 +1,57 @@
.tag {
--#{$prefix}tag-height: 1.5rem;
border: $border-width solid var(--#{$prefix}border-color);
display: inline-flex;
align-items: center;
height: var(--#{$prefix}tag-height);
border-radius: var(--#{$prefix}border-radius);
padding: 0 0.5rem;
background: var(--#{$prefix}bg-surface);
box-shadow: var(--#{$prefix}shadow-input);
gap: .5rem;
.btn-close {
margin-right: -0.25rem;
margin-left: -0.125rem;
padding: 0;
width: 1rem;
height: 1rem;
font-size: .5rem;
}
}
.tag-badge {
--#{$prefix}badge-font-size: #{$h6-font-size};
--#{$prefix}badge-padding-x: .25rem;
--#{$prefix}badge-padding-y: .125rem;
margin-right: -.25rem;
}
.tag-avatar,
.tag-flag,
.tag-payment,
.tag-icon,
.tag-check {
margin-left: -.25rem;
}
.tag-icon {
color: var(--#{$prefix}secondary);
margin-right: -0.125rem;
width: 1rem;
height: 1rem;
}
.tag-check {
width: 1rem;
height: 1rem;
background-size: 1rem;
}
//
// Tags list
//
.tags-list {
@include elements-list;
}
+61
View File
@@ -0,0 +1,61 @@
//
// Timeline
//
.timeline {
--#{$prefix}timeline-icon-size: #{$avatar-size};
position: relative;
list-style: none;
padding: 0;
}
//
// Timeline event
//
.timeline-event {
position: relative;
&:not(:last-child) {
margin-bottom: var(--#{$prefix}page-padding);
&:before {
content: "";
position: absolute;
top: var(--#{$prefix}timeline-icon-size);
left: calc(var(--#{$prefix}timeline-icon-size) / 2);
bottom: calc(-1 * var(--#{$prefix}page-padding));
width: var(--#{$prefix}border-width);
background-color: var(--#{$prefix}border-color);
border-radius: var(--#{$prefix}border-radius);
}
}
}
.timeline-event-icon {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
width: var(--#{$prefix}timeline-icon-size, $avatar-size);
height: var(--#{$prefix}timeline-icon-size, $avatar-size);
background: var(--#{$prefix}bg-surface-secondary);
color: var(--#{$prefix}secondary);
border-radius: var(--#{$prefix}border-radius);
z-index: 5
}
.timeline-event-card {
margin-left: calc(var(--#{$prefix}timeline-icon-size, $avatar-size) + var(--#{$prefix}page-padding));
}
//
// Simple timeline
//
.timeline-simple {
.timeline-event-icon {
display: none;
}
.timeline-event-card {
margin-left: 0;
}
}
+18
View File
@@ -0,0 +1,18 @@
.toast {
border: $alert-border-width var(--#{$prefix}border-style) $alert-border-color;
box-shadow: $alert-shadow;
.toast-header {
user-select: none;
}
button[data-bs-dismiss="toast"] {
outline: none;
}
}
@each $state, $value in $theme-colors {
.toast-#{$state} {
--#{$prefix}toast-color: #{$value};
}
}
+10
View File
@@ -0,0 +1,10 @@
.toolbar {
display: flex;
flex-wrap: nowrap;
flex-shrink: 0;
margin: 0 -.5rem;
> * {
margin: 0 .5rem;
}
}
+29
View File
@@ -0,0 +1,29 @@
.tracking {
--#{$prefix}tracking-height: #{$tracking-height};
--#{$prefix}tracking-gap-width: #{$tracking-gap-width};
--#{$prefix}tracking-block-border-radius: #{$tracking-border-radius};
display: flex;
gap: var(--#{$prefix}tracking-gap-width);
}
.tracking-squares {
--#{$prefix}tracking-block-border-radius: var(--#{$prefix}border-radius-sm);
.tracking-block {
height: auto;
&:before {
content: "";
display: block;
padding-top: 100%;
}
}
}
.tracking-block {
flex: 1;
border-radius: var(--#{$prefix}tracking-block-border-radius);
height: var(--#{$prefix}tracking-height);
min-width: .25rem;
background: var(--#{$prefix}border-color);
}
+330
View File
@@ -0,0 +1,330 @@
@import "typo/hr";
.lead {
color: var(--#{$prefix}secondary);
font-size: inherit;
}
a {
text-decoration-skip-ink: auto;
color: color-mix(in srgb, transparent, var(--#{$prefix}link-color) var(--#{$prefix}link-opacity, 100%));
&:hover {
color: color-mix(in srgb, transparent, var(--#{$prefix}link-hover-color) var(--#{$prefix}link-opacity, 100%));
}
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
a {
color: inherit;
&:hover {
color: inherit;
}
}
}
h1,
.h1 {
font-size: var(--#{$prefix}font-size-h1);
line-height: var(--#{$prefix}line-height-h1);
}
h2,
.h2 {
font-size: var(--#{$prefix}font-size-h2);
line-height: var(--#{$prefix}line-height-h2);
}
h3,
.h3 {
font-size: var(--#{$prefix}font-size-h3);
line-height: var(--#{$prefix}line-height-h3);
}
h4,
.h4 {
font-size: var(--#{$prefix}font-size-h4);
line-height: var(--#{$prefix}line-height-h4);
}
h5,
.h5 {
font-size: var(--#{$prefix}font-size-h5);
line-height: var(--#{$prefix}line-height-h5);
}
h6,
.h6 {
font-size: var(--#{$prefix}font-size-h6);
line-height: var(--#{$prefix}line-height-h6);
}
.fs-base {
font-size: var(--#{$prefix}body-font-size);
}
strong,
.strong,
b {
font-weight: $headings-font-weight;
}
blockquote {
padding: 1rem 1rem 1rem;
border-left: 2px var(--#{$prefix}border-style) var(--#{$prefix}border-color);
p {
margin-bottom: 1rem;
}
cite {
display: block;
text-align: right;
&:before {
content: "";
}
}
}
ul,
ol {
padding-left: 1.5rem;
}
hr {
margin: 2rem 0;
}
dl {
dd {
&:last-child {
margin-bottom: 0;
}
}
}
pre {
--#{$prefix}scrollbar-color: #{$pre-color};
padding: $pre-padding;
background: $pre-bg;
color: $pre-color;
border-radius: var(--#{$prefix}border-radius);
line-height: $line-height-base;
@include scrollbar;
code {
background: transparent;
padding: 0;
}
}
code {
background: var(--#{$prefix}code-bg);
padding: 2px 4px;
border-radius: var(--#{$prefix}border-radius);
}
abbr {
text-decoration: underline dotted;
cursor: help;
text-decoration-skip-ink: none;
}
kbd,
.kbd {
border: $kbd-border;
display: inline-block;
box-sizing: border-box;
max-width: 100%;
font-size: $kbd-font-size;
font-weight: $kbd-font-weight;
line-height: 1;
vertical-align: baseline;
border-radius: $kbd-border-radius;
}
img {
max-width: 100%;
height: auto;
}
.list-unstyled {
margin-left: 0;
}
/**
Selection
*/
::selection,
.text-selected {
background-color: color-transparent(var(--#{$prefix}primary), 0.1);
}
.text-selected {
display: inline-block;
}
/**
Links
*/
[class^="link-"],
[class*=" link-"] {
&.disabled {
color: $nav-link-disabled-color !important;
pointer-events: none;
}
}
a:hover:has(.icon) {
text-decoration: none;
}
.link-hoverable {
border-radius: var(--#{$prefix}border-radius);
transition: background-color 0.15s ease-in-out;
&:hover {
text-decoration: none;
color: var(--#{$prefix}primary);
background: color-transparent(var(--#{$prefix}secondary), 0.04);
}
}
/**
Subheader
*/
.subheader {
@include subheader;
}
/**
Mentions
*/
.mention {
display: inline-block;
box-shadow: var(--#{$prefix}shadow-border);
border-radius: var(--#{$prefix}border-radius-pill);
line-height: calc(16em / 12);
font-size: calc(12em / 14);
color: var(--#{$prefix}body-color);
background: var(--#{$prefix}bg-surface-tertiary);
padding: calc(2em / 12) calc(8em / 12);
font-weight: var(--#{$prefix}font-weight-medium);
@at-root a#{&} {
cursor: pointer;
&:hover,
&.hover {
background: var(--#{$prefix}bg-surface-secondary);
text-decoration: underline;
}
}
}
.mention-avatar,
.mention-app,
.mention-color {
width: calc(14em / 12);
height: calc(14em / 12);
border-radius: var(--#{$prefix}border-radius-pill);
margin: calc(-2em / 12) calc(4em / 12) 0 calc(-4em / 12);
display: inline-flex;
background: no-repeat center center/cover;
box-shadow: var(--#{$prefix}shadow-border);
vertical-align: middle;
text-align: center;
}
.mention-app {
box-shadow: none;
background: none;
border-radius: 0;
}
.mention-count {
color: var(--#{$prefix}secondary);
margin-left: calc(8em / 12);
}
$text-variants: (
incorrect: var(--#{$prefix}red),
correct: var(--#{$prefix}green),
);
@each $variant, $color in $text-variants {
.text-#{$variant} {
background: color-transparent($color, 0.04);
background: color-transparent($color, 4%);
text-decoration: underline;
text-decoration-thickness: 1px;
text-decoration-color: $color;
}
}
.steps {
--#{$prefix}steps-padding: 2rem;
--#{$prefix}steps-item-size: 1.5rem;
margin-left: 1rem;
padding-left: var(--#{$prefix}steps-padding);
counter-reset: step;
border-left: 1px solid var(--#{$prefix}border-color);
margin-bottom: 2rem;
h3 {
counter-increment: step;
&:not(:first-child) {
margin-top: 2.5rem !important;
}
&:before {
content: counter(step);
display: inline-block;
position: absolute;
margin-top: 1px;
margin-left: calc(-1 * var(--#{$prefix}steps-padding) - var(--#{$prefix}steps-item-size) / 2);
width: var(--#{$prefix}steps-item-size);
height: var(--#{$prefix}steps-item-size);
text-align: center;
color: var(--#{$prefix}body-color);
border: 1px solid var(--#{$prefix}border-color);
background: var(--#{$prefix}bg-surface);
border-radius: var(--#{$prefix}border-radius);
line-height: calc(var(--#{$prefix}steps-item-size) - 2px);
font-size: var(--#{$prefix}font-size-h4);
font-weight: var(--#{$prefix}font-weight-bold);
}
}
>:last-child {
margin-bottom: 0;
}
}
.callout {
margin-bottom: 1.5rem;
border: 1px solid var(--#{$prefix}primary-200);
border-radius: var(--#{$prefix}border-radius);
padding: .5rem 1rem;
background: var(--#{$prefix}primary-lt);
&>:last-child {
margin-bottom: 0;
}
}
+91
View File
@@ -0,0 +1,91 @@
/*
Form check
*/
.form-check {
user-select: none;
&.form-check-highlight .form-check-input:not(:checked) ~ .form-check-label {
color: var(--#{$prefix}secondary);
}
.form-check-label-off {
color: var(--#{$prefix}secondary);
}
.form-check-input:checked ~ .form-check-label-off {
display: none;
}
.form-check-input:not(:checked) ~ .form-check-label-on {
display: none;
}
}
.form-check-input {
background-size: $form-check-input-width;
margin-top: ($form-check-min-height - $form-check-input-width) * .5;
box-shadow: $form-check-input-box-shadow;
.form-switch & {
@include transition(background-color$transition-time, background-position $transition-time);
}
}
.form-check-label {
display: block;
&.required {
&:after {
content: "*";
margin-left: .25rem;
color: $red;
}
}
}
.form-check-description {
display: block;
color: var(--#{$prefix}secondary);
font-size: $h5-font-size;
margin-top: .25rem;
}
.form-check-single {
margin: 0;
.form-check-input {
margin: 0;
}
}
/*
Form switch
*/
.form-switch {
.form-check-input {
height: $form-switch-height;
margin-top: ($form-check-min-height - $form-switch-height) * .5;
}
}
.form-switch-lg {
padding-left: 3.5rem;
min-height: 1.5rem;
.form-check-input {
height: 1.5rem;
width: 2.75rem;
background-size: 1.5rem;
margin-left: -3.5rem;
}
.form-check-label {
padding-top: .125rem;
}
}
/*Correction of Form-check position*/
.form-check-input:checked{
border: none;
}
+54
View File
@@ -0,0 +1,54 @@
/*
Color Input
*/
.form-colorinput {
position: relative;
display: inline-block;
margin: 0;
line-height: 1;
cursor: pointer;
}
.form-colorinput-input {
position: absolute;
z-index: -1;
opacity: 0;
}
.form-colorinput-color {
display: block;
width: 1.5rem;
height: 1.5rem;
color: $white;
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) $input-border-color-translucent;
border-radius: var(--#{$prefix}border-radius);
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05);
&:before {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
content: "";
background: no-repeat center center/$form-check-input-checked-bg-size;
background-image: escape-svg($form-check-input-checked-bg-image);
opacity: 0;
@include transition(opacity $transition-time);
.form-colorinput-input:checked ~ & {
opacity: 1;
}
}
.form-colorinput-input:focus ~ & {
border-color: var(--#{$prefix}primary);
box-shadow: $input-btn-focus-box-shadow;
}
@at-root .form-colorinput-light & {
&:before {
background-image: escape-svg($form-check-input-checked-bg-image-dark);
}
}
}
+28
View File
@@ -0,0 +1,28 @@
/**
Bootstrap color input
*/
.form-control-color {
&::-webkit-color-swatch {
border: none;
}
}
/**
Remove the cancel buttons in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: none;
}
/**
Form control dark theme fix
*/
.form-control {
&::file-selector-button {
background-color: var(--#{$prefix}btn-color, #{$form-file-button-bg});
}
&:hover:not(:disabled):not([readonly])::file-selector-button {
background-color: var(--#{$prefix}btn-color, #{$form-file-button-hover-bg});
}
}
+35
View File
@@ -0,0 +1,35 @@
/**
Icon input
*/
.input-icon {
position: relative;
.form-control:not(:last-child),
.form-select:not(:last-child) {
padding-right: 2.5rem;
}
.form-control:not(:first-child),
.form-select:not(:last-child) {
padding-left: 2.5rem;
}
}
.input-icon-addon {
position: absolute;
top: 0;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
min-width: 2.5rem;
color: var(--#{$prefix}icon-color);
pointer-events: none;
font-size: 1.2em;
&:last-child {
right: 0;
left: auto;
}
}
+105
View File
@@ -0,0 +1,105 @@
/**
Image check
*/
.form-imagecheck {
--#{$prefix}form-imagecheck-radius: var(--#{$prefix}border-radius);
position: relative;
margin: 0;
cursor: pointer;
}
.form-imagecheck-input {
position: absolute;
z-index: -1;
opacity: 0;
}
.form-imagecheck-figure {
position: relative;
display: block;
margin: 0;
user-select: none;
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
border-radius: var(--#{$prefix}form-imagecheck-radius);
.form-imagecheck-input:focus ~ & {
border-color: var(--#{$prefix}primary);
box-shadow: $input-btn-focus-box-shadow;
}
.form-imagecheck-input:checked ~ & {
border-color: var(--#{$prefix}primary);
}
&:before {
position: absolute;
top: .25rem;
left: .25rem;
z-index: 1;
display: block;
width: $form-check-input-width;
height: $form-check-input-width;
color: $white;
pointer-events: none;
content: "";
user-select: none;
background: $form-check-input-bg;
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
border-radius: $form-check-input-border-radius;
@include transition(opacity $transition-time);
.form-imagecheck-input:checked ~ & {
background-color: $form-check-input-checked-bg-color;
background-image: escape-svg($form-check-input-checked-bg-image);
background-repeat: $form-check-input-checked-bg-repeat;
background-position: center;
background-size: $form-check-input-checked-bg-size;
border-color: $form-check-input-checked-border-color;
}
.form-imagecheck-input[type="radio"] ~ & {
border-radius: $form-check-radio-border-radius;
}
.form-imagecheck-input[type="radio"]:checked ~ & {
background-image: escape-svg($form-check-radio-checked-bg-image);
}
}
}
.form-imagecheck-image {
max-width: 100%;
display: block;
opacity: .64;
@include transition(opacity $transition-time);
&:first-child {
border-top-left-radius: calc(var(--#{$prefix}form-imagecheck-radius) - 1px);
border-top-right-radius: calc(var(--#{$prefix}form-imagecheck-radius) - 1px);
}
&:last-child {
border-bottom-right-radius: calc(var(--#{$prefix}form-imagecheck-radius) - 1px);
border-bottom-left-radius: calc(var(--#{$prefix}form-imagecheck-radius) - 1px);
}
.form-imagecheck:hover &,
.form-imagecheck-input:focus ~ .form-imagecheck-figure &,
.form-imagecheck-input:checked ~ .form-imagecheck-figure & {
opacity: 1;
}
}
.form-imagecheck-caption {
padding: .25rem;
font-size: $font-size-sm;
color: var(--#{$prefix}secondary);
text-align: center;
@include transition(color $transition-time);
.form-imagecheck:hover &,
.form-imagecheck-input:focus ~ .form-imagecheck-figure &,
.form-imagecheck-input:checked ~ .form-imagecheck-figure & {
color: var(--#{$prefix}body-color);
}
}
+153
View File
@@ -0,0 +1,153 @@
/*
Select group
*/
.form-selectgroup {
display: inline-flex;
margin: 0 -.5rem -.5rem 0;
flex-wrap: wrap;
.form-selectgroup-item {
margin: 0 .5rem .5rem 0;
}
}
.form-selectgroup-vertical {
flex-direction: column;
}
.form-selectgroup-item {
display: block;
position: relative;
}
.form-selectgroup-input {
position: absolute;
top: 0;
left: 0;
z-index: -1;
opacity: 0;
}
.form-selectgroup-label {
position: relative;
display: block;
min-width: $input-height;
margin: 0;
padding: $input-btn-padding-y $input-btn-padding-x;
font-size: $input-btn-font-size;
line-height: $input-line-height;
color: var(--#{$prefix}secondary);
background: $form-check-input-bg;
text-align: center;
cursor: pointer;
user-select: none;
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) $input-border-color;
border-radius: var(--#{$prefix}border-radius);
box-shadow: $input-box-shadow;
@include transition(border-color $transition-time, background $transition-time, color $transition-time);
.icon:only-child {
margin: 0 -.25rem;
}
&:hover {
color: var(--#{$prefix}body-color);
}
}
.form-selectgroup-check {
display: inline-block;
width: $form-check-input-width;
height: $form-check-input-width;
border: $form-check-input-border;
vertical-align: middle;
box-shadow: $form-check-input-box-shadow;
.form-selectgroup-input[type="checkbox"] + .form-selectgroup-label & {
border-radius: $form-check-input-border-radius;
}
.form-selectgroup-input[type="radio"] + .form-selectgroup-label & {
border-radius: $form-check-radio-border-radius;
}
.form-selectgroup-input:checked + .form-selectgroup-label & {
background-color: $form-check-input-checked-bg-color;
background-repeat: $form-check-input-checked-bg-repeat;
background-position: center;
background-size: $form-check-input-checked-bg-size;
border-color: $form-check-input-checked-border-color;
}
.form-selectgroup-input[type="checkbox"]:checked + .form-selectgroup-label & {
background-image: escape-svg($form-check-input-checked-bg-image);
}
.form-selectgroup-input[type="radio"]:checked + .form-selectgroup-label & {
background-image: escape-svg($form-check-radio-checked-bg-image);
}
}
.form-selectgroup-check-floated {
position: absolute;
top: $input-btn-padding-y;
right: $input-btn-padding-y;
}
.form-selectgroup-input:checked + .form-selectgroup-label {
z-index: 1;
color: #{$active-color};
background: #{$active-bg};
border-color: #{$active-border-color};
}
.form-selectgroup-input:focus + .form-selectgroup-label {
z-index: 2;
color: var(--#{$prefix}primary);
border-color: var(--#{$prefix}primary);
box-shadow: $input-btn-focus-box-shadow;
}
.form-selectgroup-label-content {
}
/**
Alternate version of form select group
*/
.form-selectgroup-boxes {
.form-selectgroup-label {
text-align: left;
padding: $card-spacer-x $card-spacer-y;
color: inherit;
}
.form-selectgroup-input:checked {
+ .form-selectgroup-label {
color: inherit;
.form-selectgroup-title {
color: var(--#{$prefix}primary);
}
.form-selectgroup-label-content {
opacity: 1;
}
}
}
}
/**
Select group
*/
.form-selectgroup-pills {
flex-wrap: wrap;
align-items: flex-start;
.form-selectgroup-item {
flex-grow: 0;
}
.form-selectgroup-label {
border-radius: 50px;
}
}
+13
View File
@@ -0,0 +1,13 @@
%validation-lite {
border-color: var(--#{$prefix}border-color) !important;
}
@each $state, $data in $form-validation-states {
.form-control.is-#{$state}-lite {
@extend %validation-lite;
}
.form-select.is-#{$state}-lite {
@extend %validation-lite;
}
}
+77
View File
@@ -0,0 +1,77 @@
/**
Horizontal rules
*/
.hr {
@extend hr;
}
/**
Hr text
*/
.hr-text {
display: flex;
align-items: center;
margin: $hr-margin-y 0;
@include subheader;
height: 1px;
&:after,
&:before {
flex: 1 1 auto;
height: 1px;
background-color: var(--#{$prefix}border-color);
}
&:before {
content: "";
margin-right: .5rem;
}
&:after {
content: "";
margin-left: .5rem;
}
> *:first-child {
padding-right: .5rem;
padding-left: 0;
color: var(--#{$prefix}secondary);
}
&.hr-text-left,
&.hr-text-start {
&:before {
content: none;
}
& > *:first-child {
padding-right: .5rem;
padding-left: .5rem;
}
}
&.hr-text-right,
&.hr-text-end {
&:before {
content: "";
}
&:after {
content: none;
}
& > *:first-child {
padding-right: 0;
padding-left: .5rem;
}
}
.card > & {
margin: 0;
}
}
.hr-text-spaceless {
margin: -.5rem 0;
}
+15
View File
@@ -0,0 +1,15 @@
.bg-white-overlay {
color: $white;
background-color: rgba($light, .24);
}
.bg-dark-overlay {
color: $white;
background-color: rgba($dark, .24);
}
.bg-cover {
background-repeat: no-repeat;
background-size: cover;
background-position: center;
}
+100
View File
@@ -0,0 +1,100 @@
// All colors
@each $color, $value in map-merge($theme-colors, ( white: $white)) {
.bg-#{"" + $color} {
background-color: color-mix(in srgb, var(--#{$prefix}#{$color}) calc(var(--#{$prefix}bg-opacity, 1) * 100%), transparent) !important;
}
.bg-#{"" + $color}-lt {
color: color-mix(in srgb, var(--#{$prefix}#{$color}) calc(var(--#{$prefix}text-opacity, 1) * 100%), transparent) !important;
background-color: color-mix(in srgb, var(--#{$prefix}#{$color}-lt) calc(var(--#{$prefix}bg-opacity, 1) * 100%), transparent) !important;
}
.border-#{"" + $color} {
border-color: color-mix(in srgb, var(--#{$prefix}#{$color}) calc(var(--#{$prefix}border-opacity, 1) * 100%), transparent) !important;
}
.bg-gradient-from-#{"" + $color} {
--#{$prefix}gradient-from: var(--#{$prefix}#{$color});
}
.bg-gradient-to-#{"" + $color} {
--#{$prefix}gradient-to: var(--#{$prefix}#{$color});
}
.bg-gradient-via-#{"" + $color} {
--#{$prefix}gradient-via: var(--#{$prefix}#{$color});
--#{$prefix}gradient-stops: var(--#{$prefix}gradient-from, transparent), var(--#{$prefix}gradient-via, transparent), var(--#{$prefix}gradient-to, transparent);
}
.text-bg-#{"" + $color} {
color: color-contrast($value) if($enable-important-utilities, !important, null);
background-color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);
}
.link-#{"" + $color} {
color: color-mix(in srgb, var(--#{$prefix}#{$color}) calc(var(--#{$prefix}link-opacity, 1) * 100%), transparent) !important;
text-decoration-color: color-mix(in srgb, var(--#{$prefix}#{$color}) calc(var(--#{$prefix}link-underline-opacity, 1) * 100%), transparent) !important;
@if $link-shade-percentage != 0 {
&:hover,
&:focus {
$hover-color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage));
color: RGBA(#{to-rgb($hover-color)}, var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null);
text-decoration-color: RGBA(to-rgb($hover-color), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null);
}
}
}
}
@each $color, $value in $theme-colors {
.text-#{"" + $color} {
--#{$prefix}text-opacity: 1;
color: color-mix(in srgb, var(--#{$prefix}#{$color}) calc(var(--#{$prefix}text-opacity) * 100%), transparent) !important;
}
.text-#{"" + $color}-fg {
color: var(--#{$prefix}#{$color}-fg) !important;
}
}
@each $color, $value in $gray-colors {
.bg-#{"" + $color} {
--#{$prefix}bg-opacity: 1;
background-color: color-mix(in srgb, var(--#{$prefix}#{$color}) calc(var(--#{$prefix}bg-opacity) * 100%), transparent) !important;
}
.text-#{"" + $color}-fg {
color: var(--#{$prefix}#{$color}-fg) !important;
}
}
@each $color, $value in $social-colors {
.bg-#{"" + $color} {
--#{$prefix}bg-opacity: 1;
background-color: color-mix(in srgb, var(--#{$prefix}#{$color}) calc(var(--#{$prefix}bg-opacity) * 100%), transparent) !important;
}
.text-#{"" + $color}-fg {
color: var(--#{$prefix}#{$color}-fg) !important;
}
}
.bg-inverted {
--#{$prefix}bg-opacity: 1;
background-color: color-mix(in srgb, var(--#{$prefix}bg-surface-inverted) calc(var(--#{$prefix}bg-opacity) * 100%), transparent) !important;
}
.bg-surface {
background-color: var(--#{$prefix}bg-surface) !important;
}
.bg-surface-secondary {
background-color: var(--#{$prefix}bg-surface-secondary) !important;
}
.bg-surface-tertiary {
background-color: var(--#{$prefix}bg-surface-tertiary) !important;
}
.bg-surface-backdrop {
background-color: color-transparent($modal-backdrop-bg, $modal-backdrop-opacity) !important;
}
+7
View File
@@ -0,0 +1,7 @@
// stylelint-disable declaration-no-important
@for $i from 0 through 20 {
.opacity-#{$i * 5} {
opacity: calc(#{$i * 5} / 100) !important;
}
}

Some files were not shown because too many files have changed in this diff Show More