Packages

24 accessible Phoenix LiveView components. Requires Tailwind v4 + Phoenix 1.8. Dark mode, shadcn-style installer. Free forever, MIT licensed.

Current section

Files

Jump to
aven_ui assets css avenui.css
Raw

assets/css/avenui.css

/*
* AvenUI Design Tokens
* =====================
* Import this file in your app.css AFTER tailwind base/components:
*
* @import "../../deps/aven_ui/assets/css/avenui.css";
*
* Or with Tailwind v4 (css-first):
* @import "aven_ui/assets/css/avenui.css";
*/
/* ─────────────────────────────────────────────
1. CSS Custom Properties (Design Tokens)
───────────────────────────────────────────── */
:root {
/* Brand */
--avn-purple-50: #f5f3ff;
--avn-purple-100: #ede9fe;
--avn-purple-200: #ddd6fe;
--avn-purple-400: #a78bfa;
--avn-purple-500: #8b5cf6;
--avn-purple-600: #7c3aed; /* Primary */
--avn-purple-700: #6d28d9;
--avn-purple-800: #5b21b6;
--avn-purple-900: #4c1d95;
/* Backgrounds */
--avn-background: #ffffff;
--avn-card: #ffffff;
--avn-muted: #f8f8f7;
--avn-muted-hover: #f1f0ef;
/* Foregrounds */
--avn-foreground: #0f0f0e;
--avn-muted-foreground: #737370;
--avn-placeholder: #a3a39f;
/* Borders */
--avn-border: rgba(0, 0, 0, 0.10);
--avn-border-focus: var(--avn-purple-600);
/* Radius */
--avn-radius: 6px;
--avn-radius-lg: 10px;
--avn-radius-xl: 14px;
--avn-radius-full: 9999px;
/* Shadows (performance-safe: composited on GPU) */
--avn-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
--avn-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.08), 0 1px 2px -1px rgb(0 0 0 / 0.05);
--avn-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.07), 0 2px 4px -2px rgb(0 0 0 / 0.05);
/* Z-index scale */
--avn-z-dropdown: 1000;
--avn-z-sticky: 1100;
--avn-z-overlay: 1200;
--avn-z-modal: 1300;
--avn-z-toast: 1400;
--avn-z-tooltip: 1500;
}
/* ─────────────────────────────────────────────
2. Dark Mode Tokens
───────────────────────────────────────────── */
.dark, [data-theme="dark"] {
--avn-background: #0e0e0d;
--avn-card: #161615;
--avn-muted: #1d1d1c;
--avn-muted-hover: #252523;
--avn-foreground: #f5f5f4;
--avn-muted-foreground: #8a8a85;
--avn-placeholder: #5a5a56;
--avn-border: rgba(255, 255, 255, 0.09);
}
/* ─────────────────────────────────────────────
3. Tailwind CSS v3 — theme() extension via
tailwind.config.js (reference only here)
───────────────────────────────────────────── */
/*
Add to your tailwind.config.js:
theme: {
extend: {
colors: {
"avn-purple": "var(--avn-purple-600)",
"avn-purple-dark": "var(--avn-purple-700)",
"avn-background": "var(--avn-background)",
"avn-card": "var(--avn-card)",
"avn-foreground": "var(--avn-foreground)",
"avn-muted": "var(--avn-muted)",
"avn-muted-foreground": "var(--avn-muted-foreground)",
"avn-border": "var(--avn-border)",
},
borderRadius: {
"elx": "var(--avn-radius)",
"avn-lg": "var(--avn-radius-lg)",
"avn-xl": "var(--avn-radius-xl)",
},
ringColor: {
"avn-purple": "var(--avn-purple-600)",
}
}
}
*/
/* ─────────────────────────────────────────────
4. Tailwind v4 CSS-first theme (optional)
Use this block if you're on Tailwind v4
───────────────────────────────────────────── */
/*
@theme {
--color-avn-purple: var(--avn-purple-600);
--color-avn-purple-dark: var(--avn-purple-700);
--color-avn-background: var(--avn-background);
--color-avn-card: var(--avn-card);
--color-avn-foreground: var(--avn-foreground);
--color-avn-muted: var(--avn-muted);
--color-avn-muted-foreground: var(--avn-muted-foreground);
--color-avn-border: var(--avn-border);
--radius-elx: var(--avn-radius);
--radius-avn-lg: var(--avn-radius-lg);
}
*/
/* ─────────────────────────────────────────────
5. Base resets (performance-safe)
───────────────────────────────────────────── */
/* Smooth color transitions for dark mode toggle */
*,
*::before,
*::after {
/* Only transition color props, never layout — avoids layout thrashing */
transition-property: color, background-color, border-color, outline-color, fill, stroke;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 100ms;
}
/* Remove transitions on motion-sensitive users */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
/* Focus styles — visible only for keyboard navigation */
:focus { outline: none; }
:focus-visible {
outline: 2px solid var(--avn-purple-600);
outline-offset: 2px;
}
/* ─────────────────────────────────────────────
6. Utility classes (non-Tailwind fallback)
Used by components when Tailwind is absent
───────────────────────────────────────────── */
.avn-card {
background: var(--avn-card);
border: 1px solid var(--avn-border);
border-radius: var(--avn-radius-lg);
}
.avn-input {
width: 100%;
padding: 0.5rem 0.75rem;
background: var(--avn-background);
border: 1px solid var(--avn-border);
border-radius: var(--avn-radius);
color: var(--avn-foreground);
font-size: 0.875rem;
line-height: 1.5;
transition: border-color 150ms, box-shadow 150ms;
}
.avn-input:focus {
border-color: var(--avn-purple-600);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--avn-purple-600) 20%, transparent);
outline: none;
}
/* ─────────────────────────────────────────────
7. LiveView-specific performance helpers
───────────────────────────────────────────── */
/*
Prevent layout shifts during LiveView patch cycles.
Applied on phx-update="append" and "stream" containers.
*/
[phx-update="stream"] > * {
/* Promote to GPU layer to avoid repaint storms on stream inserts */
will-change: auto;
contain: layout style;
}
/*
Prevent FOUC during phx-loading states.
Phoenix adds phx-loading class to the <html> element on navigation.
*/
.phx-loading [data-avn-page-content] {
opacity: 0.6;
pointer-events: none;
transition: opacity 200ms;
}
/* Toast / flash positioning (used with Flash component) */
.avn-flash-container {
position: fixed;
bottom: 1.5rem;
right: 1.5rem;
display: flex;
flex-direction: column;
gap: 0.75rem;
z-index: var(--avn-z-toast);
pointer-events: none;
}
.avn-flash-container > * {
pointer-events: auto;
}