@use 'spec/settings/index' as *;
|
|
@use 'spec/tools/index' as *;
|
|
@use "bootstrap/scss/bootstrap" as *;
|
|
@use 'spec/index' as *;
|
|
@use 'vendor/index' as *;
|
|
@import "utils/theme.css";
|
|
@import "utils/mobile.scss";
|
|
|
|
body {
|
|
background: var(--c-bkg-body);
|
|
color: var(--c-text-base);
|
|
}
|
|
|
|
.sidebar {
|
|
background: var(--c-bkg-sidebar);
|
|
}
|
|
|
|
.bgc-white {
|
|
background: var(--c-bkg-card) !important;
|
|
}
|
|
|
|
// Dark-mode aware Header & Dropdown --------------------------------
|
|
.header {
|
|
background: var(--c-bkg-card);
|
|
border-bottom: 1px solid var(--c-border);
|
|
|
|
.dropdown-menu {
|
|
background: var(--c-bkg-card);
|
|
border: 1px solid var(--c-border);
|
|
}
|
|
|
|
.nav-left > li > a,
|
|
.nav-right > li > a {
|
|
color: var(--c-text-base);
|
|
|
|
&:hover,
|
|
&:focus {
|
|
color: var(--c-primary);
|
|
}
|
|
}
|
|
|
|
.notifications .counter {
|
|
background: var(--c-danger);
|
|
color: #fff;
|
|
}
|
|
|
|
// Theme toggle switch styling
|
|
.theme-toggle {
|
|
display: flex;
|
|
align-items: center;
|
|
height: 65px; // Match header height
|
|
padding: 0 15px;
|
|
|
|
.form-check {
|
|
margin: 0;
|
|
|
|
.form-check-label {
|
|
color: var(--c-text-muted);
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
|
|
i {
|
|
font-size: 12px;
|
|
}
|
|
}
|
|
|
|
.form-check-input {
|
|
width: 2.5rem;
|
|
height: 1.25rem;
|
|
background-color: var(--c-border);
|
|
border: 1px solid var(--c-border);
|
|
cursor: pointer;
|
|
|
|
&:checked {
|
|
background-color: var(--c-primary);
|
|
border-color: var(--c-primary);
|
|
}
|
|
|
|
&:focus {
|
|
box-shadow: 0 0 0 0.2rem color-mix(in srgb, var(--c-primary) 25%, transparent);
|
|
border-color: var(--c-primary);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Mobile theme toggle adjustments
|
|
@media (max-width: 991px) {
|
|
padding: 0 6px;
|
|
height: 65px;
|
|
|
|
.form-check {
|
|
.form-check-label {
|
|
font-size: 10px;
|
|
|
|
&:first-child {
|
|
margin-right: 4px;
|
|
}
|
|
|
|
&:last-child {
|
|
margin-left: 4px;
|
|
}
|
|
}
|
|
|
|
.form-check-input {
|
|
width: 2rem;
|
|
height: 1rem;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Very small mobile adjustments
|
|
@media (max-width: 480px) {
|
|
padding: 0 4px;
|
|
|
|
.form-check {
|
|
flex-direction: column;
|
|
align-items: center;
|
|
text-align: center;
|
|
|
|
.form-check-label {
|
|
font-size: 8px;
|
|
margin: 1px 0;
|
|
white-space: nowrap;
|
|
|
|
i {
|
|
margin: 0 2px;
|
|
}
|
|
}
|
|
|
|
.form-check-input {
|
|
width: 1.5rem;
|
|
height: 0.8rem;
|
|
margin: 2px 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Mobile dropdown menu improvements
|
|
@media (max-width: 767px) {
|
|
.header {
|
|
.nav-right {
|
|
.dropdown-menu {
|
|
position: fixed !important;
|
|
top: 65px !important;
|
|
left: 5px !important;
|
|
right: 5px !important;
|
|
width: auto !important;
|
|
max-width: none !important;
|
|
min-width: auto !important;
|
|
transform: none !important;
|
|
z-index: 1050;
|
|
border-radius: 8px;
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
max-height: calc(100vh - 85px);
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.notifications .dropdown-menu {
|
|
max-height: calc(100vh - 85px);
|
|
overflow-y: auto;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Mobile search input overlay
|
|
@media (max-width: 480px) {
|
|
.header {
|
|
.search-input {
|
|
&.active {
|
|
position: absolute;
|
|
top: 65px;
|
|
left: 0;
|
|
right: 0;
|
|
background: var(--c-bkg-card);
|
|
border-top: 1px solid var(--c-border);
|
|
padding: 10px;
|
|
z-index: 999;
|
|
|
|
input {
|
|
margin-top: 0;
|
|
width: 100%;
|
|
padding: 10px;
|
|
border: 1px solid var(--c-border);
|
|
border-radius: 4px;
|
|
background: var(--c-bkg-card);
|
|
color: var(--c-text-base);
|
|
|
|
&::placeholder {
|
|
color: var(--c-text-muted);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Tables -------------------------------------------------
|
|
.table {
|
|
background: var(--c-bkg-card);
|
|
color: var(--c-text-base);
|
|
|
|
thead th {
|
|
background: var(--c-bkg-card);
|
|
color: var(--c-text-base);
|
|
border-color: var(--c-border);
|
|
}
|
|
|
|
tbody {
|
|
td, th {
|
|
border-color: var(--c-border);
|
|
color: var(--c-text-base);
|
|
background: var(--c-bkg-card);
|
|
}
|
|
|
|
tr:nth-child(even) {
|
|
td, th {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 95%, var(--c-border));
|
|
}
|
|
}
|
|
}
|
|
|
|
tfoot th {
|
|
background: var(--c-bkg-card);
|
|
color: var(--c-text-base);
|
|
border-color: var(--c-border);
|
|
}
|
|
|
|
// Bootstrap table variants
|
|
&.table-striped {
|
|
tbody tr:nth-child(odd) {
|
|
td, th {
|
|
background: var(--c-bkg-card);
|
|
}
|
|
}
|
|
|
|
tbody tr:nth-child(even) {
|
|
td, th {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 95%, var(--c-border));
|
|
}
|
|
}
|
|
}
|
|
|
|
&.table-hover {
|
|
tbody tr:hover {
|
|
td, th {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 90%, var(--c-border)) !important;
|
|
color: var(--c-text-base);
|
|
}
|
|
}
|
|
}
|
|
|
|
&.table-bordered {
|
|
border: 1px solid var(--c-border);
|
|
|
|
th, td {
|
|
border: 1px solid var(--c-border);
|
|
}
|
|
}
|
|
|
|
// Table head variants
|
|
.table-dark {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 80%, #000);
|
|
|
|
th {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 80%, #000);
|
|
color: var(--c-text-base);
|
|
border-color: var(--c-border);
|
|
}
|
|
}
|
|
|
|
.table-light {
|
|
background: var(--c-bkg-card);
|
|
|
|
th {
|
|
background: var(--c-bkg-card);
|
|
color: var(--c-text-base);
|
|
border-color: var(--c-border);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Forms --------------------------------------------------
|
|
.form-control,
|
|
.form-select {
|
|
background: var(--c-bkg-card);
|
|
color: var(--c-text-base);
|
|
border: 1px solid var(--c-border);
|
|
|
|
&:focus {
|
|
border-color: var(--c-primary);
|
|
box-shadow: 0 0 0 0.1rem rgba(75, 124, 243, .25);
|
|
}
|
|
}
|
|
|
|
input::placeholder {
|
|
color: var(--c-text-muted);
|
|
}
|
|
|
|
// Cards --------------------------------------------------
|
|
.card,
|
|
.bgc-white.bd,
|
|
.bgc-white.bdT,
|
|
.bgc-white.bdB {
|
|
background: var(--c-bkg-card);
|
|
border-color: var(--c-border) !important;
|
|
color: var(--c-text-base);
|
|
}
|
|
|
|
// Alerts -------------------------------------------------
|
|
.alert {
|
|
color: var(--c-text-base);
|
|
border-color: var(--c-border);
|
|
background: color-mix(in srgb, var(--c-bkg-card) 85%, var(--c-border));
|
|
|
|
&.alert-primary {
|
|
background: color-mix(in srgb, var(--c-primary) 20%, var(--c-bkg-card));
|
|
border-color: var(--c-primary);
|
|
color: var(--c-primary);
|
|
}
|
|
}
|
|
|
|
// Modals -------------------------------------------------
|
|
.modal-content {
|
|
background: var(--c-bkg-card);
|
|
color: var(--c-text-base);
|
|
border: 1px solid var(--c-border);
|
|
}
|
|
|
|
// Logo colours ------------------------------------------
|
|
.logo img,
|
|
.logo-auth {
|
|
// Light mode: invert the "A" to make it white (if default is dark)
|
|
filter: invert(1) hue-rotate(180deg) brightness(1.2);
|
|
}
|
|
|
|
[data-theme="dark"] .logo img,
|
|
[data-theme="dark"] .logo-auth {
|
|
// Dark mode: keep original colors (dark "A" on blue background)
|
|
filter: brightness(1) contrast(1);
|
|
}
|
|
|
|
.logo-text {
|
|
color: var(--c-text-base);
|
|
}
|
|
|
|
// Ensure auth page logos are properly sized
|
|
.logo-auth {
|
|
max-width: 60px !important;
|
|
max-height: 60px !important;
|
|
width: auto;
|
|
height: auto;
|
|
}
|
|
|
|
// Generic border utility override -----------------------
|
|
.bd,
|
|
.bdT,
|
|
.bdB,
|
|
.bdL,
|
|
.bdR {
|
|
border-color: var(--c-border) !important;
|
|
}
|
|
|
|
// Sidebar logo border -----------------------------------
|
|
.sidebar-logo {
|
|
border-color: var(--c-border) !important;
|
|
}
|
|
|
|
// Grey-100 utility override -----------------------------
|
|
.bgc-grey-100 { background: color-mix(in srgb, var(--c-bkg-body) 90%, #000) !important; }
|
|
|
|
// Sales Report widget styling -------------------------------
|
|
.sales-report-header {
|
|
background-color: var(--c-primary) !important;
|
|
color: #ffffff !important;
|
|
|
|
h5, h3, p {
|
|
color: #ffffff !important;
|
|
}
|
|
}
|
|
|
|
// Hover background utilities for dark mode ----------------
|
|
[data-theme="dark"] .bgcH-grey-100:hover {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 85%, var(--c-border)) !important;
|
|
}
|
|
|
|
// Sidebar right border ----------------------------------
|
|
.sidebar,
|
|
.sidebar-menu {
|
|
border-right: 1px solid var(--c-border);
|
|
}
|
|
|
|
// Dark mode text color overrides for better visibility -------
|
|
[data-theme="dark"] .c-grey-900 {
|
|
color: var(--c-text-base) !important;
|
|
}
|
|
|
|
[data-theme="dark"] .c-grey-800 {
|
|
color: var(--c-text-base) !important;
|
|
}
|
|
|
|
[data-theme="dark"] .c-grey-700 {
|
|
color: var(--c-text-muted) !important;
|
|
}
|
|
|
|
[data-theme="dark"] .c-grey-600 {
|
|
color: var(--c-text-muted) !important;
|
|
}
|
|
|
|
[data-theme="dark"] .text-dark {
|
|
color: var(--c-text-base) !important;
|
|
}
|
|
|
|
// Ensure all headings are theme-aware ----------------------
|
|
h1, h2, h3, h4, h5, h6 {
|
|
color: var(--c-text-base);
|
|
}
|
|
|
|
// Email & Compose dark mode fixes ---------------------------
|
|
.email-app {
|
|
.email-side-nav {
|
|
background: var(--c-bkg-card);
|
|
border-color: var(--c-border);
|
|
}
|
|
|
|
.email-list,
|
|
.email-content,
|
|
.email-wrapper {
|
|
background: var(--c-bkg-card) !important;
|
|
color: var(--c-text-base);
|
|
}
|
|
|
|
.email-list-item {
|
|
border-color: var(--c-border) !important;
|
|
|
|
&:hover {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 85%, var(--c-border)) !important;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Badge colors for dark mode ---------------------------------
|
|
[data-theme="dark"] .badge {
|
|
&.bgc-deep-purple-50 {
|
|
background: #8b5cf6 !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
&.c-deep-purple-700 {
|
|
color: #fff !important;
|
|
}
|
|
|
|
&.bgc-green-50 {
|
|
background: var(--c-success) !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
&.c-green-700 {
|
|
color: #fff !important;
|
|
}
|
|
|
|
&.bgc-blue-50 {
|
|
background: var(--c-primary) !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
&.c-blue-700 {
|
|
color: #fff !important;
|
|
}
|
|
|
|
&.bgc-amber-50 {
|
|
background: #f59e0b !important;
|
|
color: #000 !important;
|
|
}
|
|
|
|
&.c-amber-700 {
|
|
color: #000 !important;
|
|
}
|
|
|
|
&.bgc-red-50 {
|
|
background: var(--c-danger) !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
&.c-red-700 {
|
|
color: #fff !important;
|
|
}
|
|
}
|
|
|
|
// Email buttons in dark mode ---------------------------------
|
|
[data-theme="dark"] .email-app {
|
|
.btn.bgc-white {
|
|
background: var(--c-bkg-card) !important;
|
|
color: var(--c-text-base) !important;
|
|
border: 1px solid var(--c-border) !important;
|
|
|
|
&:hover {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 85%, var(--c-border)) !important;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Additional table styling for consistency ----------------
|
|
.table-responsive {
|
|
border: 1px solid var(--c-border);
|
|
border-radius: 3px;
|
|
}
|
|
|
|
// Table inside cards should blend seamlessly
|
|
.bgc-white .table {
|
|
background: var(--c-bkg-card);
|
|
border: none;
|
|
|
|
thead th {
|
|
border-top: none;
|
|
}
|
|
}
|
|
|
|
// Status badges in tables need proper theming
|
|
.table .badge {
|
|
&.bgc-red-50.c-red-700 {
|
|
background: var(--c-danger) !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
&.bgc-deep-purple-50.c-deep-purple-700 {
|
|
background: #8b5cf6 !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
&.bgc-pink-50.c-pink-700 {
|
|
background: #ec4899 !important;
|
|
color: #fff !important;
|
|
}
|
|
}
|
|
|
|
// Chat page specific dark mode fixes ----------------------
|
|
[data-theme="dark"] {
|
|
// Chat page loader
|
|
#loader {
|
|
background: var(--c-bkg-body) !important;
|
|
}
|
|
|
|
// Chat message bubbles - different styling for sent vs received
|
|
.ai-fs .pY-3.pX-10.bgc-white {
|
|
background: var(--c-bkg-card) !important;
|
|
border: 1px solid var(--c-border);
|
|
}
|
|
|
|
.ai-fe .pY-3.pX-10.bgc-white {
|
|
background: var(--c-primary) !important;
|
|
border: 1px solid var(--c-primary);
|
|
color: white !important;
|
|
|
|
small {
|
|
color: rgba(255, 255, 255, 0.8) !important;
|
|
}
|
|
|
|
span {
|
|
color: white !important;
|
|
}
|
|
}
|
|
|
|
// Chat status indicators (preserve their semantic colors)
|
|
.c-green-500 {
|
|
color: var(--c-success) !important;
|
|
}
|
|
|
|
.c-amber-500 {
|
|
color: #f59e0b !important;
|
|
}
|
|
|
|
.c-red-500 {
|
|
color: var(--c-danger) !important;
|
|
}
|
|
|
|
// Chat typing indicator
|
|
.lh-1 i {
|
|
color: var(--c-text-muted);
|
|
}
|
|
|
|
// Chat backgrounds
|
|
.bgc-grey-200 {
|
|
background: var(--c-bkg-body) !important;
|
|
}
|
|
}
|
|
|
|
// Todo List dark mode fixes ---------------------------------
|
|
[data-theme="dark"] {
|
|
.list-task {
|
|
background: var(--c-bkg-card);
|
|
border: 1px solid var(--c-border);
|
|
|
|
.list-group-item {
|
|
background: var(--c-bkg-card);
|
|
border-color: var(--c-border);
|
|
color: var(--c-text-base);
|
|
|
|
&:first-child {
|
|
border-top-color: var(--c-border);
|
|
}
|
|
|
|
&:last-child {
|
|
border-bottom-color: var(--c-border);
|
|
}
|
|
|
|
.form-label {
|
|
color: var(--c-text-base);
|
|
}
|
|
|
|
// Checkbox styling for dark mode
|
|
.checkbox {
|
|
input[type="checkbox"] {
|
|
&:checked + label::before {
|
|
background: var(--c-primary);
|
|
border-color: var(--c-primary);
|
|
}
|
|
|
|
&:focus + label::before {
|
|
border-color: var(--c-primary);
|
|
box-shadow: 0 0 0 0.2rem rgba(var(--c-primary-rgb), 0.25);
|
|
}
|
|
}
|
|
|
|
label::before {
|
|
background: var(--c-bkg-card);
|
|
border-color: var(--c-border);
|
|
}
|
|
}
|
|
|
|
// Todo badges
|
|
.badge {
|
|
&.bg-success {
|
|
background: var(--c-success) !important;
|
|
color: white !important;
|
|
}
|
|
|
|
&.bg-danger {
|
|
background: var(--c-danger) !important;
|
|
color: white !important;
|
|
}
|
|
|
|
&.bg-warning {
|
|
background: #f59e0b !important;
|
|
color: #000 !important;
|
|
}
|
|
|
|
&.bg-info {
|
|
background: var(--c-primary) !important;
|
|
color: white !important;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Calendar page dark mode fixes -----------------------------
|
|
[data-theme="dark"] {
|
|
// Calendar event sidebar
|
|
.bgc-white.bd {
|
|
background: var(--c-bkg-card) !important;
|
|
border-color: var(--c-border) !important;
|
|
|
|
.bdB {
|
|
border-bottom-color: var(--c-border) !important;
|
|
}
|
|
|
|
// Calendar event items
|
|
.peers.ai-c.jc-sb.fxw-nw {
|
|
border-bottom-color: var(--c-border) !important;
|
|
|
|
.c-grey-900 {
|
|
color: var(--c-text-base) !important;
|
|
}
|
|
|
|
.c-grey-600 {
|
|
color: var(--c-text-muted) !important;
|
|
}
|
|
|
|
.c-grey-700 {
|
|
color: var(--c-text-muted) !important;
|
|
}
|
|
|
|
// Action buttons (edit, delete)
|
|
.c-deep-purple-500 {
|
|
&:hover.cH-blue-500 {
|
|
color: var(--c-primary) !important;
|
|
}
|
|
}
|
|
|
|
.c-red-500 {
|
|
&:hover.cH-blue-500 {
|
|
color: var(--c-danger) !important;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add event button
|
|
.btn-warning {
|
|
background: #f59e0b;
|
|
border-color: #f59e0b;
|
|
color: #000;
|
|
|
|
&:hover {
|
|
background: #d97706;
|
|
border-color: #d97706;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Calendar modal
|
|
.modal-content {
|
|
background: var(--c-bkg-card);
|
|
border: 1px solid var(--c-border);
|
|
color: var(--c-text-base);
|
|
|
|
.modal-body {
|
|
.form-label {
|
|
color: var(--c-text-base);
|
|
}
|
|
|
|
.form-control {
|
|
background: var(--c-bkg-body);
|
|
border-color: var(--c-border);
|
|
color: var(--c-text-base);
|
|
|
|
&::placeholder {
|
|
color: var(--c-text-muted);
|
|
}
|
|
|
|
&:focus {
|
|
background: var(--c-bkg-body);
|
|
border-color: var(--c-primary);
|
|
box-shadow: 0 0 0 0.2rem rgba(var(--c-primary-rgb), 0.25);
|
|
}
|
|
}
|
|
|
|
.input-group-text {
|
|
background: var(--c-bkg-card) !important;
|
|
border-color: var(--c-border);
|
|
color: var(--c-text-base);
|
|
|
|
&.bgc-white {
|
|
background: var(--c-bkg-card) !important;
|
|
}
|
|
}
|
|
|
|
.btn-primary {
|
|
background: var(--c-primary);
|
|
border-color: var(--c-primary);
|
|
|
|
&:hover {
|
|
background: var(--c-primary-hover);
|
|
border-color: var(--c-primary-hover);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Calendar grid improvements
|
|
.fc {
|
|
// Calendar day cells
|
|
.fc-day {
|
|
background: var(--c-bkg-card);
|
|
|
|
&:hover {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 90%, var(--c-border));
|
|
}
|
|
}
|
|
|
|
// Calendar header
|
|
.fc-head {
|
|
background: var(--c-bkg-card);
|
|
}
|
|
|
|
// Weekend styling
|
|
.fc-sun,
|
|
.fc-sat {
|
|
background: color-mix(in srgb, var(--c-bkg-card) 95%, var(--c-border));
|
|
}
|
|
|
|
// Other days
|
|
.fc-other-month {
|
|
.fc-day-number {
|
|
color: var(--c-text-muted) !important;
|
|
}
|
|
}
|
|
|
|
// Event hover effects
|
|
.fc-event {
|
|
&:hover {
|
|
opacity: 0.9;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|