:root { /* Modern Color Palette */ --primary: #6C63FF; --primary-light: #8B85FF; --primary-dark: #4B45CC; --secondary: #2EC4B6; --accent: #FF3366; --background: #1A1B1F; --surface: #2A2B30; --text-primary: #FFFFFF; --text-secondary: #B0B0B0; --success: #00C853; --error: #FF3D00; --warning: #FFD600; --info: #00B0FF; /* Spacing */ --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 16px; --spacing-lg: 24px; --spacing-xl: 32px; /* Shadows */ --shadow-sm: 0 2px 4px rgba(0,0,0,0.1); --shadow-md: 0 4px 8px rgba(0,0,0,0.12); --shadow-lg: 0 8px 16px rgba(0,0,0,0.14); --shadow-xl: 0 12px 24px rgba(0,0,0,0.16); } /* Modern Reset */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } /* Smooth Scrolling */ html { scroll-behavior: smooth; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--background); color: var(--text-primary); line-height: 1.6; overflow-x: hidden; } /* Modern Container */ .container { max-width: 1200px; margin: 0 auto; padding: var(--spacing-lg); position: relative; } /* Header Styles */ .header { background: var(--surface); padding: var(--spacing-lg) 0; position: sticky; top: 0; z-index: 100; backdrop-filter: blur(10px); animation: slideInDown 0.5s ease-out; } .nav-buttons { display: flex; gap: var(--spacing-md); justify-content: center; } /* Button Styles */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.75rem 1.25rem; border: none; border-radius: 8px; font-weight: 600; font-size: 0.95rem; cursor: pointer; transition: all 0.3s ease; text-decoration: none; line-height: 1; } .btn i { font-size: 1.1rem; } .btn-primary { background-color: var(--primary); color: white; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .btn-primary:hover { background-color: var(--primary-dark); box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15); transform: translateY(-2px); } .btn-primary:active { transform: translateY(1px); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .btn-secondary { background-color: var(--surface); color: var(--text-primary); border: 1px solid var(--text-secondary); } .btn-secondary:hover { background-color: var(--surface); border-color: var(--primary); } .btn-icon { background: transparent; color: var(--text-secondary); padding: 0.5rem; border-radius: 50%; } .btn-icon:hover { background-color: rgba(0, 0, 0, 0.05); color: var(--text-primary); } .btn:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; } /* Form Action Buttons */ .form-actions { display: flex; justify-content: space-between; margin-top: 2rem; } .form-actions .btn { flex-grow: 1; margin: 0 0.5rem; } /* Navigation Buttons */ .app-navigation .btn { min-width: 120px; } .app-navigation .btn-primary { background-color: var(--primary); color: white; } .app-navigation .btn-secondary { background-color: var(--surface); color: var(--text-primary); border: 1px solid var(--text-secondary); } /* Responsive Adjustments */ @media (max-width: 768px) { .btn { padding: 0.6rem 1rem; font-size: 0.9rem; } .form-actions { flex-direction: column; } .form-actions .btn { margin: 0.5rem 0; } .app-navigation { flex-direction: column; width: 100%; } .app-navigation .btn { width: 100%; margin-bottom: 0.5rem; } } /* Centered Form Container */ .form-container { max-width: 500px; margin: 2rem auto; padding: 2rem; background-color: var(--background-secondary); border-radius: 10px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .form-container h2 { text-align: center; margin-bottom: 1.5rem; color: var(--text-primary); } .form-group { margin-bottom: 1rem; } .form-group label { display: block; margin-bottom: 0.5rem; color: var(--text-secondary); } .form-group input, .form-group textarea, .form-group select { width: 100%; padding: 0.75rem; border: 1px solid var(--border-color); border-radius: 5px; background-color: var(--background); color: var(--text-primary); transition: border-color 0.3s; } .form-group input:focus, .form-group textarea:focus, .form-group select:focus { outline: none; border-color: var(--primary); } .form-actions { display: flex; justify-content: center; gap: 1rem; margin-top: 1.5rem; } .form-actions .btn { padding: 0.75rem 1.5rem; border-radius: 5px; transition: background-color 0.3s; } .form-actions .btn-primary { background-color: var(--primary); color: white; } .form-actions .btn-secondary { background-color: var(--background-secondary); color: var(--text-primary); border: 1px solid var(--border-color); } .form-actions .btn:hover { opacity: 0.9; } /* File Input Styling */ .file-input-container { position: relative; overflow: hidden; } .file-input-container input[type="file"] { position: absolute; left: -9999px; } .file-input-label { display: inline-block; padding: 0.75rem; background-color: var(--background-secondary); border: 1px solid var(--border-color); border-radius: 5px; cursor: pointer; transition: background-color 0.3s; } .file-input-label:hover { background-color: var(--background-tertiary); } /* Dark Mode Compatibility */ @media (prefers-color-scheme: dark) { .form-container { background-color: var(--background-secondary-dark); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2); } .form-container h2 { color: var(--text-primary-light); } .form-group label { color: var(--text-secondary-light); } .form-group input, .form-group textarea, .form-group select { background-color: var(--background-dark); color: var(--text-primary-light); border-color: var(--border-color-dark); } .form-group input:focus, .form-group textarea:focus, .form-group select:focus { border-color: var(--primary-light); } .form-actions .btn-secondary { background-color: var(--background-secondary-dark); color: var(--text-primary-light); border-color: var(--border-color-dark); } .file-input-label { background-color: var(--background-secondary-dark); border-color: var(--border-color-dark); } .file-input-label:hover { background-color: var(--background-tertiary-dark); } } /* Responsive Adjustments */ @media (max-width: 600px) { .form-container { max-width: 100%; margin: 1rem; padding: 1rem; } .form-actions { flex-direction: column; } .form-actions .btn { width: 100%; } } /* Form Styles */ .section-form { display: flex; justify-content: center; align-items: center; min-height: calc(100vh - 200px); padding: 2rem; } .item-form { background-color: var(--surface); border-radius: 12px; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); padding: 2.5rem; width: 100%; max-width: 500px; transition: all 0.3s ease; } .form-header { text-align: center; margin-bottom: 2rem; } .form-header h2 { color: var(--text-primary); font-size: 1.75rem; margin: 0; font-weight: 600; } .form-group { margin-bottom: 1.5rem; } .form-group label { display: block; margin-bottom: 0.5rem; color: var(--text-secondary); font-weight: 500; } .form-group input[type="text"], .form-group textarea { width: 100%; padding: 0.75rem 1rem; border: 1px solid var(--text-secondary); border-radius: 8px; background-color: var(--surface); color: var(--text-primary); transition: all 0.3s ease; font-size: 1rem; } .form-group input[type="text"]:focus, .form-group textarea:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary), 0.2); } .form-group textarea { resize: vertical; min-height: 120px; } /* Custom File Input Styles */ .file-upload { position: relative; width: 100%; } .file-upload input[type="file"] { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 10; } .file-upload::before { content: 'Choose File'; position: absolute; top: 0; left: 0; width: 100%; height: 45px; background-color: var(--surface); border: 1px solid var(--text-secondary); border-radius: 8px; display: flex; align-items: center; padding: 0 1rem; color: var(--text-secondary); transition: all 0.3s ease; } .file-upload:hover::before { background-color: var(--surface); } .file-upload input[type="file"]:focus::before { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary), 0.2); } .file-upload input[type="file"]::-webkit-file-upload-button { display: none; } .image-preview { margin-top: 1rem; display: flex; justify-content: center; position: relative; } .image-preview img { max-width: 100%; max-height: 250px; border-radius: 8px; object-fit: cover; } .remove-image-btn { position: absolute; top: 10px; right: 10px; background-color: rgba(255, 255, 255, 0.9); color: var(--text-primary); border: none; border-radius: 50%; width: 30px; height: 30px; display: flex; justify-content: center; align-items: center; cursor: pointer; transition: all 0.3s ease; } .remove-image-btn:hover { background-color: var(--error); color: white; } /* Items Grid */ .items-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); justify-content: center; align-items: center; gap: 1.5rem; max-width: 1200px; margin: 2rem auto; padding: 0 1rem; } .item { background: var(--surface); border-radius: 16px; overflow: hidden; position: relative; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); opacity: 0; transform: translateY(20px); animation: fadeInUp 0.5s ease-out forwards; } .item:hover { transform: translateY(-8px); box-shadow: var(--shadow-xl); } .item-image { width: 100%; height: 200px; object-fit: cover; transition: transform 0.3s ease; } .item:hover .item-image { transform: scale(1.05); } .item-content { padding: var(--spacing-lg); } .item-title { font-size: 1.25rem; margin-bottom: var(--spacing-sm); color: var(--text-primary); } .item-description { color: var(--text-secondary); font-size: 0.9rem; } /* Items Grid Animations */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } @keyframes slideInFromRight { from { opacity: 0; transform: translateX(50px); } to { opacity: 1; transform: translateX(0); } } @keyframes bounceIn { 0% { opacity: 0; transform: scale(0.3); } 50% { opacity: 0.9; transform: scale(1.1); } 70% { opacity: 1; transform: scale(0.9); } 100% { opacity: 1; transform: scale(1); } } /* List Items Animations */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } @keyframes slideInFromRight { from { opacity: 0; transform: translateX(50px); } to { opacity: 1; transform: translateX(0); } } @keyframes bounceIn { 0% { opacity: 0; transform: scale(0.3); } 50% { opacity: 0.9; transform: scale(1.1); } 70% { opacity: 1; transform: scale(0.9); } 100% { opacity: 1; transform: scale(1); } } /* Item Card Animations */ .items-grid .item-card { animation: fadeInUp 0.6s ease-out; animation-fill-mode: backwards; } .items-grid .item-card:nth-child(2n) { animation-name: scaleIn; } .items-grid .item-card:nth-child(3n) { animation-name: slideInFromRight; } .items-grid .item-card:nth-child(4n) { animation-name: bounceIn; } /* Staggered Animation Timing */ .items-grid .item-card { animation-delay: calc(var(--item-index, 0) * 0.1s); } /* Hover Effects */ .item-card { transition: transform 0.3s ease, box-shadow 0.3s ease; } .item-card:hover { transform: translateY(-10px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1); } /* Dark Mode Hover */ @media (prefers-color-scheme: dark) { .item-card:hover { box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3); } } /* Responsive Animation Adjustments */ @media (prefers-reduced-motion: reduce) { .items-grid .item-card { animation: none; opacity: 1; transform: none; } } /* Items Grid Styles */ .items-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 1.5rem; padding: 1rem; } .item-card { background-color: var(--surface); border-radius: 12px; overflow: hidden; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); transition: all 0.3s ease; animation: fadeInUp 0.6s ease-out; animation-fill-mode: backwards; } .item-card-image { width: 100%; height: 250px; object-fit: cover; transition: transform 0.3s ease; } .item-card:hover .item-card-image { transform: scale(1.05); } .item-card-content { padding: 1rem; } .item-card-title-container, .item-card-description-container { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.5rem; } .item-card-title-icon, .item-card-description-icon { color: var(--primary); font-size: 1.25rem; opacity: 0.7; flex-shrink: 0; } .item-card-title { margin: 0; line-height: 1.3; } .item-card-description { margin: 0; } .item-card-meta { display: flex; align-items: center; justify-content: space-between; margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1px solid var(--text-secondary); font-size: 0.8rem; } .item-card-date { display: flex; align-items: center; color: var(--text-secondary); gap: 0.5rem; } .item-card-date i { color: var(--primary); font-size: 1rem; opacity: 0.7; } /* Responsive Adjustments */ @media (max-width: 768px) { .items-grid { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 1rem; padding: 0 0.5rem; } } @media (max-width: 480px) { .items-grid { grid-template-columns: 1fr; max-width: 100%; } } /* Centered Content Container */ .content-container { max-width: 1200px; margin: 0 auto; padding: 2rem 1rem; } /* Centering Empty State */ .empty-state { display: flex; justify-content: center; align-items: center; height: 100vh; text-align: center; } .empty-state-content { max-width: 400px; padding: 2rem; background-color: var(--background-secondary); border-radius: 10px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } /* Dark Mode Compatibility */ @media (prefers-color-scheme: dark) { .empty-state-content { background-color: var(--background-secondary-dark); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2); } } /* Notification System */ .notification-container { position: fixed; top: var(--spacing-lg); right: var(--spacing-lg); z-index: 1000; } .notification { background: var(--surface); border-radius: 12px; padding: var(--spacing-md) var(--spacing-lg); margin-bottom: var(--spacing-md); box-shadow: var(--shadow-lg); display: flex; align-items: center; gap: var(--spacing-md); min-width: 300px; max-width: 400px; animation: slideInRight 0.3s ease-out; } .notification::before { content: ''; width: 4px; height: 100%; position: absolute; left: 0; top: 0; border-radius: 4px 0 0 4px; } .notification-success::before { background: var(--success); } .notification-error::before { background: var(--error); } .notification-info::before { background: var(--info); } .notification-warning::before { background: var(--warning); } /* Loading States */ .loading-spinner { width: 40px; height: 40px; border: 3px solid rgba(255, 255, 255, 0.1); border-radius: 50%; border-top-color: var(--primary); animation: spin 1s linear infinite; margin: 0 auto; } /* Animations */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideInDown { from { transform: translateY(-100%); opacity: 0; } to { transform: translateY(0); opacity: 1; } } @keyframes slideInRight { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } /* Animation Utilities */ .fade-in { animation: fadeIn 0.5s ease-out; } .fade-in-up { animation: fadeInUp 0.5s ease-out; } .slide-in-down { animation: slideInDown 0.5s ease-out; } .slide-in-right { animation: slideInRight 0.5s ease-out; } .pulse { animation: pulse 2s infinite; } /* Responsive Design */ @media (max-width: 768px) { .container { padding: var(--spacing-md); } .items-grid { grid-template-columns: 1fr; } .notification { min-width: auto; max-width: 100%; margin: 0 var(--spacing-md); } } /* Dark Mode Optimization */ @media (prefers-color-scheme: dark) { :root { --surface: #2A2B30; --background: #1A1B1F; } } /* App Header Styles */ .app-header { background-color: var(--background); padding: 1rem; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .app-header .header-content { display: flex; justify-content: space-between; align-items: center; max-width: 1200px; margin: 0 auto; } .app-branding { display: flex; flex-direction: column; align-items: flex-start; } .app-branding h1 { color: var(--text-primary); font-size: 1.5rem; margin: 0; font-weight: 600; } .app-copyright { color: var(--text-secondary); font-size: 0.75rem; margin-top: 0.25rem; opacity: 0.7; } .app-navigation { display: flex; gap: 1rem; } /* Responsive Adjustments */ @media (max-width: 768px) { .app-header .header-content { flex-direction: column; gap: 1rem; } .app-branding { align-items: center; text-align: center; } .app-navigation { width: 100%; justify-content: center; } } /* Empty State Styles */ .empty-state { display: flex; justify-content: center; align-items: center; min-height: 50vh; text-align: center; background: none; border-radius: 12px; padding: 2rem; margin: 1rem 0; } .empty-state-content { display: flex; flex-direction: column; align-items: center; max-width: 400px; } .empty-state-icon { font-size: 5rem; color: var(--text-secondary); margin-bottom: 1rem; opacity: 0.7; transition: transform 0.3s ease; } .empty-state-title { font-size: 1.5rem; color: var(--text-primary); margin-bottom: 0.5rem; font-weight: 600; } .empty-state-description { color: var(--text-secondary); margin-bottom: 1.5rem; line-height: 1.6; max-width: 300px; } /* Dark Mode Compatibility */ @media (prefers-color-scheme: dark) { .empty-state-icon { color: var(--text-secondary-light); } .empty-state-title { color: var(--text-primary-light); } .empty-state-description { color: var(--text-secondary-light); } } /* Responsive Adjustments */ @media (max-width: 768px) { .empty-state { padding: 1rem; } .empty-state-icon { font-size: 3rem; } .empty-state-title { font-size: 1.25rem; } .empty-state-description { font-size: 0.9rem; } } /* Dark Mode Compatibility */ @media (prefers-color-scheme: dark) { .item-form { background-color: var(--surface); } .form-header h2 { color: var(--text-primary); } .form-group label { color: var(--text-secondary); } .form-group input[type="text"], .form-group textarea { background-color: var(--surface); color: var(--text-primary); border-color: var(--text-secondary); } } /* Responsive Adjustments */ @media (max-width: 768px) { .section-form { padding: 1rem; } .item-form { padding: 1.5rem; max-width: 100%; } .form-header h2 { font-size: 1.5rem; } .form-actions { flex-direction: column; } .form-actions .btn { margin: 0.5rem 0; } } /* Loading Overlay */ #loading-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; z-index: 1000; } .loading-container { background-color: var(--background-secondary); padding: 2rem; border-radius: 10px; display: flex; flex-direction: column; align-items: center; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .loading-spinner { width: 50px; height: 50px; border: 4px solid var(--primary); border-top: 4px solid var(--primary-light); border-radius: 50%; animation: spin 1s linear infinite; margin-bottom: 1rem; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .loading-message { color: var(--text-primary); font-size: 1rem; } /* Item Card Actions */ .item-card-actions { display: flex; justify-content: space-between; margin-top: 1rem; gap: 0.5rem; } .btn-view-details, .btn-download { flex: 1; display: flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.5rem; border-radius: 5px; transition: background-color 0.3s, color 0.3s; } .btn-view-details { background-color: var(--primary); color: white; } .btn-download { background-color: var(--background-secondary); color: var(--text-primary); border: 1px solid var(--border-color); } .btn-view-details:hover { background-color: var(--primary-dark); } .btn-download:hover { background-color: var(--background-tertiary); } /* Music Control Button */ .btn-music-control { position: fixed; bottom: 20px; right: 20px; width: 50px; height: 50px; border-radius: 50%; background-color: var(--primary); color: white; display: flex; justify-content: center; align-items: center; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); z-index: 100; transition: background-color 0.3s; } .btn-music-control:hover { background-color: var(--primary-dark); } .btn-music-control.active { background-color: var(--primary-light); } /* Item Details Modal */ .item-details-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); display: flex; justify-content: center; align-items: center; z-index: 1000; } .modal-content { background-color: var(--background-secondary); max-width: 800px; width: 90%; border-radius: 10px; display: flex; overflow: hidden; box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); } .modal-image { width: 50%; object-fit: cover; } .modal-details { padding: 2rem; width: 50%; display: flex; flex-direction: column; } .modal-close { position: absolute; top: 10px; right: 10px; font-size: 2rem; cursor: pointer; color: var(--text-primary); } .modal-meta { margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--border-color); } .modal-actions { margin-top: auto; } /* Modal Actions Styling */ .modal-actions { display: flex; justify-content: space-between; gap: 1rem; margin-top: auto; } .btn-back, .btn-download { flex: 1; display: flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.75rem; border-radius: 5px; transition: background-color 0.3s, color 0.3s; font-size: 0.9rem; } .btn-back { background-color: var(--background-secondary); color: var(--text-primary); border: 1px solid var(--border-color); } .btn-download { background-color: var(--primary); color: white; } .btn-back:hover { background-color: var(--background-tertiary); } .btn-download:hover { background-color: var(--primary-dark); } .btn-back i, .btn-download i { font-size: 1rem; } /* Dark Mode Compatibility */ @media (prefers-color-scheme: dark) { .btn-back { background-color: var(--background-secondary-dark); color: var(--text-primary-light); border-color: var(--border-color-dark); } .btn-back:hover { background-color: var(--background-tertiary-dark); } } /* Background Blur Overlay */ .background-blur-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.7); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); z-index: 999; display: none; opacity: 0; transition: opacity 0.3s ease-in-out; } .background-blur-overlay.active { display: block; opacity: 1; } /* Blur Effect for Modals and Overlays */ .item-details-modal, #loading-overlay { backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); background-color: rgba(0, 0, 0, 0.5); } /* Fallback for browsers without backdrop-filter support */ @supports not (backdrop-filter: blur(10px)) { .background-blur-overlay { background-color: rgba(255, 255, 255, 0.9); } } /* Dark Mode Background Blur */ @media (prefers-color-scheme: dark) { .background-blur-overlay { background-color: rgba(0, 0, 0, 0.7); } }