// Import component styles @import 'styles/modal.scss'; @import 'styles/comments.scss'; @import 'styles/forms.scss'; @import 'styles/markdown.scss'; // CSS Custom Properties for theming :root { --bs-body-bg: #ffffff; --bs-body-color: #212529; --bs-navbar-bg: #f8f9fa; --bs-navbar-color: rgba(0, 0, 0, 0.65); --bs-navbar-active-color: rgba(0, 0, 0, 0.9); --bs-navbar-brand-color: #0d6efd; --bs-hero-bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%); --bs-hero-color: #ffffff; --bs-card-bg: #ffffff; --bs-card-border: rgba(0, 0, 0, 0.125); --bs-feature-bg: #f8f9fa; --bs-footer-bg: #e9ecef; --bs-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); --bs-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); --bs-primary: #0d6efd; --bs-primary-rgb: 13, 110, 253; --bs-secondary: #6c757d; --bs-danger: #dc3545; --bs-danger-rgb: 220, 53, 69; --bs-success: #198754; } // Dark theme variables .dark-theme { --bs-body-bg: #0d1117; --bs-body-color: #f0f6fc; --bs-navbar-bg: #161b22; --bs-navbar-color: rgba(240, 246, 252, 0.65); --bs-navbar-active-color: rgba(240, 246, 252, 0.9); --bs-navbar-brand-color: #58a6ff; --bs-hero-bg: linear-gradient(135deg, #1f2937 0%, #374151 100%); --bs-hero-color: #f0f6fc; --bs-card-bg: #21262d; --bs-card-border: rgba(240, 246, 252, 0.125); --bs-feature-bg: #161b22; --bs-footer-bg: #0d1117; --bs-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.3); --bs-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.5); } // Global styles * { transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease; } body { background-color: var(--bs-body-bg); color: var(--bs-body-color); font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; } // Navbar styling .navbar { background-color: var(--bs-navbar-bg) !important; backdrop-filter: blur(10px); border-bottom: 1px solid var(--bs-card-border); box-shadow: var(--bs-shadow); .navbar-brand { color: var(--bs-navbar-brand-color) !important; font-weight: 700; font-size: 1.5rem; &:hover { transform: scale(1.05); transition: transform 0.2s ease; } } .navbar-nav .nav-link { color: var(--bs-navbar-color) !important; font-weight: 500; padding: 0.5rem 1rem !important; border-radius: 0.375rem; margin: 0 0.25rem; &:hover { background-color: rgba(var(--bs-primary-rgb), 0.1); color: var(--bs-navbar-active-color) !important; } &.active { background-color: rgba(var(--bs-primary-rgb), 0.15); color: var(--bs-navbar-active-color) !important; } } } // Hero section .hero-section { background: var(--bs-hero-bg); color: var(--bs-hero-color); min-height: 60vh; display: flex; align-items: center; position: relative; overflow: hidden; &::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: url('data:image/svg+xml,'); opacity: 0.3; } .container { position: relative; z-index: 1; } h1 { text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); margin-bottom: 1.5rem; } .lead { text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); opacity: 0.95; } .btn { box-shadow: var(--bs-shadow-lg); border: none; font-weight: 600; &:hover { transform: translateY(-2px); box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.2); } } } // Card styling .card { background-color: var(--bs-card-bg); border: 1px solid var(--bs-card-border); box-shadow: var(--bs-shadow); transition: all 0.3s ease; &:hover { transform: translateY(-5px); box-shadow: var(--bs-shadow-lg); } .feature-icon { transition: transform 0.3s ease; } &:hover .feature-icon { transform: scale(1.1) rotate(5deg); } } // Theme toggle styling .form-check-input { &:checked { background-color: #0d6efd; border-color: #0d6efd; } } // Background sections .bg-body-secondary { background-color: var(--bs-feature-bg) !important; } .bg-body-tertiary { background-color: var(--bs-footer-bg) !important; } // Animations @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .card { animation: fadeInUp 0.6s ease forwards; &:nth-child(1) { animation-delay: 0.1s; } &:nth-child(2) { animation-delay: 0.2s; } &:nth-child(3) { animation-delay: 0.3s; } } // Responsive improvements @media (max-width: 768px) { .hero-section { min-height: 50vh; text-align: center; h1 { font-size: 2.5rem; } .lead { font-size: 1.1rem; } } .navbar-brand { font-size: 1.25rem !important; } .feature-icon { width: 3rem !important; height: 3rem !important; } } // Custom scrollbar for webkit browsers ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: var(--bs-body-bg); } ::-webkit-scrollbar-thumb { background: rgba(var(--bs-primary-rgb), 0.3); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(var(--bs-primary-rgb), 0.5); } // Focus styles for accessibility .btn:focus, .form-check-input:focus, .nav-link:focus { box-shadow: 0 0 0 0.25rem rgba(var(--bs-primary-rgb), 0.25); } // Print styles @media print { .navbar, .form-check, footer { display: none !important; } .hero-section { background: none !important; color: black !important; } } // Kanban Board Styles .kanban-board { background-color: var(--bs-body-bg); min-height: 100vh; padding: 2rem 0; .kanban-header { margin-bottom: 2rem; text-align: center; h1 { color: var(--bs-body-color); font-weight: 700; margin-bottom: 0.5rem; } .kanban-description { color: var(--bs-navbar-color); font-size: 1.1rem; } } .kanban-columns { display: flex; gap: 1.5rem; overflow-x: auto; padding: 1rem 0; min-height: 70vh; @media (max-width: 768px) { flex-direction: column; gap: 1rem; } } .kanban-column { flex: 1; min-width: 300px; background-color: var(--bs-feature-bg); border-radius: 0.75rem; padding: 1.5rem; box-shadow: var(--bs-shadow); border: 1px solid var(--bs-card-border); .column-header { margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 2px solid var(--bs-card-border); .column-title { font-size: 1.25rem; font-weight: 600; color: var(--bs-body-color); margin-bottom: 0.5rem; display: flex; align-items: center; gap: 0.5rem; .card-count { background-color: var(--bs-navbar-color); color: var(--bs-body-bg); border-radius: 50%; width: 1.5rem; height: 1.5rem; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 700; } } .column-description { color: var(--bs-navbar-color); font-size: 0.9rem; margin: 0; } } .column-cards { display: flex; flex-direction: column; gap: 1rem; min-height: 200px; } } .kanban-card { background-color: var(--bs-card-bg); border: 1px solid var(--bs-card-border); border-radius: 0.5rem; padding: 1rem; box-shadow: var(--bs-shadow); transition: all 0.3s ease; cursor: pointer; &:hover { transform: translateY(-2px); box-shadow: var(--bs-shadow-lg); } .card-header { margin-bottom: 0.75rem; .card-title { font-size: 1rem; font-weight: 600; color: var(--bs-body-color); margin-bottom: 0.5rem; line-height: 1.3; } .card-description { color: var(--bs-navbar-color); font-size: 0.875rem; line-height: 1.4; margin: 0; } } .card-meta { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 0.75rem; .priority-badge { padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; &.priority-high { background-color: rgba(220, 53, 69, 0.1); color: #dc3545; border: 1px solid rgba(220, 53, 69, 0.2); } &.priority-medium { background-color: rgba(255, 193, 7, 0.1); color: #ffc107; border: 1px solid rgba(255, 193, 7, 0.2); } &.priority-low { background-color: rgba(25, 135, 84, 0.1); color: #198754; border: 1px solid rgba(25, 135, 84, 0.2); } } .due-date { background-color: rgba(var(--bs-primary-rgb), 0.1); color: var(--bs-primary); padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 0.75rem; font-weight: 500; border: 1px solid rgba(var(--bs-primary-rgb), 0.2); } } .card-tags { display: flex; flex-wrap: wrap; gap: 0.25rem; margin-bottom: 0.75rem; .tag { background-color: var(--bs-navbar-color); color: var(--bs-body-bg); padding: 0.125rem 0.5rem; border-radius: 1rem; font-size: 0.7rem; font-weight: 500; opacity: 0.8; } } .card-assignee { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; color: var(--bs-navbar-color); font-size: 0.875rem; .assignee-avatar { width: 1.5rem; height: 1.5rem; border-radius: 50%; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); display: flex; align-items: center; justify-content: center; color: white; font-size: 0.7rem; font-weight: 600; } } .card-stats { display: flex; justify-content: space-between; align-items: center; padding-top: 0.75rem; border-top: 1px solid var(--bs-card-border); .stat-item { display: flex; align-items: center; gap: 0.25rem; color: var(--bs-navbar-color); font-size: 0.75rem; i { font-size: 0.875rem; } } .checklist-progress { display: flex; align-items: center; gap: 0.5rem; .progress-bar { width: 40px; height: 4px; background-color: var(--bs-card-border); border-radius: 2px; overflow: hidden; .progress-fill { height: 100%; background-color: #198754; transition: width 0.3s ease; } } .progress-text { font-size: 0.7rem; color: var(--bs-navbar-color); } } } } } // Responsive kanban adjustments @media (max-width: 992px) { .kanban-board { .kanban-columns { gap: 1rem; } .kanban-column { min-width: 280px; padding: 1rem; } } } @media (max-width: 576px) { .kanban-board { padding: 1rem 0; .kanban-column { min-width: 100%; margin: 0; } .kanban-card { padding: 0.75rem; .card-meta { flex-direction: column; align-items: flex-start; gap: 0.25rem; } .card-stats { flex-direction: column; align-items: flex-start; gap: 0.5rem; } } } } // Save popup styles .save-popup { position: fixed; top: 2rem; right: 2rem; z-index: 1100; animation: slideInRight 0.3s ease-out; .save-popup-content { background-color: var(--bs-success); color: white; padding: 1rem 1.5rem; border-radius: 0.5rem; box-shadow: var(--bs-shadow-lg); display: flex; align-items: center; font-weight: 500; i { font-size: 1.25rem; } } } @keyframes slideInRight { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } // Drag and drop styles .kanban-card { transition: all 0.2s ease; &:hover { transform: translateY(-2px); box-shadow: var(--bs-shadow-lg); } &.dragging { opacity: 0.5; transform: rotate(5deg); } } .kanban-column { transition: all 0.2s ease; &.drag-over { background-color: rgba(var(--bs-primary-rgb), 0.1); border-color: var(--bs-primary); transform: scale(1.02); } } .column-cards { min-height: 200px; transition: all 0.2s ease; &.drag-over { background-color: rgba(var(--bs-primary-rgb), 0.05); border-radius: 0.5rem; } }