2025-03-13 13:30:31 +03:00
|
|
|
/**
|
2025-03-19 15:11:43 +03:00
|
|
|
* Module: Utility classes for style features.
|
2025-03-13 13:30:31 +03:00
|
|
|
*/
|
|
|
|
|
2025-02-21 21:13:40 +03:00
|
|
|
@utility font-main {
|
|
|
|
font-family: var(--font-main);
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility font-controls {
|
|
|
|
font-family: var(--font-ui);
|
2025-03-19 16:07:46 +03:00
|
|
|
font-weight: 700;
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
@utility font-math {
|
|
|
|
font-family: var(--font-math);
|
|
|
|
}
|
|
|
|
|
2025-04-12 21:47:46 +03:00
|
|
|
@utility cc-selected {
|
|
|
|
color: var(--color-selected-foreground);
|
|
|
|
background-color: var(--color-selected);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
|
2025-04-12 21:47:46 +03:00
|
|
|
@utility cc-hover {
|
2025-02-21 21:13:40 +03:00
|
|
|
&:hover:not(:disabled) {
|
2025-04-12 21:47:46 +03:00
|
|
|
background-color: var(--color-accent);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-12 21:47:46 +03:00
|
|
|
@utility focus-outline {
|
|
|
|
--focus-color: var(--color-ring);
|
2025-02-21 21:13:40 +03:00
|
|
|
|
2025-04-12 21:47:46 +03:00
|
|
|
&:focus-visible {
|
|
|
|
outline: 2px solid var(--focus-color);
|
|
|
|
border-color: var(--focus-color);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
|
2025-04-12 21:47:46 +03:00
|
|
|
&[aria-invalid='true'] {
|
|
|
|
--focus-color: var(--color-destructive);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility focus-frame {
|
2025-04-12 21:47:46 +03:00
|
|
|
--focus-color: var(--color-ring);
|
2025-02-21 21:13:40 +03:00
|
|
|
|
2025-04-12 21:47:46 +03:00
|
|
|
&:focus-visible,
|
2025-02-21 21:13:40 +03:00
|
|
|
&:has(:focus-visible) {
|
2025-04-12 21:47:46 +03:00
|
|
|
outline: 2px solid var(--focus-color);
|
|
|
|
border-color: var(--focus-color);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
|
2025-04-12 21:47:46 +03:00
|
|
|
&[aria-invalid='true'] {
|
|
|
|
--focus-color: var(--color-destructive);
|
|
|
|
}
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
|
2025-04-12 21:47:46 +03:00
|
|
|
@utility cc-controls {
|
|
|
|
color: var(--color-muted-foreground);
|
2025-02-21 21:13:40 +03:00
|
|
|
background-color: transparent;
|
2025-03-19 15:11:43 +03:00
|
|
|
|
2025-02-21 21:13:40 +03:00
|
|
|
&:disabled {
|
2025-04-13 19:05:47 +03:00
|
|
|
color: var(--color-muted-foreground);
|
|
|
|
opacity: 0.75;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-remove {
|
|
|
|
color: var(--color-muted-foreground);
|
|
|
|
|
|
|
|
&:hover:not(:disabled) {
|
|
|
|
color: var(--color-destructive);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility icon-primary {
|
|
|
|
:not([disabled]) > & {
|
2025-04-12 21:47:46 +03:00
|
|
|
color: var(--color-primary);
|
2024-12-17 11:37:42 +03:00
|
|
|
}
|
2024-06-07 20:17:03 +03:00
|
|
|
}
|
2025-02-21 21:13:40 +03:00
|
|
|
|
|
|
|
@utility icon-red {
|
|
|
|
:not([disabled]) > & {
|
2025-04-12 21:47:46 +03:00
|
|
|
color: var(--color-destructive);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility icon-green {
|
|
|
|
:not([disabled]) > & {
|
2025-04-12 21:47:46 +03:00
|
|
|
color: var(--color-constructive);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility inline-icon {
|
|
|
|
display: inline-block;
|
2025-03-19 15:11:43 +03:00
|
|
|
|
2025-02-21 21:13:40 +03:00
|
|
|
margin-left: 0.1rem;
|
|
|
|
margin-right: 0.1rem;
|
|
|
|
transform: translate(0, -0.2rem);
|
2025-03-19 15:11:43 +03:00
|
|
|
|
|
|
|
font-size: 1.25rem;
|
2025-04-12 21:47:46 +03:00
|
|
|
color: var(--color-primary);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-column {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
gap: 0.75rem;
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-icons {
|
|
|
|
display: flex;
|
|
|
|
gap: 0.25rem;
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-scroll-row {
|
|
|
|
scroll-snap-align: start;
|
|
|
|
scroll-snap-stop: always;
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-scroll-y {
|
|
|
|
overflow-y: auto;
|
|
|
|
overscroll-behavior-y: contain;
|
|
|
|
scroll-snap-type: y mandatory;
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-shadow-border {
|
2025-04-12 21:47:46 +03:00
|
|
|
box-shadow: 0 1px 2px 0 var(--color-border);
|
2025-02-21 21:13:40 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-fade-in {
|
|
|
|
opacity: 1;
|
|
|
|
|
|
|
|
transition-property: opacity;
|
2025-03-13 01:14:47 +03:00
|
|
|
transition-timing-function: var(--ease-bezier);
|
2025-02-21 21:13:40 +03:00
|
|
|
transition-duration: var(--duration-fade);
|
|
|
|
|
|
|
|
@starting-style {
|
|
|
|
opacity: 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-animate-position {
|
|
|
|
transition-property: transform top left bottom right margin padding;
|
2025-03-13 01:14:47 +03:00
|
|
|
transition-timing-function: var(--ease-bezier);
|
2025-02-21 21:13:40 +03:00
|
|
|
transition-duration: var(--duration-move);
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-animate-modal {
|
|
|
|
clip-path: inset(0% 0% 0% 0%);
|
|
|
|
opacity: 1;
|
|
|
|
|
|
|
|
transition-property: clip-path, opacity;
|
2025-03-13 01:14:47 +03:00
|
|
|
transition-timing-function: var(--ease-bezier);
|
2025-02-21 21:13:40 +03:00
|
|
|
transition-duration: var(--duration-modal);
|
|
|
|
|
|
|
|
@starting-style {
|
|
|
|
clip-path: inset(50% 50% 50% 50%);
|
|
|
|
opacity: 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility cc-animate-color {
|
|
|
|
transition-property: color, background-color;
|
2025-03-13 01:14:47 +03:00
|
|
|
transition-timing-function: var(--ease-bezier);
|
2025-02-21 21:13:40 +03:00
|
|
|
transition-duration: var(--duration-select);
|
2025-02-22 14:03:13 +03:00
|
|
|
}
|
2025-03-09 21:57:21 +03:00
|
|
|
|
2025-04-07 22:25:53 +03:00
|
|
|
@utility cc-animate-background {
|
|
|
|
transition-property: background-color;
|
|
|
|
transition-timing-function: var(--ease-bezier);
|
|
|
|
transition-duration: var(--duration-select);
|
|
|
|
}
|
|
|
|
|
2025-03-12 23:08:01 +03:00
|
|
|
@utility cc-mask-sides {
|
|
|
|
--mask-border-size: 2rem;
|
|
|
|
|
|
|
|
mask-image: linear-gradient(to top, transparent, black calc(var(--mask-border-size))),
|
|
|
|
linear-gradient(to bottom, transparent, black calc(var(--mask-border-size))),
|
|
|
|
linear-gradient(to left, transparent, black calc(var(--mask-border-size))),
|
|
|
|
linear-gradient(to right, transparent, black calc(var(--mask-border-size)));
|
|
|
|
|
|
|
|
mask-composite: intersect;
|
|
|
|
}
|
2025-04-16 15:22:04 +03:00
|
|
|
|
|
|
|
@utility duration-select {
|
|
|
|
--tw-duration: var(--duration-select);
|
|
|
|
transition-duration: var(--duration-select);
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility duration-dropdown {
|
|
|
|
--tw-duration: var(--duration-dropdown);
|
|
|
|
transition-duration: var(--duration-dropdown);
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility duration-modal {
|
|
|
|
--tw-duration: var(--duration-modal);
|
|
|
|
transition-duration: var(--duration-modal);
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility duration-fade {
|
|
|
|
--tw-duration: var(--duration-fade);
|
|
|
|
transition-duration: var(--duration-fade);
|
|
|
|
}
|
|
|
|
|
|
|
|
@utility duration-move {
|
|
|
|
--tw-duration: var(--duration-move);
|
|
|
|
transition-duration: var(--duration-move);
|
|
|
|
}
|