630 lines
16 KiB
CSS
630 lines
16 KiB
CSS
@theme inline {
|
|
@keyframes accordion-down {
|
|
from {
|
|
height: 0;
|
|
}
|
|
to {
|
|
height: var(
|
|
--radix-accordion-content-height,
|
|
var(--accordion-panel-height, auto)
|
|
);
|
|
}
|
|
}
|
|
|
|
@keyframes accordion-up {
|
|
from {
|
|
height: var(
|
|
--radix-accordion-content-height,
|
|
var(--accordion-panel-height, auto)
|
|
);
|
|
}
|
|
to {
|
|
height: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Custom variants */
|
|
@custom-variant data-open {
|
|
&:where([data-state="open"]),
|
|
&:where([data-open]:not([data-open="false"])) {
|
|
@slot;
|
|
}
|
|
}
|
|
|
|
@custom-variant data-closed {
|
|
&:where([data-state="closed"]),
|
|
&:where([data-closed]:not([data-closed="false"])) {
|
|
@slot;
|
|
}
|
|
}
|
|
|
|
@custom-variant data-checked {
|
|
&:where([data-state="checked"]),
|
|
&:where([data-checked]:not([data-checked="false"])) {
|
|
@slot;
|
|
}
|
|
}
|
|
|
|
@custom-variant data-unchecked {
|
|
&:where([data-state="unchecked"]),
|
|
&:where([data-unchecked]:not([data-unchecked="false"])) {
|
|
@slot;
|
|
}
|
|
}
|
|
|
|
@custom-variant data-selected {
|
|
&:where([data-selected="true"]) {
|
|
@slot;
|
|
}
|
|
}
|
|
|
|
@custom-variant data-disabled {
|
|
&:where([data-disabled="true"]),
|
|
&:where([data-disabled]:not([data-disabled="false"])) {
|
|
@slot;
|
|
}
|
|
}
|
|
|
|
@custom-variant data-active {
|
|
&:where([data-state="active"]),
|
|
&:where([data-active]:not([data-active="false"])) {
|
|
@slot;
|
|
}
|
|
}
|
|
|
|
@custom-variant data-horizontal {
|
|
&:where([data-orientation="horizontal"]) {
|
|
@slot;
|
|
}
|
|
}
|
|
|
|
@custom-variant data-vertical {
|
|
&:where([data-orientation="vertical"]) {
|
|
@slot;
|
|
}
|
|
}
|
|
|
|
@utility no-scrollbar {
|
|
-ms-overflow-style: none;
|
|
scrollbar-width: none;
|
|
|
|
&::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
/* scroll-fade */
|
|
@property --scroll-fade-t {
|
|
syntax: "<length-percentage>";
|
|
inherits: false;
|
|
initial-value: 0px;
|
|
}
|
|
@property --scroll-fade-b {
|
|
syntax: "<length-percentage>";
|
|
inherits: false;
|
|
initial-value: 0px;
|
|
}
|
|
@property --scroll-fade-s {
|
|
syntax: "<length-percentage>";
|
|
inherits: false;
|
|
initial-value: 0px;
|
|
}
|
|
@property --scroll-fade-e {
|
|
syntax: "<length-percentage>";
|
|
inherits: false;
|
|
initial-value: 0px;
|
|
}
|
|
@property --scroll-fade-mask {
|
|
syntax: "*";
|
|
inherits: false;
|
|
}
|
|
|
|
@theme inline {
|
|
@keyframes scroll-fade-reveal-t {
|
|
from {
|
|
--scroll-fade-t: 0px;
|
|
}
|
|
to {
|
|
--scroll-fade-t: var(--_scroll-fade-size-t, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
|
|
}
|
|
}
|
|
@keyframes scroll-fade-reveal-b {
|
|
from {
|
|
--scroll-fade-b: var(--_scroll-fade-size-b, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
|
|
}
|
|
to {
|
|
--scroll-fade-b: 0px;
|
|
}
|
|
}
|
|
@keyframes scroll-fade-reveal-s {
|
|
from {
|
|
--scroll-fade-s: 0px;
|
|
}
|
|
to {
|
|
--scroll-fade-s: var(--_scroll-fade-size-s, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
|
|
}
|
|
}
|
|
@keyframes scroll-fade-reveal-e {
|
|
from {
|
|
--scroll-fade-e: var(--_scroll-fade-size-e, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
|
|
}
|
|
to {
|
|
--scroll-fade-e: 0px;
|
|
}
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade {
|
|
--_scroll-fade-size-t: var(
|
|
--scroll-fade-t-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--_scroll-fade-size-b: var(
|
|
--scroll-fade-b-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--scroll-fade-block: linear-gradient(
|
|
to bottom,
|
|
transparent 0,
|
|
#000 var(--scroll-fade-t, 0px),
|
|
#000 calc(100% - var(--scroll-fade-b, 0px)),
|
|
transparent 100%
|
|
);
|
|
-webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
|
|
mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
|
|
-webkit-mask-composite: source-in;
|
|
mask-composite: intersect;
|
|
-webkit-mask-repeat: no-repeat;
|
|
mask-repeat: no-repeat;
|
|
|
|
@supports (animation-timeline: scroll()) {
|
|
animation:
|
|
scroll-fade-reveal-t 1ms ease-in-out,
|
|
scroll-fade-reveal-b 1ms ease-in-out;
|
|
animation-timeline: scroll(self y), scroll(self y);
|
|
animation-range:
|
|
0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
|
|
calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@supports not (animation-timeline: scroll()) {
|
|
--scroll-fade-t: var(--_scroll-fade-size-t);
|
|
--scroll-fade-b: var(--_scroll-fade-size-b);
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade-y {
|
|
--_scroll-fade-size-t: var(
|
|
--scroll-fade-t-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--_scroll-fade-size-b: var(
|
|
--scroll-fade-b-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--scroll-fade-block: linear-gradient(
|
|
to bottom,
|
|
transparent 0,
|
|
#000 var(--scroll-fade-t, 0px),
|
|
#000 calc(100% - var(--scroll-fade-b, 0px)),
|
|
transparent 100%
|
|
);
|
|
-webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
|
|
mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
|
|
-webkit-mask-composite: source-in;
|
|
mask-composite: intersect;
|
|
-webkit-mask-repeat: no-repeat;
|
|
mask-repeat: no-repeat;
|
|
|
|
@supports (animation-timeline: scroll()) {
|
|
animation:
|
|
scroll-fade-reveal-t 1ms ease-in-out,
|
|
scroll-fade-reveal-b 1ms ease-in-out;
|
|
animation-timeline: scroll(self y), scroll(self y);
|
|
animation-range:
|
|
0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
|
|
calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@supports not (animation-timeline: scroll()) {
|
|
--scroll-fade-t: var(--_scroll-fade-size-t);
|
|
--scroll-fade-b: var(--_scroll-fade-size-b);
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade-x {
|
|
--_scroll-fade-size-s: var(
|
|
--scroll-fade-s-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--_scroll-fade-size-e: var(
|
|
--scroll-fade-e-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--scroll-fade-inline: linear-gradient(
|
|
to right,
|
|
transparent 0,
|
|
#000 var(--scroll-fade-s, 0px),
|
|
#000 calc(100% - var(--scroll-fade-e, 0px)),
|
|
transparent 100%
|
|
);
|
|
&:where([dir="rtl"], [dir="rtl"] *) {
|
|
--scroll-fade-inline: linear-gradient(
|
|
to left,
|
|
transparent 0,
|
|
#000 var(--scroll-fade-s, 0px),
|
|
#000 calc(100% - var(--scroll-fade-e, 0px)),
|
|
transparent 100%
|
|
);
|
|
}
|
|
-webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
|
|
mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
|
|
-webkit-mask-composite: source-in;
|
|
mask-composite: intersect;
|
|
-webkit-mask-repeat: no-repeat;
|
|
mask-repeat: no-repeat;
|
|
|
|
@supports (animation-timeline: scroll()) {
|
|
animation:
|
|
scroll-fade-reveal-s 1ms ease-in-out,
|
|
scroll-fade-reveal-e 1ms ease-in-out;
|
|
animation-timeline: scroll(self inline), scroll(self inline);
|
|
animation-range:
|
|
0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
|
|
calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@supports not (animation-timeline: scroll()) {
|
|
--scroll-fade-s: var(--_scroll-fade-size-s);
|
|
--scroll-fade-e: var(--_scroll-fade-size-e);
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade-t {
|
|
--_scroll-fade-size-t: var(
|
|
--scroll-fade-t-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--scroll-fade-mask: linear-gradient(
|
|
to bottom,
|
|
transparent 0,
|
|
#000 var(--scroll-fade-t, 0px),
|
|
#000 100%
|
|
);
|
|
-webkit-mask-image: var(--scroll-fade-mask);
|
|
mask-image: var(--scroll-fade-mask);
|
|
-webkit-mask-composite: source-in;
|
|
mask-composite: intersect;
|
|
-webkit-mask-repeat: no-repeat;
|
|
mask-repeat: no-repeat;
|
|
|
|
@supports (animation-timeline: scroll()) {
|
|
animation: scroll-fade-reveal-t 1ms ease-in-out;
|
|
animation-timeline: scroll(self y);
|
|
animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@supports not (animation-timeline: scroll()) {
|
|
--scroll-fade-t: var(--_scroll-fade-size-t);
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade-b {
|
|
--_scroll-fade-size-b: var(
|
|
--scroll-fade-b-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--scroll-fade-mask: linear-gradient(
|
|
to bottom,
|
|
#000 0,
|
|
#000 calc(100% - var(--scroll-fade-b, 0px)),
|
|
transparent 100%
|
|
);
|
|
-webkit-mask-image: var(--scroll-fade-mask);
|
|
mask-image: var(--scroll-fade-mask);
|
|
-webkit-mask-composite: source-in;
|
|
mask-composite: intersect;
|
|
-webkit-mask-repeat: no-repeat;
|
|
mask-repeat: no-repeat;
|
|
|
|
@supports (animation-timeline: scroll()) {
|
|
animation: scroll-fade-reveal-b 1ms ease-in-out;
|
|
animation-timeline: scroll(self y);
|
|
animation-range: calc(
|
|
100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))
|
|
)
|
|
100%;
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@supports not (animation-timeline: scroll()) {
|
|
--scroll-fade-b: var(--_scroll-fade-size-b);
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade-l {
|
|
--_scroll-fade-size-s: var(
|
|
--scroll-fade-s-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--scroll-fade-mask: linear-gradient(
|
|
to right,
|
|
transparent 0,
|
|
#000 var(--scroll-fade-s, 0px),
|
|
#000 100%
|
|
);
|
|
-webkit-mask-image: var(--scroll-fade-mask);
|
|
mask-image: var(--scroll-fade-mask);
|
|
-webkit-mask-composite: source-in;
|
|
mask-composite: intersect;
|
|
-webkit-mask-repeat: no-repeat;
|
|
mask-repeat: no-repeat;
|
|
|
|
@supports (animation-timeline: scroll()) {
|
|
animation: scroll-fade-reveal-s 1ms ease-in-out;
|
|
animation-timeline: scroll(self x);
|
|
animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@supports not (animation-timeline: scroll()) {
|
|
--scroll-fade-s: var(--_scroll-fade-size-s);
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade-r {
|
|
--_scroll-fade-size-e: var(
|
|
--scroll-fade-e-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--scroll-fade-mask: linear-gradient(
|
|
to right,
|
|
#000 0,
|
|
#000 calc(100% - var(--scroll-fade-e, 0px)),
|
|
transparent 100%
|
|
);
|
|
-webkit-mask-image: var(--scroll-fade-mask);
|
|
mask-image: var(--scroll-fade-mask);
|
|
-webkit-mask-composite: source-in;
|
|
mask-composite: intersect;
|
|
-webkit-mask-repeat: no-repeat;
|
|
mask-repeat: no-repeat;
|
|
|
|
@supports (animation-timeline: scroll()) {
|
|
animation: scroll-fade-reveal-e 1ms ease-in-out;
|
|
animation-timeline: scroll(self x);
|
|
animation-range: calc(
|
|
100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))
|
|
)
|
|
100%;
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@supports not (animation-timeline: scroll()) {
|
|
--scroll-fade-e: var(--_scroll-fade-size-e);
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade-s {
|
|
--_scroll-fade-size-s: var(
|
|
--scroll-fade-s-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--scroll-fade-mask: linear-gradient(
|
|
to right,
|
|
transparent 0,
|
|
#000 var(--scroll-fade-s, 0px),
|
|
#000 100%
|
|
);
|
|
&:where([dir="rtl"], [dir="rtl"] *) {
|
|
--scroll-fade-mask: linear-gradient(
|
|
to left,
|
|
transparent 0,
|
|
#000 var(--scroll-fade-s, 0px),
|
|
#000 100%
|
|
);
|
|
}
|
|
-webkit-mask-image: var(--scroll-fade-mask);
|
|
mask-image: var(--scroll-fade-mask);
|
|
-webkit-mask-composite: source-in;
|
|
mask-composite: intersect;
|
|
-webkit-mask-repeat: no-repeat;
|
|
mask-repeat: no-repeat;
|
|
|
|
@supports (animation-timeline: scroll()) {
|
|
animation: scroll-fade-reveal-s 1ms ease-in-out;
|
|
animation-timeline: scroll(self inline);
|
|
animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@supports not (animation-timeline: scroll()) {
|
|
--scroll-fade-s: var(--_scroll-fade-size-s);
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade-e {
|
|
--_scroll-fade-size-e: var(
|
|
--scroll-fade-e-size,
|
|
var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
|
|
);
|
|
--scroll-fade-mask: linear-gradient(
|
|
to right,
|
|
#000 0,
|
|
#000 calc(100% - var(--scroll-fade-e, 0px)),
|
|
transparent 100%
|
|
);
|
|
&:where([dir="rtl"], [dir="rtl"] *) {
|
|
--scroll-fade-mask: linear-gradient(
|
|
to left,
|
|
#000 0,
|
|
#000 calc(100% - var(--scroll-fade-e, 0px)),
|
|
transparent 100%
|
|
);
|
|
}
|
|
-webkit-mask-image: var(--scroll-fade-mask);
|
|
mask-image: var(--scroll-fade-mask);
|
|
-webkit-mask-composite: source-in;
|
|
mask-composite: intersect;
|
|
-webkit-mask-repeat: no-repeat;
|
|
mask-repeat: no-repeat;
|
|
|
|
@supports (animation-timeline: scroll()) {
|
|
animation: scroll-fade-reveal-e 1ms ease-in-out;
|
|
animation-timeline: scroll(self inline);
|
|
animation-range: calc(
|
|
100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))
|
|
)
|
|
100%;
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@supports not (animation-timeline: scroll()) {
|
|
--scroll-fade-e: var(--_scroll-fade-size-e);
|
|
}
|
|
}
|
|
|
|
@utility scroll-fade-* {
|
|
--scroll-fade-size: calc(var(--spacing) * --value(integer));
|
|
--scroll-fade-size: --value([length], [percentage]);
|
|
}
|
|
|
|
@utility scroll-fade-t-* {
|
|
--scroll-fade-t-size: calc(var(--spacing) * --value(integer));
|
|
--scroll-fade-t-size: --value([length], [percentage]);
|
|
}
|
|
|
|
@utility scroll-fade-b-* {
|
|
--scroll-fade-b-size: calc(var(--spacing) * --value(integer));
|
|
--scroll-fade-b-size: --value([length], [percentage]);
|
|
}
|
|
|
|
@utility scroll-fade-s-* {
|
|
--scroll-fade-s-size: calc(var(--spacing) * --value(integer));
|
|
--scroll-fade-s-size: --value([length], [percentage]);
|
|
}
|
|
|
|
@utility scroll-fade-e-* {
|
|
--scroll-fade-e-size: calc(var(--spacing) * --value(integer));
|
|
--scroll-fade-e-size: --value([length], [percentage]);
|
|
}
|
|
|
|
@utility scroll-fade-none {
|
|
--scroll-fade-mask: none;
|
|
}
|
|
|
|
/* shimmer */
|
|
@property --shimmer-angle {
|
|
syntax: "<angle>";
|
|
inherits: true;
|
|
initial-value: 20deg;
|
|
}
|
|
@property --shimmer-image {
|
|
syntax: "*";
|
|
inherits: false;
|
|
}
|
|
@property --shimmer-text-fill {
|
|
syntax: "*";
|
|
inherits: false;
|
|
}
|
|
|
|
@theme inline {
|
|
@keyframes tw-shimmer {
|
|
from {
|
|
background-position: 100% 0;
|
|
}
|
|
to {
|
|
background-position: 0 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
@utility shimmer {
|
|
--_spread: var(--shimmer-spread, calc(3ch + 40px));
|
|
--_base: currentColor;
|
|
--_highlight: var(
|
|
--shimmer-color,
|
|
oklch(from currentColor l c h / calc(alpha* 0.2))
|
|
);
|
|
|
|
background-image: var(
|
|
--shimmer-image,
|
|
linear-gradient(
|
|
calc(90deg + var(--shimmer-angle)),
|
|
var(--_base) calc(50% - var(--_spread)),
|
|
color-mix(in oklch, var(--_highlight), var(--_base) 50%)
|
|
calc(50% - var(--_spread) * 0.5),
|
|
var(--_highlight) 50%,
|
|
color-mix(in oklch, var(--_highlight), var(--_base) 50%)
|
|
calc(50% + var(--_spread) * 0.5),
|
|
var(--_base) calc(50% + var(--_spread))
|
|
)
|
|
);
|
|
background-repeat: no-repeat;
|
|
background-size: calc(200% + var(--_spread) * 2) 100%;
|
|
background-position: 0 0;
|
|
background-clip: text;
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: var(--shimmer-text-fill, transparent);
|
|
animation: tw-shimmer var(--shimmer-duration, 2s) linear infinite;
|
|
|
|
@variant dark {
|
|
--_highlight: var(
|
|
--shimmer-color,
|
|
oklch(from currentColor max(0.8, calc(l + 0.4)) c h / calc(alpha + 0.4))
|
|
);
|
|
}
|
|
|
|
&:where([dir="rtl"], [dir="rtl"] *) {
|
|
animation-direction: reverse;
|
|
}
|
|
}
|
|
|
|
@utility shimmer-once {
|
|
animation-iteration-count: 1;
|
|
}
|
|
|
|
@utility shimmer-reverse {
|
|
animation-direction: reverse;
|
|
}
|
|
|
|
@utility shimmer-none {
|
|
--shimmer-image: none;
|
|
--shimmer-text-fill: currentColor;
|
|
}
|
|
|
|
@utility shimmer-color-* {
|
|
--shimmer-color: --value(--color, [color]);
|
|
--shimmer-color: color-mix(
|
|
in oklch,
|
|
--value(--color, [color]) calc(--modifier(integer) * 1%),
|
|
transparent
|
|
);
|
|
}
|
|
|
|
@utility shimmer-duration-* {
|
|
--shimmer-duration: calc(--value(integer) * 1ms);
|
|
}
|
|
|
|
@utility shimmer-spread-* {
|
|
--shimmer-spread: calc(var(--spacing) * --value(integer));
|
|
--shimmer-spread: --value([length], [percentage]);
|
|
}
|
|
|
|
@utility shimmer-angle-* {
|
|
--shimmer-angle: calc(--value(integer) * 1deg);
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.shimmer {
|
|
animation: none;
|
|
background-image: none;
|
|
-webkit-text-fill-color: currentColor;
|
|
}
|
|
}
|