/* ===== LAYOUT ===== */
.r-gap-25 {
	row-gap: 0.25rem;
}

.r-gap-1 {
	row-gap: 0.5rem;
}

.r-gap-2 {
	row-gap: 0.75rem;
}

.r-gap-3 {
	row-gap: 1rem;
}

.r-gap-4 {
	row-gap: 1.25rem;
}

.r-gap-5 {
	row-gap: 1.5rem;
}

/* ===== CONTAINERS ===== */
.full-screen-container {
	align-items: center;
	display: flex;
	flex-direction: row;
	flex-wrap: nowrap;
	justify-content: center;
	margin: auto 0;
}

.white-container,
.login-container,
.form-container {
	border-radius: var(--lg-container-border-radius);
	background: var(--primary-white);
	box-shadow: var(--primary-box-shadow);
}

.white-container {
	padding: 1.125rem;
	transition: height 0.4s ease-in-out;
}

.login-container {
	display: flex;
	flex-direction: column;
	flex-wrap: nowrap;
	justify-content: center;
	padding: 1.25rem;
	row-gap: 1rem;
}

.form-container {
	align-items: center;
	padding: 1.25rem;
	row-gap: 1rem;
}

/* ===== NOTIFICATION & TOAST MESSAGING ===== */
.notification {
	align-items: center;
	border-radius: var(--md-element-border-radius);
	bottom: 4rem;
	box-shadow: none;
	display: flex;
	flex-wrap: nowrap;
	font-weight: 500;
	gap: 0.5rem;
	justify-content: center;
	left: 50%;
	margin: 1rem 0;
	max-width: 32rem;
	opacity: 0;
	position: fixed;
	transform: translateX(-50%);
	visibility: hidden;
	width: auto;
	z-index: 999;
}

.notification.show {
	animation: fade-in 0.5s ease-in-out forwards, fade-out 0.5s ease-in-out forwards 3s;
}

.notification-body {
	font-size: 0.875rem;
	font-size: clamp(0.875rem, 0.85rem + 0.125vw, 1rem);
	font-weight: bold;
	line-height: normal;
	padding: 0.5rem 1rem;
	text-align: center;
}

/* ===== LOADERS & SPINNERS ===== */
.loader {
	align-items: center;
	display: flex;
	flex-wrap: nowrap;
	justify-content: center;
	width: 100%;
}

