/*! Kinetic Text for Divi 5 | GPL-2.0-or-later */

/* =========================================================================
   Base
   ========================================================================= */
.ktx-w,
.ktx-mask,
.ktx-u.ktx-ib { display: inline-block; }
.ktx-w { white-space: nowrap; }
.ktx-mask {
	overflow: hidden;
	vertical-align: bottom;
	padding: .1em .06em .16em;
	margin: -.1em -.06em -.16em;
}
@supports (overflow: clip) {
	.ktx-mask { overflow: clip; vertical-align: baseline; }
}
.ktx-sr {
	position: absolute !important;
	width: 1px !important;
	height: 1px !important;
	padding: 0 !important;
	margin: -1px !important;
	overflow: hidden !important;
	clip: rect(0 0 0 0) !important;
	-webkit-clip-path: inset(50%) !important;
	clip-path: inset(50%) !important;
	white-space: nowrap !important;
	border: 0 !important;
	-webkit-user-select: none;
	user-select: none;
}
.ktx-clickable { cursor: pointer; }

/* =========================================================================
   Entrance machinery (whole text, letters, words, lines)
   Every effect only sets custom properties; one rule set does the work.
   ========================================================================= */
.ktx-armed .ktx-u {
	opacity: var(--ktx-o, 0);
	transform: var(--ktx-t, none);
	filter: var(--ktx-f, none);
	-webkit-clip-path: var(--ktx-c, none);
	clip-path: var(--ktx-c, none);
}
/* While waiting/playing, off-set text must never widen the page (no sideways scroll on phones). */
.ktx-f-whole.ktx-armed, .ktx-f-whole.ktx-play,
.ktx-f-chars.ktx-armed, .ktx-f-chars.ktx-play,
.ktx-f-words.ktx-armed, .ktx-f-words.ktx-play,
.ktx-f-lines.ktx-armed, .ktx-f-lines.ktx-play { overflow-x: clip; }
.ktx-play .ktx-u {
	animation-name: var(--ktx-kf, ktx-in);
	animation-duration: var(--ktx-dur, 900ms);
	animation-timing-function: var(--ktx-ease-fx, var(--ktx-ease, ease-out));
	animation-delay: calc(var(--ktx-delay, 0ms) + var(--i, 0) * var(--ktx-stagger, 0ms));
	animation-fill-mode: both;
}
@keyframes ktx-in {
	from { opacity: var(--ktx-o, 0); transform: var(--ktx-t, none); filter: var(--ktx-f, none); }
	to   { opacity: 1; transform: var(--ktx-te, none); filter: none; }
}
@keyframes ktx-clip {
	from { -webkit-clip-path: var(--ktx-c); clip-path: var(--ktx-c); }
	to   { -webkit-clip-path: inset(0 0 0 0); clip-path: inset(0 0 0 0); }
}
@keyframes ktx-bounce {
	0%   { opacity: 0; transform: scale3d(.3, .3, .3); }
	20%  { transform: scale3d(1.1, 1.1, 1.1); }
	40%  { transform: scale3d(.9, .9, .9); }
	60%  { opacity: 1; transform: scale3d(1.03, 1.03, 1.03); }
	80%  { transform: scale3d(.97, .97, .97); }
	100% { opacity: 1; transform: none; }
}
@keyframes ktx-elastic {
	0%   { opacity: 0; transform: scale(.2); }
	30%  { opacity: 1; transform: scale(1.18); }
	45%  { transform: scale(.9); }
	60%  { transform: scale(1.06); }
	75%  { transform: scale(.98); }
	90%  { transform: scale(1.01); }
	100% { opacity: 1; transform: none; }
}
@keyframes ktx-tracking {
	0%   { opacity: 0; letter-spacing: -.45em; }
	40%  { opacity: .6; }
	100% { opacity: 1; letter-spacing: var(--ktx-ls, 0px); }
}
@keyframes ktx-focus {
	0%   { opacity: 0; filter: blur(12px); letter-spacing: .35em; }
	100% { opacity: 1; filter: none; letter-spacing: var(--ktx-ls, 0px); }
}

