// 1. Define variables first $body-bg: #1e2531; $body-color: #aeb4c6; $headings-color: #fff; $card-bg: #2c3344; $card-color: #aeb4c6; $card-border-width: 0; $border-color: #3e485e; $primary: #727cf5; $success: #0acf97; $danger: #fa5c7c; $warning: #ffbc00; $info: #39afd1; // 2. Import Bootstrap @import 'bootstrap/scss/bootstrap'; @import 'bootstrap-icons/font/bootstrap-icons.css'; // 3. Custom Global Styles body { background-color: $body-bg; color: $body-color; font-family: 'Inter', system-ui, -apple-system, sans-serif; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { color: $headings-color; font-weight: 600; } a { color: $primary; text-decoration: none; &:hover { color: darken($primary, 10%); } } .text-muted { color: #8391a2 !important; } .text-white { color: #fff !important; } .bg-light { background-color: #313a4e !important; } .bg-white { background-color: $card-bg !important; } .border { border-color: $border-color !important; } // 4. Component Overrides .card { background-color: $card-bg; box-shadow: 0 0.2rem 1rem rgba(0, 0, 0, 0.15); border: none; margin-bottom: 1.5rem; .card-header { background-color: transparent; border-bottom: 1px solid $border-color; padding: 1.5rem; h5 { margin-bottom: 0; } } .card-body { padding: 1.5rem; } } .list-group-item { background-color: transparent; border-color: $border-color; color: $body-color; } .table { color: #fff; // Force white text for table content th { border-color: $border-color; color: $headings-color; font-weight: 600; background-color: transparent; // Ensure header is transparent border-bottom-width: 1px; } td { border-color: $border-color; vertical-align: middle; color: #fff; // Ensure cells are white } // Striped rows &.table-striped>tbody>tr:nth-of-type(odd)>* { background-color: rgba(255, 255, 255, 0.02); color: #fff; // Ensure striped rows are white box-shadow: none; // Remove potential inset shadows } // Hover effect &:hover tbody tr:hover { background-color: rgba(255, 255, 255, 0.05); color: $headings-color; } // Table Warning Override for Dark Theme &.table-hover>tbody>tr.table-warning:hover>* { background-color: rgba($warning, 0.2); color: #fff; } >tbody>tr.table-warning>* { background-color: rgba($warning, 0.15); // Slightly more visible yellow bg color: #ffedb8; // Light yellowish white text for readability box-shadow: none; } // NEW: Table Danger (Orange/Red) Override for Deactivated functionality // User asked for "Orange background with white text" for deactivated items // We are using `table-warning` which is yellow/orange. // Let's customize `table-warning` to look more orange-ish if that's what the user wants, // OR create a specific override if they mean `table-secondary` was the issue. // The user moved from `table-secondary` (grey) to `table-warning` (yellow/orange) in the blade file. // So now we need to make sure `table-warning` looks good (Orange background, white text). // Let's override table-warning specifically to be orange-ish $orange-custom: #fd7e14; >tbody>tr.table-warning>* { background-color: rgba($orange-custom, 0.2) !important; // Orange-ish background color: #fff !important; // White text } &.table-hover>tbody>tr.table-warning:hover>* { background-color: rgba($orange-custom, 0.3) !important; color: #fff !important; } } .form-control, .form-select { background-color: #313a4e; border-color: $border-color; color: $headings-color; &:focus { background-color: #364056; border-color: $primary; color: $headings-color; box-shadow: none; } &::placeholder { color: #6c757d; } } // Badges - Force white text for better contrast in dark mode .badge { color: #fff !important; // Force white text on all badges font-weight: 500; &.bg-light { background-color: #3e485e !important; color: #fff !important; } &.bg-info { background-color: $info !important; color: #fff !important; } &.bg-warning { background-color: $warning !important; color: #000 !important; } } .text-bg-warning { color: #000 !important; background-color: $warning !important; } // FORCE badge overrides .badge.bg-info { color: #fff !important; } .badge.bg-success { color: #fff !important; } $warning-dark: #d9a406; .badge.bg-warning { background-color: $warning-dark !important; color: #fff !important; } // 5. Layout Structure (Sidebar + Main) #app { display: flex; flex-direction: row; min-height: 100vh; } .sidebar { width: 260px; background-color: #313a44; flex-shrink: 0; display: flex; flex-direction: column; border-right: 1px solid rgba(255, 255, 255, 0.05); height: 100vh; position: fixed; top: 0; left: 0; z-index: 1000; .sidebar-brand { height: 70px; display: flex; align-items: center; padding: 0 1.5rem; font-size: 1.25rem; font-weight: 700; color: $primary; border-bottom: 1px solid rgba(255, 255, 255, 0.05); a { color: $primary; } } .nav-link { color: #aeb4c6; padding: 0.8rem 1.5rem; display: flex; align-items: center; transition: all 0.2s; border-left: 3px solid transparent; i { margin-right: 0.75rem; font-size: 1.1rem; } &:hover, &.active { color: #fff; background-color: rgba(255, 255, 255, 0.03); border-left-color: $primary; } } .sidebar-heading { font-size: 0.75rem; text-transform: uppercase; color: #6c757d; padding: 1.5rem 1.5rem 0.5rem; font-weight: 700; letter-spacing: 0.05em; } } .main-content { flex-grow: 1; margin-left: 260px; display: flex; flex-direction: column; min-height: 100vh; background-color: $body-bg; } .topbar { height: 70px; background-color: $card-bg; border-bottom: 1px solid $border-color; display: flex; align-items: center; padding: 0 2rem; margin-bottom: 2rem; box-shadow: 0 0 35px 0 rgba(154, 161, 171, .15); } // 6. Timeline Component (Dark Theme Adapted) .timeline-wrapper { overflow-x: auto; padding: 20px 0; &::-webkit-scrollbar { height: 6px; } &::-webkit-scrollbar-thumb { background-color: $border-color; border-radius: 4px; } } .timeline { display: flex; justify-content: space-between; position: relative; min-width: 800px; padding: 0 40px; margin-bottom: 20px; &::after { content: ''; position: absolute; top: 20px; left: 0; right: 0; height: 2px; background-color: $border-color; z-index: 1; } } .timeline-item { position: relative; z-index: 2; text-align: center; flex: 1; .timeline-dot { width: 14px; height: 14px; background-color: $card-bg; border: 3px solid $primary; border-radius: 50%; margin: 13px auto 15px; transition: all 0.2s ease; box-shadow: 0 0 0 3px $body-bg; } .timeline-date { position: absolute; top: -25px; left: 50%; transform: translateX(-50%); font-size: 0.8rem; font-weight: 600; color: $body-color; white-space: nowrap; } .timeline-content { background: $card-bg; border: 1px solid $border-color; border-radius: 6px; padding: 8px 12px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); display: inline-block; max-width: 180px; min-width: 120px; transition: transform 0.2s; text-decoration: none; color: inherit; &:hover { transform: translateY(-3px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); border-color: $primary; text-decoration: none; color: #fff; } h6 { color: #fff; font-size: 0.9rem; margin: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } small { font-size: 0.75rem; color: #8391a2; } } &.expired .timeline-dot { border-color: #6c757d; } &.urgent .timeline-dot { border-color: $danger; } &.soon .timeline-dot { border-color: $warning; } &.normal .timeline-dot { border-color: $success; } }