Spaces:
Sleeping
Sleeping
| /** | |
| * ============================================ | |
| * GLASSMORPHISM COMPONENT SYSTEM | |
| * Admin UI Modernization | |
| * ============================================ | |
| * | |
| * Modern glass effect components with: | |
| * - Base glass-card class | |
| * - Glass effect variations (light, medium, heavy) | |
| * - Glass borders with gradient effects | |
| * - Inner shadows and highlights | |
| * - Browser fallbacks for unsupported backdrop-filter | |
| * | |
| * Requirements: 1.1, 6.1 | |
| */ | |
| /* ===== BASE GLASS CARD ===== */ | |
| .glass-card { | |
| /* Glassmorphism background */ | |
| background: var(--glass-bg); | |
| backdrop-filter: blur(var(--blur-lg)); | |
| -webkit-backdrop-filter: blur(var(--blur-lg)); | |
| /* Border with subtle gradient */ | |
| border: 1px solid var(--glass-border); | |
| border-radius: var(--radius-xl); | |
| /* Multi-layered shadow for depth */ | |
| box-shadow: | |
| var(--shadow-lg), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.1); | |
| /* Positioning for pseudo-elements */ | |
| position: relative; | |
| overflow: hidden; | |
| /* Smooth transitions */ | |
| transition: var(--transition-all-base); | |
| } | |
| /* Top highlight effect */ | |
| .glass-card::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| height: 1px; | |
| background: linear-gradient( | |
| 90deg, | |
| transparent, | |
| rgba(255, 255, 255, 0.2), | |
| transparent | |
| ); | |
| pointer-events: none; | |
| } | |
| /* Hover state with elevation */ | |
| .glass-card:hover { | |
| transform: translateY(-2px); | |
| box-shadow: | |
| var(--shadow-xl), | |
| var(--shadow-glow), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.15); | |
| border-color: rgba(99, 102, 241, 0.3); | |
| } | |
| /* Active/pressed state */ | |
| .glass-card:active { | |
| transform: translateY(0); | |
| box-shadow: | |
| var(--shadow-md), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.1); | |
| } | |
| /* ===== GLASS EFFECT VARIATIONS ===== */ | |
| /* Light blur - subtle effect */ | |
| .glass-card-light { | |
| background: var(--glass-bg-light); | |
| backdrop-filter: blur(var(--blur-md)); | |
| -webkit-backdrop-filter: blur(var(--blur-md)); | |
| border: 1px solid var(--glass-border); | |
| border-radius: var(--radius-lg); | |
| box-shadow: var(--shadow-md); | |
| position: relative; | |
| transition: var(--transition-all-base); | |
| } | |
| /* Medium blur - balanced effect (default) */ | |
| .glass-card-medium { | |
| background: var(--glass-bg); | |
| backdrop-filter: blur(var(--blur-lg)); | |
| -webkit-backdrop-filter: blur(var(--blur-lg)); | |
| border: 1px solid var(--glass-border); | |
| border-radius: var(--radius-xl); | |
| box-shadow: var(--shadow-lg); | |
| position: relative; | |
| transition: var(--transition-all-base); | |
| } | |
| /* Heavy blur - strong effect */ | |
| .glass-card-heavy { | |
| background: var(--glass-bg-strong); | |
| backdrop-filter: blur(var(--blur-xl)); | |
| -webkit-backdrop-filter: blur(var(--blur-xl)); | |
| border: 1px solid var(--glass-border-strong); | |
| border-radius: var(--radius-2xl); | |
| box-shadow: | |
| var(--shadow-xl), | |
| inset 0 2px 0 rgba(255, 255, 255, 0.15); | |
| position: relative; | |
| transition: var(--transition-all-base); | |
| } | |
| /* ===== GLASS BORDERS WITH GRADIENT EFFECTS ===== */ | |
| /* Gradient border - primary */ | |
| .glass-border-gradient { | |
| position: relative; | |
| background: var(--glass-bg); | |
| backdrop-filter: blur(var(--blur-lg)); | |
| -webkit-backdrop-filter: blur(var(--blur-lg)); | |
| border-radius: var(--radius-xl); | |
| padding: 1px; | |
| overflow: hidden; | |
| } | |
| .glass-border-gradient::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| border-radius: inherit; | |
| padding: 1px; | |
| background: var(--gradient-primary); | |
| -webkit-mask: | |
| linear-gradient(#fff 0 0) content-box, | |
| linear-gradient(#fff 0 0); | |
| -webkit-mask-composite: xor; | |
| mask-composite: exclude; | |
| pointer-events: none; | |
| } | |
| /* Gradient border - accent */ | |
| .glass-border-accent { | |
| position: relative; | |
| background: var(--glass-bg); | |
| backdrop-filter: blur(var(--blur-lg)); | |
| -webkit-backdrop-filter: blur(var(--blur-lg)); | |
| border-radius: var(--radius-xl); | |
| border: 1px solid transparent; | |
| background-image: | |
| linear-gradient(var(--bg-primary), var(--bg-primary)), | |
| var(--gradient-accent); | |
| background-origin: border-box; | |
| background-clip: padding-box, border-box; | |
| } | |
| /* Animated gradient border */ | |
| .glass-border-animated { | |
| position: relative; | |
| background: var(--glass-bg); | |
| backdrop-filter: blur(var(--blur-lg)); | |
| -webkit-backdrop-filter: blur(var(--blur-lg)); | |
| border-radius: var(--radius-xl); | |
| border: 2px solid transparent; | |
| background-image: | |
| linear-gradient(var(--bg-primary), var(--bg-primary)), | |
| var(--gradient-rainbow); | |
| background-origin: border-box; | |
| background-clip: padding-box, border-box; | |
| animation: borderRotate 3s linear infinite; | |
| } | |
| @keyframes borderRotate { | |
| 0% { | |
| filter: hue-rotate(0deg); | |
| } | |
| 100% { | |
| filter: hue-rotate(360deg); | |
| } | |
| } | |
| /* ===== INNER SHADOWS AND HIGHLIGHTS ===== */ | |
| /* Inner glow effect */ | |
| .glass-inner-glow { | |
| box-shadow: | |
| var(--shadow-lg), | |
| inset 0 0 20px rgba(99, 102, 241, 0.1), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.15); | |
| } | |
| /* Inner shadow for depth */ | |
| .glass-inner-shadow { | |
| box-shadow: | |
| var(--shadow-lg), | |
| inset 0 2px 8px rgba(0, 0, 0, 0.2); | |
| } | |
| /* Top highlight */ | |
| .glass-highlight-top::after { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 5%; | |
| right: 5%; | |
| height: 2px; | |
| background: linear-gradient( | |
| 90deg, | |
| transparent, | |
| rgba(255, 255, 255, 0.3), | |
| transparent | |
| ); | |
| border-radius: var(--radius-full); | |
| pointer-events: none; | |
| } | |
| /* Bottom highlight */ | |
| .glass-highlight-bottom::after { | |
| content: ''; | |
| position: absolute; | |
| bottom: 0; | |
| left: 5%; | |
| right: 5%; | |
| height: 1px; | |
| background: linear-gradient( | |
| 90deg, | |
| transparent, | |
| rgba(255, 255, 255, 0.15), | |
| transparent | |
| ); | |
| pointer-events: none; | |
| } | |
| /* Corner highlights */ | |
| .glass-corner-highlights::before, | |
| .glass-corner-highlights::after { | |
| content: ''; | |
| position: absolute; | |
| width: 40px; | |
| height: 40px; | |
| border-radius: var(--radius-full); | |
| background: radial-gradient( | |
| circle, | |
| rgba(255, 255, 255, 0.1) 0%, | |
| transparent 70% | |
| ); | |
| pointer-events: none; | |
| } | |
| .glass-corner-highlights::before { | |
| top: -10px; | |
| left: -10px; | |
| } | |
| .glass-corner-highlights::after { | |
| bottom: -10px; | |
| right: -10px; | |
| } | |
| /* ===== BROWSER FALLBACKS ===== */ | |
| /* Fallback for browsers that don't support backdrop-filter */ | |
| @supports not (backdrop-filter: blur(16px)) { | |
| .glass-card, | |
| .glass-card-light, | |
| .glass-card-medium, | |
| .glass-card-heavy, | |
| .glass-border-gradient, | |
| .glass-border-accent, | |
| .glass-border-animated { | |
| background: var(--bg-secondary); | |
| border: 1px solid var(--border-color); | |
| } | |
| .glass-card-heavy { | |
| background: var(--bg-tertiary); | |
| } | |
| } | |
| /* Fallback for older WebKit browsers */ | |
| @supports not (-webkit-backdrop-filter: blur(16px)) { | |
| .glass-card, | |
| .glass-card-light, | |
| .glass-card-medium, | |
| .glass-card-heavy { | |
| background: var(--bg-secondary); | |
| } | |
| } | |
| /* ===== UTILITY CLASSES ===== */ | |
| /* No hover effect */ | |
| .glass-card-static { | |
| cursor: default; | |
| } | |
| .glass-card-static:hover { | |
| transform: none; | |
| box-shadow: | |
| var(--shadow-lg), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.1); | |
| border-color: var(--glass-border); | |
| } | |
| /* Interactive cursor */ | |
| .glass-card-interactive { | |
| cursor: pointer; | |
| } | |
| /* Disabled state */ | |
| .glass-card-disabled { | |
| opacity: 0.5; | |
| cursor: not-allowed; | |
| pointer-events: none; | |
| } | |
| /* ===== GLASS PANEL VARIANTS ===== */ | |
| /* Glass panel for sidebar */ | |
| .glass-panel-sidebar { | |
| background: linear-gradient( | |
| 180deg, | |
| rgba(15, 23, 42, 0.95) 0%, | |
| rgba(30, 41, 59, 0.95) 100% | |
| ); | |
| backdrop-filter: blur(var(--blur-xl)); | |
| -webkit-backdrop-filter: blur(var(--blur-xl)); | |
| border-right: 1px solid rgba(255, 255, 255, 0.05); | |
| box-shadow: var(--shadow-xl); | |
| position: relative; | |
| } | |
| .glass-panel-sidebar::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: radial-gradient( | |
| circle at top left, | |
| rgba(99, 102, 241, 0.1) 0%, | |
| transparent 50% | |
| ); | |
| pointer-events: none; | |
| } | |
| /* Glass panel for topbar */ | |
| .glass-panel-topbar { | |
| background: rgba(15, 23, 42, 0.8); | |
| backdrop-filter: blur(var(--blur-xl)); | |
| -webkit-backdrop-filter: blur(var(--blur-xl)); | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.05); | |
| box-shadow: var(--shadow-md); | |
| } | |
| /* Glass panel for modal */ | |
| .glass-panel-modal { | |
| background: var(--glass-bg-strong); | |
| backdrop-filter: blur(var(--blur-2xl)); | |
| -webkit-backdrop-filter: blur(var(--blur-2xl)); | |
| border: 1px solid var(--glass-border-strong); | |
| border-radius: var(--radius-2xl); | |
| box-shadow: var(--shadow-2xl); | |
| } | |
| /* ===== GLASS CONTAINER ===== */ | |
| /* Container with glass effect */ | |
| .glass-container { | |
| background: var(--glass-bg); | |
| backdrop-filter: blur(var(--blur-lg)); | |
| -webkit-backdrop-filter: blur(var(--blur-lg)); | |
| border: 1px solid var(--glass-border); | |
| border-radius: var(--radius-xl); | |
| padding: var(--spacing-lg); | |
| box-shadow: var(--shadow-lg); | |
| } | |
| /* Nested glass container */ | |
| .glass-container-nested { | |
| background: rgba(255, 255, 255, 0.03); | |
| backdrop-filter: blur(var(--blur-md)); | |
| -webkit-backdrop-filter: blur(var(--blur-md)); | |
| border: 1px solid rgba(255, 255, 255, 0.05); | |
| border-radius: var(--radius-lg); | |
| padding: var(--spacing-md); | |
| box-shadow: var(--shadow-sm); | |
| } | |
| /* ===== RESPONSIVE ADJUSTMENTS ===== */ | |
| /* Reduce blur on mobile for performance */ | |
| @media (max-width: 768px) { | |
| .glass-card, | |
| .glass-card-medium { | |
| backdrop-filter: blur(var(--blur-md)); | |
| -webkit-backdrop-filter: blur(var(--blur-md)); | |
| } | |
| .glass-card-heavy { | |
| backdrop-filter: blur(var(--blur-lg)); | |
| -webkit-backdrop-filter: blur(var(--blur-lg)); | |
| } | |
| .glass-panel-sidebar, | |
| .glass-panel-topbar, | |
| .glass-panel-modal { | |
| backdrop-filter: blur(var(--blur-lg)); | |
| -webkit-backdrop-filter: blur(var(--blur-lg)); | |
| } | |
| } | |
| /* ===== ACCESSIBILITY ===== */ | |
| /* Respect reduced motion preference */ | |
| @media (prefers-reduced-motion: reduce) { | |
| .glass-card, | |
| .glass-card-light, | |
| .glass-card-medium, | |
| .glass-card-heavy, | |
| .glass-border-animated { | |
| transition: none; | |
| animation: none; | |
| } | |
| } | |