@@ -144,13 +150,13 @@ function MediaGallery({ kaNumber, token, onInsertMedia, isOpen, onToggle }) {
+
diff --git a/client/kb-frontend/src/components/SearchBar.css b/client/kb-frontend/src/components/SearchBar.css
new file mode 100644
index 0000000..346bf87
--- /dev/null
+++ b/client/kb-frontend/src/components/SearchBar.css
@@ -0,0 +1,70 @@
+/* SearchBar Component Styles */
+
+.search-bar {
+ padding: var(--spacing-xl) var(--spacing-2xl);
+ background-color: var(--color-background);
+ border-bottom: 1px solid var(--color-border);
+}
+
+.search-bar form {
+ display: flex;
+ gap: var(--spacing-md);
+ max-width: 800px;
+ margin: 0 auto;
+}
+
+.search-bar input[type="text"] {
+ flex: 1;
+ padding: var(--spacing-md) var(--spacing-lg);
+ font-size: var(--font-size-base);
+ border: 1px solid var(--color-border);
+ border-radius: var(--radius-sm);
+ background-color: var(--color-background);
+ transition: border-color var(--transition-base);
+}
+
+.search-bar input[type="text"]:focus {
+ outline: none;
+ border-color: var(--color-primary);
+ box-shadow: 0 0 0 3px var(--color-primary-light);
+}
+
+.search-bar input[type="text"]::placeholder {
+ color: var(--color-text-muted);
+}
+
+.search-bar button[type="submit"] {
+ padding: var(--spacing-md) var(--spacing-2xl);
+ background-color: var(--color-primary);
+ color: var(--color-text-inverse);
+ border: none;
+ border-radius: var(--radius-sm);
+ font-size: var(--font-size-base);
+ font-weight: var(--font-weight-medium);
+ cursor: pointer;
+ transition: background-color var(--transition-base);
+ white-space: nowrap;
+}
+
+.search-bar button[type="submit"]:hover {
+ background-color: var(--color-primary-hover);
+}
+
+.search-bar button[type="submit"]:active {
+ transform: translateY(1px);
+}
+
+/* Responsive */
+@media (max-width: 640px) {
+ .search-bar {
+ padding: var(--spacing-lg);
+ }
+
+ .search-bar form {
+ flex-direction: column;
+ }
+
+ .search-bar button[type="submit"] {
+ width: 100%;
+ }
+}
\ No newline at end of file
diff --git a/client/kb-frontend/src/components/SearchBar.jsx b/client/kb-frontend/src/components/SearchBar.jsx
index 174b6c1..e10956e 100644
--- a/client/kb-frontend/src/components/SearchBar.jsx
+++ b/client/kb-frontend/src/components/SearchBar.jsx
@@ -1,5 +1,6 @@
//import 'SearchBar.css'
import { useState } from 'react';
+import './SearchBar.css';
function SearchBar({ onSearch }) {
const [query, setQuery] = useState('');
@@ -16,15 +17,10 @@ function SearchBar({ onSearch }) {
type='text'
placeholder='Search articles by title, content, or KA number...'
value={query}
- onChange={(e) => setQuery(e.target.value)}
-
- /* USer this for instant search
onChange={(e) => {
setQuery(e.target.value);
onSearch(e.target.value);
}}
- */
-
/>
diff --git a/client/kb-frontend/src/index.css b/client/kb-frontend/src/index.css
index 08a3ac9..970222d 100644
--- a/client/kb-frontend/src/index.css
+++ b/client/kb-frontend/src/index.css
@@ -1,68 +1,60 @@
+/* Base Reset & Typography */
+* {
+ box-sizing: border-box;
+}
+
:root {
- font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
+ font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
-
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
+
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-a:hover {
- color: #535bf2;
-}
-
body {
margin: 0;
- display: flex;
- place-items: center;
min-width: 320px;
min-height: 100vh;
+ background-color: var(--color-background);
+ color: var(--color-text-primary);
+}
+
+h1, h2, h3, h4, h5, h6 {
+ line-height: 1.2;
+ margin-top: 0;
}
h1 {
- font-size: 3.2em;
+ font-size: 2rem;
line-height: 1.1;
}
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-button:hover {
- border-color: #646cff;
-}
-button:focus,
-button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
+a {
+ color: var(--color-primary);
+ text-decoration: none;
+ transition: color var(--transition-base);
}
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- a:hover {
- color: #747bff;
- }
- button {
- background-color: #f9f9f9;
- }
+a:hover {
+ color: var(--color-primary-hover);
}
+
+/* Remove default button styles - our .btn class will handle it */
+button {
+ font-family: inherit;
+}
+
+/* App container */
+#root {
+ min-height: 100vh;
+}
+
+/* Override Vite's centered layout */
+.app {
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+}
\ No newline at end of file
diff --git a/client/kb-frontend/src/styles/shared.css b/client/kb-frontend/src/styles/shared.css
index e69de29..60d64a3 100644
--- a/client/kb-frontend/src/styles/shared.css
+++ b/client/kb-frontend/src/styles/shared.css
@@ -0,0 +1,599 @@
+/* Cram-A-Lot Knowledge Base - Shared Component Styles */
+/* Import this in your main.jsx or index.jsx after variables.css */
+
+/* ===== BUTTONS ===== */
+
+/* Base button styles */
+.btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: var(--spacing-sm);
+ padding: var(--spacing-md) var(--spacing-xl);
+ font-size: var(--font-size-base);
+ font-weight: var(--font-weight-medium);
+ line-height: 1;
+ border: none;
+ border-radius: var(--radius-sm);
+ cursor: pointer;
+ transition: all var(--transition-base);
+ text-decoration: none;
+ white-space: nowrap;
+}
+
+.btn:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+}
+
+/* Button sizes */
+.btn-sm {
+ padding: var(--spacing-sm) var(--spacing-lg);
+ font-size: var(--font-size-sm);
+}
+
+.btn-lg {
+ padding: var(--spacing-lg) var(--spacing-2xl);
+ font-size: var(--font-size-lg);
+}
+
+/* Button variants */
+.btn-primary {
+ background-color: var(--color-primary);
+ color: var(--color-text-inverse);
+}
+
+.btn-primary:hover:not(:disabled) {
+ background-color: var(--color-primary-hover);
+}
+
+.btn-success {
+ background-color: var(--color-success);
+ color: var(--color-text-inverse);
+}
+
+.btn-success:hover:not(:disabled) {
+ background-color: var(--color-success-hover);
+}
+
+.btn-danger {
+ background-color: var(--color-danger);
+ color: var(--color-text-inverse);
+}
+
+.btn-danger:hover:not(:disabled) {
+ background-color: var(--color-danger-hover);
+}
+
+.btn-secondary {
+ background-color: var(--color-dark-light);
+ color: var(--color-text-inverse);
+}
+
+.btn-secondary:hover:not(:disabled) {
+ background-color: var(--color-dark-hover);
+}
+
+.btn-ghost {
+ background-color: transparent;
+ color: var(--color-text-primary);
+ border: 1px solid var(--color-border);
+}
+
+.btn-ghost:hover:not(:disabled) {
+ background-color: var(--color-gray-200);
+ border-color: var(--color-gray-400);
+}
+
+.btn-link {
+ background: none;
+ border: none;
+ color: var(--color-primary);
+ text-decoration: underline;
+ padding: 0;
+}
+
+.btn-link:hover:not(:disabled) {
+ color: var(--color-primary-hover);
+}
+
+/* Button groups */
+.btn-group {
+ display: flex;
+ gap: var(--spacing-lg);
+ align-items: center;
+}
+
+/* ===== BADGES ===== */
+
+.badge {
+ display: inline-flex;
+ align-items: center;
+ gap: var(--spacing-sm);
+ padding: var(--spacing-sm) var(--spacing-md);
+ border-radius: var(--radius-2xl);
+ font-size: var(--font-size-sm);
+ font-weight: var(--font-weight-medium);
+ line-height: 1;
+ white-space: nowrap;
+}
+
+.badge-sm {
+ padding: var(--spacing-xs) var(--spacing-sm);
+ font-size: var(--font-size-xs);
+}
+
+.badge-lg {
+ padding: var(--spacing-md) var(--spacing-lg);
+ font-size: var(--font-size-base);
+}
+
+/* Badge variants */
+.badge-primary {
+ background-color: var(--color-primary);
+ color: var(--color-text-inverse);
+}
+
+.badge-success {
+ background-color: var(--color-success);
+ color: var(--color-text-inverse);
+}
+
+.badge-danger {
+ background-color: var(--color-danger);
+ color: var(--color-text-inverse);
+}
+
+.badge-warning {
+ background-color: var(--color-warning);
+ color: var(--color-text-inverse);
+}
+
+.badge-secondary {
+ background-color: var(--color-dark-light);
+ color: var(--color-text-inverse);
+}
+
+.badge-gray {
+ background-color: var(--color-gray-400);
+ color: var(--color-text-inverse);
+}
+
+/* Special badge types for app */
+.category-badge {
+ background-color: var(--color-primary);
+ color: var(--color-text-inverse);
+}
+
+.tag-badge {
+ background-color: var(--color-success);
+ color: var(--color-text-inverse);
+}
+
+.draft-badge {
+ background-color: var(--color-warning);
+ color: var(--color-text-inverse);
+}
+
+.ka-number-badge {
+ background-color: var(--color-primary);
+ color: var(--color-text-inverse);
+ padding: var(--spacing-xs) var(--spacing-sm);
+ border-radius: var(--radius-sm);
+ font-size: var(--font-size-sm);
+}
+
+/* Badge with remove button */
+.badge-removable {
+ padding-right: var(--spacing-xs);
+}
+
+.badge-remove {
+ background: none;
+ border: none;
+ color: inherit;
+ font-size: 1.2rem;
+ cursor: pointer;
+ padding: 0 var(--spacing-xs);
+ line-height: 1;
+ opacity: 0.8;
+ transition: opacity var(--transition-fast);
+}
+
+.badge-remove:hover {
+ opacity: 1;
+}
+
+/* Badge container */
+.badge-group {
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--spacing-sm);
+ align-items: center;
+}
+
+/* ===== FORM ELEMENTS ===== */
+
+.form-field {
+ margin-bottom: var(--spacing-xl);
+}
+
+.form-field label {
+ display: block;
+ font-weight: var(--font-weight-bold);
+ margin-bottom: var(--spacing-sm);
+ color: var(--color-text-primary);
+ font-size: var(--font-size-md);
+}
+
+.form-input,
+.form-textarea,
+.form-select {
+ width: 100%;
+ padding: var(--spacing-md);
+ font-size: var(--font-size-base);
+ border: 1px solid var(--color-border);
+ border-radius: var(--radius-sm);
+ background-color: var(--color-background);
+ transition: border-color var(--transition-base);
+ box-sizing: border-box;
+}
+
+.form-input:focus,
+.form-textarea:focus,
+.form-select:focus {
+ outline: none;
+ border-color: var(--color-primary);
+}
+
+.form-input:disabled,
+.form-textarea:disabled,
+.form-select:disabled {
+ background-color: var(--color-gray-200);
+ cursor: not-allowed;
+ opacity: 0.6;
+}
+
+.form-textarea {
+ min-height: 120px;
+ resize: vertical;
+}
+
+/* Form helper text */
+.form-helper {
+ display: block;
+ margin-top: var(--spacing-xs);
+ font-size: var(--font-size-sm);
+ color: var(--color-text-muted);
+}
+
+.form-error {
+ color: var(--color-danger);
+}
+
+/* ===== MESSAGES & ALERTS ===== */
+
+.message {
+ padding: var(--spacing-lg);
+ border-radius: var(--radius-sm);
+ margin-bottom: var(--spacing-lg);
+ display: flex;
+ align-items: flex-start;
+ gap: var(--spacing-md);
+}
+
+.error-message {
+ background-color: var(--color-danger-light);
+ color: var(--color-danger-hover);
+ border: 1px solid var(--color-danger);
+}
+
+.success-message {
+ background-color: var(--color-success-light);
+ color: var(--color-success-hover);
+ border: 1px solid var(--color-success);
+}
+
+.warning-message {
+ background-color: var(--color-warning-light);
+ color: var(--color-warning-hover);
+ border: 1px solid var(--color-warning);
+}
+
+.info-message {
+ background-color: var(--color-primary-light);
+ color: var(--color-primary-hover);
+ border: 1px solid var(--color-primary);
+}
+
+/* ===== LOADING STATES ===== */
+
+.loading-container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: var(--spacing-3xl) var(--spacing-2xl);
+ color: var(--color-text-muted);
+}
+
+.loading-spinner {
+ width: 40px;
+ height: 40px;
+ border: 4px solid var(--color-gray-300);
+ border-top-color: var(--color-primary);
+ border-radius: 50%;
+ animation: spin 0.8s linear infinite;
+}
+
+.loading-spinner-sm {
+ width: 24px;
+ height: 24px;
+ border-width: 3px;
+}
+
+.loading-spinner-lg {
+ width: 56px;
+ height: 56px;
+ border-width: 5px;
+}
+
+.loading-text {
+ margin-top: var(--spacing-lg);
+ font-size: var(--font-size-base);
+ color: var(--color-text-secondary);
+}
+
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+/* ===== EMPTY STATES ===== */
+
+.empty-state {
+ text-align: center;
+ padding: var(--spacing-3xl) var(--spacing-2xl);
+ color: var(--color-text-muted);
+}
+
+.empty-state-icon {
+ font-size: var(--font-size-3xl);
+ margin-bottom: var(--spacing-lg);
+ opacity: 0.5;
+}
+
+.empty-state-title {
+ font-size: var(--font-size-xl);
+ font-weight: var(--font-weight-semibold);
+ color: var(--color-text-secondary);
+ margin-bottom: var(--spacing-sm);
+}
+
+.empty-state-description {
+ font-size: var(--font-size-base);
+ color: var(--color-text-muted);
+ margin-bottom: var(--spacing-xl);
+}
+
+/* ===== DROPDOWNS ===== */
+
+.dropdown-container {
+ position: relative;
+}
+
+.dropdown-button {
+ width: 100%;
+ padding: var(--spacing-md);
+ background-color: var(--color-background);
+ border: 1px solid var(--color-border);
+ border-radius: var(--radius-sm);
+ cursor: pointer;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ text-align: left;
+ font-size: var(--font-size-base);
+ transition: border-color var(--transition-base);
+}
+
+.dropdown-button:hover {
+ border-color: var(--color-primary);
+}
+
+.dropdown-arrow {
+ color: var(--color-text-muted);
+ font-size: var(--font-size-sm);
+ transition: transform var(--transition-base);
+}
+
+.dropdown-arrow.open {
+ transform: rotate(180deg);
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: calc(100% + var(--spacing-xs));
+ left: 0;
+ right: 0;
+ background: var(--color-background);
+ border: 1px solid var(--color-border);
+ border-radius: var(--radius-sm);
+ max-height: 250px;
+ overflow-y: auto;
+ z-index: var(--z-dropdown);
+ box-shadow: var(--shadow-lg);
+}
+
+.dropdown-item {
+ padding: var(--spacing-md);
+ cursor: pointer;
+ transition: background-color var(--transition-base);
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-md);
+}
+
+.dropdown-item:hover {
+ background-color: var(--color-gray-100);
+}
+
+.dropdown-item input[type="checkbox"] {
+ cursor: pointer;
+}
+
+.dropdown-divider {
+ height: 1px;
+ background-color: var(--color-border);
+ margin: var(--spacing-xs) 0;
+}
+
+.dropdown-header {
+ padding: var(--spacing-md);
+ font-weight: var(--font-weight-bold);
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-sm);
+ background-color: var(--color-gray-100);
+}
+
+.dropdown-empty {
+ padding: var(--spacing-lg);
+ text-align: center;
+ color: var(--color-text-muted);
+ font-size: var(--font-size-sm);
+}
+
+/* ===== CARDS ===== */
+
+.card {
+ background: var(--color-background);
+ border: 1px solid var(--color-border-light);
+ border-radius: var(--radius-lg);
+ padding: var(--spacing-xl);
+ transition: all var(--transition-base);
+}
+
+.card-hover:hover {
+ border-color: var(--color-primary);
+ box-shadow: var(--shadow-lg);
+ transform: translateY(-2px);
+}
+
+.card-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: var(--spacing-lg);
+}
+
+.card-title {
+ font-size: var(--font-size-xl);
+ font-weight: var(--font-weight-bold);
+ color: var(--color-text-primary);
+ margin: 0;
+}
+
+.card-body {
+ color: var(--color-text-secondary);
+ line-height: var(--line-height-relaxed);
+}
+
+.card-footer {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: var(--spacing-lg);
+ padding-top: var(--spacing-lg);
+ border-top: 1px solid var(--color-border-light);
+}
+
+/* ===== HEADERS & SECTIONS ===== */
+
+.page-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: var(--spacing-2xl);
+ padding-bottom: var(--spacing-lg);
+ border-bottom: 2px solid var(--color-border-dark);
+}
+
+.page-title {
+ font-size: var(--font-size-2xl);
+ font-weight: var(--font-weight-bold);
+ color: var(--color-text-primary);
+ margin: 0;
+}
+
+.section {
+ margin-bottom: var(--spacing-3xl);
+}
+
+.section-title {
+ font-size: var(--font-size-xl);
+ font-weight: var(--font-weight-bold);
+ color: var(--color-text-primary);
+ margin-bottom: var(--spacing-lg);
+}
+
+/* ===== UTILITIES ===== */
+
+.text-center {
+ text-align: center;
+}
+
+.text-muted {
+ color: var(--color-text-muted);
+}
+
+.text-secondary {
+ color: var(--color-text-secondary);
+}
+
+.text-sm {
+ font-size: var(--font-size-sm);
+}
+
+.text-lg {
+ font-size: var(--font-size-lg);
+}
+
+.font-bold {
+ font-weight: var(--font-weight-bold);
+}
+
+.mt-0 { margin-top: 0; }
+.mt-sm { margin-top: var(--spacing-sm); }
+.mt-md { margin-top: var(--spacing-md); }
+.mt-lg { margin-top: var(--spacing-lg); }
+.mt-xl { margin-top: var(--spacing-xl); }
+.mt-2xl { margin-top: var(--spacing-2xl); }
+
+.mb-0 { margin-bottom: 0; }
+.mb-sm { margin-bottom: var(--spacing-sm); }
+.mb-md { margin-bottom: var(--spacing-md); }
+.mb-lg { margin-bottom: var(--spacing-lg); }
+.mb-xl { margin-bottom: var(--spacing-xl); }
+.mb-2xl { margin-bottom: var(--spacing-2xl); }
+
+.flex {
+ display: flex;
+}
+
+.flex-col {
+ flex-direction: column;
+}
+
+.items-center {
+ align-items: center;
+}
+
+.justify-between {
+ justify-content: space-between;
+}
+
+.gap-sm { gap: var(--spacing-sm); }
+.gap-md { gap: var(--spacing-md); }
+.gap-lg { gap: var(--spacing-lg); }
+.gap-xl { gap: var(--spacing-xl); }
\ No newline at end of file
diff --git a/client/kb-frontend/src/styles/variable.css b/client/kb-frontend/src/styles/variable.css
deleted file mode 100644
index e69de29..0000000
diff --git a/client/kb-frontend/src/styles/variables.css b/client/kb-frontend/src/styles/variables.css
new file mode 100644
index 0000000..a80ef4c
--- /dev/null
+++ b/client/kb-frontend/src/styles/variables.css
@@ -0,0 +1,133 @@
+/* Cram-A-Lot Knowledge Base - Design System Variables */
+
+:root {
+ /* ===== COLORS ===== */
+
+ /* Primary Blue */
+ --color-primary: #3498db;
+ --color-primary-hover: #2980b9;
+ --color-primary-light: #ebf5fb;
+
+ /* Success Green */
+ --color-success: #27ae60;
+ --color-success-hover: #229954;
+ --color-success-light: #e8f6f0;
+
+ /* Danger Red */
+ --color-danger: #e74c3c;
+ --color-danger-hover: #c0392b;
+ --color-danger-light: #ffebee;
+
+ /* Warning Orange */
+ --color-warning: #f39c12;
+ --color-warning-hover: #e67e22;
+ --color-warning-light: #fef5e7;
+
+ /* Neutral Grays */
+ --color-gray-50: #fafafa;
+ --color-gray-100: #f9f9f9;
+ --color-gray-200: #f5f5f5;
+ --color-gray-300: #e0e0e0;
+ --color-gray-400: #bbb;
+ --color-gray-500: #999;
+ --color-gray-600: #666;
+ --color-gray-700: #333;
+ --color-gray-800: #242424;
+
+ /* Dark Colors */
+ --color-dark: #2c3e50;
+ --color-dark-hover: #34495e;
+ --color-dark-light: #7f8c8d;
+
+ /* Semantic Colors */
+ --color-text-primary: #2c3e50;
+ --color-text-secondary: #666;
+ --color-text-muted: #999;
+ --color-text-inverse: #ffffff;
+
+ --color-border: #ddd;
+ --color-border-light: #e0e0e0;
+ --color-border-dark: #333;
+
+ --color-background: #ffffff;
+ --color-background-alt: #f9f9f9;
+ --color-background-dark: #242424;
+
+ /* ===== SPACING SCALE ===== */
+ --spacing-xs: 0.25rem; /* 4px */
+ --spacing-sm: 0.5rem; /* 8px */
+ --spacing-md: 0.75rem; /* 12px */
+ --spacing-lg: 1rem; /* 16px */
+ --spacing-xl: 1.5rem; /* 24px */
+ --spacing-2xl: 2rem; /* 32px */
+ --spacing-3xl: 3rem; /* 48px */
+ --spacing-4xl: 4rem; /* 64px */
+
+ /* ===== TYPOGRAPHY ===== */
+ --font-size-xs: 0.75rem; /* 12px */
+ --font-size-sm: 0.85rem; /* 13.6px */
+ --font-size-base: 1rem; /* 16px */
+ --font-size-md: 0.95rem; /* 15.2px */
+ --font-size-lg: 1.1rem; /* 17.6px */
+ --font-size-xl: 1.25rem; /* 20px */
+ --font-size-2xl: 1.5rem; /* 24px */
+ --font-size-3xl: 2rem; /* 32px */
+
+ --font-weight-normal: 400;
+ --font-weight-medium: 500;
+ --font-weight-semibold: 600;
+ --font-weight-bold: 700;
+
+ --line-height-tight: 1.2;
+ --line-height-snug: 1.4;
+ --line-height-normal: 1.5;
+ --line-height-relaxed: 1.6;
+
+ /* ===== BORDER RADIUS ===== */
+ --radius-sm: 4px;
+ --radius-md: 6px;
+ --radius-lg: 8px;
+ --radius-xl: 12px;
+ --radius-2xl: 16px;
+ --radius-full: 9999px;
+
+ /* ===== SHADOWS ===== */
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
+ --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1);
+ --shadow-md: 0 4px 8px rgba(0, 0, 0, 0.1);
+ --shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.15);
+ --shadow-xl: 0 8px 24px rgba(0, 0, 0, 0.2);
+
+ /* ===== TRANSITIONS ===== */
+ --transition-fast: 0.15s ease;
+ --transition-base: 0.2s ease;
+ --transition-slow: 0.3s ease;
+ --transition-slower: 0.4s ease;
+
+ /* ===== Z-INDEX SCALE ===== */
+ --z-base: 1;
+ --z-dropdown: 100;
+ --z-sticky: 500;
+ --z-fixed: 1000;
+ --z-drawer: 1000;
+ --z-drawer-toggle: 1001;
+ --z-modal-backdrop: 1040;
+ --z-modal: 1050;
+ --z-popover: 1060;
+ --z-tooltip: 1070;
+
+ /* ===== LAYOUT ===== */
+ --max-width-xs: 480px;
+ --max-width-sm: 640px;
+ --max-width-md: 768px;
+ --max-width-lg: 900px;
+ --max-width-xl: 1024px;
+ --max-width-2xl: 1280px;
+ --max-width-3xl: 1400px;
+
+ /* ===== BREAKPOINTS (for reference, use in media queries) ===== */
+ --breakpoint-sm: 640px;
+ --breakpoint-md: 768px;
+ --breakpoint-lg: 1024px;
+ --breakpoint-xl: 1280px;
+}
\ No newline at end of file