/*!
 * Copyright (c) 2024 LatePoint LLC. All rights reserved.
 */

.latepoint-calendar-wrapper {
	position: relative;
	&.show-filters {
		.latepoint-calendar-filters {
			display: flex;
		}
		.le-filter {
			.latepoint-icon {
				&:before {
					content: "\e90a";
				}
			}
		}
	}
	&.os-loading {
		.latepoint-calendar-controls-wrapper {
			&:before {
				content: "";
				display: block;
				position: absolute;
				bottom: -1px;
				left: 0;
				right: 0;
				height: 3px;
				background: repeating-linear-gradient(
					to right,
					#fff 0%,
					#1d7bff 50%,
					#fff 100%
				);
				width: 100%;
				background-size: 200% auto;
				background-position: 0 100%;
				animation: os-loading-gradient 1.5s infinite;
				animation-fill-mode: forwards;
				animation-timing-function: linear;
			}
		}
	}
}

.latepoint-calendar-controls-wrapper {
	position: sticky;
	top: 0;
	z-index: 10;
	border-bottom: 1px solid #ddd;
	background-color: #fff;
}
.latepoint-calendar-filters {
	border-top: 1px solid #eee;
	padding: 15px 0;
	gap: 15px;
	display: none;
	align-items: center;
	justify-content: flex-end;
	.le-filters-label {
		font-size: $font-size-base;
	}
}
.le-range-selector {
	margin-left: auto;
}
.le-range-selector,
.latepoint-calendar-filters {
	select.os-form-control {
		padding: 8px 10px;
		line-height: 1.55;
		border-radius: 6px;
		border: 1px solid #ccc;
		font-size: $font-size-base;
		height: auto;
	}
}
.latepoint-calendar-controls {
	display: flex;
	align-items: center;
	gap: 15px;
	padding: 15px 0;
	.le-label {
		color: rgba(0, 0, 0, 0.3);
		font-size: floor($font-size-base * 1.8);
		font-weight: $body-font-weight-bold;
		line-height: 1;
	}
	.le-week {
		font-size: floor($font-size-base * 1.8);
		font-weight: $body-font-weight-bold;
		line-height: 1;
	}
	.le-month {
		font-size: floor($font-size-base * 2.4);
		font-weight: $body-font-weight-bold;
		line-height: 1;
	}
	.le-filter {
		padding: 6px 12px;
		border: 1px solid #ccc;
		color: $body-color;
		cursor: pointer;
		display: flex;
		gap: 10px;
		align-items: center;
		font-size: $font-size-base;
		border-radius: 6px;
		position: relative;
		&.os-loading {
			&:before {
				@include loading-circle(#000, 10px);
				left: 18px;
			}
			.latepoint-icon {
				color: transparent;
			}
		}
		.latepoint-icon {
		}
		&:hover {
			border-color: #111;
		}
	}
	.le-navigation-wrapper {
		border-left: 1px solid #eee;
		padding-left: 20px;
		margin-left: 5px;
	}
	.le-navigation {
		display: flex;
		font-size: $font-size-base;
		border-radius: 6px;
		align-items: stretch;
		border: 1px solid #ccc;
		.le-today {
			padding: 6px 12px;
			color: $body-color;
			cursor: pointer;
			position: relative;
			border-radius: 6px;
			&:hover {
				box-shadow: 0 0 0 1px #111;
				z-index: 2;
			}
		}

		.le-navigation-button {
			padding: 11px 10px;
			cursor: pointer;
			position: relative;
			font-size: 10px;
			line-height: 1;
			border-radius: 6px;
			&:hover {
				box-shadow: 0 0 0 1px #111;
				z-index: 2;
				border-color: transparent;
			}
			&:first-child {
			}
			&:last-child {
			}
			&.os-loading {
				color: transparent;
				&:before {
					@include loading-circle(#000, 10px);
				}
			}
		}
	}
}

.latepoint-calendar-week {
	display: grid;
	grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
	padding-left: 50px;
	.le-day-wrapper {
		position: relative;
		&.os-month-prev {
			.le-day-weekday-wrapper {
				.le-day-number {
				}
			}
		}
		&.day-weekday-6,
		&.day-weekday-7 {
			.le-day-weekday-wrapper {
				background-color: #fffaf1;
			}
		}
		&.os-today {
			.le-day-weekday-wrapper {
				&:before {
					content: "";
					left: 0px;
					right: 0px;
					top: 0px;
					background-color: #f34a4a;
					position: absolute;
					height: 2px;
					z-index: 10;
				}
			}
		}
		&:hover {
			.le-day-number {
				color: $brand-primary;
				border-bottom-color: $brand-primary;
			}
		}
		&:first-child {
			.day-schedule-timeslot-value {
				display: block;
			}
			.le-day-schedule-wrapper .day-schedule-timeslot:before {
				content: "";
				background-color: #ddd;
				height: 1px;
				top: 0px;
				left: -5px;
				width: 5px;
				position: absolute;
			}
		}
		&:first-child {
			.le-day-weekday-wrapper {
			}
		}
		&:last-child {
			border-right: 1px solid #ddd;
		}
	}
	.le-day-weekday-wrapper {
		border-left: 1px solid #ddd;
		padding-left: 20px;
		padding-top: 10px;
		padding-bottom: 7px;
		border-bottom: 1px solid #bbb;
		position: sticky;
		top: 35px;
		z-index: 7;
		box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.05);
		background-color: #fff;
	}
	.le-day-weekday {
		font-weight: $body-font-weight-bold;
		color: #aaa;
		z-index: 3;
		position: relative;
	}
	.le-day-number {
		font-size: $font-size-base * 3;
		font-weight: $body-font-weight-bold;
		line-height: 1;
		border-bottom: 1px dotted transparent;
		display: inline-block;
		cursor: pointer;
		position: relative;
		z-index: 2;
		&:hover {
			border-bottom-style: solid;
		}
		&.os-loading {
			color: transparent !important;
			border-bottom-color: transparent !important;
			&:before {
				@include loading-circle($brand-primary, 30px);
			}
		}
	}
	.os-day-month {
		position: absolute;
		z-index: 1;
		font-size: floor($font-size-base * 5);
		color: rgba(0, 0, 0, 0.05);
		left: 15px;
		top: 12px;
		line-height: 1;
		overflow: hidden;
		right: 0;
	}

	$timeslot_value_width: 50px;
	.le-day-schedule-wrapper {
		.day-schedule-timeslots {
			position: relative;
			&:before {
				content: "";
				top: 0;
				bottom: 0;
				width: 1px;
				background-color: #e1e1e1;
				position: absolute;
				left: 0;
			}
			.day-schedule-timeslot-wrapper {
				display: flex;
				background-color: #f9f9f9;
				&:first-child {
					.day-schedule-timeslot-value {
						display: none;
					}
					.day-schedule-timeslot:before {
						background-color: transparent;
					}
				}
				.day-schedule-timeslot {
					flex: 1;
					text-align: right;
					text-transform: uppercase;
					letter-spacing: 1px;
					font-size: floor($font-size-base * 0.75);
					height: $calendar-timeslot-height;
					position: relative;
					box-shadow: 0 1px 0 0 #ddd;
				}
			}
			.le-service-wrapper {
				position: absolute;
				left: 0;
				right: 0;
				font-size: floor($font-size-base * 0.8);
				background-color: #fff;
				z-index: 2;
				cursor: pointer;
				box-shadow:
					inset 0 1px 0 0px #ddd,
					0 3px 0 0 rgba(0, 0, 0, 0.03);
				border-bottom: 1px solid #ccc;
				&.os-loading {
					&:before {
						content: "";
						@include loading-circle(#111, 8px);
						top: 10px;
						right: 0px;
						left: auto;
					}
				}
				&.is-passed {
					.le-service-inner {
						opacity: 0.6;
					}
					cursor: not-allowed;
					&:hover {
						.is-passed-message {
							display: block;
						}
					}
					.is-passed-message {
						display: none;
						background-color: #000;
						color: #fff;
						padding: 5px 10px;
						font-weight: $body-font-weight-bold;
						font-size: floor($font-size-base * 0.8);
						position: absolute;
						top: 0;
						left: 50%;
						transform: translate(-50%, -110%);
						white-space: nowrap;
					}
				}
				&:hover {
					opacity: 1;
					z-index: 3;
					.le-color-elem {
						width: 5px;
					}
					.le-service-name,
					.le-service-time-period {
						transform: translateX(3px);
					}
				}
				.le-service-inner {
					padding: 3px;
					padding-left: 8px;
					display: flex;
					flex-direction: column;
					height: 100%;
					box-sizing: border-box;
				}
				.le-color-elem {
					position: absolute;
					top: 0px;
					bottom: -1px;
					left: 0px;
					width: 3px;
					display: block;
					transition: all 0.15s ease;
				}
			}
			.le-service-time-period {
				transition: transform 0.15s ease;
			}
			.le-service-name {
				font-weight: $body-font-weight-bold;
				font-size: floor($font-size-base);
				line-height: 1.4;
				overflow: hidden;
				transition: transform 0.15s ease;
			}
		}
		.day-schedule-timeslot {
			position: relative;
		}
	}

	.day-schedule-timeslot-value {
		display: none;
		position: absolute;
		top: 0;
		transform: translateY(-50%);
		left: -$timeslot_value_width - 10;
		width: $timeslot_value_width;
		text-align: right;
	}
}

.latepoint-calendar-month {
	display: grid;
	grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
	gap: 1px;
	background-color: #ddd;
	padding: 1px;
	padding-top: 0;
	.le-weekday {
		background-color: #fff;
		padding: 5px 15px;
		font-weight: $body-font-weight-bold;
		font-size: floor($font-size-base * 1.2);
		&.weekday-6,
		&.weekday-7 {
			color: #382c18;
		}
	}
	.le-day-wrapper {
		min-height: 200px;
		background-color: #fff;
		padding: 20px;
		position: relative;
		&:hover {
			.le-day-number {
				color: $brand-primary;
				border-bottom: 1px dotted $brand-primary;
			}
		}
		&.day-weekday-6,
		&.day-weekday-7 {
		}
		&.os-today {
			&:before {
				content: "";
				left: -1px;
				right: -1px;
				top: -1px;
				background-color: #f34a4a;
				position: absolute;
				height: 2px;
			}
		}
		&.os-day-passed,
		&.os-month-prev,
		&.os-month-next {
			background-color: #f9f9f9;
			.le-day-number {
				color: #999;
			}
			.le-service-wrapper {
				opacity: 0.8;
			}
		}
		.le-more-services {
			color: $brand-primary;
			border-bottom: 1px dotted $brand-primary;
			font-size: $font-size-base;
			display: inline-block;
			cursor: pointer;
			font-weight: $body-font-weight-bold;
			line-height: 1.2;
			position: relative;
			&:hover {
				border-bottom-style: solid;
			}
			&.os-loading {
				color: transparent;
				border-bottom-color: transparent;
				&:before {
					@include loading-circle($brand-primary, 10px);
				}
			}
		}
		.os-day-month {
			position: absolute;
			z-index: 1;
			font-size: floor($font-size-base * 4);
			color: rgba(0, 0, 0, 0.05);
			left: 20px;
			top: 7px;
			line-height: 1;
			right: 0;
			overflow: hidden;
		}
		.le-day-number {
			z-index: 2;
			font-size: floor($font-size-base * 1.8);
			font-weight: $body-font-weight-bold;
			line-height: 1;
			margin-bottom: 10px;
			border-bottom: 1px dotted transparent;
			display: inline-block;
			cursor: pointer;
			position: relative;
			&:hover {
				border-bottom-style: solid;
			}
			&.os-loading {
				color: transparent;
				border-bottom-color: transparent;
				&:before {
					@include loading-circle($brand-primary, 15px);
				}
			}
		}
		.le-service-wrapper {
			padding: 3px;
			padding-left: 10px;
			font-size: floor($font-size-base * 0.8);
			margin-bottom: 10px;
			border: 1px solid #ddd;
			position: relative;
			background-color: #fff;
			z-index: 2;
			cursor: pointer;
			box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.05);
			border-bottom-color: #bbb;
			border-left: none;
			&.is-passed {
				cursor: not-allowed;
				.le-service-inner {
					opacity: 0.6;
				}
				&:hover {
					.is-passed-message {
						display: block;
					}
				}
				.is-passed-message {
					display: none;
					background-color: #000;
					color: #fff;
					padding: 5px 10px;
					font-weight: $body-font-weight-bold;
					font-size: floor($font-size-base * 0.8);
					position: absolute;
					top: 0;
					left: 50%;
					transform: translate(-50%, -110%);
					white-space: nowrap;
				}
			}

			&.os-loading {
				&:before {
					content: "";
					@include loading-circle(#111, 8px);
					top: 10px;
					right: 0px;
					left: auto;
				}
			}
			&:hover {
				border-color: #bbb;
				.le-color-elem {
					transform: translateX(-2px);
					width: 5px;
				}
			}
			.le-color-elem {
				position: absolute;
				top: -1px;
				bottom: -1px;
				left: -1px;
				width: 3px;
				display: block;
				transition: all 0.15s ease;
			}
		}
		.le-service-name {
			font-weight: $body-font-weight-bold;
			font-size: floor($font-size-base);
			line-height: 1.35;
		}
		.le-service-time-period {
		}
	}
}

.le-day-view-wrapper {
	&.os-loading {
		.le-day-info-section {
			&:before {
				content: "";
				display: block;
				position: absolute;
				bottom: -1px;
				left: 0;
				right: 0;
				height: 3px;
				background: repeating-linear-gradient(
					to right,
					#fff 0%,
					#1d7bff 50%,
					#fff 100%
				);
				width: 100%;
				background-size: 200% auto;
				background-position: 0 100%;
				animation: os-loading-gradient 1.5s infinite;
				animation-fill-mode: forwards;
				animation-timing-function: linear;
			}
		}
	}
	.le-day-info-section {
		display: flex;
		border-bottom: 1px solid rgba(0, 0, 0, 0.2);
		padding: 20px 40px;
		position: sticky;
		top: 0;
		background-color: #fff;
		z-index: 4;

		.le-day-info {
			text-align: center;
			.le-day-number {
				font-size: floor($font-size-base * 4.1);
				font-weight: $body-font-weight-bold;
				line-height: 1;
			}
			.le-day-month {
				color: $color-faded;
				font-size: floor($font-size-base * 1.4);
				letter-spacing: 2px;
				text-transform: uppercase;
				font-weight: $body-font-weight-bold;
			}
		}
		.le-day-filters-wrapper {
			border-left: 1px solid #eee;
			margin-left: 40px;
			padding-left: 20px;
			flex: 1;
		}
		.le-day-heading {
			font-size: floor($font-size-base * 2.2);
			font-weight: $body-font-weight-bold;
			margin-bottom: 10px;
		}
		.le-day-filters {
			gap: 10px;
			display: flex;
			align-items: center;
			.os-form-group.os-form-select-group {
				margin-bottom: 0px !important;
				.os-form-control {
					height: auto !important;
					padding: 6px !important;
					border-color: #ccc !important;
					border-radius: 6px !important;
				}
			}
		}
		.latepoint-lightbox-close {
			position: absolute;
			top: 15px;
			right: 15px;
			font-size: 20px;
			color: #333;
			text-decoration: none;
			line-height: 1;
			padding: 5px;
			cursor: pointer;
			z-index: 5;
			&:hover {
				color: #000;
			}
			.latepoint-icon-x:before {
				content: "\e90a";
			}
		}
	}
	$timeslot_value_width: 50px;
	.le-day-schedule-wrapper {
		padding: 40px;
		background-color: #f8f8f8;
		.day-schedule-timeslots {
			position: relative;
			padding-left: $timeslot_value_width;
			&:before {
				content: "";
				top: 0;
				bottom: 0;
				width: 1px;
				background-color: #e1e1e1;
				position: absolute;
				left: $timeslot_value_width + 10px;
			}
			.day-schedule-timeslot-wrapper {
				display: flex;
				box-shadow: 0 1px 0 0 #e1e1e1;
				&:first-child {
				}
				.day-schedule-timeslot {
					flex: 0 0 $timeslot_value_width;
					text-align: right;
					text-transform: uppercase;
					letter-spacing: 1px;
					font-size: floor($font-size-base * 0.75);
					height: $calendar-timeslot-height;
					position: relative;
					.day-schedule-timeslot-value {
						position: absolute;
						top: 0;
						transform: translateY(-50%);
						left: -$timeslot_value_width - 10;
						width: $timeslot_value_width;
						text-align: right;
					}
				}
			}
			.le-service-wrapper {
				position: absolute;
				left: $timeslot_value_width + 10;
				right: 0;
				font-size: floor($font-size-base * 0.8);
				box-shadow:
					inset 0 1px 0 0px #ddd,
					0 3px 0 0 rgba(0, 0, 0, 0.03),
					0 1px 0 0 #ddd;
				border-right: 1px solid #ddd;
				background-color: #fff;
				z-index: 2;
				cursor: pointer;
				.le-service-inner {
					padding: 3px;
					padding-left: 10px;
					flex-direction: column;
					height: 100%;
					box-sizing: border-box;
					display: flex;
				}
				&.is-passed {
					cursor: not-allowed;
					.le-service-inner {
						opacity: 0.6;
					}
					&:hover {
						.is-passed-message {
							display: block;
						}
					}
					.is-passed-message {
						display: none;
						background-color: #000;
						color: #fff;
						padding: 5px 10px;
						font-weight: $body-font-weight-bold;
						font-size: floor($font-size-base * 0.8);
						position: absolute;
						top: 0;
						left: 50%;
						transform: translate(-50%, -110%);
						white-space: nowrap;
					}
				}

				&:hover {
					border-bottom-color: #999;
					opacity: 1;
					z-index: 3;
					.le-color-elem {
						transform: translateX(-2px);
						width: 5px;
					}
					.le-service-name,
					.le-service-time-period {
						transform: translateX(3px);
					}
				}
				.le-color-elem {
					position: absolute;
					top: 0px;
					bottom: -1px;
					left: -1px;
					width: 3px;
					display: block;
					transition: all 0.15s ease;
				}
			}
			.le-service-name {
				font-weight: $body-font-weight-bold;
				font-size: floor($font-size-base);
				line-height: 1.4;
				overflow: hidden;
				transition: transform 0.15s ease;
			}
			.le-service-time-period {
				transition: transform 0.15s ease;
			}
		}
		.day-schedule-timeslot {
		}
	}
}
