Files
zmAI/demo/frontend/src/styles/ui-ux-pro-max.css

895 lines
18 KiB
CSS

/* UI-UX-Pro-Max Design System */
:root {
/* ========== Color Palette ========== */
--color-primary: #6366F1; /* Indigo */
--color-primary-light: #818CF8;
--color-primary-dark: #4F46E5;
--color-primary-50: #EEF2FF;
--color-primary-100: #E0E7FF;
--color-primary-200: #C7D2FE;
--color-primary-300: #A5B4FC;
--color-primary-400: #818CF8;
--color-primary-500: #6366F1;
--color-primary-600: #4F46E5;
--color-primary-700: #4338CA;
--color-primary-800: #3730A3;
--color-primary-900: #312E81;
--color-secondary: #10B981; /* Emerald */
--color-secondary-light: #34D399;
--color-secondary-dark: #059669;
--color-accent: #F59E0B; /* Amber */
--color-accent-light: #FBBF24;
--color-accent-dark: #D97706;
--color-danger: #EF4444; /* Red */
--color-danger-light: #FCA5A5;
--color-danger-dark: #DC2626;
--color-warning: #F59E0B; /* Amber */
--color-success: #10B981; /* Emerald */
--color-info: #3B82F6; /* Blue */
/* ========== Neutral Colors ========== */
--color-background: #0F172A;
--color-surface: rgba(255, 255, 255, 0.06);
--color-surface-hover: rgba(255, 255, 255, 0.08);
--color-surface-active: rgba(255, 255, 255, 0.12);
--color-text-primary: #F1F5F9;
--color-text-secondary: #94A3B8;
--color-text-tertiary: #64748B;
--color-text-quaternary: #475569;
--color-border: rgba(255, 255, 255, 0.12);
--color-border-light: rgba(255, 255, 255, 0.08);
--color-border-dark: rgba(255, 255, 255, 0.16);
/* ========== Fonts ========== */
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
/* ========== Font Sizes ========== */
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.875rem; /* 14px */
--text-base: 1rem; /* 16px */
--text-lg: 1.125rem; /* 18px */
--text-xl: 1.25rem; /* 20px */
--text-2xl: 1.5rem; /* 24px */
--text-3xl: 1.875rem; /* 30px */
--text-4xl: 2.25rem; /* 36px */
--text-5xl: 3rem; /* 48px */
/* ========== Font Weights ========== */
--font-light: 300;
--font-normal: 400;
--font-medium: 500;
--font-semibold: 600;
--font-bold: 700;
--font-extrabold: 800;
/* ========== Line Heights ========== */
--leading-tight: 1.25;
--leading-snug: 1.375;
--leading-normal: 1.5;
--leading-relaxed: 1.625;
--leading-loose: 2;
/* ========== Letter Spacing ========== */
--tracking-tighter: -0.05em;
--tracking-tight: -0.025em;
--tracking-normal: 0em;
--tracking-wide: 0.025em;
--tracking-wider: 0.05em;
--tracking-widest: 0.1em;
/* ========== Spacing ========== */
--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-3: 0.75rem; /* 12px */
--space-4: 1rem; /* 16px */
--space-5: 1.25rem; /* 20px */
--space-6: 1.5rem; /* 24px */
--space-7: 1.75rem; /* 28px */
--space-8: 2rem; /* 32px */
--space-9: 2.25rem; /* 36px */
--space-10: 2.5rem; /* 40px */
--space-12: 3rem; /* 48px */
--space-16: 4rem; /* 64px */
--space-20: 5rem; /* 80px */
--space-24: 6rem; /* 96px */
--space-32: 8rem; /* 128px */
/* ========== Border Radius ========== */
--radius-sm: 0.125rem; /* 2px */
--radius-md: 0.375rem; /* 6px */
--radius-lg: 0.5rem; /* 8px */
--radius-xl: 0.75rem; /* 12px */
--radius-2xl: 1rem; /* 16px */
--radius-3xl: 1.5rem; /* 24px */
--radius-full: 9999px;
/* ========== Shadows ========== */
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
/* ========== Glow Effects ========== */
--glow-primary: 0 0 15px rgba(99, 102, 241, 0.5);
--glow-secondary: 0 0 15px rgba(16, 185, 129, 0.5);
--glow-accent: 0 0 15px rgba(245, 158, 11, 0.5);
--glow-danger: 0 0 15px rgba(239, 68, 68, 0.5);
/* ========== Transitions ========== */
--transition-none: none;
--transition-fast: 150ms ease-in-out;
--transition-normal: 250ms ease-in-out;
--transition-slow: 350ms ease-in-out;
--transition-all: all var(--transition-normal);
--transition-colors: color var(--transition-normal), background-color var(--transition-normal), border-color var(--transition-normal), text-decoration-color var(--transition-normal), fill var(--transition-normal), stroke var(--transition-normal);
--transition-transform: transform var(--transition-normal);
--transition-opacity: opacity var(--transition-normal);
--transition-shadow: box-shadow var(--transition-normal);
--transition-border: border-color var(--transition-normal), box-shadow var(--transition-normal);
/* ========== Z-Index ========== */
--z-dropdown: 1000;
--z-sticky: 1020;
--z-fixed: 1030;
--z-modal-backdrop: 1040;
--z-modal: 1050;
--z-popover: 1060;
--z-tooltip: 1070;
--z-toast: 1080;
/* ========== Breakpoints ========== */
--breakpoint-sm: 640px;
--breakpoint-md: 768px;
--breakpoint-lg: 1024px;
--breakpoint-xl: 1280px;
--breakpoint-2xl: 1536px;
/* ========== Animations ========== */
--ease-linear: linear;
--ease-in: cubic-bezier(0.4, 0, 1, 1);
--ease-out: cubic-bezier(0, 0, 0.2, 1);
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
/* ========== Glass Morphism ========== */
/* Surface layers — from subtle to heavy */
--glass-subtle: rgba(255, 255, 255, 0.03);
--glass-surface: rgba(255, 255, 255, 0.06);
--glass-light: rgba(255, 255, 255, 0.08);
--glass-medium: rgba(255, 255, 255, 0.12);
--glass-heavy: rgba(255, 255, 255, 0.18);
--glass-solid: rgba(15, 23, 42, 0.75);
/* Backdrop blur levels */
--glass-blur-sm: blur(8px);
--glass-blur-md: blur(16px);
--glass-blur: blur(24px);
--glass-blur-lg: blur(40px);
--glass-blur-xl: blur(64px);
/* Borders */
--glass-border-subtle: rgba(255, 255, 255, 0.06);
--glass-border: rgba(255, 255, 255, 0.10);
--glass-border-strong: rgba(255, 255, 255, 0.16);
/* Glass shadow — soft halo effect */
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.05);
--glass-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.06);
/* Shorthand backdrop (kept for backward compat) */
--glass-backdrop: blur(24px) saturate(180%);
}
/* ========== Base Styles ========== */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 16px;
line-height: 1.5;
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: transparent;
}
body {
font-family: var(--font-sans);
font-size: var(--text-base);
font-weight: var(--font-normal);
line-height: var(--leading-normal);
color: var(--color-text-primary);
background-color: var(--color-background);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* ========== Typography ========== */
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-sans);
font-weight: var(--font-bold);
line-height: var(--leading-tight);
color: var(--color-text-primary);
margin-bottom: var(--space-4);
}
h1 {
font-size: var(--text-4xl);
}
h2 {
font-size: var(--text-3xl);
}
h3 {
font-size: var(--text-2xl);
}
h4 {
font-size: var(--text-xl);
}
h5 {
font-size: var(--text-lg);
}
h6 {
font-size: var(--text-base);
}
p {
margin-bottom: var(--space-4);
color: var(--color-text-secondary);
}
a {
color: var(--color-primary);
text-decoration: none;
transition: var(--transition-colors);
}
a:hover {
color: var(--color-primary-light);
text-decoration: underline;
}
/* ========== Buttons ========== */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
padding: var(--space-3) var(--space-6);
font-family: var(--font-sans);
font-size: var(--text-base);
font-weight: var(--font-medium);
line-height: 1;
color: var(--color-text-primary);
background-color: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius-lg);
cursor: pointer;
transition: var(--transition-all);
text-align: center;
white-space: nowrap;
user-select: none;
}
.btn:hover {
background-color: var(--color-surface-hover);
border-color: var(--color-border-dark);
transform: translateY(-1px);
}
.btn:active {
transform: translateY(0);
}
.btn:focus {
outline: none;
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
}
.btn:disabled {
opacity: 0.6;
cursor: not-allowed;
transform: none;
}
/* ========== Button Variants ========== */
.btn-primary {
background-color: var(--color-primary);
border-color: var(--color-primary);
color: white;
}
.btn-primary:hover {
background-color: var(--color-primary-dark);
border-color: var(--color-primary-dark);
box-shadow: var(--glow-primary);
}
.btn-secondary {
background-color: var(--color-secondary);
border-color: var(--color-secondary);
color: white;
}
.btn-secondary:hover {
background-color: var(--color-secondary-dark);
border-color: var(--color-secondary-dark);
box-shadow: var(--glow-secondary);
}
.btn-accent {
background-color: var(--color-accent);
border-color: var(--color-accent);
color: white;
}
.btn-accent:hover {
background-color: var(--color-accent-dark);
border-color: var(--color-accent-dark);
box-shadow: var(--glow-accent);
}
.btn-danger {
background-color: var(--color-danger);
border-color: var(--color-danger);
color: white;
}
.btn-danger:hover {
background-color: var(--color-danger-dark);
border-color: var(--color-danger-dark);
box-shadow: var(--glow-danger);
}
.btn-outline {
background-color: transparent;
border-color: var(--color-border);
color: var(--color-text-primary);
}
.btn-outline:hover {
background-color: var(--color-surface-hover);
border-color: var(--color-border-dark);
}
.btn-ghost {
background-color: transparent;
border-color: transparent;
color: var(--color-text-primary);
}
.btn-ghost:hover {
background-color: var(--color-surface-hover);
border-color: transparent;
}
/* ========== Button Sizes ========== */
.btn-sm {
padding: var(--space-2) var(--space-4);
font-size: var(--text-sm);
border-radius: var(--radius-md);
}
.btn-md {
padding: var(--space-3) var(--space-6);
font-size: var(--text-base);
border-radius: var(--radius-lg);
}
.btn-lg {
padding: var(--space-4) var(--space-8);
font-size: var(--text-lg);
border-radius: var(--radius-xl);
}
.btn-xl {
padding: var(--space-5) var(--space-10);
font-size: var(--text-xl);
border-radius: var(--radius-2xl);
}
/* ========== Inputs ========== */
.input {
width: 100%;
padding: var(--space-3) var(--space-4);
font-family: var(--font-sans);
font-size: var(--text-base);
font-weight: var(--font-normal);
line-height: 1.5;
color: var(--color-text-primary);
background-color: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius-lg);
transition: var(--transition-border);
outline: none;
}
.input:hover {
border-color: var(--color-border-dark);
}
.input:focus {
border-color: var(--color-primary);
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
}
.input::placeholder {
color: var(--color-text-tertiary);
}
.input:disabled {
opacity: 0.6;
cursor: not-allowed;
}
/* ========== Input Sizes ========== */
.input-sm {
padding: var(--space-2) var(--space-3);
font-size: var(--text-sm);
border-radius: var(--radius-md);
}
.input-md {
padding: var(--space-3) var(--space-4);
font-size: var(--text-base);
border-radius: var(--radius-lg);
}
.input-lg {
padding: var(--space-4) var(--space-5);
font-size: var(--text-lg);
border-radius: var(--radius-xl);
}
/* ========== Cards ========== */
.card {
background-color: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius-xl);
padding: var(--space-6);
box-shadow: var(--shadow-md);
transition: var(--transition-all);
}
.card:hover {
box-shadow: var(--shadow-lg);
transform: translateY(-2px);
}
.card-header {
margin-bottom: var(--space-4);
}
.card-title {
font-size: var(--text-xl);
font-weight: var(--font-semibold);
color: var(--color-text-primary);
margin-bottom: var(--space-2);
}
.card-subtitle {
font-size: var(--text-sm);
color: var(--color-text-secondary);
}
.card-body {
margin-bottom: var(--space-4);
}
.card-footer {
display: flex;
align-items: center;
justify-content: flex-end;
gap: var(--space-3);
padding-top: var(--space-4);
border-top: 1px solid var(--color-border-light);
}
/* ========== Tabs ========== */
.tabs {
display: flex;
align-items: center;
gap: var(--space-1);
margin-bottom: var(--space-6);
border-bottom: 1px solid var(--color-border-light);
}
.tab {
padding: var(--space-3) var(--space-4);
font-family: var(--font-sans);
font-size: var(--text-base);
font-weight: var(--font-medium);
color: var(--color-text-secondary);
background-color: transparent;
border: none;
border-bottom: 2px solid transparent;
border-radius: var(--radius-md) var(--radius-md) 0 0;
cursor: pointer;
transition: var(--transition-all);
position: relative;
overflow: hidden;
}
.tab:hover {
color: var(--color-text-primary);
background-color: var(--color-surface-hover);
}
.tab.active {
color: var(--color-primary);
border-bottom-color: var(--color-primary);
}
.tab.active::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 2px;
background-color: var(--color-primary);
animation: tabSlideIn 0.3s var(--ease-out);
}
/* ========== Animations ========== */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideIn {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0);
}
}
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
@keyframes breathe {
0%, 100% {
transform: scale(1);
opacity: 0.6;
}
50% {
transform: scale(1.1);
opacity: 0.8;
}
}
@keyframes shimmer {
0% {
background-position: -1000px 0;
}
100% {
background-position: 1000px 0;
}
}
@keyframes tabSlideIn {
from {
width: 0;
left: 50%;
}
to {
width: 100%;
left: 0;
}
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes bounce {
0%, 20%, 53%, 80%, 100% {
animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
transform: translate3d(0,0,0);
}
40%, 43% {
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transform: translate3d(0, -8px, 0);
}
70% {
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transform: translate3d(0, -4px, 0);
}
90% {
transform: translate3d(0,-2px,0);
}
}
/* ========== Utilities ========== */
.fade-in {
animation: fadeIn 0.5s var(--ease-out) both;
}
.pulse {
animation: pulse 2s var(--ease-in-out) infinite;
}
.breathe {
animation: breathe 4s var(--ease-in-out) infinite;
}
.spin {
animation: spin 1s var(--ease-linear) infinite;
}
.bounce {
animation: bounce 1s var(--ease-out);
}
/* ========== Flex Utilities ========== */
.flex {
display: flex;
}
.flex-col {
flex-direction: column;
}
.items-center {
align-items: center;
}
.justify-center {
justify-content: center;
}
.justify-between {
justify-content: space-between;
}
.gap-2 {
gap: var(--space-2);
}
.gap-4 {
gap: var(--space-4);
}
.gap-6 {
gap: var(--space-6);
}
/* ========== Text Utilities ========== */
.text-center {
text-align: center;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-primary {
color: var(--color-primary);
}
.text-secondary {
color: var(--color-secondary);
}
.text-danger {
color: var(--color-danger);
}
.text-warning {
color: var(--color-warning);
}
.text-success {
color: var(--color-success);
}
.text-sm {
font-size: var(--text-sm);
}
.text-base {
font-size: var(--text-base);
}
.text-lg {
font-size: var(--text-lg);
}
.text-xl {
font-size: var(--text-xl);
}
.font-medium {
font-weight: var(--font-medium);
}
.font-semibold {
font-weight: var(--font-semibold);
}
.font-bold {
font-weight: var(--font-bold);
}
/* ========== Spacing Utilities ========== */
.m-0 {
margin: 0;
}
.m-4 {
margin: var(--space-4);
}
.mb-4 {
margin-bottom: var(--space-4);
}
.mt-4 {
margin-top: var(--space-4);
}
.p-0 {
padding: 0;
}
.p-4 {
padding: var(--space-4);
}
.py-4 {
padding-top: var(--space-4);
padding-bottom: var(--space-4);
}
.px-4 {
padding-left: var(--space-4);
padding-right: var(--space-4);
}
/* ========== Responsive Utilities ========== */
@media (max-width: 768px) {
.md\:hidden {
display: none;
}
.md\:block {
display: block;
}
.md\:flex {
display: flex;
}
.md\:items-center {
align-items: center;
}
.md\:justify-center {
justify-content: center;
}
}
@media (max-width: 640px) {
.sm\:hidden {
display: none;
}
.sm\:block {
display: block;
}
.sm\:flex {
display: flex;
}
.sm\:items-center {
align-items: center;
}
.sm\:justify-center {
justify-content: center;
}
}
/* ========== Accessibility ========== */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
/* ========== Print Styles ========== */
@media print {
*, *::before, *::after {
background: #fff !important;
color: #000 !important;
box-shadow: none !important;
text-shadow: none !important;
}
a, a:visited {
text-decoration: underline;
}
a[href]::after {
content: " (" attr(href) ")";
}
@page {
margin: 1cm;
}
}
/* ========== Dark Mode Optimization ========== */
@media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
}
body {
color-scheme: dark;
}
}
/* ========== End of UI-UX-Pro-Max Design System ========== */