.loading {
	-webkit-mask: radial-gradient(farthest-side, #0000 calc(100% - var(--loader-width)), #000 0);
	animation: spinner 0.5s infinite linear;
	aspect-ratio: 1;
	background: radial-gradient(farthest-side, var(--loader-color) 94%, #0000) top/var(--loader-width) var(--loader-width) no-repeat, conic-gradient(#0000 30%, var(--loader-color));
	border-radius: 50%;
	mask: radial-gradient(farthest-side, #0000 calc(100% - var(--loader-width)), #000 0);
	width: 100%;
}

.loading.xl {
	--loader-width: 0.625rem;
	max-width: 9.5rem;
}

.loading.lg {
	--loader-width: 0.5rem;
	margin: 0.75rem;
	max-width: 7.5rem;
}

.loading.md {
	--loader-width: 0.5rem;
	margin: 0.5rem;
	max-width: 5.5rem;
}

.loading.sm {
	--loader-width: 0.375rem;
	margin: 0.375rem;
	max-width: 3.5rem;
}

.loading.xs {
	--loader-width: 4px;
	margin: 0.25rem;
	max-width: 1.75rem;
}

.loading.xxs {
	--loader-width: 4px;
	max-width: 1.5rem;
}

.loading.tiny {
	--loader-width: 3px;
	max-width: 1.25rem;
}

/* ===== ANIMATIONS & KEYFRAMES ===== */
@keyframes spinner {
	100% {
		transform: rotate(1turn);
	}
}

@keyframes fadeInFromBottom {
	0% {
		opacity: 0;
		transform: translateY(20px);
	}

	100% {
		opacity: 1;
		transform: translateY(0);
	}
}

@keyframes fade-in {
	from {
		visibility: hidden;
		opacity: 0;
	}

	to {
		visibility: visible;
		opacity: 1;
	}
}

@keyframes fade-out {
	from {
		visibility: visible;
		opacity: 1;
	}

	to {
		visibility: hidden;
		opacity: 0;
	}
}

@-webkit-keyframes fade-in {
	from {
		visibility: hidden;
		opacity: 0;
	}

	to {
		visibility: visible;
		opacity: 1;
	}
}

@-webkit-keyframes fade-out {
	from {
		visibility: visible;
		opacity: 1;
	}

	to {
		visibility: hidden;
		opacity: 0;
	}
}

.fade-in {
	animation: fade-in 0.5s ease forwards;
}

.fade-out {
	animation: fade-out 0.5s ease forwards;
}

/* ===== OVERLAY ===== */
.blur-overlay {
	filter: blur(4px);
	height: 100%;
	width: 100%;
}

/* ===== TYPOGRAPHY ===== */
:is(h1, h2, h3, h4, h5, h6) {
	color: var(--primary-text-color);
	font-weight: bold;
	line-height: 1;
	margin: 0;
}

.tooltip-inner {
	font-family: var(--primary-font), 'Calibri', 'Arial', 'Helvetica', 'sans-serif';
	border-radius: var(--element-border-radius);
	font-size: 0.875rem;
	max-width: 20rem;
	padding: 0.375rem 0.5rem !important;
	text-align: start;
}

.tooltip-inner > * {
	line-height: normal;
}

.tooltip-inner ol,
.tooltip-inner ul {
	margin: 0;
	padding-left: 1.5rem;
}

.tooltip-inner li {
	padding: 0.25rem 0;
}

.tooltip-inner li:first-of-type {
	padding-top: 0;
}

.tooltip-inner li:last-of-type {
	padding-bottom: 0;
}

/* Ensure tooltips are not clipped by parent containers */
.tooltip {
	overflow: visible !important;
}

.tooltip-inner {
	overflow: visible !important;
}

/* Chart containers should not clip tooltips */
.filtered-charts {
	overflow: visible !important;
}

.chart-box {
	overflow: visible !important;
}

/* ===== OFFCANVAS ===== */
.offcanvas-header {
	border-bottom: 2px solid var(--secondary-bg-color);
	padding: 0.75rem;
}

.offcanvas-body {
	display: flex;
	flex-direction: column;
	padding: 0;
	position: relative;
}

.offcanvas-body.loader {
	overflow: hidden;
}

.offcanvas-loader {
	align-items: center;
	background-color: var(--primary-white);
	display: flex;
	flex-direction: column;
	height: 100%;
	justify-content: center;
	left: 0px;
	opacity: 1;
	pointer-events: none;
	position: absolute;
	top: 0px;
	transition: opacity 0.5s ease-in-out, z-index 0.5s ease-in-out;
	width: 100%;
	z-index: 99;
}

.offcanvas-loader.hide {
	opacity: 0;
	z-index: -1;
}

#notification-list .list-group-item {
	align-items: center;
	cursor: default;
	display: flex;
	gap: 0.5rem;
	padding: 0.75rem;
	transition: 0.5s all ease-in-out;
}

#notification-list .list-group-item:hover {
	background-color: var(--light-grey);
}

#notification-list .list-group-item.list-group-item-action {
	cursor: pointer;
}

#notification-list .list-group-item .icon {
	font-size: 1.25rem;
}

/* ===== BUTTON UTILITIES ===== */
.icon-btn {
	align-items: center;
	display: flex;
	gap: 0.25rem;
	justify-content: center;
	padding: 0.375rem;
	text-align: center;
}

.view-btn {
	border-width: 0.125rem;
	font-size: 1.125rem !important;
	line-height: normal;
	padding: 0 !important;
	word-break: keep-all;
}

.filter-btn {
	padding: 0.5rem 0.75rem;
	line-height: unset;
}

/* ===== PAGINATION UTILITIES ===== */
.pagination {
	justify-content: end;
}

.page-link.disabled {
	color: #feffff;
}

/* ===== UTILITY CLASSES ===== */
.fw-500 {
	font-weight: 500 !important;
}

.f-wdt-36 {
	max-width: 36px;
	min-width: 36px;
	width: 36px;
}

.f-hgt-36 {
	height: 36px;
	max-height: 36px;
	min-height: 36px;
}

.f-wdt-38 {
	max-width: 38px;
	min-width: 38px;
	width: 38px;
}

.f-hgt-38 {
	height: 38px;
	max-height: 38px;
	min-height: 38px;
}

.f-wdt-40 {
	max-width: 40px;
	min-width: 40px;
	width: 40px;
}

.f-hgt-40 {
	height: 40px;
	max-height: 40px;
	min-height: 40px;
}

.f-wdt-42 {
	max-width: 42px;
	min-width: 42px;
	width: 42px;
}