/* ---- per-effect settings ---- */
.ktx-fx-fade-up, .ktx-fx-chars-fade-up, .ktx-fx-words-fade-up, .ktx-fx-lines-fade-up { --ktx-t: translate3d(0, .55em, 0); }
.ktx-fx-fade-down, .ktx-fx-chars-fade-down, .ktx-fx-words-fade-down { --ktx-t: translate3d(0, -.55em, 0); }
.ktx-fx-fade-left { --ktx-t: translate3d(-.8em, 0, 0); }
.ktx-fx-fade-right { --ktx-t: translate3d(.8em, 0, 0); }
.ktx-fx-zoom-in, .ktx-fx-chars-zoom, .ktx-fx-words-zoom { --ktx-t: scale(.35); }
.ktx-fx-zoom-out { --ktx-t: scale(1.6); }
.ktx-fx-flip-up, .ktx-fx-chars-flip, .ktx-fx-words-flip { --ktx-t: perspective(24em) rotateX(-88deg); --ktx-te: perspective(24em) rotateX(0deg); }
.ktx-fx-flip-left { --ktx-t: perspective(24em) rotateY(75deg); --ktx-te: perspective(24em) rotateY(0deg); }
.ktx-fx-swing-in, .ktx-fx-chars-swing { --ktx-t: perspective(24em) rotateX(-110deg); --ktx-te: perspective(24em) rotateX(0deg); --ktx-ease-fx: cubic-bezier(.3, 1.4, .5, 1); }
.ktx-fx-blur-in, .ktx-fx-words-blur, .ktx-fx-lines-blur { --ktx-f: blur(12px); --ktx-t: scale(1.04); }
.ktx-fx-chars-blur { --ktx-f: blur(8px); }
.ktx-fx-rotate-in, .ktx-fx-chars-rotate, .ktx-fx-words-rotate { --ktx-t: translate3d(0, .3em, 0) rotate(-16deg); }
.ktx-fx-skew-in { --ktx-t: translate3d(-.7em, 0, 0) skewX(28deg); }
.ktx-fx-drop-in, .ktx-fx-chars-drop, .ktx-fx-words-drop { --ktx-t: translate3d(0, -1em, 0); --ktx-ease-fx: cubic-bezier(.3, 1.6, .5, 1); }
.ktx-fx-rise, .ktx-fx-chars-rise, .ktx-fx-words-rise, .ktx-fx-lines-rise { --ktx-o: 1; --ktx-t: translate3d(0, 110%, 0); }
.ktx-fx-bounce-in, .ktx-fx-chars-bounce, .ktx-fx-words-bounce { --ktx-kf: ktx-bounce; --ktx-ease-fx: cubic-bezier(.215, .61, .355, 1); }
.ktx-fx-elastic-in, .ktx-fx-chars-elastic { --ktx-kf: ktx-elastic; --ktx-ease-fx: ease-in-out; }
.ktx-fx-tracking-in { --ktx-kf: ktx-tracking; }
.ktx-fx-focus-in { --ktx-kf: ktx-focus; }
.ktx-fx-curtain { --ktx-kf: ktx-clip; --ktx-o: 1; --ktx-c: inset(0 100% 0 0); }
.ktx-fx-curtain-center { --ktx-kf: ktx-clip; --ktx-o: 1; --ktx-c: inset(0 50% 0 50%); }

.ktx-fx-flip-up .ktx-u, .ktx-fx-chars-flip .ktx-u, .ktx-fx-words-flip .ktx-u { transform-origin: 50% 100%; }
.ktx-fx-flip-left .ktx-u { transform-origin: 0 50%; }
.ktx-fx-swing-in .ktx-u, .ktx-fx-chars-swing .ktx-u { transform-origin: 50% 0; }
.ktx-fx-rotate-in .ktx-u, .ktx-fx-chars-rotate .ktx-u, .ktx-fx-words-rotate .ktx-u { transform-origin: 0 100%; }

/* =========================================================================
   Highlight & underline sweep
   ========================================================================= */
