// MonacoUSA Portal - Main Stylesheet // Based on design-system.md specifications // ============================================ // 1. Variables & Design Tokens // ============================================ // Monaco Red Spectrum $monaco-red-50: #fef2f2; $monaco-red-100: #fee2e2; $monaco-red-200: #fecaca; $monaco-red-300: #fca5a5; $monaco-red-400: #f87171; $monaco-red-500: #ef4444; $monaco-red-600: #dc2626; // Primary Brand Color $monaco-red-700: #b91c1c; $monaco-red-800: #991b1b; $monaco-red-900: #7f1d1d; // Neutral Palette $gray-50: #fafafa; $gray-100: #f4f4f5; $gray-200: #e4e4e7; $gray-300: #d4d4d8; $gray-400: #a1a1aa; $gray-500: #71717a; $gray-600: #52525b; $gray-700: #3f3f46; $gray-800: #27272a; $gray-900: #18181b; // Primary Gradients $gradient-monaco: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%); $gradient-monaco-light: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); $gradient-monaco-dark: linear-gradient(135deg, #b91c1c 0%, #991b1b 100%); // Accent Gradients $gradient-sunset: linear-gradient(135deg, #dc2626 0%, #f59e0b 100%); $gradient-wine: linear-gradient(135deg, #991b1b 0%, #4c1d95 100%); $gradient-royal: linear-gradient(135deg, #dc2626 0%, #1e40af 100%); // Glass Gradients $gradient-glass-light: linear-gradient(135deg, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.4) 100%); $gradient-glass-dark: linear-gradient(135deg, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.4) 100%); // Shadows $shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05); $shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); $shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); $shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1); $shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); $shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25); $shadow-glass: 0 8px 32px rgba(0, 0, 0, 0.1); $shadow-glass-hover: 0 12px 40px rgba(0, 0, 0, 0.15); $shadow-monaco: 0 10px 40px rgba(220, 38, 38, 0.15); $shadow-monaco-intense: 0 20px 60px rgba(220, 38, 38, 0.25); // Border Radius $radius-sm: 0.125rem; $radius-base: 0.25rem; $radius-md: 0.375rem; $radius-lg: 0.5rem; $radius-xl: 0.75rem; $radius-2xl: 1rem; $radius-3xl: 1.5rem; $radius-full: 9999px; // Timing $duration-fast: 150ms; $duration-base: 300ms; $duration-slow: 500ms; $duration-slower: 700ms; // Easing $ease-smooth: cubic-bezier(0.4, 0, 0.2, 1); $ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1); $ease-elastic: cubic-bezier(0.68, -0.55, 0.265, 1.55); // ============================================ // 2. Glass Morphism Mixins // ============================================ @mixin glass-effect($bg-opacity: 0.7, $blur: 20px) { background: rgba(255, 255, 255, $bg-opacity); backdrop-filter: blur($blur); -webkit-backdrop-filter: blur($blur); border: 1px solid rgba(255, 255, 255, 0.3); box-shadow: $shadow-glass; } @mixin glass-dark($bg-opacity: 0.7, $blur: 20px) { background: rgba(0, 0, 0, $bg-opacity); backdrop-filter: blur($blur); -webkit-backdrop-filter: blur($blur); border: 1px solid rgba(255, 255, 255, 0.1); box-shadow: $shadow-glass; } @mixin glass-colored($color: $monaco-red-600, $opacity: 0.1, $blur: 20px) { background: rgba($color, $opacity); backdrop-filter: blur($blur); -webkit-backdrop-filter: blur($blur); border: 1px solid rgba($color, 0.2); box-shadow: 0 8px 32px rgba($color, 0.1); } // Enhanced glass effect with gradient and inner glow @mixin enhanced-glass($opacity: 0.9, $blur: 30px) { background: linear-gradient( 135deg, rgba(255, 255, 255, $opacity * 0.95), rgba(255, 255, 255, $opacity * 0.85), rgba(255, 255, 255, $opacity * 0.75) ); backdrop-filter: blur($blur) saturate(180%); -webkit-backdrop-filter: blur($blur) saturate(180%); border: 1px solid rgba(255, 255, 255, 0.25); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08), inset 0 2px 4px rgba(255, 255, 255, 0.6), inset 0 -2px 4px rgba(0, 0, 0, 0.05); position: relative; // Noise texture overlay &::before { content: ''; position: absolute; inset: 0; opacity: 0.03; background-image: repeating-linear-gradient(45deg, transparent, transparent 35px, rgba(255,255,255,.1) 35px, rgba(255,255,255,.1) 70px); pointer-events: none; border-radius: inherit; } } // ============================================ // 3. Animation Mixins // ============================================ @mixin hover-lift($distance: -2px, $duration: $duration-base) { transition: transform $duration $ease-smooth, box-shadow $duration $ease-smooth; &:hover { transform: translateY($distance); box-shadow: $shadow-lg; } } @mixin hover-scale($scale: 1.05, $duration: $duration-base) { transition: transform $duration $ease-smooth; &:hover { transform: scale($scale); } } @mixin float-animation($distance: 10px, $duration: 3s) { animation: float $duration ease-in-out infinite; @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-$distance); } } } // Ripple effect on click @mixin ripple-effect($color: $monaco-red-600) { position: relative; overflow: hidden; &::after { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba($color, 0.3); transform: translate(-50%, -50%); transition: width 0.6s, height 0.6s; } &:active::after { width: 300px; height: 300px; } } // Icon rotation on hover @mixin icon-hover-rotate($deg: 5deg, $duration: $duration-base) { .v-icon { transition: transform $duration $ease-smooth; } &:hover .v-icon { transform: rotate($deg); } } // Sliding active indicator @mixin sliding-indicator($color: $monaco-red-600, $width: 4px) { position: relative; &::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: $width; background: linear-gradient(135deg, $color 0%, darken($color, 10%) 100%); border-radius: 0 $radius-base $radius-base 0; transform: scaleY(0); transform-origin: center; transition: transform $duration-base $ease-smooth; } &.active::before, &--active::before { transform: scaleY(1); } } // ============================================ // 4. Component Classes // ============================================ // Glass Card .glass-card { @include glass-effect(); border-radius: $radius-2xl; padding: 1.5rem; @include hover-lift(-4px); &--dark { @include glass-dark(); } &--colored { @include glass-colored(); } } // Monaco Button .monaco-btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.625rem 1.25rem; font-weight: 500; font-size: 0.875rem; line-height: 1.25; border-radius: $radius-xl; transition: all $duration-base $ease-smooth; cursor: pointer; user-select: none; border: none; &--primary { background: $gradient-monaco; color: white; box-shadow: $shadow-md; &:hover:not(:disabled) { box-shadow: $shadow-monaco; transform: translateY(-1px); } } &--glass { @include glass-effect(0.8, 10px); color: $monaco-red-600; &:hover:not(:disabled) { background: rgba(255, 255, 255, 0.9); box-shadow: $shadow-glass-hover; transform: translateY(-1px); } } &--ghost { background: transparent; color: $monaco-red-600; border: 2px solid $monaco-red-600; &:hover:not(:disabled) { background: rgba($monaco-red-600, 0.1); border-color: $monaco-red-700; } } &:disabled { opacity: 0.5; cursor: not-allowed; } } // ============================================ // 5. Layout Enhancements // ============================================ // Navigation Drawer Glass Effect .v-navigation-drawer { @include glass-effect(0.95, 30px); border-right: 1px solid rgba(255, 255, 255, 0.2) !important; .v-list-item { border-radius: $radius-xl; margin: 0.25rem 0.75rem; transition: all $duration-base $ease-smooth; &:hover { background: rgba($monaco-red-600, 0.05); transform: translateX(2px); } &--active { background: $gradient-glass-light; color: $monaco-red-600 !important; position: relative; &::before { content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%); width: 3px; height: 70%; background: $gradient-monaco; border-radius: 0 2px 2px 0; } .v-icon { color: $monaco-red-600 !important; } } } } // App Bar Glass Effect .v-app-bar { @include glass-effect(0.9, 20px); border-bottom: 1px solid rgba(255, 255, 255, 0.2); &.admin-bar { background: linear-gradient(135deg, rgba($monaco-red-600, 0.95) 0%, rgba($monaco-red-900, 0.95) 100%) !important; } &.board-bar { background: linear-gradient(135deg, rgba($monaco-red-600, 0.9) 0%, rgba($monaco-red-800, 0.9) 100%) !important; } &.member-bar { background: $gradient-monaco-light !important; } } // ============================================ // 6. Animation Classes // ============================================ @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes slide-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes scale-in { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } .animate-fade-in { animation: fade-in $duration-base $ease-smooth; } .animate-slide-up { animation: slide-up $duration-base $ease-smooth; } .animate-scale-in { animation: scale-in $duration-base $ease-smooth; } // ============================================ // 7. Utility Classes // ============================================ // Glass utilities .glass { @include glass-effect(); } .glass-dark { @include glass-dark(); } .glass-colored { @include glass-colored(); } // Shadow utilities .shadow-monaco { box-shadow: $shadow-monaco; } .shadow-glass { box-shadow: $shadow-glass; } // Gradient utilities .bg-gradient-monaco { background: $gradient-monaco; } .bg-gradient-light { background: $gradient-monaco-light; } .bg-gradient-dark { background: $gradient-monaco-dark; } // ============================================ // 8. Responsive Utilities // ============================================ // Breakpoints $screen-sm: 640px; $screen-md: 768px; $screen-lg: 1024px; $screen-xl: 1280px; @mixin sm { @media (min-width: $screen-sm) { @content; } } @mixin md { @media (min-width: $screen-md) { @content; } } @mixin lg { @media (min-width: $screen-lg) { @content; } } @mixin xl { @media (min-width: $screen-xl) { @content; } } // ============================================ // 9. Motion Preferences // ============================================ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } // ============================================ // 10. Custom Scrollbar // ============================================ ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.05); border-radius: $radius-full; } ::-webkit-scrollbar-thumb { background: $gradient-monaco; border-radius: $radius-full; &:hover { background: $gradient-monaco-dark; } }