// MonacoUSA Portal - Main Stylesheet // Based on design-system.md specifications // Import design tokens for bolt.ai style @import 'design-tokens'; // Import bolt.ai glass style overrides @import 'glass-bolt-style'; // Import component styles @import 'components/dashboards'; // ============================================ // 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); @supports (backdrop-filter: blur($blur)) or (-webkit-backdrop-filter: blur($blur)) { 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) { // Fallback for browsers without backdrop-filter support background: rgba(255, 255, 255, $opacity * 0.95); 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) ) !important; // Modern browsers with backdrop-filter support @supports (backdrop-filter: blur($blur)) or (-webkit-backdrop-filter: blur($blur)) { backdrop-filter: blur($blur) saturate(180%); -webkit-backdrop-filter: blur($blur) saturate(180%); } border: 1px solid rgba(255, 255, 255, 0.25) !important; 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) !important; position: relative; // Noise texture overlay &::before { content: ''; position: absolute; inset: 0; top: 0; left: 0; right: 0; bottom: 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. Form Input Enhancements // ============================================ // Glass morphism for form inputs .glass-input { .v-input__control { background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.3); border-radius: $radius-xl; transition: all $duration-base $ease-smooth; &:hover { background: rgba(255, 255, 255, 0.8); border-color: rgba($monaco-red-600, 0.2); } } &.v-input--focused { .v-input__control { background: rgba(255, 255, 255, 0.9); border-color: $monaco-red-600; box-shadow: 0 0 0 3px rgba($monaco-red-600, 0.1); } } } // Floating label animation .floating-label { .v-label { transition: all $duration-base $ease-smooth; transform-origin: left center; } &.v-input--focused, &.v-input--dirty { .v-label { transform: translateY(-150%) scale(0.85); color: $monaco-red-600; } } } // Glass select dropdown .glass-select { .v-select__control { @include glass-effect(0.7, 10px); border-radius: $radius-xl; &:hover { background: rgba(255, 255, 255, 0.85); } } .v-menu__content { @include glass-effect(0.95, 20px); border-radius: $radius-xl; margin-top: 4px; } } // Glass checkbox and radio .glass-checkbox, .glass-radio { .v-selection-control__wrapper { @include glass-effect(0.6, 5px); border-radius: $radius-md; padding: 0.25rem; } &.v-input--dirty { .v-selection-control__input { color: $monaco-red-600; } } } // ============================================ // 6. 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. Dialog & Modal Enhancements // ============================================ // Glass morphism dialogs .glass-dialog { .v-card { @include enhanced-glass(0.95, 30px); border-radius: $radius-2xl !important; .v-card-title { background: linear-gradient(135deg, rgba($monaco-red-600, 0.05) 0%, rgba($monaco-red-700, 0.05) 100%); border-bottom: 1px solid rgba($monaco-red-600, 0.1); padding: 1.25rem 1.5rem; font-weight: 600; } .v-card-text { padding: 1.5rem; } .v-card-actions { background: linear-gradient(135deg, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.3) 100%); border-top: 1px solid rgba(255, 255, 255, 0.3); padding: 1rem 1.5rem; } } } // Glass overlay .glass-overlay { .v-overlay__scrim { background: rgba(0, 0, 0, 0.4); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); } } // Modal animations .modal-enter-active { animation: modal-enter $duration-base $ease-out-back; } .modal-leave-active { animation: modal-leave $duration-fast $ease-smooth; } @keyframes modal-enter { from { opacity: 0; transform: scale(0.9) translateY(-20px); } to { opacity: 1; transform: scale(1) translateY(0); } } @keyframes modal-leave { from { opacity: 1; transform: scale(1) translateY(0); } to { opacity: 0; transform: scale(0.95) translateY(10px); } } // Alert/Snackbar glass effect .glass-snackbar { .v-snackbar__wrapper { @include glass-colored($monaco-red-600, 0.15, 20px); .v-snackbar__content { color: $gray-900; font-weight: 500; } } &.success { .v-snackbar__wrapper { @include glass-colored(#10b981, 0.15, 20px); } } &.error { .v-snackbar__wrapper { @include glass-colored(#ef4444, 0.15, 20px); } } } // ============================================ // 7. 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); } } // Shimmer effect for logos and badges @keyframes shimmer { 0% { background-position: -1000px 0; } 100% { background-position: 1000px 0; } } // Pulse animation for notifications @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.05); opacity: 0.8; } 100% { transform: scale(1); opacity: 1; } } // Float animation for dashboard elements @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } // Glow pulse for important elements @keyframes glow-pulse { 0%, 100% { box-shadow: 0 0 20px rgba($monaco-red-600, 0.3); } 50% { box-shadow: 0 0 30px rgba($monaco-red-600, 0.5); } } .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; } .animate-shimmer { background: linear-gradient( 90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.4) 50%, rgba(255,255,255,0) 100% ); background-size: 1000px 100%; animation: shimmer 2s infinite; } .animate-pulse { animation: pulse 2s infinite; } .animate-float { animation: float 3s ease-in-out infinite; } .animate-glow-pulse { animation: glow-pulse 2s ease-in-out infinite; } // ============================================ // 8. Enhanced Button Styles // ============================================ // Override Vuetify button styles globally .v-btn { text-transform: none !important; font-weight: 600; letter-spacing: 0.025em; transition: all $duration-base $ease-smooth; // Primary gradient button &.v-btn--elevated { background: $gradient-monaco !important; color: white !important; box-shadow: $shadow-md; &:hover:not(:disabled) { background: $gradient-monaco-dark !important; box-shadow: $shadow-monaco; transform: translateY(-2px); } &:active:not(:disabled) { transform: translateY(0); box-shadow: $shadow-sm; } } // Outlined button with gradient border &.v-btn--outlined { position: relative; border: 2px solid $monaco-red-600; color: $monaco-red-600; &:hover:not(:disabled) { background: rgba($monaco-red-600, 0.05); transform: translateY(-1px); box-shadow: $shadow-sm; } } // Text button with gradient text &.v-btn--text { background: transparent; color: $monaco-red-600; &:hover:not(:disabled) { background: rgba($monaco-red-600, 0.05); } } // Flat/tonal button with glass effect &.v-btn--flat, &.v-btn--tonal { @include glass-effect(0.7, 10px); &:hover:not(:disabled) { background: rgba(255, 255, 255, 0.9); transform: translateY(-1px); } } // Icon button with glass effect &.v-btn--icon { @include glass-effect(0.6, 8px); &:hover:not(:disabled) { @include glass-colored($monaco-red-600, 0.1, 10px); transform: scale(1.1); } } // Floating action button &.v-btn--fab { background: $gradient-monaco !important; color: white !important; box-shadow: $shadow-monaco; &:hover:not(:disabled) { transform: translateY(-3px); box-shadow: $shadow-monaco-intense; } } // Loading state &.v-btn--loading { .v-btn__loader { color: white; } } // Disabled state &:disabled { opacity: 0.5; cursor: not-allowed; } } // ============================================ // 9. 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; } } // ============================================ // 11. Global Production Overrides // ============================================ // Ensure glass morphism is applied to all dashboard cards .v-card, .glass-card, .dashboard-header, .stat-card { @include enhanced-glass(); border-radius: 20px !important; } // Bento Grid System - Global Application .bento-grid { display: grid !important; grid-template-columns: repeat(12, 1fr) !important; gap: 1.5rem !important; .bento-item { border-radius: 20px !important; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; &--small { grid-column: span 3 !important; } &--medium { grid-column: span 4 !important; } &--large { grid-column: span 6 !important; } &--xlarge { grid-column: span 8 !important; } &--full { grid-column: span 12 !important; } &:hover { transform: translateY(-4px) !important; } } // Responsive overrides @media (max-width: 1280px) { .bento-item--xlarge { grid-column: span 12 !important; } .bento-item--large { grid-column: span 6 !important; } .bento-item--medium { grid-column: span 6 !important; } } @media (max-width: 960px) { .bento-item--large { grid-column: span 12 !important; } .bento-item--medium { grid-column: span 12 !important; } } } // Dashboard specific glass overrides .admin-dashboard, .board-dashboard, .member-dashboard { .dashboard-header { @include enhanced-glass(); text-align: center !important; padding: 2rem !important; margin-bottom: 2rem !important; } .dashboard-title { font-size: 2.5rem !important; font-weight: 700 !important; background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%) !important; -webkit-background-clip: text !important; -webkit-text-fill-color: transparent !important; background-clip: text !important; } .glass-badge { background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%) !important; color: white !important; font-weight: 600 !important; } } // Sidebar width configuration - respects rail mode .v-navigation-drawer { // Only apply fixed width when NOT in rail mode &:not(.v-navigation-drawer--rail) { width: 280px; max-width: 280px; min-width: 280px; } // Ensure rail mode uses correct width - increased to fit icons &.v-navigation-drawer--rail { width: 100px !important; } &__content { @include glass-effect(0.95, 10px); } } // Keep hamburger menu visible - removed the hiding CSS // Ensure hamburger button is visible and clickable .glass-app-bar { .v-btn:first-child { display: flex !important; visibility: visible !important; opacity: 1 !important; z-index: 10 !important; } } // Animation classes .animated-entrance { animation: slide-up 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) both !important; } @keyframes slide-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } // Mobile responsiveness improvements @media (max-width: 375px) { .dashboard-title { font-size: 1.8rem !important; word-break: break-word !important; } .dashboard-header { padding: 1rem !important; } } // Enhanced Profile Card Styles .glass-profile-card { background: rgba(255, 255, 255, 0.08) !important; backdrop-filter: blur(10px) !important; border: 1px solid rgba(255, 255, 255, 0.1) !important; border-radius: 12px !important; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; &:hover { background: rgba(255, 255, 255, 0.12) !important; border-color: rgba(255, 255, 255, 0.15) !important; box-shadow: 0 8px 32px rgba(31, 38, 135, 0.15) !important; } } .profile-menu-btn { transition: all 0.2s ease !important; &:hover { transform: scale(1.05) !important; background: rgba(255, 255, 255, 0.1) !important; } } .glass-menu { background: rgba(28, 28, 30, 0.95) !important; backdrop-filter: blur(20px) !important; border: 1px solid rgba(255, 255, 255, 0.1) !important; border-radius: 12px !important; overflow: hidden !important; .v-list-item { transition: all 0.2s ease !important; &:hover { background: rgba(255, 255, 255, 0.08) !important; padding-left: 20px !important; } &.hover-lift:hover { transform: translateX(4px) !important; } } } .glass-badge { background: linear-gradient(135deg, rgba(206, 26, 26, 0.2), rgba(255, 255, 255, 0.1)) !important; backdrop-filter: blur(10px) !important; border: 1px solid rgba(206, 26, 26, 0.3) !important; color: #CE1A1A !important; font-weight: 600 !important; letter-spacing: 0.5px !important; }