:root {
    --color-background: #f8f9fa;
    --color-text: #212529;
    --color-muted-text: #6c757d;
    --color-muted-text-hover: #212529;

    --color-card-background: #ffffff;
    --color-card-border: #e0e0e0;
    --color-divider: #eee;
    --color-heading: #333;

    --color-primary: #2c3e50;
    --color-primary-hover: #1a252f;
    --color-danger: #dc3545;
    --color-danger-hover: #b02a37;
    --color-success: #198754;
    --color-highlight: #20c997;
    --color-highlight-hover: #1baa80;

    --color-form-background: #ffffff;
    --color-form-border: #ced4da;
    --color-form-focus-ring: rgba(44, 62, 80, 0.25);
    --color-autofill-bg: #ffffff;
    --color-autofill-text: #212529;

    --color-navbar-background: #f8f9fa;
    --color-navbar-text: #212529;
    --color-navbar-text-hover: #000;

    --color-popover-bg: #ffffff;
    --color-popover-text: #212529;
    --color-popover-header-bg: #f8f9fa;
    --color-popover-border: #dee2e6;

    --color-modal-bg: #ffffff;
    --color-modal-text: #212529;
    --color-modal-border: #dee2e6;
    --color-modal-btn-close-filter: none;
}

body.dark-mode {
    --color-background: #212529;
    --color-text: #ced4da;
    --color-muted-text: #868e96;
    --color-muted-text-hover: #ced4da;

    --color-card-background: #2c3034;
    --color-card-border: #495057;
    --color-divider: #495057;
    --color-heading: #ced4da;

    --color-primary: #20c997; /* Teal in dark mode */
    --color-primary-hover: #1baa80;
    --color-danger: #ff6b6b;
    --color-danger-hover: #e05252;
    --color-success: #20c997;
    --color-highlight: #20c997;
    --color-highlight-hover: #1baa80;

    --color-form-background: #343a40;
    --color-form-border: #495057;
    --color-form-focus-ring: rgba(32, 201, 151, 0.25);
    --color-autofill-bg: #343a40;
    --color-autofill-text: #ced4da;

    --color-navbar-background: #343a40;
    --color-navbar-text: #ced4da;
    --color-navbar-text-hover: #20c997;

    --color-popover-bg: #343a40;
    --color-popover-text: #ced4da;
    --color-popover-header-bg: #2c3034;
    --color-popover-border: #495057;

    --color-modal-bg: #2c3034;
    --color-modal-text: #ced4da;
    --color-modal-border: #495057;
    --color-modal-btn-close-filter: invert(1) grayscale(100%) brightness(200%);
}

/* --- GENERAL STYLES --- */

body {
    background-color: var(--color-background);
    color: var(--color-text);
    transition: background-color 0.3s, color 0.3s;
}

.form-container {
    max-width: 600px;
    margin: 2rem auto;
    padding: 2rem;
    background-color: var(--color-card-background);
    border: 1px solid var(--color-card-border);
    border-radius: 15px;
    box-shadow: 0 4px 12px rgba(0,0,0,0.05);
}

body.dark-mode .form-container {
    box-shadow: 0 4px 12px rgba(0,0,0,0.25);
}

.dashboard-card {
    background-color: var(--color-card-background);
    border: 1px solid var(--color-card-border);
    border-radius: 1rem;
    padding: 1.5rem;
    margin-bottom: 1.5rem;
    box-shadow: 0 4px 12px rgba(0,0,0,0.03);
}

body.dark-mode .dashboard-card {
    box-shadow: 0 4px 12px rgba(0,0,0,0.25);
}

.dashboard-card h5 {
    font-weight: 700;
    color: var(--color-heading);
    border-bottom: 2px solid var(--color-divider);
    padding-bottom: 0.5rem;
    margin-bottom: 1rem;
}

/* Tables without grid */
.dashboard-card .table th,
.dashboard-card .table td {
    border: none;
}

body.dark-mode .table {
    --bs-table-color: var(--color-text);
    --bs-table-bg: transparent;
    --bs-table-hover-color: #fff;
    --bs-table-hover-bg: rgba(255, 255, 255, 0.075);
}

.status-overdue {
    font-size: 2.5rem;
    font-weight: 700;
    color: var(--color-danger);
}
.status-overdue-label {
    font-size: 1rem;
    vertical-align: super;
    margin-left: 0.5rem;
}

