/* Calendar styles */
.custom-calendar {
    margin: 20px auto;
    border: 1px solid #ccc;
    border-radius: 6px;
    overflow: hidden;
    min-height: 600px;
    display: flex;
    flex-direction: column;
}

.calendar-header {
    display: flex;
    flex-wrap: nowrap;
    justify-content: space-between;
    align-items: center;
    background: #f4f4f4;
    padding: 10px 15px;
    border-bottom: 1px solid #ccc;
    gap: 15px;
}

.calendar-header button {
    padding: 6px 12px;
    border: none;
    background: #ddd;
    cursor: pointer;
    border-radius: 4px;
    height: 32px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
}

.calendar-header button:hover {
    background: #bbb;
}

.calendar-header button:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.calendar-header .nav-buttons {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 8px;
    flex: 0 0 auto;
}

.calendar-header .current-month {
    flex: 1 1 auto;
    text-align: center;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    font-size: 1.1em;
    font-weight: 600;
    min-width: 150px;
}

/* Medium screens adjustments */
@media (max-width: 992px) {
    .calendar-header {
        flex-wrap: wrap;
        gap: 10px;
    }
    
    .calendar-header .nav-buttons {
        order: 1;
        flex: 0 0 auto;
    }
    
    .calendar-header .current-month {
        order: 2;
        flex: 1 0 100%;
        margin: 4px 0;
    }
    
    .calendar-header .cal-jump-search-wrapper {
        order: 3;
        flex: 1 1 auto;
    }
    
    .calendar-header .view-switcher {
        order: 4;
        flex: 1 1 auto;
    }
}

/* Small screens adjustments */
@media (max-width: 768px) {
    .calendar-header {
        flex-direction: column;
        align-items: stretch;
    }

    .calendar-header .nav-buttons,
    .calendar-header .cal-jump-search-wrapper,
    .calendar-header .view-switcher {
        width: 100%;
        justify-content: center;
    }

    .calendar-header .nav-buttons {
        order: 1;
    }

    .calendar-header .current-month {
        order: 2;
        margin: 8px 0;
    }
    
    .calendar-header .cal-jump-search-wrapper {
        order: 3;
    }

    .calendar-header .view-switcher {
        order: 4;
    }
}

.calendar-header .view-switcher {
    display: flex !important;
    gap: 6px;
    flex-wrap: nowrap;
    align-items: center;
    flex: 0 0 auto;
    visibility: visible !important;
}

.calendar-header .view-switcher button {
    min-width: 60px;
    white-space: nowrap;
    display: inline-flex !important;
    visibility: visible !important;
}

@media (max-width: 500px) {
    .calendar-header .view-switcher {
        flex-direction: column;
        align-items: stretch;
    }

    .calendar-header .view-switcher button {
        width: 100%;
    }
}

/* Search suggestions */
.cal-search-suggestions {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    margin: 4px 0 0;
    padding: 0;
    list-style: none;
    background: white;
    border: 1px solid #ccc;
    max-height: 200px;
    overflow-y: auto;
    z-index: 1000;
    display: none;
}

.cal-search-suggestions li {
    padding: 4px 8px;
    cursor: pointer;
}

.cal-search-suggestions li:hover {
    background: #eee;
}

.calendar-cell.today:not(.header-cell) {
    background-color: #fffde7;
}

.view-switcher button.active {
    background: #666;
    color: white;
}

.calendar-grid {
    position: relative;
    width: 100%;
    height: 100%;
}

.calendar-slider {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: auto;
    flex: 1 1 auto;
    min-height: 500px;
}

.calendar-row {
    display: flex;
}

.calendar-cell {
    flex: 1;
    min-height: 60px;
    border: 1px solid #eee;
    padding: 4px;
    box-sizing: border-box;
    position: relative;
    font-size: 12px;
    background: #fff;
    overflow: hidden;
}

.calendar-cell:hover .add-btn-inline {
    opacity: 1;
}

