"use client";
import * as React from "react";
import { cn } from "@/lib/utils";
export type AquaButtonVariant = "primary" | "secondary";
export interface AquaButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
variant?: AquaButtonVariant;
}
const EASE = "cubic-bezier(0.4, 0, 0.2, 1)";
const VARIANTS = {
primary: {
text: "text-[rgb(20,30,55)]",
textShadow: "0 1px 0 rgba(255, 255, 255, 0.35)",
bg: "linear-gradient(rgb(95, 160, 230), rgb(50, 115, 205) 55%, rgb(95, 160, 230))",
shadow:
"0 0.25em 0.375em rgba(0, 0, 0, 0.25), inset 0 0 0 1px rgba(0, 30, 95, 0.55), inset 0 0.125em 0.25em rgba(0, 20, 80, 0.3)",
hoverExtra: ", 0 0 0.875em 0.0625em rgba(60, 150, 235, 0.55)",
focusExtra:
", 0 0 0 0.125em rgba(255, 255, 255, 0.95), 0 0 0 0.3125em rgba(40, 150, 255, 0.95), 0 0 1.25em 0.1875em rgba(60, 170, 255, 0.7)",
active:
"0 0.0625em 0.125em rgba(0, 0, 0, 0.25), inset 0 0 0 1px rgba(0, 30, 95, 0.65), inset 0 0.25em 0.5em rgba(0, 20, 80, 0.55)",
},
secondary: {
text: "text-[rgb(35,35,40)] dark:text-white",
textShadow: "var(--aqua-text-shadow)",
bg: "var(--aqua-bg)",
shadow: "var(--aqua-shadow)",
hoverExtra: "",
focusExtra: "",
active: "var(--aqua-shadow-active)",
},
} as const;
const SECONDARY_THEME_CLASSES = [
"[--aqua-bg:linear-gradient(rgb(225,_226,_228),_rgb(245,_246,_248)_55%,_rgb(230,_230,_232))]",
"[--aqua-shadow:0_0.25em_0.375em_rgba(0,_0,_0,_0.18),inset_0_0_0_1px_rgba(120,_122,_130,_0.5),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.15)]",
"[--aqua-shadow-hover:0_0.25em_0.375em_rgba(0,_0,_0,_0.18),inset_0_0_0_1px_rgba(120,_122,_130,_0.5),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.15),0_0_0.875em_0.0625em_rgba(0,_0,_0,_0.18)]",
"[--aqua-shadow-focus:0_0.25em_0.375em_rgba(0,_0,_0,_0.18),inset_0_0_0_1px_rgba(120,_122,_130,_0.5),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.15),0_0_0_0.125em_rgba(255,_255,_255,_0.95),0_0_0_0.3125em_rgba(40,_150,_255,_0.95),0_0_1.25em_0.1875em_rgba(60,_170,_255,_0.55)]",
"[--aqua-shadow-active:0_0.0625em_0.125em_rgba(0,_0,_0,_0.18),inset_0_0_0_1px_rgba(120,_122,_130,_0.6),inset_0_0.25em_0.5em_rgba(0,_0,_0,_0.3)]",
"[--aqua-text-shadow:0_1px_0_rgba(255,_255,_255,_0.7)]",
"[--aqua-top-highlight:linear-gradient(rgba(255,_255,_255,_0.85),_rgba(255,_255,_255,_0.25))]",
"[--aqua-bottom-highlight:linear-gradient(rgba(255,_255,_255,_0.15),_rgba(255,_255,_255,_0.5))]",
"dark:[--aqua-bg:linear-gradient(rgb(40,_40,_45),_rgb(22,_22,_28)_55%,_rgb(40,_40,_45))]",
"dark:[--aqua-shadow:0_0.25em_0.375em_rgba(0,_0,_0,_0.4),inset_0_0_0_1px_rgba(255,_255,_255,_0.08),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.3)]",
"dark:[--aqua-shadow-hover:0_0.25em_0.375em_rgba(0,_0,_0,_0.4),inset_0_0_0_1px_rgba(255,_255,_255,_0.08),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.3),0_0_0.875em_0.0625em_rgba(100,_100,_255,_0.2)]",
"dark:[--aqua-shadow-focus:0_0.25em_0.375em_rgba(0,_0,_0,_0.4),inset_0_0_0_1px_rgba(255,_255,_255,_0.08),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.3),0_0_0_0.125em_rgba(255,_255,_255,_0.95),0_0_0_0.3125em_rgba(100,_120,_255,_0.8),0_0_1.25em_0.1875em_rgba(80,_100,_255,_0.5)]",
"dark:[--aqua-shadow-active:0_0.0625em_0.125em_rgba(0,_0,_0,_0.4),inset_0_0_0_1px_rgba(255,_255,_255,_0.1),inset_0_0.25em_0.5em_rgba(0,_0,_0,_0.5)]",
"dark:[--aqua-text-shadow:0_1px_2px_rgba(0,_0,_0,_0.5)]",
"dark:[--aqua-top-highlight:linear-gradient(rgba(255,_255,_255,_0.12),_rgba(255,_255,_255,_0.03))]",
"dark:[--aqua-bottom-highlight:linear-gradient(rgba(255,_255,_255,_0.04),_rgba(255,_255,_255,_0.08))]",
] as const;
export const AquaButton = React.forwardRef<HTMLButtonElement, AquaButtonProps>(
({ className, variant = "primary", style, children, ...props }, ref) => {
const v = VARIANTS[variant];
const isSecondary = variant === "secondary";
return (
<button
ref={ref}
className={cn(
"group relative inline-flex h-[1.75em] min-w-[6em] max-w-full cursor-pointer items-center justify-center overflow-hidden rounded-full px-[2em] text-base font-medium outline-none will-change-transform",
v.text,
isSecondary && SECONDARY_THEME_CLASSES,
"transition-[transform,box-shadow] duration-[320ms] [transition-timing-function:var(--aqua-ease)]",
"hover:-translate-y-px hover:[box-shadow:var(--aqua-shadow-hover)]",
"focus-visible:-translate-y-px focus-visible:ring-2 focus-visible:ring-white/95 focus-visible:ring-offset-2 focus-visible:ring-offset-sky-500/90 focus-visible:[box-shadow:var(--aqua-shadow-focus)]",
"active:translate-y-0 active:scale-[0.97] active:duration-[140ms] active:[box-shadow:var(--aqua-shadow-active)]",
"motion-reduce:transition-none motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0 motion-reduce:active:scale-100",
className,
)}
style={
{
background: v.bg,
"--aqua-ease": EASE,
...(isSecondary
? {}
: {
"--aqua-shadow": v.shadow,
"--aqua-shadow-hover": v.shadow + v.hoverExtra,
"--aqua-shadow-focus": v.shadow + v.focusExtra,
"--aqua-shadow-active": v.active,
}),
boxShadow: "var(--aqua-shadow)",
...style,
} as React.CSSProperties
}
{...props}
>
<span
aria-hidden
className={cn(
"pointer-events-none absolute left-1/2 top-[6%] z-[2] h-[42%] w-[calc(100%-0.625em)] -translate-x-1/2 rounded-[2em_2em_0.75em_0.75em] opacity-90 blur-[0.5px]",
"origin-top transition-[opacity,transform] duration-[320ms] [transition-timing-function:var(--aqua-ease)]",
"group-hover:scale-y-[1.04] group-hover:opacity-100",
"group-focus-visible:scale-y-[1.04] group-focus-visible:opacity-100",
"group-active:scale-y-[0.82] group-active:opacity-75 group-active:duration-[140ms]",
"motion-reduce:transition-none motion-reduce:group-hover:scale-y-100 motion-reduce:group-focus-visible:scale-y-100 motion-reduce:group-active:scale-y-100",
)}
style={{
background: isSecondary
? "var(--aqua-top-highlight)"
: "linear-gradient(rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.25))",
}}
/>
<span
aria-hidden
className={cn(
"pointer-events-none absolute bottom-[8%] left-1/2 h-[28%] w-[calc(100%-1.25em)] -translate-x-1/2 rounded-[0.75em] opacity-70 blur-[2px]",
"transition-opacity duration-[320ms] [transition-timing-function:var(--aqua-ease)]",
"group-hover:opacity-90",
"group-focus-visible:opacity-90",
"group-active:opacity-40 group-active:duration-[140ms]",
"motion-reduce:transition-none",
)}
style={{
background: isSecondary
? "var(--aqua-bottom-highlight)"
: "linear-gradient(rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.5))",
}}
/>
<span
className={cn(
"relative z-[1] tracking-[0.005em]",
"transition-transform duration-[320ms] [transition-timing-function:var(--aqua-ease)]",
"group-active:translate-y-[0.5px] group-active:duration-[140ms]",
"motion-reduce:transition-none motion-reduce:group-active:translate-y-0",
)}
style={{ textShadow: v.textShadow }}
>
{children}
</span>
</button>
);
},
);
AquaButton.displayName = "AquaButton";
export default AquaButton;
AquaButton
By jay sharma
Try the interaction, copy the React source files, or download the complete example.
About AquaButton
AquaButton is an animated React and Tailwind CSS button by jay sharma. Try the interaction, copy the React source, or download the example with creator credit.
- Effects and categories
- Hover effects, Animated
- Using this example
- Copy a TSX file or download the original source and standalone demo. Test keyboard focus, motion and contrast in your own project.
Usage, Tailwind and licensing questions
Read the source files
import-examples/aqua-button.tsx
import { AquaButton } from "@/components/evil-buttons/aqua-button";
export function ButtonDemo() {
return (
<div className="flex gap-4">
<AquaButton variant="secondary">Cancel</AquaButton>
<AquaButton>Save</AquaButton>
</div>
);
}
export function IconButtonDemo() {
return (
<AquaButton
aria-label="Show menu"
className="h-9 w-9 min-w-0 rounded-md px-0"
>
<svg width="11" height="11" viewBox="0 0 10 10" aria-hidden="true">
<path d="M1 3 L9 3 L5 8 Z" fill="currentColor" />
</svg>
</AquaButton>
);
}
components/evil-buttons/aqua-button.tsx
"use client";
import * as React from "react";
import { cn } from "@/lib/utils";
export type AquaButtonVariant = "primary" | "secondary";
export interface AquaButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
variant?: AquaButtonVariant;
}
const EASE = "cubic-bezier(0.4, 0, 0.2, 1)";
const VARIANTS = {
primary: {
text: "text-[rgb(20,30,55)]",
textShadow: "0 1px 0 rgba(255, 255, 255, 0.35)",
bg: "linear-gradient(rgb(95, 160, 230), rgb(50, 115, 205) 55%, rgb(95, 160, 230))",
shadow:
"0 0.25em 0.375em rgba(0, 0, 0, 0.25), inset 0 0 0 1px rgba(0, 30, 95, 0.55), inset 0 0.125em 0.25em rgba(0, 20, 80, 0.3)",
hoverExtra: ", 0 0 0.875em 0.0625em rgba(60, 150, 235, 0.55)",
focusExtra:
", 0 0 0 0.125em rgba(255, 255, 255, 0.95), 0 0 0 0.3125em rgba(40, 150, 255, 0.95), 0 0 1.25em 0.1875em rgba(60, 170, 255, 0.7)",
active:
"0 0.0625em 0.125em rgba(0, 0, 0, 0.25), inset 0 0 0 1px rgba(0, 30, 95, 0.65), inset 0 0.25em 0.5em rgba(0, 20, 80, 0.55)",
},
secondary: {
text: "text-[rgb(35,35,40)] dark:text-white",
textShadow: "var(--aqua-text-shadow)",
bg: "var(--aqua-bg)",
shadow: "var(--aqua-shadow)",
hoverExtra: "",
focusExtra: "",
active: "var(--aqua-shadow-active)",
},
} as const;
const SECONDARY_THEME_CLASSES = [
"[--aqua-bg:linear-gradient(rgb(225,_226,_228),_rgb(245,_246,_248)_55%,_rgb(230,_230,_232))]",
"[--aqua-shadow:0_0.25em_0.375em_rgba(0,_0,_0,_0.18),inset_0_0_0_1px_rgba(120,_122,_130,_0.5),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.15)]",
"[--aqua-shadow-hover:0_0.25em_0.375em_rgba(0,_0,_0,_0.18),inset_0_0_0_1px_rgba(120,_122,_130,_0.5),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.15),0_0_0.875em_0.0625em_rgba(0,_0,_0,_0.18)]",
"[--aqua-shadow-focus:0_0.25em_0.375em_rgba(0,_0,_0,_0.18),inset_0_0_0_1px_rgba(120,_122,_130,_0.5),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.15),0_0_0_0.125em_rgba(255,_255,_255,_0.95),0_0_0_0.3125em_rgba(40,_150,_255,_0.95),0_0_1.25em_0.1875em_rgba(60,_170,_255,_0.55)]",
"[--aqua-shadow-active:0_0.0625em_0.125em_rgba(0,_0,_0,_0.18),inset_0_0_0_1px_rgba(120,_122,_130,_0.6),inset_0_0.25em_0.5em_rgba(0,_0,_0,_0.3)]",
"[--aqua-text-shadow:0_1px_0_rgba(255,_255,_255,_0.7)]",
"[--aqua-top-highlight:linear-gradient(rgba(255,_255,_255,_0.85),_rgba(255,_255,_255,_0.25))]",
"[--aqua-bottom-highlight:linear-gradient(rgba(255,_255,_255,_0.15),_rgba(255,_255,_255,_0.5))]",
"dark:[--aqua-bg:linear-gradient(rgb(40,_40,_45),_rgb(22,_22,_28)_55%,_rgb(40,_40,_45))]",
"dark:[--aqua-shadow:0_0.25em_0.375em_rgba(0,_0,_0,_0.4),inset_0_0_0_1px_rgba(255,_255,_255,_0.08),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.3)]",
"dark:[--aqua-shadow-hover:0_0.25em_0.375em_rgba(0,_0,_0,_0.4),inset_0_0_0_1px_rgba(255,_255,_255,_0.08),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.3),0_0_0.875em_0.0625em_rgba(100,_100,_255,_0.2)]",
"dark:[--aqua-shadow-focus:0_0.25em_0.375em_rgba(0,_0,_0,_0.4),inset_0_0_0_1px_rgba(255,_255,_255,_0.08),inset_0_0.125em_0.25em_rgba(0,_0,_0,_0.3),0_0_0_0.125em_rgba(255,_255,_255,_0.95),0_0_0_0.3125em_rgba(100,_120,_255,_0.8),0_0_1.25em_0.1875em_rgba(80,_100,_255,_0.5)]",
"dark:[--aqua-shadow-active:0_0.0625em_0.125em_rgba(0,_0,_0,_0.4),inset_0_0_0_1px_rgba(255,_255,_255,_0.1),inset_0_0.25em_0.5em_rgba(0,_0,_0,_0.5)]",
"dark:[--aqua-text-shadow:0_1px_2px_rgba(0,_0,_0,_0.5)]",
"dark:[--aqua-top-highlight:linear-gradient(rgba(255,_255,_255,_0.12),_rgba(255,_255,_255,_0.03))]",
"dark:[--aqua-bottom-highlight:linear-gradient(rgba(255,_255,_255,_0.04),_rgba(255,_255,_255,_0.08))]",
] as const;
export const AquaButton = React.forwardRef<HTMLButtonElement, AquaButtonProps>(
({ className, variant = "primary", style, children, ...props }, ref) => {
const v = VARIANTS[variant];
const isSecondary = variant === "secondary";
return (
<button
ref={ref}
className={cn(
"group relative inline-flex h-[1.75em] min-w-[6em] max-w-full cursor-pointer items-center justify-center overflow-hidden rounded-full px-[2em] text-base font-medium outline-none will-change-transform",
v.text,
isSecondary && SECONDARY_THEME_CLASSES,
"transition-[transform,box-shadow] duration-[320ms] [transition-timing-function:var(--aqua-ease)]",
"hover:-translate-y-px hover:[box-shadow:var(--aqua-shadow-hover)]",
"focus-visible:-translate-y-px focus-visible:ring-2 focus-visible:ring-white/95 focus-visible:ring-offset-2 focus-visible:ring-offset-sky-500/90 focus-visible:[box-shadow:var(--aqua-shadow-focus)]",
"active:translate-y-0 active:scale-[0.97] active:duration-[140ms] active:[box-shadow:var(--aqua-shadow-active)]",
"motion-reduce:transition-none motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0 motion-reduce:active:scale-100",
className,
)}
style={
{
background: v.bg,
"--aqua-ease": EASE,
...(isSecondary
? {}
: {
"--aqua-shadow": v.shadow,
"--aqua-shadow-hover": v.shadow + v.hoverExtra,
"--aqua-shadow-focus": v.shadow + v.focusExtra,
"--aqua-shadow-active": v.active,
}),
boxShadow: "var(--aqua-shadow)",
...style,
} as React.CSSProperties
}
{...props}
>
<span
aria-hidden
className={cn(
"pointer-events-none absolute left-1/2 top-[6%] z-[2] h-[42%] w-[calc(100%-0.625em)] -translate-x-1/2 rounded-[2em_2em_0.75em_0.75em] opacity-90 blur-[0.5px]",
"origin-top transition-[opacity,transform] duration-[320ms] [transition-timing-function:var(--aqua-ease)]",
"group-hover:scale-y-[1.04] group-hover:opacity-100",
"group-focus-visible:scale-y-[1.04] group-focus-visible:opacity-100",
"group-active:scale-y-[0.82] group-active:opacity-75 group-active:duration-[140ms]",
"motion-reduce:transition-none motion-reduce:group-hover:scale-y-100 motion-reduce:group-focus-visible:scale-y-100 motion-reduce:group-active:scale-y-100",
)}
style={{
background: isSecondary
? "var(--aqua-top-highlight)"
: "linear-gradient(rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.25))",
}}
/>
<span
aria-hidden
className={cn(
"pointer-events-none absolute bottom-[8%] left-1/2 h-[28%] w-[calc(100%-1.25em)] -translate-x-1/2 rounded-[0.75em] opacity-70 blur-[2px]",
"transition-opacity duration-[320ms] [transition-timing-function:var(--aqua-ease)]",
"group-hover:opacity-90",
"group-focus-visible:opacity-90",
"group-active:opacity-40 group-active:duration-[140ms]",
"motion-reduce:transition-none",
)}
style={{
background: isSecondary
? "var(--aqua-bottom-highlight)"
: "linear-gradient(rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.5))",
}}
/>
<span
className={cn(
"relative z-[1] tracking-[0.005em]",
"transition-transform duration-[320ms] [transition-timing-function:var(--aqua-ease)]",
"group-active:translate-y-[0.5px] group-active:duration-[140ms]",
"motion-reduce:transition-none motion-reduce:group-active:translate-y-0",
)}
style={{ textShadow: v.textShadow }}
>
{children}
</span>
</button>
);
},
);
AquaButton.displayName = "AquaButton";
export default AquaButton;
lib/utils.ts
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
demo.tsx
export { IconButtonDemo as default } from "@/import-examples/aqua-button";CSS
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer properties;
@layer theme, base, components, utilities;
@layer theme {
:root, :host {
--color-sky-500: oklch(68.5% 0.169 237.323);
--color-white: #fff;
--spacing: 0.25rem;
--text-base: 1rem;
--text-base--line-height: calc(1.5 / 1);
--font-weight-medium: 500;
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
--default-font-family: var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif;
--default-mono-font-family: var(--font-geist-mono);
}
}
@layer base {
*, ::after, ::before, ::backdrop, ::file-selector-button {
box-sizing: border-box;
margin: 0;
padding: 0;
border: 0 solid;
}
html, :host {
line-height: 1.5;
-webkit-text-size-adjust: 100%;
tab-size: 4;
font-family: var(--default-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
font-feature-settings: var(--default-font-feature-settings, normal);
font-variation-settings: var(--default-font-variation-settings, normal);
-webkit-tap-highlight-color: transparent;
}
hr {
height: 0;
color: inherit;
border-top-width: 1px;
}
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
h1, h2, h3, h4, h5, h6 {
font-size: inherit;
font-weight: inherit;
}
a {
color: inherit;
-webkit-text-decoration: inherit;
text-decoration: inherit;
}
b, strong {
font-weight: bolder;
}
code, kbd, samp, pre {
font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
font-feature-settings: var(--default-mono-font-feature-settings, normal);
font-variation-settings: var(--default-mono-font-variation-settings, normal);
font-size: 1em;
}
small {
font-size: 80%;
}
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
table {
text-indent: 0;
border-color: inherit;
border-collapse: collapse;
}
:-moz-focusring:where(:not(iframe)) {
outline: auto;
}
progress {
vertical-align: baseline;
}
summary {
display: list-item;
}
ol, ul, menu {
list-style: none;
}
img, svg, video, canvas, audio, iframe, embed, object {
display: block;
vertical-align: middle;
}
img, video {
max-width: 100%;
height: auto;
}
button, input, select, optgroup, textarea, ::file-selector-button {
font: inherit;
font-feature-settings: inherit;
font-variation-settings: inherit;
letter-spacing: inherit;
color: inherit;
border-radius: 0;
background-color: transparent;
opacity: 1;
}
:where(select:is([multiple], [size])) optgroup {
font-weight: bolder;
}
:where(select:is([multiple], [size])) optgroup option {
padding-inline-start: 20px;
}
::file-selector-button {
margin-inline-end: 4px;
}
::placeholder {
opacity: 1;
}
@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
::placeholder {
color: currentcolor;
@supports (color: color-mix(in lab, red, red)) {
color: color-mix(in oklab, currentcolor 50%, transparent);
}
}
}
textarea {
resize: vertical;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-date-and-time-value {
min-height: 1lh;
text-align: inherit;
}
::-webkit-datetime-edit {
display: inline-flex;
}
::-webkit-datetime-edit-fields-wrapper {
padding: 0;
}
::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
padding-block: 0;
}
::-webkit-calendar-picker-indicator {
line-height: 1;
}
:-moz-ui-invalid {
box-shadow: none;
}
button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
appearance: button;
}
::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
height: auto;
}
[hidden]:where(:not([hidden="until-found"])) {
display: none !important;
}
}
@layer utilities {
.pointer-events-none {
pointer-events: none;
}
.absolute {
position: absolute;
}
.relative {
position: relative;
}
.top-\[6\%\] {
top: 6%;
}
.bottom-\[8\%\] {
bottom: 8%;
}
.left-1\/2 {
left: calc(1 / 2 * 100%);
}
.z-\[1\] {
z-index: 1;
}
.z-\[2\] {
z-index: 2;
}
.flex {
display: flex;
}
.inline-flex {
display: inline-flex;
}
.h-9 {
height: calc(var(--spacing) * 9);
}
.h-\[1\.75em\] {
height: 1.75em;
}
.h-\[28\%\] {
height: 28%;
}
.h-\[42\%\] {
height: 42%;
}
.w-9 {
width: calc(var(--spacing) * 9);
}
.w-\[calc\(100\%-0\.625em\)\] {
width: calc(100% - 0.625em);
}
.w-\[calc\(100\%-1\.25em\)\] {
width: calc(100% - 1.25em);
}
.max-w-full {
max-width: 100%;
}
.min-w-0 {
min-width: 0px;
}
.min-w-\[6em\] {
min-width: 6em;
}
.origin-top {
transform-origin: top;
}
.-translate-x-1\/2 {
--tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.cursor-pointer {
cursor: pointer;
}
.items-center {
align-items: center;
}
.justify-center {
justify-content: center;
}
.gap-4 {
gap: calc(var(--spacing) * 4);
}
.overflow-hidden {
overflow: hidden;
}
.rounded-\[0\.75em\] {
border-radius: 0.75em;
}
.rounded-\[2em_2em_0\.75em_0\.75em\] {
border-radius: 2em 2em 0.75em 0.75em;
}
.rounded-full {
border-radius: calc(infinity * 1px);
}
.rounded-md {
border-radius: calc(var(--radius) * 0.8);
}
.px-0 {
padding-inline: 0px;
}
.px-\[2em\] {
padding-inline: 2em;
}
.text-base {
font-size: var(--text-base);
line-height: var(--tw-leading, var(--text-base--line-height));
}
.font-medium {
--tw-font-weight: var(--font-weight-medium);
font-weight: var(--font-weight-medium);
}
.tracking-\[0\.005em\] {
--tw-tracking: 0.005em;
letter-spacing: 0.005em;
}
.text-\[rgb\(20\,30\,55\)\] {
color: rgb(20,30,55);
}
.text-\[rgb\(35\,35\,40\)\] {
color: rgb(35,35,40);
}
.opacity-70 {
opacity: 70%;
}
.opacity-90 {
opacity: 90%;
}
.shadow {
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
.blur-\[0\.5px\] {
--tw-blur: blur(0.5px);
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
}
.blur-\[2px\] {
--tw-blur: blur(2px);
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
}
.transition-\[opacity\,transform\] {
transition-property: opacity,transform;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-\[transform\,box-shadow\] {
transition-property: transform,box-shadow;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-opacity {
transition-property: opacity;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-transform {
transition-property: transform, translate, scale, rotate;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.duration-\[320ms\] {
--tw-duration: 320ms;
transition-duration: 320ms;
}
.\[transition-timing-function\:var\(--aqua-ease\)\] {
transition-timing-function: var(--aqua-ease);
}
.will-change-transform {
will-change: transform;
}
.outline-none {
--tw-outline-style: none;
outline-style: none;
}
.\[--aqua-bg\:linear-gradient\(rgb\(225\,_226\,_228\)\,_rgb\(245\,_246\,_248\)_55\%\,_rgb\(230\,_230\,_232\)\)\] {
--aqua-bg: linear-gradient(rgb(225, 226, 228), rgb(245, 246, 248) 55%, rgb(230, 230, 232));
}
.\[--aqua-bottom-highlight\:linear-gradient\(rgba\(255\,_255\,_255\,_0\.15\)\,_rgba\(255\,_255\,_255\,_0\.5\)\)\] {
--aqua-bottom-highlight: linear-gradient(rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.5));
}
.\[--aqua-shadow-active\:0_0\.0625em_0\.125em_rgba\(0\,_0\,_0\,_0\.18\)\,inset_0_0_0_1px_rgba\(120\,_122\,_130\,_0\.6\)\,inset_0_0\.25em_0\.5em_rgba\(0\,_0\,_0\,_0\.3\)\] {
--aqua-shadow-active: 0 0.0625em 0.125em rgba(0, 0, 0, 0.18),inset 0 0 0 1px rgba(120, 122, 130, 0.6),inset 0 0.25em 0.5em rgba(0, 0, 0, 0.3);
}
.\[--aqua-shadow-focus\:0_0\.25em_0\.375em_rgba\(0\,_0\,_0\,_0\.18\)\,inset_0_0_0_1px_rgba\(120\,_122\,_130\,_0\.5\)\,inset_0_0\.125em_0\.25em_rgba\(0\,_0\,_0\,_0\.15\)\,0_0_0_0\.125em_rgba\(255\,_255\,_255\,_0\.95\)\,0_0_0_0\.3125em_rgba\(40\,_150\,_255\,_0\.95\)\,0_0_1\.25em_0\.1875em_rgba\(60\,_170\,_255\,_0\.55\)\] {
--aqua-shadow-focus: 0 0.25em 0.375em rgba(0, 0, 0, 0.18),inset 0 0 0 1px rgba(120, 122, 130, 0.5),inset 0 0.125em 0.25em rgba(0, 0, 0, 0.15),0 0 0 0.125em rgba(255, 255, 255, 0.95),0 0 0 0.3125em rgba(40, 150, 255, 0.95),0 0 1.25em 0.1875em rgba(60, 170, 255, 0.55);
}
.\[--aqua-shadow-hover\:0_0\.25em_0\.375em_rgba\(0\,_0\,_0\,_0\.18\)\,inset_0_0_0_1px_rgba\(120\,_122\,_130\,_0\.5\)\,inset_0_0\.125em_0\.25em_rgba\(0\,_0\,_0\,_0\.15\)\,0_0_0\.875em_0\.0625em_rgba\(0\,_0\,_0\,_0\.18\)\] {
--aqua-shadow-hover: 0 0.25em 0.375em rgba(0, 0, 0, 0.18),inset 0 0 0 1px rgba(120, 122, 130, 0.5),inset 0 0.125em 0.25em rgba(0, 0, 0, 0.15),0 0 0.875em 0.0625em rgba(0, 0, 0, 0.18);
}
.\[--aqua-shadow\:0_0\.25em_0\.375em_rgba\(0\,_0\,_0\,_0\.18\)\,inset_0_0_0_1px_rgba\(120\,_122\,_130\,_0\.5\)\,inset_0_0\.125em_0\.25em_rgba\(0\,_0\,_0\,_0\.15\)\] {
--aqua-shadow: 0 0.25em 0.375em rgba(0, 0, 0, 0.18),inset 0 0 0 1px rgba(120, 122, 130, 0.5),inset 0 0.125em 0.25em rgba(0, 0, 0, 0.15);
}
.\[--aqua-text-shadow\:0_1px_0_rgba\(255\,_255\,_255\,_0\.7\)\] {
--aqua-text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7);
}
.\[--aqua-top-highlight\:linear-gradient\(rgba\(255\,_255\,_255\,_0\.85\)\,_rgba\(255\,_255\,_255\,_0\.25\)\)\] {
--aqua-top-highlight: linear-gradient(rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.25));
}
@media (hover: hover) {
.group-hover\:scale-y-\[1\.04\]:is(:where(.group):hover *) {
--tw-scale-y: 1.04;
scale: var(--tw-scale-x) var(--tw-scale-y);
}
.group-hover\:opacity-90:is(:where(.group):hover *) {
opacity: 90%;
}
.group-hover\:opacity-100:is(:where(.group):hover *) {
opacity: 100%;
}
}
.group-focus-visible\:scale-y-\[1\.04\]:is(:where(.group):focus-visible *) {
--tw-scale-y: 1.04;
scale: var(--tw-scale-x) var(--tw-scale-y);
}
.group-focus-visible\:opacity-90:is(:where(.group):focus-visible *) {
opacity: 90%;
}
.group-focus-visible\:opacity-100:is(:where(.group):focus-visible *) {
opacity: 100%;
}
.group-active\:translate-y-\[0\.5px\]:is(:where(.group):active *) {
--tw-translate-y: 0.5px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.group-active\:scale-y-\[0\.82\]:is(:where(.group):active *) {
--tw-scale-y: 0.82;
scale: var(--tw-scale-x) var(--tw-scale-y);
}
.group-active\:opacity-40:is(:where(.group):active *) {
opacity: 40%;
}
.group-active\:opacity-75:is(:where(.group):active *) {
opacity: 75%;
}
.group-active\:duration-\[140ms\]:is(:where(.group):active *) {
--tw-duration: 140ms;
transition-duration: 140ms;
}
@media (hover: hover) {
.hover\:-translate-y-px:hover {
--tw-translate-y: -1px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.hover\:\[box-shadow\:var\(--aqua-shadow-hover\)\]:hover {
box-shadow: var(--aqua-shadow-hover);
}
}
.focus-visible\:-translate-y-px:focus-visible {
--tw-translate-y: -1px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.focus-visible\:ring-2:focus-visible {
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
.focus-visible\:\[box-shadow\:var\(--aqua-shadow-focus\)\]:focus-visible {
box-shadow: var(--aqua-shadow-focus);
}
.focus-visible\:ring-white\/95:focus-visible {
--tw-ring-color: color-mix(in srgb, #fff 95%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-color: color-mix(in oklab, var(--color-white) 95%, transparent);
}
}
.focus-visible\:ring-offset-2:focus-visible {
--tw-ring-offset-width: 2px;
--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
}
.focus-visible\:ring-offset-sky-500\/90:focus-visible {
--tw-ring-offset-color: color-mix(in srgb, oklch(68.5% 0.169 237.323) 90%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-offset-color: color-mix(in oklab, var(--color-sky-500) 90%, transparent);
}
}
.active\:translate-y-0:active {
--tw-translate-y: 0px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.active\:scale-\[0\.97\]:active {
scale: 0.97;
}
.active\:\[box-shadow\:var\(--aqua-shadow-active\)\]:active {
box-shadow: var(--aqua-shadow-active);
}
.active\:duration-\[140ms\]:active {
--tw-duration: 140ms;
transition-duration: 140ms;
}
@media (prefers-reduced-motion: reduce) {
.motion-reduce\:transition-none {
transition-property: none;
}
@media (hover: hover) {
.motion-reduce\:group-hover\:scale-y-100:is(:where(.group):hover *) {
--tw-scale-y: 100%;
scale: var(--tw-scale-x) var(--tw-scale-y);
}
}
.motion-reduce\:group-focus-visible\:scale-y-100:is(:where(.group):focus-visible *) {
--tw-scale-y: 100%;
scale: var(--tw-scale-x) var(--tw-scale-y);
}
.motion-reduce\:group-active\:translate-y-0:is(:where(.group):active *) {
--tw-translate-y: 0px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.motion-reduce\:group-active\:scale-y-100:is(:where(.group):active *) {
--tw-scale-y: 100%;
scale: var(--tw-scale-x) var(--tw-scale-y);
}
@media (hover: hover) {
.motion-reduce\:hover\:translate-y-0:hover {
--tw-translate-y: 0px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
}
.motion-reduce\:focus-visible\:translate-y-0:focus-visible {
--tw-translate-y: 0px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.motion-reduce\:active\:scale-100:active {
--tw-scale-x: 100%;
--tw-scale-y: 100%;
--tw-scale-z: 100%;
scale: var(--tw-scale-x) var(--tw-scale-y);
}
}
.dark\:text-white:where(.dark, .dark *) {
color: var(--color-white);
}
.dark\:\[--aqua-bg\:linear-gradient\(rgb\(40\,_40\,_45\)\,_rgb\(22\,_22\,_28\)_55\%\,_rgb\(40\,_40\,_45\)\)\]:where(.dark, .dark *) {
--aqua-bg: linear-gradient(rgb(40, 40, 45), rgb(22, 22, 28) 55%, rgb(40, 40, 45));
}
.dark\:\[--aqua-bottom-highlight\:linear-gradient\(rgba\(255\,_255\,_255\,_0\.04\)\,_rgba\(255\,_255\,_255\,_0\.08\)\)\]:where(.dark, .dark *) {
--aqua-bottom-highlight: linear-gradient(rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.08));
}
.dark\:\[--aqua-shadow-active\:0_0\.0625em_0\.125em_rgba\(0\,_0\,_0\,_0\.4\)\,inset_0_0_0_1px_rgba\(255\,_255\,_255\,_0\.1\)\,inset_0_0\.25em_0\.5em_rgba\(0\,_0\,_0\,_0\.5\)\]:where(.dark, .dark *) {
--aqua-shadow-active: 0 0.0625em 0.125em rgba(0, 0, 0, 0.4),inset 0 0 0 1px rgba(255, 255, 255, 0.1),inset 0 0.25em 0.5em rgba(0, 0, 0, 0.5);
}
.dark\:\[--aqua-shadow-focus\:0_0\.25em_0\.375em_rgba\(0\,_0\,_0\,_0\.4\)\,inset_0_0_0_1px_rgba\(255\,_255\,_255\,_0\.08\)\,inset_0_0\.125em_0\.25em_rgba\(0\,_0\,_0\,_0\.3\)\,0_0_0_0\.125em_rgba\(255\,_255\,_255\,_0\.95\)\,0_0_0_0\.3125em_rgba\(100\,_120\,_255\,_0\.8\)\,0_0_1\.25em_0\.1875em_rgba\(80\,_100\,_255\,_0\.5\)\]:where(.dark, .dark *) {
--aqua-shadow-focus: 0 0.25em 0.375em rgba(0, 0, 0, 0.4),inset 0 0 0 1px rgba(255, 255, 255, 0.08),inset 0 0.125em 0.25em rgba(0, 0, 0, 0.3),0 0 0 0.125em rgba(255, 255, 255, 0.95),0 0 0 0.3125em rgba(100, 120, 255, 0.8),0 0 1.25em 0.1875em rgba(80, 100, 255, 0.5);
}
.dark\:\[--aqua-shadow-hover\:0_0\.25em_0\.375em_rgba\(0\,_0\,_0\,_0\.4\)\,inset_0_0_0_1px_rgba\(255\,_255\,_255\,_0\.08\)\,inset_0_0\.125em_0\.25em_rgba\(0\,_0\,_0\,_0\.3\)\,0_0_0\.875em_0\.0625em_rgba\(100\,_100\,_255\,_0\.2\)\]:where(.dark, .dark *) {
--aqua-shadow-hover: 0 0.25em 0.375em rgba(0, 0, 0, 0.4),inset 0 0 0 1px rgba(255, 255, 255, 0.08),inset 0 0.125em 0.25em rgba(0, 0, 0, 0.3),0 0 0.875em 0.0625em rgba(100, 100, 255, 0.2);
}
.dark\:\[--aqua-shadow\:0_0\.25em_0\.375em_rgba\(0\,_0\,_0\,_0\.4\)\,inset_0_0_0_1px_rgba\(255\,_255\,_255\,_0\.08\)\,inset_0_0\.125em_0\.25em_rgba\(0\,_0\,_0\,_0\.3\)\]:where(.dark, .dark *) {
--aqua-shadow: 0 0.25em 0.375em rgba(0, 0, 0, 0.4),inset 0 0 0 1px rgba(255, 255, 255, 0.08),inset 0 0.125em 0.25em rgba(0, 0, 0, 0.3);
}
.dark\:\[--aqua-text-shadow\:0_1px_2px_rgba\(0\,_0\,_0\,_0\.5\)\]:where(.dark, .dark *) {
--aqua-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
}
.dark\:\[--aqua-top-highlight\:linear-gradient\(rgba\(255\,_255\,_255\,_0\.12\)\,_rgba\(255\,_255\,_255\,_0\.03\)\)\]:where(.dark, .dark *) {
--aqua-top-highlight: linear-gradient(rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.03));
}
}
:root {
--background: #fff;
--foreground: #111;
--primary: #171717;
--primary-foreground: #fff;
--secondary: #eee;
--secondary-foreground: #171717;
--muted: #eee;
--muted-foreground: #666;
--accent: #eee;
--accent-foreground: #171717;
--border: #ddd;
--input: #ddd;
--ring: #777;
--destructive: #dc2626;
--destructive-foreground: #fff;
--popover: #fff;
--popover-foreground: #111;
--success: #15803d;
--success-foreground: #fff;
--radius: .625rem;
--hairline: 1px;
}
.dark {
--background: #090909;
--foreground: #fafafa;
--primary: #fafafa;
--primary-foreground: #171717;
--secondary: #262626;
--secondary-foreground: #fafafa;
--muted: #262626;
--muted-foreground: #a3a3a3;
--accent: #262626;
--accent-foreground: #fafafa;
--border: #333;
--input: #333;
--popover: #171717;
--popover-foreground: #fafafa;
}
:root {
--card: oklch(1 0 0);
--muted: oklch(0.97 0 0);
--muted-foreground: oklch(0.556 0 0);
--border: oklch(0.922 0 0);
--primary: oklch(0.205 0 0);
--card-foreground: oklch(0.145 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
--primary-foreground: oklch(0.985 0 0);
--secondary: oklch(0.97 0 0);
--secondary-foreground: oklch(0.205 0 0);
--accent: oklch(0.97 0 0);
--accent-foreground: oklch(0.205 0 0);
--destructive: oklch(0.577 0.245 27.325);
--input: oklch(0.922 0 0);
--ring: oklch(0.708 0 0);
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
--chart-3: oklch(0.439 0 0);
--chart-4: oklch(0.371 0 0);
--chart-5: oklch(0.269 0 0);
--radius: 0.625rem;
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.205 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.97 0 0);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
--background: oklch(1 0 0);
--foreground: oklch(0.145 0 0);
--chrome: oklch(0.967 0 0);
--brand: oklch(0.6 0.23 29);
--chart-background: oklch(1 0 0);
--chart-foreground: oklch(0.145 0.004 285);
--chart-foreground-muted: oklch(0.55 0.014 260);
--chart-line-primary: var(--chart-1);
--chart-line-secondary: var(--chart-2);
--chart-crosshair: oklch(0.4 0.1828 274.34);
--chart-grid: oklch(0.9 0 0);
--chart-brush-border: var(--chart-grid);
--chart-tooltip-background: oklch(0.21 0.006 285 / 0.8);
--chart-tooltip-foreground: oklch(0.985 0 0);
--chart-tooltip-muted: oklch(0.65 0.01 260);
--chart-marker-background: oklch(0.97 0.005 260);
--chart-marker-border: oklch(0.85 0.01 260);
--chart-marker-foreground: oklch(0.3 0.01 260);
--chart-label: oklch(0.45 0.01 260);
--chart-scale-01: oklch(0.98 0.003 106);
--chart-scale-02: oklch(0.92 0.008 106);
--chart-scale-03: oklch(0.82 0.015 106);
--chart-scale-04: oklch(0.68 0.02 106);
--chart-scale-05: oklch(0.55 0.025 106);
--chart-scale-pattern-color: oklch(0.96 0.005 106);
}
.dark {
--background: oklch(0.145 0 0);
--foreground: oklch(0.985 0 0);
--chrome: oklch(0.18 0 0);
--card: oklch(0.205 0 0);
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
--border: oklch(1 0 0 / 10%);
--primary: oklch(0.922 0 0);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.205 0 0);
--popover-foreground: oklch(0.985 0 0);
--primary-foreground: oklch(0.205 0 0);
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
--accent: oklch(0.269 0 0);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--input: oklch(1 0 0 / 15%);
--ring: oklch(0.556 0 0);
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
--chart-3: oklch(0.439 0 0);
--chart-4: oklch(0.371 0 0);
--chart-5: oklch(0.269 0 0);
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.922 0 0);
--sidebar-primary-foreground: oklch(0.205 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.556 0 0);
--brand: oklch(0.66 0.23 32);
--chart-background: oklch(0.145 0 0);
--chart-foreground: oklch(0.45 0 0);
--chart-foreground-muted: oklch(0.65 0.01 260);
--chart-crosshair: oklch(0.45 0 0);
--chart-grid: oklch(0.25 0 0);
--chart-brush-border: var(--chart-grid);
--chart-marker-background: oklch(0.25 0.01 260);
--chart-marker-border: oklch(0.4 0.01 260);
--chart-marker-foreground: oklch(0.9 0 0);
--chart-label: oklch(0.75 0.01 260);
--chart-scale-01: oklch(0.28 0.03 270);
--chart-scale-02: oklch(0.38 0.04 270);
--chart-scale-03: oklch(0.48 0.05 270);
--chart-scale-04: oklch(0.58 0.06 270);
--chart-scale-05: oklch(0.68 0.07 270);
--chart-scale-pattern-color: oklch(0.145 0 0);
}
@keyframes docs-dot-swing {
0%, 100% {
transform: translateX(0) scale(1);
}
45% {
transform: translateX(-6px) scale(0.7);
}
}
@keyframes hell-flicker {
0%, 100% {
opacity: 1;
}
41% {
opacity: 0.7;
}
43% {
opacity: 1;
}
77% {
opacity: 0.85;
}
78% {
opacity: 1;
}
}
@keyframes lights-off {
0% {
opacity: 0;
}
15% {
opacity: 1;
}
30% {
opacity: 0.2;
}
45% {
opacity: 1;
}
60% {
opacity: 0.5;
}
70%, 100% {
opacity: 1;
}
}
@keyframes lights-on {
0% {
opacity: 1;
}
20% {
opacity: 0;
}
32% {
opacity: 1;
}
50% {
opacity: 0.1;
}
60% {
opacity: 0.9;
}
75%, 100% {
opacity: 0;
}
}
@keyframes lights-fade {
to {
opacity: 0;
}
}
@keyframes eyes-dim {
from {
opacity: 0;
}
}
@keyframes eyes-open {
from {
opacity: 0;
transform: scaleY(0.05);
}
}
@keyframes eyes-blink {
0%, 92%, 100% {
transform: none;
}
95% {
transform: scaleY(0.08);
}
}
@keyframes crack-life {
0% {
opacity: 0;
transform: scale(0.92);
}
4% {
opacity: 1;
transform: none;
}
80% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes egg-wobble {
0%, 84%, 100% {
transform: none;
}
87% {
transform: rotate(-14deg);
}
90% {
transform: rotate(10deg);
}
93% {
transform: rotate(-6deg);
}
96% {
transform: rotate(3deg);
}
}
@keyframes page-glitch {
0% {
transform: none;
filter: none;
clip-path: none;
}
12% {
transform: translate(-6px, 2px) skewX(-2deg);
filter: hue-rotate(90deg) saturate(3);
}
24% {
transform: translate(5px, -1px);
filter: invert(1) hue-rotate(180deg);
clip-path: inset(18% 0 52% 0);
}
36% {
transform: none;
filter: contrast(2.2) saturate(0);
clip-path: none;
}
48% {
transform: translate(9px, 0) skewX(4deg);
filter: hue-rotate(-60deg);
clip-path: inset(0 0 70% 0);
}
60% {
transform: translate(-3px, 3px);
filter: none;
clip-path: inset(40% 0 20% 0);
}
72% {
transform: translate(2px, -4px) scaleY(1.02);
filter: saturate(4) contrast(1.4);
clip-path: none;
}
86% {
transform: translate(-8px, 0);
filter: invert(1);
clip-path: inset(62% 0 8% 0);
}
}
@keyframes glitch-label {
0% {
transform: translate(0, 0);
opacity: 1;
}
33% {
transform: translate(-4px, 2px);
opacity: 0.6;
}
66% {
transform: translate(5px, -2px);
opacity: 1;
}
}
@keyframes deleted-progress {
from {
width: 0;
}
to {
width: 100%;
}
}
@keyframes deleted-restore {
0%, 70% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes creeper-swell {
0% {
transform: scale(0.3) translateY(40px);
opacity: 0;
filter: none;
}
20% {
transform: scale(1);
opacity: 1;
}
45%, 65%, 85% {
filter: brightness(3) saturate(0);
}
55%, 75% {
filter: none;
}
100% {
transform: scale(1.35);
filter: brightness(4) saturate(0);
}
}
@keyframes creeper-flash {
from {
opacity: 0.85;
}
to {
opacity: 0;
}
}
@property --tw-translate-x {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-y {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-z {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-font-weight {
syntax: "*";
inherits: false;
}
@property --tw-tracking {
syntax: "*";
inherits: false;
}
@property --tw-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-shadow-color {
syntax: "*";
inherits: false;
}
@property --tw-shadow-alpha {
syntax: "<percentage>";
inherits: false;
initial-value: 100%;
}
@property --tw-inset-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-inset-shadow-color {
syntax: "*";
inherits: false;
}
@property --tw-inset-shadow-alpha {
syntax: "<percentage>";
inherits: false;
initial-value: 100%;
}
@property --tw-ring-color {
syntax: "*";
inherits: false;
}
@property --tw-ring-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-inset-ring-color {
syntax: "*";
inherits: false;
}
@property --tw-inset-ring-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-ring-inset {
syntax: "*";
inherits: false;
}
@property --tw-ring-offset-width {
syntax: "<length>";
inherits: false;
initial-value: 0px;
}
@property --tw-ring-offset-color {
syntax: "*";
inherits: false;
initial-value: #fff;
}
@property --tw-ring-offset-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-blur {
syntax: "*";
inherits: false;
}
@property --tw-brightness {
syntax: "*";
inherits: false;
}
@property --tw-contrast {
syntax: "*";
inherits: false;
}
@property --tw-grayscale {
syntax: "*";
inherits: false;
}
@property --tw-hue-rotate {
syntax: "*";
inherits: false;
}
@property --tw-invert {
syntax: "*";
inherits: false;
}
@property --tw-opacity {
syntax: "*";
inherits: false;
}
@property --tw-saturate {
syntax: "*";
inherits: false;
}
@property --tw-sepia {
syntax: "*";
inherits: false;
}
@property --tw-drop-shadow {
syntax: "*";
inherits: false;
}
@property --tw-drop-shadow-color {
syntax: "*";
inherits: false;
}
@property --tw-drop-shadow-alpha {
syntax: "<percentage>";
inherits: false;
initial-value: 100%;
}
@property --tw-drop-shadow-size {
syntax: "*";
inherits: false;
}
@property --tw-duration {
syntax: "*";
inherits: false;
}
@property --tw-scale-x {
syntax: "*";
inherits: false;
initial-value: 1;
}
@property --tw-scale-y {
syntax: "*";
inherits: false;
initial-value: 1;
}
@property --tw-scale-z {
syntax: "*";
inherits: false;
initial-value: 1;
}
@layer properties {
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
*, ::before, ::after, ::backdrop {
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-translate-z: 0;
--tw-font-weight: initial;
--tw-tracking: initial;
--tw-shadow: 0 0 #0000;
--tw-shadow-color: initial;
--tw-shadow-alpha: 100%;
--tw-inset-shadow: 0 0 #0000;
--tw-inset-shadow-color: initial;
--tw-inset-shadow-alpha: 100%;
--tw-ring-color: initial;
--tw-ring-shadow: 0 0 #0000;
--tw-inset-ring-color: initial;
--tw-inset-ring-shadow: 0 0 #0000;
--tw-ring-inset: initial;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-offset-shadow: 0 0 #0000;
--tw-blur: initial;
--tw-brightness: initial;
--tw-contrast: initial;
--tw-grayscale: initial;
--tw-hue-rotate: initial;
--tw-invert: initial;
--tw-opacity: initial;
--tw-saturate: initial;
--tw-sepia: initial;
--tw-drop-shadow: initial;
--tw-drop-shadow-color: initial;
--tw-drop-shadow-alpha: 100%;
--tw-drop-shadow-size: initial;
--tw-duration: initial;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-scale-z: 1;
}
}
}