diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css index 69a4a3b..aa1a138 100644 --- a/frontend/src/assets/main.css +++ b/frontend/src/assets/main.css @@ -16,9 +16,26 @@ --color-text-on-gradient: #ffffff; --color-surface: #fff5f8; --color-card: #ffffff; + --color-dark-base: #1B1730; + + /* Glass system */ --color-glass: rgba(255, 255, 255, 0.1); + --color-glass-strong: rgba(255, 255, 255, 0.15); + --color-glass-subtle: rgba(255, 255, 255, 0.05); --color-glass-border: rgba(255, 255, 255, 0.18); + --color-glass-border-hover: rgba(255, 255, 255, 0.3); --color-glass-hover: rgba(255, 255, 255, 0.18); + --color-glass-inner: rgba(27, 23, 48, 0.55); + --color-glass-overlay: rgba(27, 23, 48, 0.4); + + /* Text on gradient (opacity variants) */ + --color-text-muted: rgba(255, 255, 255, 0.5); + --color-text-secondary: rgba(255, 255, 255, 0.7); + --color-text-soft: rgba(255, 255, 255, 0.85); + --color-text-bright: rgba(255, 255, 255, 0.9); + + /* Glow border */ + --gradient-glow: conic-gradient(from 135deg, var(--color-gradient-start), var(--color-gradient-mid), var(--color-gradient-end), var(--color-gradient-start)); /* Gradient */ --gradient-primary: linear-gradient(135deg, #f06292 0%, #ab47bc 50%, #5c6bc0 100%); @@ -63,7 +80,7 @@ html { body { min-height: 100vh; - background-color: #1B1730; + background-color: var(--color-dark-base); position: relative; } @@ -71,7 +88,7 @@ body::before { content: ''; position: fixed; inset: 0; - background-color: #1B1730; + background-color: var(--color-dark-base); background-image: radial-gradient(at 70% 20%, rgba(240, 98, 146, 0.55) 0px, transparent 50%), radial-gradient(at 25% 50%, rgba(171, 71, 188, 0.5) 0px, transparent 55%), @@ -194,6 +211,68 @@ textarea.form-field { 100% { background-position: -200% 0; } } +/* ── Glass System ── */ + +/* Glass surface: passive containers on gradient (cards, icon boxes) */ +.glass { + background: linear-gradient(135deg, var(--color-glass-strong) 0%, var(--color-glass-subtle) 100%); + border: 1px solid var(--color-glass-border); + box-shadow: var(--shadow-card); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); +} + +.glass:hover { + background: var(--color-glass-hover); + border-color: var(--color-glass-border-hover); +} + +/* Glass interactive inner: dark translucent fill for interactive elements (FAB, CTA) */ +.glass-inner { + background: var(--color-glass-inner); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); +} + +/* Glow border: conic gradient wrapper with halo (static) */ +.glow-border { + background: var(--gradient-glow); + padding: 2px; + position: relative; +} + +.glow-border::before { + content: ''; + position: absolute; + inset: -4px; + border-radius: inherit; + background: var(--gradient-glow); + filter: blur(8px); + opacity: 0.3; + z-index: -1; +} + +/* Glow border animated variant */ +@property --glow-angle { + syntax: ''; + initial-value: 0deg; + inherits: false; +} + +.glow-border--animated { + background: conic-gradient(from var(--glow-angle), var(--color-gradient-start), var(--color-gradient-mid), var(--color-gradient-end), var(--color-gradient-start)); + animation: glow-rotate 4s linear infinite; +} + +.glow-border--animated::before { + background: conic-gradient(from var(--glow-angle), var(--color-gradient-start), var(--color-gradient-mid), var(--color-gradient-end), var(--color-gradient-start)); + animation: glow-rotate 4s linear infinite; +} + +@keyframes glow-rotate { + to { --glow-angle: 360deg; } +} + /* Utility */ .text-center { text-align: center; diff --git a/frontend/src/components/AttendeeList.vue b/frontend/src/components/AttendeeList.vue index d826a8a..d8b5630 100644 --- a/frontend/src/components/AttendeeList.vue +++ b/frontend/src/components/AttendeeList.vue @@ -28,7 +28,7 @@ defineProps<{ .attendee-list__heading { font-size: 0.75rem; font-weight: 700; - color: rgba(255, 255, 255, 0.5); + color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.08em; } @@ -44,7 +44,7 @@ defineProps<{ .attendee-list__item { font-size: 0.95rem; - color: rgba(255, 255, 255, 0.85); + color: var(--color-text-soft); line-height: 1.4; overflow: hidden; text-overflow: ellipsis; @@ -53,7 +53,7 @@ defineProps<{ .attendee-list__empty { font-size: 0.9rem; - color: rgba(255, 255, 255, 0.5); + color: var(--color-text-muted); font-style: italic; } diff --git a/frontend/src/components/CreateEventFab.vue b/frontend/src/components/CreateEventFab.vue index 30d48a9..f10489d 100644 --- a/frontend/src/components/CreateEventFab.vue +++ b/frontend/src/components/CreateEventFab.vue @@ -1,6 +1,6 @@