.ktx-fx-highlight { --ktx-kf: ktx-sweep; --ktx-o: 1; --ktx-bh: .42em; }
.ktx-fx-underline { --ktx-kf: ktx-sweep; --ktx-o: 1; --ktx-bh: calc(var(--ktx-sw, 4) * 1px); }
.ktx-fx-highlight .ktx-u {
	background-image: linear-gradient(var(--ktx-c1, rgba(255, 208, 0, .55)), var(--ktx-c1, rgba(255, 208, 0, .55)));
	background-repeat: no-repeat;
	background-position: 0 88%;
	background-size: 100% var(--ktx-bh);
	padding: 0 .06em;
	margin: 0 -.06em;
}
.ktx-fx-underline .ktx-u {
	background-image: linear-gradient(var(--ktx-c1, currentColor), var(--ktx-c1, currentColor));
	background-repeat: no-repeat;
	background-position: 0 100%;
	background-size: 100% var(--ktx-bh);
	padding-bottom: .08em;
}
.ktx-f-deco.ktx-armed .ktx-u { background-size: 0% var(--ktx-bh); }
@keyframes ktx-sweep {
	from { background-size: 0% var(--ktx-bh); }
	to   { background-size: 100% var(--ktx-bh); }
}

/* =========================================================================
   Hand-drawn shapes (SVG paths built in real pixels by the engine)
   ========================================================================= */
