.nirvana-page-loader {
	--nirvana-loader-clay: #167fc7;
	--nirvana-loader-amber: #22a8dc;
	--nirvana-loader-sage: #159e99;
	--nirvana-loader-leaf: #50b6a7;
	--nirvana-loader-gold: #8e94df;
	--nirvana-loader-track: #c7d9e6;
	--nirvana-loader-track-strong: #719bb8;
	--nirvana-loader-paper: #f5faff;
	position: fixed;
	inset: 0;
	z-index: 999999;
	display: grid;
	place-items: center;
	padding: 24px;
	background: rgba(238, 242, 234, .15);
	-webkit-backdrop-filter: blur(5px) saturate(1.08);
	backdrop-filter: blur(5px) saturate(1.08);
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	transition: opacity .24s cubic-bezier(.16, 1, .3, 1), visibility .24s;
}

.nirvana-page-loader.is-visible { opacity: 1; visibility: visible; pointer-events: auto; }
html.nirvana-page-loading-pending #nirvana-page-loader { opacity: 1; visibility: visible; pointer-events: auto; transition: none; }
.nirvana-page-loader__card {
	box-sizing: border-box;
	min-width: 0;
	min-height: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 13px;
	padding: 12px;
	border: 0;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
	color: #34483a;
	text-align: center;
	transform: none;
	transition: none;
}
.nirvana-page-loader.is-visible .nirvana-page-loader__card { transform: none; }
.nirvana-page-loader__art { width: 180px; height: 76px; position: relative; display: grid; place-items: center; }
.nirvana-page-loader__message { font-size: 13px; font-weight: 600; letter-spacing: .04em; color: #425447; text-shadow: 0 1px 5px rgba(255,255,255,.82); }
.nirvana-page-loader__sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.nirvana-page-loader__art > span, .nirvana-page-loader__art > svg { display: none; position: absolute; }

/* 01 · Expanding badge rings */
.nirvana-page-loader[data-style="pulse"] .nirvana-loader-pulse { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; background: linear-gradient(145deg, var(--nirvana-loader-amber), var(--nirvana-loader-clay)); color: #fff; font-size: 18px; box-shadow: 0 4px 15px rgba(39,143,221,.3); }
.nirvana-loader-pulse i { font-style: normal; animation: nirvana-pulse-star 1.8s ease-in-out infinite; }
.nirvana-loader-pulse:before, .nirvana-loader-pulse:after { content: ""; position: absolute; inset: 0; border: 2px solid var(--nirvana-loader-amber); border-radius: 50%; animation: nirvana-pulse-ring 1.8s ease-out infinite; }
.nirvana-loader-pulse:after { animation-delay: .9s; }
@keyframes nirvana-pulse-ring { 0% { transform: scale(1); opacity: .62; } 100% { transform: scale(2.35); opacity: 0; } }
@keyframes nirvana-pulse-star { 50% { transform: scale(.82) rotate(-12deg); } }

/* 02 · Ring draws, then turns into a check on successful completion */
.nirvana-page-loader[data-style="success"] .nirvana-loader-check { display: block; width: 66px; height: 66px; overflow: visible; }
.nirvana-loader-check circle, .nirvana-loader-check path { fill: none; stroke-linecap: round; stroke-linejoin: round; }
.nirvana-loader-check .track { stroke: var(--nirvana-loader-track); stroke-width: 3; }
.nirvana-loader-check .ring { stroke: var(--nirvana-loader-clay); stroke-width: 3; stroke-dasharray: 151; stroke-dashoffset: 114; transform: rotate(-90deg); transform-origin: center; animation: nirvana-check-ring 1.5s cubic-bezier(.65, 0, .35, 1) infinite; }
.nirvana-loader-check .tick { stroke: var(--nirvana-loader-sage); stroke-width: 4; stroke-dasharray: 28; stroke-dashoffset: 28; transition: stroke-dashoffset .3s ease-out .12s; }
.nirvana-page-loader[data-style="success"].is-done .nirvana-loader-check .ring { stroke: var(--nirvana-loader-sage); stroke-dashoffset: 0; animation: none; transition: stroke-dashoffset .35s cubic-bezier(.16, 1, .3, 1); }
.nirvana-page-loader[data-style="success"].is-done .nirvana-loader-check .tick { stroke-dashoffset: 0; }
@keyframes nirvana-check-ring { to { stroke-dashoffset: -151; } }

/* 03 · Two-tone spinner */
.nirvana-page-loader[data-style="spinner"] .nirvana-loader-spinner { display: block; width: 48px; height: 48px; border: 4px solid var(--nirvana-loader-track); border-top-color: var(--nirvana-loader-clay); border-right-color: var(--nirvana-loader-sage); border-radius: 50%; animation: nirvana-spin .78s linear infinite; }
@keyframes nirvana-spin { to { transform: rotate(1turn); } }

/* 04 · Sweeping circular arc, intentionally without a false percentage */
.nirvana-page-loader[data-style="ring"] .nirvana-loader-progress { display: block; width: 68px; height: 68px; transform: rotate(-90deg); }
.nirvana-loader-progress circle { fill: none; }
.nirvana-loader-progress .track { stroke: var(--nirvana-loader-track); stroke-width: 5; }
.nirvana-loader-progress .prog { stroke: var(--nirvana-loader-clay); stroke-width: 5; stroke-linecap: round; stroke-dasharray: 182; stroke-dashoffset: 136; animation: nirvana-ring-sweep 1.35s cubic-bezier(.16, 1, .3, 1) infinite; }
@keyframes nirvana-ring-sweep { 0% { stroke-dashoffset: 164; } 50% { stroke-dashoffset: 22; } 100% { stroke-dashoffset: -164; } }

/* 05 · Indeterminate progress sweep */
.nirvana-page-loader[data-style="bar"] .nirvana-loader-bar, .nirvana-page-loader[data-style="settle"] .nirvana-loader-settle { display: block; width: 150px; height: 8px; border-radius: 99px; background: var(--nirvana-loader-track); overflow: hidden; box-shadow: inset 0 1px 2px rgba(49,68,52,.09); }
.nirvana-loader-bar i { display: block; height: 100%; width: 40%; border-radius: inherit; background: var(--nirvana-loader-clay); animation: nirvana-bar-slide 1.4s cubic-bezier(.16, 1, .3, 1) infinite; }
@keyframes nirvana-bar-slide { 0% { transform: translateX(-110%); } 100% { transform: translateX(390%); } }

/* 06 · Heartbeat path traced by a glowing sage dot */
.nirvana-page-loader[data-style="heartbeat"] .nirvana-page-loader__art { width: 220px; height: 88px; }
.nirvana-page-loader[data-style="heartbeat"] .nirvana-loader-heartbeat { display: block; width: 220px; height: 80px; overflow: visible; }
.nirvana-loader-heartbeat .line { fill: none; stroke: #70b5d6; stroke-width: 4; stroke-linecap: round; stroke-linejoin: round; }
.nirvana-loader-heartbeat circle { fill: #35b3ad; filter: drop-shadow(0 0 4px rgba(53,179,173,.38)); }

/* 07 · Battery fill grows in a warm, herbal gradient */
.nirvana-page-loader[data-style="battery"] .nirvana-loader-battery { display: block; width: 72px; height: 36px; border: 3px solid var(--nirvana-loader-sage); border-radius: 9px; padding: 4px; background: var(--nirvana-loader-paper); }
.nirvana-loader-battery:after { content: ""; position: absolute; right: -8px; top: 13px; width: 5px; height: 10px; border-radius: 0 3px 3px 0; background: var(--nirvana-loader-sage); }
.nirvana-loader-battery i { display: block; height: 100%; width: 16%; border-radius: 4px; background: linear-gradient(90deg, var(--nirvana-loader-clay), var(--nirvana-loader-amber)); animation: nirvana-charge 3.6s ease-in-out infinite; }
.nirvana-loader-battery b { position: absolute; left: 26px; top: 5px; color: var(--nirvana-loader-sage); font-size: 15px; animation: nirvana-bolt 1.2s ease-in-out infinite; }
@keyframes nirvana-charge { 0% { width: 16%; } 82%, 100% { width: 88%; } }
@keyframes nirvana-bolt { 50% { transform: scale(1.2); opacity: .62; } }

/* 08 · Three soft dots find their phase */
.nirvana-page-loader[data-style="phase"] .nirvana-loader-phase { display: flex; align-items: center; justify-content: center; gap: 13px; }
.nirvana-loader-phase i { width: 12px; height: 12px; border-radius: 50%; background: var(--nirvana-loader-clay); animation: nirvana-phase 1.4s ease-in-out infinite alternate; }
.nirvana-loader-phase i:nth-child(2) { background: var(--nirvana-loader-sage); animation-delay: -.23s; }
.nirvana-loader-phase i:nth-child(3) { background: var(--nirvana-loader-sage); animation-delay: -.46s; }
@keyframes nirvana-phase { to { transform: translateY(-11px) scale(1.12); } }

/* 09 · Springy fill overshoots, then eases back */
.nirvana-page-loader[data-style="settle"] .nirvana-loader-settle i { display: block; height: 100%; width: 0; border-radius: inherit; background: linear-gradient(90deg, var(--nirvana-loader-clay), var(--nirvana-loader-amber) 52%, var(--nirvana-loader-sage)); box-shadow: 0 0 10px rgba(69,185,232,.24); animation: nirvana-settle 2.8s cubic-bezier(.34, 1.25, .64, 1) infinite; }
@keyframes nirvana-settle { 0% { width: 0; } 55% { width: 96%; } 72%, 100% { width: 87%; } }

/* 10 · Four particles travel inward and return */
.nirvana-page-loader[data-style="vector"] .nirvana-loader-vector { display: block; width: 12px; height: 12px; }
.nirvana-loader-vector b, .nirvana-loader-vector i { position: absolute; left: 0; top: 0; display: block; width: 10px; height: 10px; border-radius: 50%; background: var(--nirvana-loader-amber); box-shadow: 0 2px 7px rgba(143,91,37,.24); }
.nirvana-loader-vector b { width: 13px; height: 13px; left: -1px; top: -1px; background: var(--nirvana-loader-clay); }
.nirvana-loader-vector i { translate: var(--x) var(--y); animation: nirvana-recall 2.4s cubic-bezier(.16, 1, .3, 1) infinite; }
.nirvana-loader-vector i:nth-child(2) { animation-delay: .12s; }
.nirvana-loader-vector i:nth-child(3) { animation-delay: .24s; }
.nirvana-loader-vector i:nth-child(4) { animation-delay: .36s; }
@keyframes nirvana-recall { 0%, 30%, 100% { translate: var(--x) var(--y); opacity: .42; } 52%, 78% { translate: 0 0; opacity: 1; } }

/* 11 · Short editorial skeleton with a warm highlight sweep */
.nirvana-page-loader[data-style="shimmer"] .nirvana-loader-shimmer { display: flex; width: 132px; flex-direction: column; gap: 7px; }
.nirvana-loader-shimmer i { height: 8px; border-radius: 99px; background: linear-gradient(90deg, var(--nirvana-loader-track) 0%, #9ddcf0 48%, var(--nirvana-loader-track) 100%); background-size: 280% 100%; animation: nirvana-shimmer 1.5s linear infinite; }
.nirvana-loader-shimmer i:nth-child(2) { width: 82%; }
.nirvana-loader-shimmer i:nth-child(3) { width: 57%; }
@keyframes nirvana-shimmer { 0% { background-position: 140% 0; } 100% { background-position: -140% 0; } }

/* 12 · Three ascending dots in a pill-shaped reading bubble */
.nirvana-page-loader[data-style="typing"] .nirvana-loader-typing { display: flex; align-items: center; justify-content: center; gap: 8px; width: 78px; height: 48px; border-radius: 18px 18px 18px 5px; background: var(--nirvana-loader-track); }
.nirvana-loader-typing i { width: 8px; height: 8px; border-radius: 50%; background: var(--nirvana-loader-sage); animation: nirvana-typing 1.2s ease-in-out infinite; }
.nirvana-loader-typing i:nth-child(2) { animation-delay: .16s; }
.nirvana-loader-typing i:nth-child(3) { animation-delay: .32s; }
@keyframes nirvana-typing { 0%, 60%, 100% { transform: translateY(0); opacity: .42; } 30% { transform: translateY(-7px); opacity: 1; background: var(--nirvana-loader-clay); } }

/* 13 · Three staggered sonar rings */
.nirvana-page-loader[data-style="sonar"] .nirvana-loader-sonar { display: block; width: 28px; height: 28px; }
.nirvana-loader-sonar i, .nirvana-loader-sonar b { position: absolute; inset: 0; display: block; margin: auto; width: 24px; height: 24px; border: 2px solid var(--nirvana-loader-clay); border-radius: 50%; animation: nirvana-sonar-ping 2.4s cubic-bezier(0, .4, .2, 1) infinite; }
.nirvana-loader-sonar i:nth-child(2) { animation-delay: .8s; }
.nirvana-loader-sonar i:nth-child(3) { animation-delay: 1.6s; }
.nirvana-loader-sonar b { width: 9px; height: 9px; border: 0; background: var(--nirvana-loader-amber); box-shadow: 0 0 10px rgba(230,155,53,.48); animation: nirvana-sonar-core 1.8s ease-in-out infinite; }
@keyframes nirvana-sonar-ping { 0% { transform: scale(.4); opacity: .9; } 100% { transform: scale(4.2); opacity: 0; } }
@keyframes nirvana-sonar-core { 50% { transform: scale(.78); } }

/* 14 · Newton's cradle, with the outer balls trading momentum */
.nirvana-page-loader[data-style="cradle"] .nirvana-loader-cradle { display: flex; align-items: flex-start; justify-content: center; gap: 7px; width: 114px; height: 62px; padding-top: 3px; }
.nirvana-loader-cradle i { position: relative; display: block; width: 1px; height: 39px; background: var(--nirvana-loader-sage); transform-origin: top center; }
.nirvana-loader-cradle i:after { content: ""; position: absolute; left: -7px; bottom: -9px; width: 15px; height: 15px; border-radius: 50%; background: linear-gradient(145deg, #fff, #c9dfed); border: 1px solid var(--nirvana-loader-sage); box-shadow: 0 3px 8px rgba(53,101,132,.22); }
.nirvana-loader-cradle .first { animation: nirvana-swing-left 1.2s ease-in-out infinite; }
.nirvana-loader-cradle .last { animation: nirvana-swing-right 1.2s ease-in-out infinite; }
@keyframes nirvana-swing-left { 0%, 50%, 100% { transform: rotate(0); } 25% { transform: rotate(48deg); } }
@keyframes nirvana-swing-right { 0%, 50%, 100% { transform: rotate(0); } 75% { transform: rotate(-48deg); } }

/* 15 · A soft clay ball drops and squashes above its shadow */
.nirvana-page-loader[data-style="bounce"] .nirvana-loader-bounce { display: block; width: 58px; height: 68px; }
.nirvana-loader-bounce i { position: absolute; left: 18px; top: 16px; display: block; width: 22px; height: 22px; border-radius: 50%; background: radial-gradient(circle at 34% 28%, #b9efff, var(--nirvana-loader-clay) 68%); box-shadow: 0 4px 12px rgba(39,143,221,.3); animation: nirvana-ball-drop 1s cubic-bezier(.7, 0, .3, 1) infinite; }
.nirvana-loader-bounce b { position: absolute; left: 16px; bottom: 8px; width: 26px; height: 8px; border-radius: 50%; background: rgba(64,75,61,.18); filter: blur(2px); animation: nirvana-ball-shadow 1s cubic-bezier(.7, 0, .3, 1) infinite; }
@keyframes nirvana-ball-drop { 0%, 100% { transform: translateY(-14px) scaleY(1.05); } 50% { transform: translateY(15px) scaleY(.8) scaleX(1.15); } }
@keyframes nirvana-ball-shadow { 0%, 100% { transform: scale(.5); opacity: .25; } 50% { transform: scale(1); opacity: .5; } }

/* 16 · Four staggered dots travel in a wave */
.nirvana-page-loader[data-style="wave-dots"] .nirvana-loader-wave-dots { display: flex; align-items: center; justify-content: center; gap: 11px; }
.nirvana-loader-wave-dots i { display: block; width: 10px; height: 10px; border-radius: 50%; background: var(--nirvana-loader-clay); animation: nirvana-wave-dot 1.1s ease-in-out infinite; }
.nirvana-loader-wave-dots i:nth-child(2) { animation-delay: .12s; background: var(--nirvana-loader-gold); }
.nirvana-loader-wave-dots i:nth-child(3) { animation-delay: .24s; background: var(--nirvana-loader-leaf); }
.nirvana-loader-wave-dots i:nth-child(4) { animation-delay: .36s; background: var(--nirvana-loader-gold); }
@keyframes nirvana-wave-dot { 0%, 60%, 100% { transform: translateY(0); opacity: .5; } 30% { transform: translateY(-10px); opacity: 1; } }

body.night .nirvana-page-loader { --nirvana-loader-track: #304655; --nirvana-loader-track-strong: #52788d; --nirvana-loader-paper: #203743; --nirvana-loader-clay: #4ba8ea; --nirvana-loader-amber: #67d2ed; --nirvana-loader-sage: #4dc9bd; --nirvana-loader-leaf: #85d8c8; --nirvana-loader-gold: #a8aaf2; }
body.night .nirvana-page-loader { background: rgba(20, 30, 24, .14); }
body.night .nirvana-page-loader__card { background: transparent; color: #e4ecdf; }
body.night .nirvana-page-loader__message { color: #e0e8de; text-shadow: 0 1px 5px rgba(0,0,0,.72); }
body.night .nirvana-loader-bar, body.night .nirvana-loader-settle, body.night .nirvana-loader-typing { background-color: var(--nirvana-loader-track); }
body.night .nirvana-loader-shimmer i { background-image: linear-gradient(90deg, var(--nirvana-loader-track) 0%, #47768a 48%, var(--nirvana-loader-track) 100%); }

@media (max-width: 480px) {
	.nirvana-page-loader { padding: 18px; }
	.nirvana-page-loader__card { min-width: 168px; min-height: 152px; border-radius: 20px; }
}

@media (prefers-reduced-motion: reduce) {
	.nirvana-page-loader, .nirvana-page-loader__card { transition: none; }
	.nirvana-page-loader__art *, .nirvana-page-loader__art *:before, .nirvana-page-loader__art *:after,
	.nirvana-page-loader__art animateMotion { animation: none !important; }
	.nirvana-loader-heartbeat animateMotion { display: none; }
}