.f-hgt-42 {
	height: 42px;
	max-height: 42px;
	min-height: 42px;
}

.hidden-div {
	display: none;
	opacity: 0;
	z-index: -999;
}

/* ===== FORM UTILITIES ===== */
.req {
	color: #ff0000 !important;
	font-size: 0.875rem;
	font-weight: 800;
}

.progress {
	height: 1.125rem;
	border-radius: 2rem;
}

.progress-bar {
	border-radius: 2rem;
	font-size: 14px;
	font-weight: 500;
	text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
}

.notice {
	color: var(--bs-danger);
	font-size: 0.75rem;
	font-weight: 500;
}

/* ===== MODAL STYLING ===== */
.modal-dialog:not(.modal-dialog-centered) {
	margin: 3.5rem auto !important;
}

.modal-header {
	padding: 0.75rem !important;
}

.modal-title {
	line-height: 1;
}

.modal-content {
	border-radius: var(--md-element-border-radius) !important;
	border: 0 !important;
}

.modal-body {
	max-height: 40rem !important;
	padding: 0.75rem !important;
}

.modal-body .content {
	max-height: 36rem !important;
	overflow-y: auto !important;
}

.modal-footer {
	padding: 0.75rem !important;
}

.modal-body .audio-container {
	line-height: 0;
	transition: 0.5s all ease;
	width: 100%;
}

.modal-body .audio-container audio {
	transition: 0.5s all ease;
	width: 100%;
}

.modal-body img,
.modal-body video,
.modal-body iframe,
.modal-body object {
	border-radius: var(--element-border-radius);
}

.modal-body video {
	height: 100%;
	line-height: 0;
	max-width: 100%;
	transition: 0.5s all ease;
	width: 100%;
}

.modal-body img {
	display: block;
	height: 100%;
	line-height: 0;
	margin: 0 auto;
	max-width: 50%;
	transition: 0.5s all ease;
	width: 100%;
}

.modal-body iframe,
.modal-body object {
	height: 50vh;
	margin: 0;
	max-height: 32rem;
	padding: 0;
	transition: 0.5s all ease;
	width: 100%;
}

/* ===== COPY BUTTON ===== */
.copy-button {
	border-width: 0.125rem;
	display: none;
	min-height: 32px;
	min-width: 32px;
	padding: 0 !important;
	position: absolute;
	right: 24px;
	top: 12px;
}

.actions_box {
	align-items: center;
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
	justify-content: center;
}

/* ===== CODE/SEMANTIC COLORS ===== */
.success-code,
.error-code {
	font-weight: 500;
	font-size: 1rem;
}

td.icon-cell > i,
i.success-code,
i.error-code {
	font-size: 1.5rem;
}

/* ===== HTTP METHOD & STATUS BADGES ===== */
.http-delete,
.http-get,
.http-patch,
.http-post,
.http-put,
.status-100-200,
.status-200-300,
.status-300-400,
.status-400-500,
.text-bg-hubspot,
.text-bg-stripe,
.text-bg-ip-api {
	border-radius: var(--element-border-radius);
	border: none;
	color: white;
	font-weight: 600;
	padding: 0.125rem 0.375rem;
}

.text-bg-hubspot {
	background-color: var(--hubspot-primary-color);
}

.text-bg-stripe {
	background-color: #635bff;
}

.text-bg-ip-api {
	background-color: #6a556a;
}

.http-get {
	background-color: #41b883;
}

.http-patch {
	background-color: #8978bd;
}

.http-post {
	background-color: #e8c223;
}

.http-put {
	background-color: #54a3ff;
}

.http-delete {
	background-color: #ff0000;
}

.status-100-200 {
	background-color: #808080;
}

.status-200-300 {
	background-color: #07c007;
}

.status-300-400 {
	background-color: #10107a;
}

.status-400-500 {
	background-color: #ff0000;
}

/* ===== TEXT COLOR UTILITIES (PROVIDER BRANDING) ===== */
.text-hubspot {
	color: var(--hubspot-primary-color);
}

.text-stripe {
	color: #635bff;
}

/* ===== STATUS INDICATOR COLORS ===== */
.success-code,
i.completed,
i.active {
	color: #07c007;
}

.error-code,
i.failed,
i.delete,
i.cancelled {
	color: #e7140c;
}

i.skipped,
i.paused {
	color: #000000;
}

i.pending,
i.inactive {
	color: #757575;
}

i.processing {
	color: #f1c40f;
}