.ktx-f-shape { --ktx-o: 1; }
.ktx-f-shape .ktx-u { position: relative; z-index: 0; }
.ktx-f-shape.ktx-play .ktx-u { animation: none; }
.ktx-shape {
	position: absolute;
	z-index: -1;
	overflow: visible;
	pointer-events: none;
}
.ktx-shape-underline,
.ktx-shape-zigzag,
.ktx-shape-wave { left: -2%; width: 104%; top: calc(100% - .2em); height: .42em; }
.ktx-shape-double { left: -2%; width: 104%; top: calc(100% - .22em); height: .55em; }
.ktx-shape-circle { left: -10%; width: 120%; top: -.3em; height: calc(100% + .6em); }
.ktx-shape-strike { left: -3%; width: 106%; top: 0; height: 100%; z-index: 1; }
.ktx-shape-cross { left: -2%; width: 104%; top: 0; height: 100%; z-index: 1; }
.ktx-shape path {
	fill: none;
	stroke: var(--ktx-c1, #e0364b);
	stroke-width: calc(var(--ktx-sw, 4) * 1px);
	stroke-linecap: round;
	stroke-linejoin: round;
}
.ktx-f-shape.ktx-armed .ktx-shape path {
	stroke-dasharray: var(--ktx-len) var(--ktx-gap);
	stroke-dashoffset: var(--ktx-len);
}
.ktx-f-shape.ktx-play .ktx-shape path {
	stroke-dasharray: var(--ktx-len) var(--ktx-gap);
	animation: ktx-draw var(--ktx-dur, 900ms) var(--ktx-ease, ease-out) calc(var(--ktx-delay, 0ms) + var(--i, 0) * var(--ktx-dur, 900ms) * .55) both;
}
@keyframes ktx-draw {
	from { stroke-dashoffset: var(--ktx-len); }
	to   { stroke-dashoffset: 0; }
}

/* =========================================================================
   Typewriter & scramble
   ========================================================================= */
.ktx-f-typewriter.ktx-armed .ktx-c,
.ktx-f-typewriter.ktx-running .ktx-c { visibility: hidden; }
.ktx-f-typewriter.ktx-running .ktx-c.ktx-on { visibility: visible; }
.ktx-cursor {
	display: inline-block;
	width: 0;
	margin-left: .03em;
	overflow: visible;
	white-space: nowrap;
	color: var(--ktx-c1, currentColor);
	pointer-events: none;
	animation: ktx-blink 1.05s steps(1, end) infinite;
}
.ktx-cursor.is-typing { animation: none; opacity: 1; }
@keyframes ktx-blink { 50% { opacity: 0; } }

.ktx-f-scramble .ktx-c { text-align: center; }
.ktx-f-scramble.ktx-running .ktx-c { opacity: 0; }
.ktx-f-scramble.ktx-running .ktx-c.ktx-on { opacity: 1; }
.ktx-f-scramble.ktx-running .ktx-c.ktx-on.is-glyph { opacity: .75; color: var(--ktx-c1, currentColor); }

/* =========================================================================
   Rotating words
   ========================================================================= */
.ktx-rot-box {
	display: inline-grid;
	max-width: 100%;
	vertical-align: bottom;
	white-space: nowrap;
	overflow: hidden;
	padding: .12em .04em;
	margin: -.12em -.04em;
}
@supports (overflow: clip) {
	.ktx-rot-box { overflow: clip; vertical-align: baseline; }
}
.ktx-rot-box.is-ready { transition: width calc(var(--ktx-rdur, 700ms) * .8) var(--ktx-ease, ease); }
.ktx-rot-box > .ktx__item { grid-area: 1 / 1; justify-self: start; }
.ktx-rot-box > .ktx__item:not(.is-active):not(.is-out) { visibility: hidden; }
.ktx-rot .ktx__item.is-in { animation: ktx-rin var(--ktx-rdur, 700ms) var(--ktx-ease-fx, var(--ktx-ease, ease)) both; }
.ktx-rot .ktx__item.is-out { animation: ktx-rout var(--ktx-rdur, 700ms) var(--ktx-ease-fx, var(--ktx-ease, ease)) both; }
@keyframes ktx-rin {
	from { opacity: var(--ktx-ro, 0); transform: var(--ktx-rti, none); filter: var(--ktx-rf, none); -webkit-clip-path: var(--ktx-rci, inset(0 0 0 0)); clip-path: var(--ktx-rci, inset(0 0 0 0)); }
	to   { opacity: 1; transform: none; filter: none; -webkit-clip-path: inset(0 0 0 0); clip-path: inset(0 0 0 0); }
}
@keyframes ktx-rout {
	from { opacity: 1; transform: none; filter: none; -webkit-clip-path: inset(0 0 0 0); clip-path: inset(0 0 0 0); }
	to   { opacity: var(--ktx-ro, 0); transform: var(--ktx-rto, none); filter: var(--ktx-rf, none); -webkit-clip-path: var(--ktx-rco, inset(0 0 0 0)); clip-path: var(--ktx-rco, inset(0 0 0 0)); }
}
.ktx-fx-rotate-slide { --ktx-rti: translate3d(0, 100%, 0); --ktx-rto: translate3d(0, -100%, 0); }
.ktx-fx-rotate-drop { --ktx-rti: translate3d(0, -100%, 0); --ktx-rto: translate3d(0, 100%, 0); }
.ktx-fx-rotate-zoom { --ktx-rti: scale(.3); --ktx-rto: scale(1.7); }
.ktx-fx-rotate-blur { --ktx-rf: blur(8px); }
.ktx-fx-rotate-flip { --ktx-rti: perspective(20em) rotateX(-90deg); --ktx-rto: perspective(20em) rotateX(90deg); }
.ktx-fx-rotate-clip { --ktx-ro: 1; --ktx-rci: inset(0 100% 0 0); --ktx-rco: inset(0 0 0 100%); }

.ktx-rot-chars .ktx__item.is-in,
.ktx-rot-chars .ktx__item.is-out { animation: none; }
.ktx-rot-chars .ktx__item.is-out .ktx-u {
	animation: ktx-cout calc(var(--ktx-rdur, 700ms) * .6) var(--ktx-ease, ease) calc(var(--i, 0) * var(--ktx-stagger, 30ms)) both;
}
.ktx-rot-chars .ktx__item.is-in .ktx-u {
	animation: ktx-cin calc(var(--ktx-rdur, 700ms) * .7) var(--ktx-ease, ease) calc(var(--ktx-rdur, 700ms) * .35 + var(--i, 0) * var(--ktx-stagger, 30ms)) both;
}
@keyframes ktx-cin {
	from { opacity: 0; transform: translate3d(0, .6em, 0) rotate(8deg); }
	to   { opacity: 1; transform: none; }
}
@keyframes ktx-cout {
	from { opacity: 1; transform: none; }
	to   { opacity: 0; transform: translate3d(0, -.6em, 0) rotate(-8deg); }
}

.ktx-rot-type .ktx-rot-box,
.ktx-rot-scramble .ktx-rot-box { display: inline; overflow: visible; padding: 0; margin: 0; }
.ktx-rot-type .ktx__item,
.ktx-rot-scramble .ktx__item { display: none; }

/* =========================================================================
   Loops
   ========================================================================= */
.ktx-paused .ktx-u,
.ktx-paused .ktx-u::before,
.ktx-paused .ktx-u::after { animation-play-state: paused !important; }

.ktx-fx-gradient.ktx-lready .ktx-u {
	background-image: linear-gradient(90deg, var(--ktx-c1, #0ea5e9), var(--ktx-c2, #8b5cf6), var(--ktx-c3, #f43f5e), var(--ktx-c1, #0ea5e9));
	background-size: 200% 100%;
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	color: transparent;
}
.ktx-fx-gradient.ktx-looping .ktx-u { animation: ktx-flow var(--ktx-ldur, 5s) linear infinite; }
@keyframes ktx-flow {
	from { background-position: 0% 50%; }
	to   { background-position: 200% 50%; }
}

.ktx-fx-shine.ktx-lready .ktx-u {
	background-image: linear-gradient(105deg, var(--ktx-base, #222) 0 40%, var(--ktx-c1, #fff) 50%, var(--ktx-base, #222) 60% 100%);
	background-size: 250% 100%;
	background-position: 100% 0;
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	color: transparent;
}
.ktx-fx-shine.ktx-looping .ktx-u { animation: ktx-shine var(--ktx-ldur, 3s) ease-in-out infinite; }
@keyframes ktx-shine {
	0%       { background-position: 100% 0; }
	55%, 100% { background-position: 0% 0; }
}

.ktx-fx-neon .ktx-u { text-shadow: 0 0 .02em rgba(255, 255, 255, .7), 0 0 .08em var(--ktx-c1, #ff3d9a), 0 0 .22em var(--ktx-c1, #ff3d9a); }
.ktx-fx-neon.ktx-looping .ktx-u { animation: ktx-neon var(--ktx-ldur, 2.6s) ease-in-out infinite alternate; }
@keyframes ktx-neon {
	from { text-shadow: 0 0 .02em rgba(255, 255, 255, .5), 0 0 .06em var(--ktx-c1, #ff3d9a), 0 0 .14em var(--ktx-c1, #ff3d9a); }
	to   { text-shadow: 0 0 .03em rgba(255, 255, 255, .8), 0 0 .1em var(--ktx-c1, #ff3d9a), 0 0 .3em var(--ktx-c1, #ff3d9a), 0 0 .7em var(--ktx-c1, #ff3d9a); }
}

.ktx-fx-float.ktx-looping .ktx-u { animation: ktx-float var(--ktx-ldur, 3.5s) ease-in-out infinite; }
@keyframes ktx-float {
	0%, 100% { transform: translate3d(0, 0, 0); }
	50%      { transform: translate3d(0, -.12em, 0); }
}

/* Glitch: short, low-contrast bursts (max 3 changes per second) to stay seizure-safe. */
.ktx-fx-glitch .ktx-u { position: relative; }
.ktx-fx-glitch .ktx-u::before,
.ktx-fx-glitch .ktx-u::after {
	content: attr(data-ktx-text);
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	opacity: 0;
	pointer-events: none;
}
.ktx-fx-glitch .ktx-u::before { color: var(--ktx-c1, #00d4ff); }
.ktx-fx-glitch .ktx-u::after { color: var(--ktx-c2, #ff2e88); }
.ktx-fx-glitch.ktx-looping .ktx-u { animation: ktx-glitch-m var(--ktx-ldur, 3s) steps(1, end) infinite; }
.ktx-fx-glitch.ktx-looping .ktx-u::before { animation: ktx-glitch-a var(--ktx-ldur, 3s) steps(1, end) infinite; }
.ktx-fx-glitch.ktx-looping .ktx-u::after { animation: ktx-glitch-b var(--ktx-ldur, 3s) steps(1, end) infinite; }
@keyframes ktx-glitch-m {
	0%, 84%, 100% { transform: none; }
	86% { transform: skewX(-5deg); }
	91% { transform: skewX(3deg) translateX(.02em); }
}
@keyframes ktx-glitch-a {
	0%, 84%, 97%, 100% { opacity: 0; transform: none; -webkit-clip-path: inset(0 0 100% 0); clip-path: inset(0 0 100% 0); }
	86% { opacity: .8; transform: translate(-.04em, -.02em); -webkit-clip-path: inset(10% 0 58% 0); clip-path: inset(10% 0 58% 0); }
	91% { opacity: .8; transform: translate(.05em, 0); -webkit-clip-path: inset(62% 0 10% 0); clip-path: inset(62% 0 10% 0); }
}
@keyframes ktx-glitch-b {
	0%, 84%, 97%, 100% { opacity: 0; transform: none; -webkit-clip-path: inset(100% 0 0 0); clip-path: inset(100% 0 0 0); }
	86% { opacity: .8; transform: translate(.04em, .02em); -webkit-clip-path: inset(55% 0 20% 0); clip-path: inset(55% 0 20% 0); }
	91% { opacity: .8; transform: translate(-.05em, 0); -webkit-clip-path: inset(20% 0 55% 0); clip-path: inset(20% 0 55% 0); }
}

/* Letter loops */
.ktx-fx-chars-wave.ktx-looping .ktx-u {
	animation: ktx-wave var(--ktx-ldur, 1.8s) ease-in-out infinite;
	animation-delay: calc(var(--i, 0) * var(--ktx-stagger, 50ms));
}
@keyframes ktx-wave {
	0%, 50%, 100% { transform: none; }
	25% { transform: translate3d(0, -.22em, 0); }
}
.ktx-fx-chars-jump.ktx-looping .ktx-u {
	animation: ktx-jump var(--ktx-ldur, 2.7s) cubic-bezier(.3, 0, .3, 1) infinite;
	animation-delay: calc(var(--i, 0) * var(--ktx-stagger, 50ms));
}
@keyframes ktx-jump {
	0%, 20%, 100% { transform: none; }
	8%  { transform: translate3d(0, -.35em, 0) rotate(-6deg); }
	14% { transform: translate3d(0, .04em, 0); }
}

/* =========================================================================
   Scroll-linked reveal
   ========================================================================= */
.ktx-f-scrub .ktx-u { transition: opacity .18s linear; }

/* =========================================================================
   Static, reduced motion, high contrast, print, builder
   ========================================================================= */
.ktx-static .ktx-cursor { display: none; }

@media (prefers-reduced-motion: reduce) {
	.ktx .ktx-u,
	.ktx .ktx-u::before,
	.ktx .ktx-u::after,
	.ktx .ktx__item,
	.ktx .ktx-cursor,
	.ktx .ktx-shape path,
	.ktx .ktx-rot-box { animation: none !important; transition: none !important; }
	.ktx.ktx-armed .ktx-u { opacity: 1 !important; transform: none !important; filter: none !important; -webkit-clip-path: none !important; clip-path: none !important; }
	.ktx .ktx-shape path { stroke-dashoffset: 0 !important; }
}
@media (forced-colors: active) {
	.ktx .ktx-u { -webkit-text-fill-color: currentColor !important; background-image: none !important; text-shadow: none !important; }
	.ktx .ktx-shape path { stroke: CanvasText; }
}
@media print {
	.ktx .ktx-u,
	.ktx .ktx-c { opacity: 1 !important; visibility: visible !important; transform: none !important; filter: none !important; animation: none !important; -webkit-clip-path: none !important; clip-path: none !important; }
	.ktx-cursor { display: none !important; }
}
.ktx-vb-host { display: block; }
.ktx-vb-empty { margin: 0; padding: .6em 0; opacity: .55; font-style: italic; }