.add-btn-inline {
    position: absolute;
    top: 2px;
    right: 2px;
    background: #007bff;
    color: white;
    border: none;
    border-radius: 3px;
    padding: 2px 6px;
    font-size: 10px;
    cursor: pointer;
    opacity: 0;
    transition: opacity 0.2s ease;
    z-index: 5;
    white-space: nowrap;
    font-weight: 500;
}

.add-btn-inline:hover {
    background: #0056b3;
}

/* Modal positioning styles */
.modal.align-with-calendar {
    top: 0 !important;
}

.modal.align-with-calendar .modal-dialog {
    margin-top: 0;
    position: absolute;
    top: var(--modal-top, 50px);
    left: 50%;
    transform: translateX(-50%);
    width: 90%;
    max-width: 600px;
}

.header-cell {
    background: #f0f0f0;
    font-weight: bold;
    text-align: center;
    font-size: 13px;
}

.date-label {
    font-size: 11px;
    color: #666;
    position: absolute;
    top: 4px;
    right: 4px;
}

.calendar-event {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 4px 6px;
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    touch-action: none;
    -ms-touch-action: none;
}

.calendar-event .event-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    font-weight: bold;
    opacity: 0.9;
}

.calendar-event .event-meta i {
    margin-right: 0;
}

.calendar-event .event-time {
    margin: 0;
    font-size: 11px;
}

.calendar-cell .calendar-event {
    display: block;
    position: relative;
    margin-bottom: 2px;
}

.calendar-event .event-title {
    padding: 0;
    margin: 0;
    line-height: 1.2;
    overflow: hidden;
    text-overflow: initial;
    white-space: normal !important;
}

.calendar-row.header {
    position: relative;
    z-index: 10;
    background: #fff;
}

.calendar-stack {
    position: relative;
}

.calendar-overlay {
    position: absolute;
    pointer-events: none;
    z-index: 1;
}

.day-column {
    position: relative;
    pointer-events: none;
}

.day-column .calendar-event {
    pointer-events: auto;
}

.calendar-event img {
    max-width: 100%;
    margin-top: 4px;
    border-radius: 4px;
}

.other-month {
    background: #f9f9f9;
    color: #bbb;
}

/* Time slots */
.time-slots .time-label {
    flex: 0 0 80px;
    font-weight: bold;
    background: #f9f9f9;
    text-align: right;
    padding-right: 5px;
    box-sizing: border-box;
}

.time-slots .calendar-cell:not(.time-label) {
    flex: 1;
}

.calendar-cell.time-label {
    width: 60px;
    flex: 0 0 60px;
    font-weight: bold;
    text-align: left;
    padding-left: 8px;
    background: #f9f9f9;
    box-sizing: border-box;
}

.cal-spinner-wrapper {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-left: 10px;
    width: 24px;
    height: 32px;
    position: relative;
}

.cal-loading-spinner {
    font-size: 16px;
    animation: fa-spin 1s infinite linear;
    opacity: 0;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    visibility: hidden;
    transition: opacity 0.2s ease;
}

.cal-loading-spinner.visible {
    opacity: 1;
    visibility: visible;
}

@keyframes fa-spin {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}

.calendar-popup button {
    display: block;
    width: 100%;
    margin: 4px 0;
    padding: 4px 8px;
    background: #f0f0f0;
    border: none;
    border-radius: 4px;
    cursor: pointer;
}

.calendar-popup button:hover {
    background: #ddd;
}

.calendar-drop-tooltip {
    position: fixed;
    padding: 4px 8px;
    font-size: 12px;
    background: #222;
    color: #fff;
    border-radius: 4px;
    pointer-events: none;
    z-index: 10001;
    display: none;
    white-space: nowrap;
}

