+
{
editable={true}
selectable={true}
selectMirror={true}
- dayMaxEvents={true}
+ dayMaxEvents={3} // Show max 3 events per day, then +more
weekends={weekendsVisible}
- initialEvents={defaultEvents} // alternatively, use the `events` setting to fetch from a feed
+ droppable={true} // Enable dropping external events
+ dragScroll={true}
+ events={calendarEvents} // Use dynamic events state
select={handleDateSelect}
eventClick={(clickInfo) => handleEventClick(clickInfo)}
+ eventReceive={handleEventReceive} // Handle external drops
+ eventDrop={handleEventDrop} // Handle internal drops
/>
diff --git a/src/style/scss/components/_calendar.scss b/src/style/scss/components/_calendar.scss
index 57cd4a4..498c937 100644
--- a/src/style/scss/components/_calendar.scss
+++ b/src/style/scss/components/_calendar.scss
@@ -1,130 +1,881 @@
+/* Beautiful Calendar Styles */
+
+/* Prevent overflow issues during drag */
+body.fc-dragging {
+ overflow: visible !important;
+}
+
+html, body {
+ overflow-x: visible;
+}
+
+/* Disable all animations during drag operations */
+.fc-dragging * {
+ transition: none !important;
+ animation: none !important;
+}
+
+/* External draggable elements */
+.fc-draggable-dragging {
+ transition: none !important;
+ animation: none !important;
+ transform: none !important;
+}
+
+/* Calendar Page Layout */
+.calendar-page-wrapper {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ min-height: 100vh;
+ padding: 20px;
+ position: relative;
+ overflow: visible;
+
+ .content {
+ background: transparent;
+ position: relative;
+ overflow: visible;
+ }
+
+ .row {
+ position: relative;
+ overflow: visible;
+ }
+
+ .col-lg-3, .col-lg-9, .col-md-4, .col-md-8 {
+ position: relative;
+ overflow: visible;
+ }
+}
+
+.calendar-page-header {
+ background: rgba(255, 255, 255, 0.95);
+ backdrop-filter: blur(10px);
+ border-radius: 20px;
+ padding: 25px;
+ margin-bottom: 30px;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
+ }
+
+ h3 {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+ font-size: 2.5rem;
+ font-weight: 700;
+ margin: 0;
+ text-align: center;
+
+ @media (max-width: 768px) {
+ font-size: 2rem;
+ }
+ }
+}
+
+.calendar-create-btn {
+ background: linear-gradient(135deg, #ff6b6b 0%, #ee5a24 100%);
+ border: none;
+ border-radius: 50px;
+ padding: 12px 30px;
+ color: white;
+ font-weight: 600;
+ font-size: 16px;
+ box-shadow: 0 8px 25px rgba(255, 107, 107, 0.3);
+ transition: all 0.3s ease;
+ text-decoration: none;
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+
+ &:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 12px 35px rgba(255, 107, 107, 0.4);
+ color: white;
+ text-decoration: none;
+ }
+
+ &::before {
+ content: "✨";
+ font-size: 18px;
+ }
+}
+
+/* Calendar Sidebar */
+.calendar-sidebar {
+ background: rgba(255, 255, 255, 0.95);
+ backdrop-filter: blur(10px);
+ border-radius: 20px;
+ padding: 25px;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ margin-bottom: 20px;
+ transition: all 0.3s ease;
+ position: relative;
+ overflow: visible;
+ z-index: 1;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
+ }
+
+ h4 {
+ color: #2c3e50;
+ font-weight: 700;
+ margin-bottom: 20px;
+ font-size: 1.4rem;
+ text-align: center;
+ }
+
+ #calendar-events {
+ position: relative;
+ z-index: 2;
+ }
+}
+
+/* Calendar Events */
.calendar-events {
- border: 1px solid transparent;
- cursor: move;
- @include margin-padding(null, 10px 15px);
+ background: linear-gradient(135deg, #74b9ff 0%, #0984e3 100%);
+ color: white;
+ border-radius: 15px;
+ padding: 15px;
+ margin-bottom: 15px;
+ cursor: move;
+ transition: all 0.3s ease;
+ border: none;
+ box-shadow: 0 5px 15px rgba(116, 185, 255, 0.3);
+ position: relative;
+ overflow: hidden;
+ user-select: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
+ transition: left 0.5s;
+ }
+
+ &:hover:not(.fc-dragging) {
+ transform: translateY(-3px);
+ box-shadow: 0 8px 25px rgba(116, 185, 255, 0.4);
+ background: linear-gradient(135deg, #0984e3 0%, #74b9ff 100%);
+
+ &::before {
+ left: 100%;
+ }
+ }
+
+ &:active {
+ cursor: grabbing;
+ }
+
+ // Simple drag state - just hide the item completely
+ &.dragging-hidden {
+ opacity: 0 !important;
+ visibility: hidden !important;
+ transition: none !important;
+ pointer-events: none !important;
+ }
}
-.calendar-events:hover {
- border-color: $gray-300;
- background-color: $white;
+
+// Dropped Events Tracker Styling
+.dropped-events-list {
+ max-height: 300px;
+ overflow-y: auto;
+
+ .dropped-event-item {
+ background: rgba(255, 255, 255, 0.95);
+ border: 1px solid rgba(0, 0, 0, 0.1) !important;
+ border-radius: 10px !important;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
+ background: rgba(255, 255, 255, 1);
+ }
+
+ .badge {
+ font-size: 10px;
+ padding: 4px 8px;
+ border-radius: 15px;
+ text-transform: uppercase;
+ font-weight: 600;
+
+ &.bg-primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important; }
+ &.bg-success { background: linear-gradient(135deg, #00b894 0%, #00cec9 100%) !important; }
+ &.bg-warning { background: linear-gradient(135deg, #fdcb6e 0%, #e84393 100%) !important; }
+ &.bg-danger { background: linear-gradient(135deg, #e17055 0%, #d63031 100%) !important; }
+ &.bg-info { background: linear-gradient(135deg, #74b9ff 0%, #0984e3 100%) !important; }
+ &.bg-secondary { background: linear-gradient(135deg, #636e72 0%, #2d3436 100%) !important; }
+ &.bg-purple { background: linear-gradient(135deg, #a29bfe 0%, #6c5ce7 100%) !important; }
+ }
+ }
}
-.calendar-events i {
- margin-right: 8px;
+
+// Hide dragged items during drag
+.calendar-events.dragging-hidden {
+ opacity: 0 !important;
+ visibility: hidden !important;
+ transition: none !important;
+ pointer-events: none !important;
}
-.calendar {
- float: left;
- margin-bottom: 0;
+
+/* Calendar Events - Additional Styles */
+.calendar-events {
+ &[data-class="bg-success"] {
+ background: linear-gradient(135deg, #00b894 0%, #00cec9 100%);
+ box-shadow: 0 5px 15px rgba(0, 184, 148, 0.3);
+
+ &:hover {
+ background: linear-gradient(135deg, #00cec9 0%, #00b894 100%);
+ box-shadow: 0 8px 25px rgba(0, 184, 148, 0.4);
+ }
+
+ &:active {
+ background: linear-gradient(135deg, #00a085 0%, #00b8b3 100%);
+ }
+ }
+
+ &[data-class="bg-danger"] {
+ background: linear-gradient(135deg, #e17055 0%, #d63031 100%);
+ box-shadow: 0 5px 15px rgba(225, 112, 85, 0.3);
+
+ &:hover {
+ background: linear-gradient(135deg, #d63031 0%, #e17055 100%);
+ box-shadow: 0 8px 25px rgba(225, 112, 85, 0.4);
+ }
+
+ &:active {
+ background: linear-gradient(135deg, #c92a2a 0%, #d63031 100%);
+ }
+ }
+
+ &[data-class="bg-warning"] {
+ background: linear-gradient(135deg, #fdcb6e 0%, #e84393 100%);
+ box-shadow: 0 5px 15px rgba(253, 203, 110, 0.3);
+
+ &:hover {
+ background: linear-gradient(135deg, #e84393 0%, #fdcb6e 100%);
+ box-shadow: 0 8px 25px rgba(253, 203, 110, 0.4);
+ }
+
+ &:active {
+ background: linear-gradient(135deg, #d63384 0%, #fab005 100%);
+ }
+ }
+
+ i {
+ margin-right: 10px;
+ font-size: 12px;
+ }
+
+ // Drag states - simplified without problematic animations
+ &.fc-dragging {
+ opacity: 0.8 !important;
+ z-index: 9999 !important;
+ pointer-events: none !important;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3) !important;
+ transition: none !important; // Disable transitions during drag
+ }
+
+ // Dragging state for external events
+ &[data-is-dragging="true"] {
+ opacity: 0.5;
+ transition: none !important; // Disable transitions during drag
+ }
}
-.fc-toolbar.fc-header-toolbar {
- margin-bottom: 1.5rem;
+
+// Let FullCalendar handle drag mirrors naturally
+.fc-event-dragging,
+.fc-event-mirror,
+.fc-draggable-mirror {
+ // Just hide them completely for clean experience
+ display: none !important;
}
-.none-border .modal-footer {
- border-top: none;
+
+// Calendar drop zones
+.fc-day-grid .fc-day.fc-highlight,
+.fc-daygrid-day.fc-highlight {
+ background: rgba(102, 126, 234, 0.1) !important;
+ border: 2px dashed rgba(102, 126, 234, 0.5) !important;
+ position: relative;
+
+ &::before {
+ content: '📅 Drop here';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ color: rgba(102, 126, 234, 0.8);
+ font-weight: 600;
+ font-size: 12px;
+ pointer-events: none;
+ }
}
-.fc-toolbar h2 {
- font-size: $font-size-18;
- font-weight: $font-weight-semibold;
- font-family: 'Roboto', sans-serif;
- line-height: 30px;
- text-transform: uppercase;
+
+.fc-time-grid .fc-highlight {
+ background: rgba(102, 126, 234, 0.1) !important;
+ border: 2px dashed rgba(102, 126, 234, 0.5) !important;
}
-.fc-day-grid-event .fc-time {
- font-family: 'Roboto', sans-serif;
+
+/* Add Category Button */
+.calendar-add-category-btn {
+ background: linear-gradient(135deg, #a29bfe 0%, #6c5ce7 100%);
+ border: none;
+ border-radius: 50px;
+ padding: 15px 25px;
+ color: white;
+ font-weight: 600;
+ width: 100%;
+ box-shadow: 0 8px 25px rgba(162, 155, 254, 0.3);
+ transition: all 0.3s ease;
+ text-decoration: none;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 10px;
+
+ &:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 12px 35px rgba(162, 155, 254, 0.4);
+ color: white;
+ background: linear-gradient(135deg, #6c5ce7 0%, #a29bfe 100%);
+ text-decoration: none;
+ }
}
-.fc-day {
- background: $white;
+
+/* Calendar Main Card */
+.calendar-main-card {
+ background: rgba(255, 255, 255, 0.95);
+ backdrop-filter: blur(10px);
+ border-radius: 20px;
+ padding: 30px;
+ box-shadow: 0 15px 40px rgba(0, 0, 0, 0.1);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ transition: all 0.3s ease;
+ position: relative;
+ overflow: visible;
+ z-index: 1;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15);
+ }
+
+ .card-body {
+ padding: 0;
+ position: relative;
+ overflow: visible;
+ }
}
-.fc-toolbar .fc-state-active,
-.fc-toolbar .ui-state-active,
-.fc-toolbar button:focus,
-.fc-toolbar button:hover,
-.fc-toolbar .ui-state-hover {
- z-index: 0;
+
+/* FullCalendar Beautiful Styling */
+.fc {
+ font-family: 'Inter', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+ position: relative;
+ overflow: visible;
+ z-index: 1;
}
-.fc th.fc-widget-header {
- background: $gray-300;
- font-size: $font-size-14;
- line-height: 20px;
- padding: 10px 0;
- text-transform: uppercase;
+
+.fc-toolbar-title {
+ font-size: 2rem !important;
+ font-weight: 700 !important;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+
+ @media (max-width: 768px) {
+ font-size: 1.5rem !important;
+ }
}
-.fc-unthemed th,
-.fc-unthemed td,
-.fc-unthemed thead,
-.fc-unthemed tbody,
-.fc-unthemed .fc-divider,
-.fc-unthemed .fc-row,
-.fc-unthemed .fc-popover {
- border-color: #f3f3f3;
+
+.fc-button-primary {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
+ border: none !important;
+ border-radius: 10px !important;
+ padding: 8px 16px !important;
+ font-weight: 600 !important;
+ box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3) !important;
+ transition: all 0.3s ease !important;
+
+ &:hover {
+ transform: translateY(-2px) !important;
+ box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4) !important;
+ background: linear-gradient(135deg, #764ba2 0%, #667eea 100%) !important;
+ }
+
+ &:not(:disabled):active,
+ &:not(:disabled).fc-button-active {
+ background: linear-gradient(135deg, #5a4fcf 0%, #667eea 100%) !important;
+ box-shadow: 0 2px 10px rgba(102, 126, 234, 0.5) !important;
+ }
}
-.fc-basic-view .fc-day-number,
-.fc-basic-view .fc-week-number {
- padding: 2px 5px;
+
+.fc-daygrid-day {
+ transition: all 0.3s ease;
+
+ &:hover {
+ background: rgba(102, 126, 234, 0.05) !important;
+ }
}
-.fc-button {
- background: #f1f1f1;
- border: none;
- color: #797979;
- text-transform: capitalize;
- box-shadow: none !important;
- border-radius: 3px !important;
- margin: 0 3px !important;
- padding: 6px 12px !important;
- height: auto !important;
-}
-.fc-text-arrow {
- font-family: inherit;
- font-size: $font-size-16;
-}
-.fc-state-hover {
- background: #f3f3f3;
-}
-.fc-state-highlight {
- background: #f0f0f0;
-}
-.fc-state-down,
-.fc-state-active,
-.fc-state-disabled {
- background-color: $primary !important;
- color: $white !important;
- text-shadow: none !important;
-}
-.fc-cell-overlay {
- background: #f0f0f0;
-}
-.fc-unthemed .fc-today {
- background: $white;
+
+.fc-day-today {
+ background: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%) !important;
+ border: 2px solid rgba(102, 126, 234, 0.3) !important;
+ position: relative;
+
+ &::before {
+ content: '📅';
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ font-size: 12px;
+ opacity: 0.7;
+ }
}
+
.fc-event {
- border-radius: 2px;
- border: none;
- color: $white !important;
- cursor: move;
- font-size: 13px;
- margin: 1px 7px;
- padding: 5px 5px;
- text-align: center;
+ border-radius: 8px !important;
+ border: none !important;
+ padding: 4px 8px !important;
+ font-weight: 600 !important;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15) !important;
+ transition: all 0.3s ease !important;
+ position: relative;
+ overflow: hidden;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
+ transition: left 0.5s;
+ }
+
+ &:hover {
+ transform: translateY(-1px) !important;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2) !important;
+
+ &::before {
+ left: 100%;
+ }
+ }
+
+ &.bg-purple {
+ background: linear-gradient(135deg, #a29bfe 0%, #6c5ce7 100%) !important;
+ }
+
+ &.bg-success {
+ background: linear-gradient(135deg, #00b894 0%, #00cec9 100%) !important;
+ }
+
+ &.bg-info {
+ background: linear-gradient(135deg, #74b9ff 0%, #0984e3 100%) !important;
+ }
+
+ &.bg-primary {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
+ }
}
-.fc-basic-view td.fc-week-number span {
- padding-right: 8px;
- font-weight: $font-weight-bold;
- font-family: 'Roboto', sans-serif;
+
+.fc-daygrid-day-number {
+ font-weight: 600 !important;
+ color: #2c3e50 !important;
+ padding: 8px !important;
+ transition: all 0.3s ease;
+
+ &:hover {
+ color: #667eea !important;
+ transform: scale(1.1);
+ }
}
-.fc-basic-view td.fc-day-number {
- padding-right: 8px;
- font-weight: $font-weight-bold;
- font-family: 'Roboto', sans-serif;
+
+.fc-col-header-cell {
+ background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%) !important;
+ font-weight: 700 !important;
+ color: #495057 !important;
+ border: none !important;
+ padding: 15px 8px !important;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
}
-.event-form .input-group .form-control {
- height: 40px;
+
+.fc-scrollgrid {
+ border: none !important;
+ border-radius: 15px !important;
+ overflow: visible !important;
+ position: relative;
+ z-index: 1;
}
-.submit-section {
- text-align: center;
- margin-top: 40px;
+
+.fc-theme-standard td,
+.fc-theme-standard th {
+ border-color: rgba(0, 0, 0, 0.05) !important;
}
-.submit-btn {
+
+/* Checkbox Styling */
+.checkbox {
+ display: flex;
+ align-items: center;
+ margin-bottom: 15px;
+
+ input[type="checkbox"] {
+ width: 18px;
+ height: 18px;
+ accent-color: #667eea;
+ margin-right: 8px;
+ cursor: pointer;
+ }
+
+ label {
+ font-weight: 500;
+ color: #495057;
+ cursor: pointer;
+ user-select: none;
+ }
+}
+
+/* Modal Enhancements */
+.modal.custom-modal {
+ .modal-content {
+ border-radius: 20px;
+ border: none;
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
+ backdrop-filter: blur(10px);
+ }
+
+ .modal-header {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: white;
+ border-radius: 20px 20px 0 0;
+ padding: 20px 25px;
+ border-bottom: none;
+
+ .modal-title {
+ font-weight: 700;
+ font-size: 1.3rem;
+ }
+
+ .btn-close {
+ filter: brightness(0) invert(1);
+ opacity: 0.8;
+
+ &:hover {
+ opacity: 1;
+ }
+ }
+ }
+
+ .modal-body {
+ padding: 25px;
+ background: rgba(255, 255, 255, 0.95);
+
+ .form-group {
+ margin-bottom: 20px;
+
+ label {
+ font-weight: 600;
+ color: #2c3e50;
+ margin-bottom: 8px;
+ display: block;
+ }
+
+ .form-control {
+ border-radius: 10px;
+ border: 2px solid #e9ecef;
+ padding: 12px 15px;
+ transition: all 0.3s ease;
+
+ &:focus {
+ border-color: #667eea;
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
+ }
+ }
+ }
+ }
+
+ .submit-section {
+ text-align: center;
+ margin-top: 30px;
+ }
+
+ .submit-btn {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ border: none;
border-radius: 50px;
- font-size: $font-size-18;
- font-weight: $font-weight-semibold;
- min-width: 200px;
+ padding: 12px 30px;
+ color: white;
+ font-weight: 600;
+ font-size: 16px;
+ min-width: 150px;
+ box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 12px 35px rgba(102, 126, 234, 0.4);
+ background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
+ }
+
+ &.btn-success {
+ background: linear-gradient(135deg, #00b894 0%, #00cec9 100%);
+ box-shadow: 0 8px 25px rgba(0, 184, 148, 0.3);
+
+ &:hover {
+ background: linear-gradient(135deg, #00cec9 0%, #00b894 100%);
+ box-shadow: 0 12px 35px rgba(0, 184, 148, 0.4);
+ }
+ }
+
+ &.btn-danger {
+ background: linear-gradient(135deg, #e17055 0%, #d63031 100%);
+ box-shadow: 0 8px 25px rgba(225, 112, 85, 0.3);
+
+ &:hover {
+ background: linear-gradient(135deg, #d63031 0%, #e17055 100%);
+ box-shadow: 0 12px 35px rgba(225, 112, 85, 0.4);
+ }
+ }
+ }
+}
+
+/* Dark Mode Support */
+[data-layout-mode="dark_mode"] {
+ .calendar-page-wrapper {
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
+ }
+
+ .calendar-page-header {
+ background: rgba(29, 29, 66, 0.95);
+ border: 1px solid rgba(103, 116, 142, 0.3);
+
+ h3 {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+ }
+ }
+
+ .calendar-sidebar {
+ background: rgba(29, 29, 66, 0.95);
+ border: 1px solid rgba(103, 116, 142, 0.3);
+
+ h4 {
+ color: #ffffff;
+ }
+ }
+
+ .calendar-main-card {
+ background: rgba(29, 29, 66, 0.95);
+ border: 1px solid rgba(103, 116, 142, 0.3);
+ }
+
+ .fc-col-header-cell {
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%) !important;
+ color: #ffffff !important;
+ }
+
+ .fc-daygrid-day-number {
+ color: #ffffff !important;
+
+ &:hover {
+ color: #ff9f43 !important;
+ }
+ }
+
+ .fc-day-today {
+ background: linear-gradient(135deg, rgba(255, 159, 67, 0.1) 0%, rgba(254, 202, 87, 0.1) 100%) !important;
+ border: 2px solid rgba(255, 159, 67, 0.3) !important;
+ }
+
+ .fc-toolbar-title {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+ }
+
+ .fc-button-primary {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%) !important;
+ box-shadow: 0 4px 15px rgba(255, 159, 67, 0.3) !important;
+
+ &:hover {
+ background: linear-gradient(135deg, #feca57 0%, #ff9f43 100%) !important;
+ box-shadow: 0 6px 20px rgba(255, 159, 67, 0.4) !important;
+ }
+
+ &:not(:disabled):active,
+ &:not(:disabled).fc-button-active {
+ background: linear-gradient(135deg, #e8890a 0%, #ff9f43 100%) !important;
+ box-shadow: 0 2px 10px rgba(255, 159, 67, 0.5) !important;
+ }
+ }
+
+ .fc-daygrid-day:hover {
+ background: rgba(255, 159, 67, 0.05) !important;
+ }
+
+ .modal.custom-modal {
+ .modal-content {
+ background: rgba(29, 29, 66, 0.95);
+ border: 1px solid rgba(103, 116, 142, 0.3);
+ }
+
+ .modal-header {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%);
+ }
+
+ .modal-body {
+ background: rgba(29, 29, 66, 0.95);
+
+ .form-group {
+ label {
+ color: #ffffff;
+ }
+
+ .form-control {
+ background: rgba(29, 29, 66, 0.8);
+ border-color: rgba(103, 116, 142, 0.5);
+ color: #ffffff;
+
+ &:focus {
+ border-color: #ff9f43;
+ box-shadow: 0 0 0 3px rgba(255, 159, 67, 0.1);
+ }
+
+ &::placeholder {
+ color: rgba(255, 255, 255, 0.5);
+ }
+ }
+ }
+ }
+
+ .submit-btn {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%);
+ box-shadow: 0 8px 25px rgba(255, 159, 67, 0.3);
+
+ &:hover {
+ background: linear-gradient(135deg, #feca57 0%, #ff9f43 100%);
+ box-shadow: 0 12px 35px rgba(255, 159, 67, 0.4);
+ }
+ }
+ }
+
+ .checkbox label {
+ color: #ffffff;
+ }
+
+ // Dark mode drag & drop
+ .fc-day-grid .fc-day.fc-highlight,
+ .fc-daygrid-day.fc-highlight {
+ background: rgba(255, 159, 67, 0.1) !important;
+ border: 2px dashed rgba(255, 159, 67, 0.5) !important;
+
+ &::before {
+ color: rgba(255, 159, 67, 0.8) !important;
+ }
+ }
+
+ .fc-time-grid .fc-highlight {
+ background: rgba(255, 159, 67, 0.1) !important;
+ border: 2px dashed rgba(255, 159, 67, 0.5) !important;
+ }
+}
+
+/* Loading Animation */
+@keyframes shimmer {
+ 0% {
+ background-position: -468px 0;
+ }
+ 100% {
+ background-position: 468px 0;
+ }
+}
+
+.calendar-loading {
+ background: linear-gradient(to right, #eeeeee 8%, #dddddd 18%, #eeeeee 33%);
+ background-size: 800px 104px;
+ animation: shimmer 1.5s infinite linear;
+ border-radius: 15px;
+ height: 400px;
+}
+
+/* Responsive Design */
+@media (max-width: 992px) {
+ .calendar-sidebar {
+ margin-bottom: 30px;
+ }
+}
+
+@media (max-width: 768px) {
+ .calendar-page-wrapper {
+ padding: 15px;
+ }
+
+ .calendar-page-header {
+ padding: 20px;
+ margin-bottom: 20px;
+ }
+
+ .calendar-sidebar {
+ padding: 20px;
+ }
+
+ .calendar-main-card {
+ padding: 20px;
+ }
+
+ .fc-toolbar {
+ flex-direction: column;
+ gap: 10px;
+
+ .fc-toolbar-chunk {
+ display: flex;
+ justify-content: center;
+ }
+ }
+
+ .calendar-events {
+ padding: 12px;
+ font-size: 14px;
+ }
+}
+
+@media (max-width: 576px) {
+ .calendar-page-header h3 {
+ font-size: 1.8rem;
+ }
+
+ .calendar-create-btn {
padding: 10px 20px;
+ font-size: 14px;
+ }
+
+ .fc-toolbar-title {
+ font-size: 1.3rem !important;
+ }
+
+ .fc-button-primary {
+ padding: 6px 12px !important;
+ font-size: 12px !important;
+ }
}
\ No newline at end of file
diff --git a/src/style/scss/pages/_customisedstyle.scss b/src/style/scss/pages/_customisedstyle.scss
index 2fbea81..ab120f9 100644
--- a/src/style/scss/pages/_customisedstyle.scss
+++ b/src/style/scss/pages/_customisedstyle.scss
@@ -1433,4 +1433,153 @@ ul.ant-pagination.ant-table-pagination li button.ant-pagination-item-link {
.section-notes-slider .notes-slider .slick-list .slick-slide div{
margin-left: 12px !important;
+}
+
+// Calendar Dark Mode Integration
+[data-layout-mode="dark_mode"] {
+ .calendar-page-wrapper {
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%) !important;
+ }
+
+ .calendar-page-header {
+ background: rgba(29, 29, 66, 0.95) !important;
+ border: 1px solid rgba(103, 116, 142, 0.3) !important;
+
+ h3 {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%) !important;
+ -webkit-background-clip: text !important;
+ -webkit-text-fill-color: transparent !important;
+ background-clip: text !important;
+ }
+ }
+
+ .calendar-sidebar {
+ background: rgba(29, 29, 66, 0.95) !important;
+ border: 1px solid rgba(103, 116, 142, 0.3) !important;
+
+ h4 {
+ color: #ffffff !important;
+ }
+ }
+
+ .calendar-main-card {
+ background: rgba(29, 29, 66, 0.95) !important;
+ border: 1px solid rgba(103, 116, 142, 0.3) !important;
+ }
+
+ .fc-col-header-cell {
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%) !important;
+ color: #ffffff !important;
+ }
+
+ .fc-daygrid-day-number {
+ color: #ffffff !important;
+
+ &:hover {
+ color: #ff9f43 !important;
+ }
+ }
+
+ .fc-day-today {
+ background: linear-gradient(135deg, rgba(255, 159, 67, 0.1) 0%, rgba(254, 202, 87, 0.1) 100%) !important;
+ border: 2px solid rgba(255, 159, 67, 0.3) !important;
+ }
+
+ .fc-toolbar-title {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%) !important;
+ -webkit-background-clip: text !important;
+ -webkit-text-fill-color: transparent !important;
+ background-clip: text !important;
+ }
+
+ .fc-button-primary {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%) !important;
+ box-shadow: 0 4px 15px rgba(255, 159, 67, 0.3) !important;
+
+ &:hover {
+ background: linear-gradient(135deg, #feca57 0%, #ff9f43 100%) !important;
+ box-shadow: 0 6px 20px rgba(255, 159, 67, 0.4) !important;
+ }
+
+ &:not(:disabled):active,
+ &:not(:disabled).fc-button-active {
+ background: linear-gradient(135deg, #e8890a 0%, #ff9f43 100%) !important;
+ box-shadow: 0 2px 10px rgba(255, 159, 67, 0.5) !important;
+ }
+ }
+
+ .fc-daygrid-day:hover {
+ background: rgba(255, 159, 67, 0.05) !important;
+ }
+
+ .calendar-create-btn {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%) !important;
+ box-shadow: 0 8px 25px rgba(255, 159, 67, 0.3) !important;
+
+ &:hover {
+ background: linear-gradient(135deg, #feca57 0%, #ff9f43 100%) !important;
+ box-shadow: 0 12px 35px rgba(255, 159, 67, 0.4) !important;
+ }
+ }
+
+ .calendar-add-category-btn {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%) !important;
+ box-shadow: 0 8px 25px rgba(255, 159, 67, 0.3) !important;
+
+ &:hover {
+ background: linear-gradient(135deg, #feca57 0%, #ff9f43 100%) !important;
+ box-shadow: 0 12px 35px rgba(255, 159, 67, 0.4) !important;
+ }
+ }
+
+ // Calendar Modal Dark Mode
+ .modal.custom-modal {
+ .modal-content {
+ background: rgba(29, 29, 66, 0.95) !important;
+ border: 1px solid rgba(103, 116, 142, 0.3) !important;
+ }
+
+ .modal-header {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%) !important;
+ }
+
+ .modal-body {
+ background: rgba(29, 29, 66, 0.95) !important;
+
+ .form-group {
+ label {
+ color: #ffffff !important;
+ }
+
+ .form-control {
+ background: rgba(29, 29, 66, 0.8) !important;
+ border-color: rgba(103, 116, 142, 0.5) !important;
+ color: #ffffff !important;
+
+ &:focus {
+ border-color: #ff9f43 !important;
+ box-shadow: 0 0 0 3px rgba(255, 159, 67, 0.1) !important;
+ }
+
+ &::placeholder {
+ color: rgba(255, 255, 255, 0.5) !important;
+ }
+ }
+ }
+ }
+
+ .submit-btn {
+ background: linear-gradient(135deg, #ff9f43 0%, #feca57 100%) !important;
+ box-shadow: 0 8px 25px rgba(255, 159, 67, 0.3) !important;
+
+ &:hover {
+ background: linear-gradient(135deg, #feca57 0%, #ff9f43 100%) !important;
+ box-shadow: 0 12px 35px rgba(255, 159, 67, 0.4) !important;
+ }
+ }
+ }
+
+ .checkbox label {
+ color: #ffffff !important;
+ }
}
\ No newline at end of file