/* --- BUTTONS & LINKS --- */
.btn-main-action {
    border-radius: 0.25rem;
    font-weight: 600;
    padding: 0.75rem 1.5rem;
    background-color: var(--color-primary);
    border-color: var(--color-primary);
    color: #fff;
    transition: background-color 0.2s, border-color 0.2s;
}

.btn-main-action:hover {
    background-color: var(--color-primary-hover);
    border-color: var(--color-primary-hover);
    color: #fff;
}

.btn-delete-action {
    border-radius: 0.25rem;
    font-weight: 600;
    padding: 0.75rem 1.5rem;
    background-color: var(--color-danger);
    border-color: var(--color-danger);
    color: #fff;
    transition: background-color 0.2s, border-color 0.2s;
}

.btn-delete-action:hover {
    background-color: var(--color-danger-hover);
    border-color: var(--color-danger-hover);
    color: #fff;
}

.footer-link {
    color: var(--color-muted-text);
    text-decoration: none;
    transition: color 0.2s;
}
.footer-link:hover {
    color: var(--color-muted-text-hover);
}

/* --- FORMS --- */
.form-control {
    background-color: var(--color-form-background);
    color: var(--color-text);
    border-color: var(--color-form-border);
}

.form-control::placeholder {
    color: var(--color-muted-text);
}

.form-control:focus {
    color: var(--color-text);
    background-color: var(--color-form-background);
    border-color: var(--color-primary);
    box-shadow: 0 0 0 0.25rem var(--color-form-focus-ring);
}

.form-check-input:checked {
    background-color: var(--color-primary);
    border-color: var(--color-primary);
}
.form-check-input:focus {
    border-color: var(--color-primary-hover);
    box-shadow: 0 0 0 0.25rem var(--color-form-focus-ring);
}

input[type="date"],
input[type="time"] {
    accent-color: var(--color-primary);
}

body.dark-mode input[type="date"],
body.dark-mode input[type="time"] {
    color-scheme: dark;
}

.input-group-text {
    background-color: var(--color-form-background);
    border-color: var(--color-form-border);
    border-left: 0;
    color: var(--color-text);
}

/* Make date/time picker icons visible in dark mode */
body.dark-mode input[type="date"]::-webkit-calendar-picker-indicator,
body.dark-mode input[type="time"]::-webkit-calendar-picker-indicator {
    filter: var(--color-modal-btn-close-filter);
}

/* Browser Autofill Styles */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    -webkit-box-shadow: 0 0 0 30px var(--color-autofill-bg) inset !important;
    -webkit-text-fill-color: var(--color-autofill-text) !important;
}

/* --- NAVBAR --- */
body.dark-mode .navbar {
    background-color: var(--color-navbar-background) !important;
    border-bottom: 1px solid var(--color-card-border);
}

body.dark-mode .navbar-brand,
body.dark-mode .nav-link {
    color: var(--color-navbar-text);
}

body.dark-mode .nav-link:hover {
    color: var(--color-navbar-text-hover);
}

/* --- FULLCALENDAR --- */
.fc .fc-daygrid-day-number,
.fc .fc-col-header-cell-cushion {
    color: var(--color-text);
    text-decoration: none;
}

.fc .fc-col-header-cell-cushion:hover,
.fc .fc-daygrid-day-number:hover {
    color: var(--color-text);
}

body.dark-mode .fc-theme-standard td,
body.dark-mode .fc-theme-standard th,
body.dark-mode .fc-theme-standard .fc-scrollgrid {
    border-color: var(--color-card-border);
}

body.dark-mode .fc-button-primary {
    background-color: var(--color-form-background);
    border-color: var(--color-form-border);
}

body.dark-mode .fc-button-primary:hover {
    background-color: var(--color-form-border);
    border-color: var(--color-muted-text);
}

.fc .fc-today-button:disabled,
.fc .fc-today-button:disabled:hover {
    background-color: var(--color-primary-hover) !important;
    border-color: var(--color-primary-hover) !important;
    color: #fff !important;
    opacity: 1 !important;
}

body.dark-mode .fc .fc-today-button,
body.dark-mode .fc .fc-today-button:disabled {
    background-color: var(--color-highlight) !important;
    border-color: var(--color-highlight) !important;
    color: #ffffff !important;
    opacity: 1 !important;
}
body.dark-mode .fc .fc-today-button:hover {
    background-color: var(--color-highlight-hover) !important;
    border-color: var(--color-highlight-hover) !important;
}

