diff --git a/frontend/src/app.css b/frontend/src/app.css index f884de9..d2a0d18 100644 --- a/frontend/src/app.css +++ b/frontend/src/app.css @@ -1,233 +1,463 @@ -/* CSS Variables - Dark Theme */ :root { - --primary: #6366f1; - --primary-hover: #818cf8; - --background: #0f172a; - --surface: #1e293b; - --surface-hover: #334155; - --text: #f1f5f9; - --text-muted: #94a3b8; - --border: #334155; - --error: #ef4444; - --success: #22c55e; - --warning: #f59e0b; + /* Vibrant Color Palette - Hot Air Balloon Theme */ + --primary: #FF6B6B; /* Coral Red */ + --primary-hover: #FF5252; + --secondary: #4ECDC4; /* Teal */ + --accent-1: #FFE66D; /* Sunny Yellow */ + --accent-2: #95E1D3; /* Mint */ + --accent-3: #F38181; /* Salmon */ + --accent-4: #AA96DA; /* Lavender */ + --accent-5: #FCBAD3; /* Pink */ + --accent-6: #A8D8EA; /* Sky Blue */ + --accent-7: #FF9F43; /* Orange */ + --accent-8: #5F27CD; /* Purple */ + + /* Gradients */ + --gradient-sunset: linear-gradient(135deg, #FF6B6B 0%, #FFE66D 50%, #95E1D3 100%); + --gradient-balloon: linear-gradient(135deg, #FF6B6B 0%, #FCBAD3 50%, #AA96DA 100%); + --gradient-sky: linear-gradient(135deg, #A8D8EA 0%, #95E1D3 50%, #FFE66D 100%); + --gradient-aurora: linear-gradient(135deg, #5F27CD 0%, #4ECDC4 50%, #FFE66D 100%); + + /* Background */ + --background: #1A1A2E; /* Deep Space */ + --background-light: #16213E; + --surface: #0F3460; /* Ocean Blue */ + --surface-hover: #1A4B8C; + --surface-card: rgba(15, 52, 96, 0.8); + --border: rgba(78, 205, 196, 0.3); + --border-bright: #4ECDC4; + + /* Text */ + --text: #F7F7F7; + --text-muted: #B8B8D1; + --text-bright: #FFFFFF; + + /* Status Colors */ + --success: #95E1D3; + --danger: #FF6B6B; + --warning: #FFE66D; + --info: #A8D8EA; + + /* Layout */ + --sidebar-width: 280px; + --header-height: 70px; + + /* Shadows */ + --shadow-glow: 0 0 30px rgba(78, 205, 196, 0.3); + --shadow-card: 0 8px 32px rgba(0, 0, 0, 0.3); + --shadow-button: 0 4px 15px rgba(255, 107, 107, 0.4); } -/* Reset & Base */ -*, -*::before, -*::after { - box-sizing: border-box; - margin: 0; - padding: 0; +* { + margin: 0; + padding: 0; + box-sizing: border-box; } -html, -body { - height: 100%; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; - background-color: var(--background); - color: var(--text); - line-height: 1.5; +html, body { + height: 100%; + font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', sans-serif; + background: var(--background); + background-image: + radial-gradient(circle at 20% 80%, rgba(170, 150, 218, 0.15) 0%, transparent 50%), + radial-gradient(circle at 80% 20%, rgba(78, 205, 196, 0.15) 0%, transparent 50%), + radial-gradient(circle at 40% 40%, rgba(255, 107, 107, 0.1) 0%, transparent 40%); + color: var(--text); + line-height: 1.6; + overflow-x: hidden; } a { - color: var(--primary); - text-decoration: none; + color: var(--secondary); + text-decoration: none; + transition: all 0.3s ease; } a:hover { - color: var(--primary-hover); + color: var(--accent-1); + text-shadow: 0 0 10px rgba(255, 230, 109, 0.5); } -/* Utility Classes */ -.btn { - display: inline-flex; - align-items: center; - justify-content: center; - gap: 0.5rem; - padding: 0.625rem 1.25rem; - font-size: 0.875rem; - font-weight: 500; - border-radius: 0.5rem; - border: none; - cursor: pointer; - transition: all 0.15s ease; +button { + cursor: pointer; + font-family: inherit; + border: none; + outline: none; } -.btn-primary { - background-color: var(--primary); - color: white; -} - -.btn-primary:hover { - background-color: var(--primary-hover); -} - -.btn-secondary { - background-color: var(--surface); - color: var(--text); - border: 1px solid var(--border); -} - -.btn-secondary:hover { - background-color: var(--surface-hover); -} - -.btn-danger { - background-color: var(--error); - color: white; -} - -.btn-danger:hover { - background-color: #dc2626; -} - -.btn-sm { - padding: 0.375rem 0.75rem; - font-size: 0.75rem; -} - -.btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -.input { - width: 100%; - padding: 0.625rem 0.875rem; - font-size: 0.875rem; - background-color: var(--surface); - border: 1px solid var(--border); - border-radius: 0.5rem; - color: var(--text); - transition: border-color 0.15s ease; -} - -.input:focus { - outline: none; - border-color: var(--primary); -} - -.input::placeholder { - color: var(--text-muted); -} - -.card { - background-color: var(--surface); - border: 1px solid var(--border); - border-radius: 0.75rem; - padding: 1.5rem; -} - -.form-group { - margin-bottom: 1rem; -} - -.form-group label { - display: block; - margin-bottom: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - color: var(--text-muted); -} - -.error-message { - color: var(--error); - font-size: 0.875rem; - margin-top: 0.5rem; -} - -.success-message { - color: var(--success); - font-size: 0.875rem; - margin-top: 0.5rem; +input, textarea, select { + font-family: inherit; + font-size: inherit; } /* Scrollbar */ ::-webkit-scrollbar { - width: 8px; - height: 8px; + width: 10px; + height: 10px; } ::-webkit-scrollbar-track { - background: var(--background); + background: var(--background); + border-radius: 5px; } ::-webkit-scrollbar-thumb { - background: var(--border); - border-radius: 4px; + background: var(--gradient-sunset); + border-radius: 5px; } ::-webkit-scrollbar-thumb:hover { - background: var(--surface-hover); + background: var(--gradient-balloon); } -/* Code blocks */ -pre { - background-color: var(--background); - padding: 1rem; - border-radius: 0.5rem; - overflow-x: auto; - font-size: 0.875rem; +/* ============ BUTTONS ============ */ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + padding: 0.75rem 1.5rem; + font-size: 0.9rem; + font-weight: 600; + border-radius: 50px; + border: none; + transition: all 0.3s ease; + text-transform: uppercase; + letter-spacing: 0.5px; } -code { - font-family: 'Fira Code', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; +.btn-primary { + background: var(--gradient-sunset); + color: var(--background); + box-shadow: var(--shadow-button); } -/* Tabs */ +.btn-primary:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(255, 107, 107, 0.5); +} + +.btn-secondary { + background: transparent; + color: var(--secondary); + border: 2px solid var(--secondary); + box-shadow: 0 0 15px rgba(78, 205, 196, 0.2); +} + +.btn-secondary:hover { + background: var(--secondary); + color: var(--background); + box-shadow: 0 0 25px rgba(78, 205, 196, 0.4); +} + +.btn-danger { + background: linear-gradient(135deg, #FF6B6B, #F38181); + color: white; + box-shadow: 0 4px 15px rgba(255, 107, 107, 0.4); +} + +.btn-danger:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(255, 107, 107, 0.5); +} + +.btn-sm { + padding: 0.5rem 1rem; + font-size: 0.75rem; +} + +.btn-icon { + padding: 0.75rem; + min-width: 48px; + border-radius: 50%; +} + +.btn:disabled { + opacity: 0.6; + cursor: not-allowed; + transform: none !important; +} + +/* ============ INPUTS ============ */ +.input { + width: 100%; + padding: 1rem 1.25rem; + background: rgba(22, 33, 62, 0.8); + border: 2px solid transparent; + border-radius: 15px; + color: var(--text); + font-size: 1rem; + transition: all 0.3s ease; + backdrop-filter: blur(10px); +} + +.input:focus { + outline: none; + border-color: var(--secondary); + box-shadow: 0 0 20px rgba(78, 205, 196, 0.3); + background: rgba(22, 33, 62, 1); +} + +.input::placeholder { + color: var(--text-muted); +} + +.label { + display: block; + margin-bottom: 0.5rem; + font-size: 0.875rem; + font-weight: 600; + color: var(--secondary); + text-transform: uppercase; + letter-spacing: 1px; +} + +/* ============ CARDS ============ */ +.card { + background: var(--surface-card); + border: 1px solid var(--border); + border-radius: 20px; + padding: 1.5rem; + backdrop-filter: blur(20px); + box-shadow: var(--shadow-card); + transition: all 0.3s ease; +} + +.card:hover { + border-color: var(--border-bright); + box-shadow: var(--shadow-glow); +} + +.form-group { + margin-bottom: 1.25rem; +} + +/* ============ TABS ============ */ .tabs { - display: flex; - gap: 0.5rem; - border-bottom: 1px solid var(--border); - margin-bottom: 1.5rem; + display: flex; + gap: 0.5rem; + margin-bottom: 1.5rem; + padding: 0.5rem; + background: var(--surface); + border-radius: 50px; + box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.2); } .tab { - padding: 0.75rem 1.5rem; - font-size: 0.875rem; - font-weight: 500; - color: var(--text-muted); - background: none; - border: none; - cursor: pointer; - transition: all 0.15s ease; - border-bottom: 2px solid transparent; - margin-bottom: -1px; + padding: 0.75rem 1.5rem; + background: transparent; + border: none; + border-radius: 50px; + color: var(--text-muted); + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; } .tab:hover { - color: var(--text); + color: var(--text); + background: rgba(78, 205, 196, 0.1); } .tab.active { - color: var(--primary); - border-bottom-color: var(--primary); + background: var(--gradient-sunset); + color: var(--background); + box-shadow: 0 4px 15px rgba(255, 107, 107, 0.4); } -/* Table */ -.table { - width: 100%; - border-collapse: collapse; +/* ============ BADGES ============ */ +.badge { + display: inline-flex; + align-items: center; + padding: 0.375rem 0.875rem; + border-radius: 50px; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; } -.table th, -.table td { - padding: 0.75rem 1rem; - text-align: left; - border-bottom: 1px solid var(--border); +.badge.admin { + background: var(--gradient-balloon); + color: white; } -.table th { - font-weight: 600; - color: var(--text-muted); - font-size: 0.75rem; - text-transform: uppercase; - letter-spacing: 0.05em; +.badge.active { + background: linear-gradient(135deg, #95E1D3, #4ECDC4); + color: var(--background); } -.table tbody tr:hover { - background-color: var(--background); +.badge.inactive { + background: linear-gradient(135deg, #FF6B6B, #F38181); + color: white; +} + +.badge.default { + background: linear-gradient(135deg, #FFE66D, #FF9F43); + color: var(--background); +} + +/* ============ TABLES ============ */ +.data-table { + width: 100%; + border-collapse: separate; + border-spacing: 0; +} + +.data-table th, +.data-table td { + padding: 1rem 1.25rem; + text-align: left; +} + +.data-table th { + background: var(--background-light); + font-weight: 700; + color: var(--secondary); + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 1px; + border-bottom: 2px solid var(--border); +} + +.data-table tr { + transition: all 0.3s ease; +} + +.data-table tbody tr:hover { + background: rgba(78, 205, 196, 0.05); +} + +.data-table td { + border-bottom: 1px solid var(--border); +} + +/* ============ ANIMATIONS ============ */ +@keyframes float { + 0%, 100% { transform: translateY(0px); } + 50% { transform: translateY(-10px); } +} + +@keyframes pulse-glow { + 0%, 100% { box-shadow: 0 0 20px rgba(78, 205, 196, 0.3); } + 50% { box-shadow: 0 0 40px rgba(78, 205, 196, 0.6); } +} + +@keyframes gradient-shift { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +/* ============ MARKDOWN CONTENT ============ */ +.markdown-content { + line-height: 1.8; +} + +.markdown-content p { + margin-bottom: 1rem; +} + +.markdown-content code { + background: var(--background); + padding: 0.25rem 0.5rem; + border-radius: 6px; + font-size: 0.9em; + color: var(--accent-1); + border: 1px solid var(--border); +} + +.markdown-content pre { + background: var(--background); + padding: 1.25rem; + border-radius: 15px; + overflow-x: auto; + margin-bottom: 1rem; + border: 1px solid var(--border); + box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.2); +} + +.markdown-content pre code { + background: none; + padding: 0; + border: none; +} + +.markdown-content ul, .markdown-content ol { + margin-bottom: 1rem; + padding-left: 1.5rem; +} + +.markdown-content li { + margin-bottom: 0.5rem; +} + +.markdown-content h1, .markdown-content h2, .markdown-content h3 { + margin-bottom: 1rem; + margin-top: 1.5rem; + background: var(--gradient-sunset); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.markdown-content h1 { font-size: 1.5rem; } +.markdown-content h2 { font-size: 1.25rem; } +.markdown-content h3 { font-size: 1.1rem; } + +/* ============ MODAL ============ */ +.modal-overlay { + position: fixed; + inset: 0; + background: rgba(26, 26, 46, 0.9); + backdrop-filter: blur(10px); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + padding: 1rem; +} + +.modal { + background: linear-gradient(135deg, var(--surface) 0%, var(--background-light) 100%); + border: 2px solid var(--border-bright); + border-radius: 25px; + padding: 2rem; + width: 100%; + max-width: 500px; + max-height: 90vh; + overflow-y: auto; + box-shadow: + 0 0 50px rgba(78, 205, 196, 0.3), + 0 25px 50px rgba(0, 0, 0, 0.5); + animation: float 3s ease-in-out infinite; +} + +.modal h3 { + background: var(--gradient-sunset); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-size: 1.5rem; + margin-bottom: 1.5rem; +} + +/* ============ NEURAL NETWORK BACKGROUND DECORATION ============ */ +.neural-bg { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + pointer-events: none; + z-index: -1; + background-image: + radial-gradient(circle at 10% 20%, rgba(255, 107, 107, 0.1) 0%, transparent 20%), + radial-gradient(circle at 30% 80%, rgba(78, 205, 196, 0.1) 0%, transparent 20%), + radial-gradient(circle at 70% 30%, rgba(255, 230, 109, 0.1) 0%, transparent 20%), + radial-gradient(circle at 90% 70%, rgba(170, 150, 218, 0.1) 0%, transparent 20%); } diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte index 4181e0a..cc65502 100644 --- a/frontend/src/routes/+layout.svelte +++ b/frontend/src/routes/+layout.svelte @@ -22,7 +22,11 @@ {#if isLoading}
+
+ Loading Moxiegen...
+
+
+
+ Sign in to your account to continue
Demo Admin:
-Email: admin@moxiegen.com
-Password: admin123
+