/* Additional small screen refinements */
@media (max-width: 500px) {
    .calendar-header .cal-jump-search-wrapper {
        flex-wrap: wrap;
    }

    .calendar-header .cal-jump-search-wrapper input {
        flex: 1 1 100%;
        min-width: 0;
        margin: 2px 0;
    }

    .calendar-header .view-switcher {
        flex-wrap: wrap;
    }

    .calendar-header .view-switcher button {
        flex: 1 1 45%;
    }
}

/* Dragging visuals */
.dragging-helper {
    /* scale up slightly */
    transform: scale(1.1);
    /* lift it off the page */
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
    /* smooth transition */
    transition: transform 0.1s ease, box-shadow 0.1s ease;
}

.calendar-event.drag-ready {
    transform: scale(1.1);
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
    transition: transform 0.1s ease, box-shadow 0.1s ease;
    /* make sure transform-origin is centered */
    transform-origin: center center;
}

/* ==========================================================================
   Modern Custom Calendar Refresh
   Drop this after the existing calendar CSS
   ========================================================================== */

:root {
	--cal-bg:#f4f6f9;
	--cal-surface:#ffffff;
	--cal-surface-soft:#f8fafc;
	--cal-border:#e2e8f0;
	--cal-border-dark:#cbd5e1;
	--cal-text:#1f2937;
	--cal-muted:#64748b;
	--cal-primary:#3c8dbc;
	--cal-primary-dark:#367fa9;
	--cal-success:#00a65a;
	--cal-warning:#f39c12;
	--cal-danger:#dd4b39;
	--cal-radius:12px;
	--cal-radius-sm:8px;
	--cal-shadow:0 1px 3px rgba(15,23,42,0.08), 0 1px 2px rgba(15,23,42,0.04);
	--cal-shadow-lg:0 12px 30px rgba(15,23,42,0.14);
}

/* Main calendar shell */
.custom-calendar {
	margin:18px auto;
	border:1px solid var(--cal-border);
	border-radius:var(--cal-radius);
	overflow:hidden;
	min-height:600px;
	display:flex;
	flex-direction:column;
	background:var(--cal-surface);
	box-shadow:var(--cal-shadow);
}