body.dark-mode .fc-button-active {
    background-color: var(--color-highlight) !important;
    border-color: var(--color-highlight) !important;
    color: #fff !important;
}

/* Custom Today Color for Light Mode (Primary Blue with low opacity) */
body .fc .fc-day-today {
    background-color: rgba(44, 62, 80, 0.1) !important;
}

/* Custom Today Color for Dark Mode (Teal with low opacity) */
body.dark-mode .fc .fc-day-today {
    background-color: rgba(32, 201, 151, 0.15) !important;
}

/*
  CALENDAR TASK GRID OVERRIDE
  The following rules are a deliberate, aggressive override of FullCalendar's
  default behavior to create a grid of small, colored squares representing tasks.
  They rely on `!important` because they need to force a specific layout that
  the library is not designed for. These are brittle and may break if
  FullCalendar's internal structure changes in a future update.
*/
#calendar {
    height: 100%;
    width: 100%;
}

.fc-view-harness, .fc-scrollgrid, .fc-scrollgrid-sync-table, .fc-daygrid-body, .fc-col-header {
    width: 100% !important;
    height: 100% !important;
}

.fc-col-header-cell, .fc-daygrid-day {
    width: 14.28% !important; /* 100% / 7 */
}

body.dark-mode .fc-col-header-cell {
    background-color: var(--color-card-background) !important;
}

.fc-scroller {
    overflow: hidden !important;
}

.fc-daygrid-day-frame {
    position: relative;
    height: 100%;
}
.fc-daygrid-day-events {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 48px;
    overflow: hidden;
    display: flex;
    flex-wrap: wrap;
    align-content: center;
    justify-content: center;
    gap: 2px;
}
.fc-daygrid-event-harness {
    flex-basis: 17%;
    max-width: 17%;
    margin: 0 !important;
    padding: 1px !important;
}
.fc-event {
    width: 100% !important;
    padding-top: 100% !important; /* Creates a square */
    height: 0 !important;
    border-radius: 3px !important;
    border: none !important;
}
.fc-event-main-frame, .fc-event-title, .fc-event-time {
    display: none !important;
}

/* --- POPOVER & MODALS --- */
body.dark-mode .popover {
    background-color: var(--color-popover-bg);
    border-color: var(--color-popover-border);
}

body.dark-mode .popover-body {
    color: var(--color-popover-text);
}

body.dark-mode .popover-header {
    background-color: var(--color-popover-header-bg);
    border-bottom-color: var(--color-popover-border);
    color: var(--color-popover-text);
}

body.dark-mode .modal-content {
    background-color: var(--color-modal-bg);
    color: var(--color-modal-text);
    border-color: var(--color-modal-border);
}

body.dark-mode .modal-header {
    border-bottom-color: var(--color-modal-border);
}

body.dark-mode .modal-footer {
    border-top-color: var(--color-modal-border);
}

body.dark-mode .btn-close {
    filter: var(--color-modal-btn-close-filter);
}

/* --- UTILITY & FINAL STYLES --- */
.flash-success {
    color: var(--color-success);
    font-weight: bold;
}

.flash-error {
    color: var(--color-danger);
    font-weight: bold;
}

body.dark-mode .text-muted {
    color: var(--color-muted-text) !important;
}

.task-table {
    font-size: 0.9rem;
}

.task-table-date { width: 80px; }
.task-table-time { width: 60px; }
.task-table-title { max-width: 120px; }

.completed-tasks-table {
    font-size: 0.9rem;
}

.completed-tasks-table .completed-task-row td {
    color: var(--color-success);
}

.completed-task-date { width: 60px; }
.completed-task-title { max-width: 140px; }

.overdue-tasks-table {
    font-size: 0.9rem;
}

.overdue-tasks-table .overdue-task td,
.overdue-tasks-table .overdue-task a {
    color: var(--color-danger);
}

.overdue-task-date {
    width: 80px;
    font-weight: bold;
}

.overdue-task-title { max-width: 100px; }
.overdue-task-link { text-decoration: none; }

/* Make the modal's primary button theme-aware */
#infoModal .btn-primary {
    background-color: var(--color-primary);
    border-color: var(--color-primary);
    color: #fff;
}

#infoModal .btn-primary:hover {
    background-color: var(--color-primary-hover);
    border-color: var(--color-primary-hover);
    color: #fff;
}