/* Header */
.calendar-header {
	display:flex;
	flex-wrap:nowrap;
	justify-content:space-between;
	align-items:center;
	background:linear-gradient(180deg, #ffffff, var(--cal-surface-soft));
	padding:12px 14px;
	border-bottom:1px solid var(--cal-border);
	gap:12px;
}

.calendar-header .current-month {
	flex:1 1 auto;
	text-align:center;
	white-space:nowrap;
	overflow:hidden;
	text-overflow:ellipsis;
	font-size:18px;
	font-weight:700;
	color:var(--cal-text);
	min-width:150px;
	letter-spacing:-0.2px;
}

/* Header button groups */
.calendar-header .nav-buttons,
.calendar-header .view-switcher,
.calendar-header .cal-jump-search-wrapper {
	display:flex;
	align-items:center;
	gap:7px;
}

/* General header buttons */
.calendar-header button {
	padding:7px 12px;
	border:1px solid var(--cal-border-dark);
	background:#ffffff;
	color:var(--cal-text);
	cursor:pointer;
	border-radius:999px;
	height:34px;
	display:inline-flex;
	align-items:center;
	justify-content:center;
	font-size:13px;
	font-weight:600;
	line-height:1;
	box-shadow:0 1px 1px rgba(15,23,42,0.04);
	transition:background-color .15s ease, color .15s ease, border-color .15s ease, box-shadow .15s ease, transform .15s ease;
}

.calendar-header button:hover {
	background:var(--cal-surface-soft);
	border-color:#94a3b8;
	box-shadow:0 2px 5px rgba(15,23,42,0.08);
}

.calendar-header button:active {
	transform:translateY(1px);
	box-shadow:none;
}

.calendar-header button:disabled {
	opacity:0.5;
	cursor:not-allowed;
	transform:none;
	box-shadow:none;
}

/* View buttons */
.calendar-header .view-switcher {
	display:flex !important;
	gap:6px;
	flex-wrap:nowrap;
	align-items:center;
	flex:0 0 auto;
	visibility:visible !important;
	background:#eef2f7;
	padding:4px;
	border-radius:999px;
	border:1px solid var(--cal-border);
}

.calendar-header .view-switcher button {
	min-width:62px;
	white-space:nowrap;
	display:inline-flex !important;
	visibility:visible !important;
	border:0;
	background:transparent;
	box-shadow:none;
	height:30px;
	padding:6px 11px;
	color:var(--cal-muted);
}

.calendar-header .view-switcher button:hover {
	background:#ffffff;
	color:var(--cal-primary);
	box-shadow:0 1px 3px rgba(15,23,42,0.08);
}

.view-switcher button.active {
	background:var(--cal-primary);
	color:#ffffff;
	box-shadow:0 2px 6px rgba(60,141,188,0.28);
}

/* Search / jump input */
.calendar-header .cal-jump-search-wrapper {
	position:relative;
}

.calendar-header .cal-jump-search-wrapper input,
.calendar-header input[type="text"],
.calendar-header input[type="search"] {
	height:34px;
	border:1px solid var(--cal-border-dark);
	border-radius:999px;
	padding:6px 12px;
	font-size:13px;
	color:var(--cal-text);
	background:#ffffff;
	outline:none;
	box-shadow:none;
	transition:border-color .15s ease, box-shadow .15s ease;
}

.calendar-header .cal-jump-search-wrapper input:focus,
.calendar-header input[type="text"]:focus,
.calendar-header input[type="search"]:focus {
	border-color:var(--cal-primary);
	box-shadow:0 0 0 3px rgba(60,141,188,0.14);
}

/* Search suggestions */
.cal-search-suggestions {
	position:absolute;
	top:100%;
	left:0;
	right:0;
	margin:6px 0 0;
	padding:6px;
	list-style:none;
	background:#ffffff;
	border:1px solid var(--cal-border);
	border-radius:10px;
	max-height:220px;
	overflow-y:auto;
	z-index:1000;
	display:none;
	box-shadow:var(--cal-shadow-lg);
}

.cal-search-suggestions li {
	padding:8px 10px;
	cursor:pointer;
	border-radius:7px;
	color:var(--cal-text);
	font-size:13px;
}

.cal-search-suggestions li:hover {
	background:var(--cal-surface-soft);
	color:var(--cal-primary);
}

/* Calendar body */
.calendar-slider {
	position:relative;
	width:100%;
	height:100%;
	overflow:auto;
	flex:1 1 auto;
	min-height:500px;
	background:#ffffff;
}

.calendar-grid {
	position:relative;
	width:100%;
	height:100%;
	background:#ffffff;
}

.calendar-row {
	display:flex;
}

/* Cells */
.calendar-cell {
	flex:1;
	min-height:64px;
	border:1px solid var(--cal-border);
	padding:6px;
	box-sizing:border-box;
	position:relative;
	font-size:12px;
	background:#ffffff;
	overflow:hidden;
	color:var(--cal-text);
	transition:background-color .15s ease, box-shadow .15s ease;
}

.calendar-cell:hover:not(.header-cell):not(.time-label) {
	background:#fbfdff;
	box-shadow:inset 0 0 0 1px rgba(60,141,188,0.12);
}

.calendar-cell.today:not(.header-cell) {
	background:#fff9db;
	box-shadow:inset 0 0 0 1px rgba(245,158,11,0.22);
}

.other-month {
	background:#f8fafc;
	color:#a8b3c2;
}

/* Header cells */
.header-cell {
	background:#f8fafc;
	font-weight:700;
	text-align:center;
	font-size:12px;
	color:#475569;
	text-transform:uppercase;
	letter-spacing:0.04em;
	border-color:var(--cal-border);
}

.calendar-row.header {
	position:relative;
	z-index:10;
	background:#ffffff;
}

/* Date number */
.date-label {
	font-size:11px;
	color:var(--cal-muted);
	position:absolute;
	top:6px;
	right:7px;
	font-weight:700;
	background:rgba(255,255,255,0.8);
	border-radius:999px;
	padding:1px 5px;
}

/* Inline add button */
.add-btn-inline {
	position:absolute;
	top:6px;
	right:6px;
	background:var(--cal-primary);
	color:#ffffff;
	border:none;
	border-radius:999px;
	padding:3px 8px;
	font-size:10px;
	cursor:pointer;
	opacity:0;
	transition:opacity .15s ease, background-color .15s ease, transform .15s ease;
	z-index:5;
	white-space:nowrap;
	font-weight:700;
	box-shadow:0 2px 5px rgba(60,141,188,0.25);
}

.calendar-cell:hover .add-btn-inline {
	opacity:1;
}

.add-btn-inline:hover {
	background:var(--cal-primary-dark);
	transform:translateY(-1px);
}

/* Events */
.calendar-event {
	display:flex;
	flex-direction:column;
	gap:2px;
	padding:6px 8px;
	border-radius:8px;
	position:relative;
	overflow:hidden;
	text-overflow:ellipsis;
	white-space:nowrap;
	touch-action:none;
	-ms-touch-action:none;
	box-shadow:0 1px 3px rgba(15,23,42,0.16);
	border:1px solid rgba(255,255,255,0.28);
	line-height:1.25;
	transition:transform .15s ease, box-shadow .15s ease, filter .15s ease;
}

.calendar-cell .calendar-event {
	display:block;
	position:relative;
	margin-bottom:4px;
}

.calendar-event:hover {
	transform:translateY(-1px);
	box-shadow:0 4px 10px rgba(15,23,42,0.18);
	filter:saturate(1.04);
}

.calendar-event .event-meta {
	display:flex;
	align-items:center;
	gap:6px;
	font-size:11px;
	font-weight:700;
	opacity:0.92;
	margin-bottom:1px;
}

.calendar-event .event-time {
	margin:0;
	font-size:11px;
	font-weight:700;
	opacity:0.95;
}

.calendar-event .event-title {
	padding:0;
	margin:0;
	line-height:1.25;
	overflow:hidden;
	text-overflow:initial;
	white-space:normal !important;
	font-weight:600;
}

.calendar-event img {
	max-width:100%;
	margin-top:5px;
	border-radius:6px;
}

/* Overlay / day columns */
.calendar-stack {
	position:relative;
}

.calendar-overlay {
	position:absolute;
	pointer-events:none;
	z-index:1;
}

.day-column {
	position:relative;
	pointer-events:none;
}

.day-column .calendar-event {
	pointer-events:auto;
}

/* Time slots */
.time-slots .time-label,
.calendar-cell.time-label {
	flex:0 0 64px;
	width:64px;
	font-weight:700;
	text-align:right;
	padding:7px 8px;
	background:#f8fafc;
	color:#64748b;
	box-sizing:border-box;
	border-color:var(--cal-border);
	font-size:11px;
}

.time-slots .calendar-cell:not(.time-label) {
	flex:1;
}

/* Loading spinner */
.cal-spinner-wrapper {
	display:inline-flex;
	align-items:center;
	justify-content:center;
	margin-left:10px;
	width:24px;
	height:32px;
	position:relative;
}

.cal-loading-spinner {
	font-size:16px;
	animation:cal-modern-spin 1s infinite linear;
	opacity:0;
	position:absolute;
	top:50%;
	left:50%;
	visibility:hidden;
	transition:opacity .2s ease;
	color:var(--cal-primary);
}

.cal-loading-spinner.visible {
	opacity:1;
	visibility:visible;
}

@keyframes cal-modern-spin {
	0% {
		transform:translate(-50%, -50%) rotate(0deg);
	}

	100% {
		transform:translate(-50%, -50%) rotate(360deg);
	}
}

/* Popup */
.calendar-popup {
	background:#ffffff;
	border:1px solid var(--cal-border);
	border-radius:10px;
	box-shadow:var(--cal-shadow-lg);
	padding:6px;
}

.calendar-popup button {
	display:block;
	width:100%;
	margin:4px 0;
	padding:7px 10px;
	background:#ffffff;
	border:1px solid transparent;
	border-radius:7px;
	cursor:pointer;
	color:var(--cal-text);
	font-weight:600;
	text-align:left;
	transition:background-color .15s ease, color .15s ease;
}

.calendar-popup button:hover {
	background:var(--cal-surface-soft);
	color:var(--cal-primary);
}

/* Drag / drop */
.calendar-drop-tooltip {
	position:fixed;
	padding:6px 10px;
	font-size:12px;
	background:#111827;
	color:#ffffff;
	border-radius:999px;
	pointer-events:none;
	z-index:10001;
	display:none;
	white-space:nowrap;
	box-shadow:0 8px 18px rgba(15,23,42,0.25);
}

.dragging-helper,
.calendar-event.drag-ready {
	transform:scale(1.04);
	box-shadow:0 12px 26px rgba(15,23,42,0.28);
	transition:transform .1s ease, box-shadow .1s ease;
	transform-origin:center center;
	z-index:20;
}

/* Modal positioning remains compatible */
.modal.align-with-calendar {
	top:0 !important;
}

.modal.align-with-calendar .modal-dialog {
	margin-top:0;
	position:absolute;
	top:var(--modal-top, 50px);
	left:50%;
	transform:translateX(-50%);
	width:90%;
	max-width:600px;
}

/* Medium screens */
@media (max-width:992px) {
	.calendar-header {
		flex-wrap:wrap;
		gap:10px;
	}

	.calendar-header .nav-buttons {
		order:1;
		flex:0 0 auto;
	}

	.calendar-header .current-month {
		order:2;
		flex:1 0 100%;
		margin:4px 0;
	}

	.calendar-header .cal-jump-search-wrapper {
		order:3;
		flex:1 1 auto;
	}

	.calendar-header .view-switcher {
		order:4;
		flex:0 0 auto;
	}
}

/* Small screens */
@media (max-width:768px) {
	.custom-calendar {
		margin:12px auto;
		border-radius:10px;
		min-height:560px;
	}

	.calendar-header {
		flex-direction:column;
		align-items:stretch;
		padding:12px;
	}

	.calendar-header .nav-buttons,
	.calendar-header .cal-jump-search-wrapper,
	.calendar-header .view-switcher {
		width:100%;
		justify-content:center;
	}

	.calendar-header .nav-buttons {
		order:1;
	}

	.calendar-header .current-month {
		order:2;
		margin:4px 0;
		font-size:16px;
	}

	.calendar-header .cal-jump-search-wrapper {
		order:3;
	}

	.calendar-header .view-switcher {
		order:4;
	}

	.calendar-cell {
		min-height:58px;
		padding:5px;
	}

	.date-label {
		top:5px;
		right:5px;
	}

	.calendar-event {
		padding:5px 7px;
		border-radius:7px;
	}
}

/* Very small screens */
@media (max-width:500px) {
	.calendar-header .cal-jump-search-wrapper {
		flex-wrap:wrap;
	}

	.calendar-header .cal-jump-search-wrapper input {
		flex:1 1 100%;
		min-width:0;
		margin:2px 0;
	}

	.calendar-header .view-switcher {
		flex-wrap:wrap;
		border-radius:12px;
	}

	.calendar-header .view-switcher button {
		flex:1 1 45%;
		min-width:0;
	}

	.calendar-header .nav-buttons {
		flex-wrap:wrap;
	}

	.calendar-header .nav-buttons button {
		flex:1 1 auto;
	}

	.time-slots .time-label,
	.calendar-cell.time-label {
		flex:0 0 54px;
		width:54px;
		font-size:10px;
		padding-left:4px;
		padding-right:5px;
	}
}