/* ==========================================================================
   Appyn Premium UI Layer
   Badges, Floating Badge Button, and a theme-wide premium button system.
   Loaded AFTER style.min.css so these rules take priority.
   Uses CSS variables only -> automatically adapts to Light / Dark mode
   (body.theme-dark is the theme's existing dark-mode class).
   ========================================================================== */

:root{
	--appyn-primary: #1bbc9b;
	--appyn-primary-rgb: 27,188,155;

	--pb-radius: 999px;
	--pb-text: #ffffff;
	--pb-text-muted: rgba(20,22,30,.72);
	--pb-surface: rgba(255,255,255,.55);
	--pb-surface-strong: rgba(255,255,255,.78);
	--pb-border: rgba(20,22,30,.10);
	--pb-shadow: 0 8px 24px rgba(20,22,30,.14), 0 2px 6px rgba(20,22,30,.08);
	--pb-highlight: rgba(255,255,255,.55);
	--pb-blur: 14px;

	--new-grad-1: #11B5E5;
	--new-grad-2: #0B8FC7;
	--new-glow: rgba(17,181,229,.55);

	--upd-grad-1: #F47A20;
	--upd-grad-2: #E85A00;
	--upd-glow: rgba(244,122,32,.55);

	--wa-grad-1: #25D366;
	--wa-grad-2: #128C7E;
	--wa-glow: rgba(37,211,102,.5);

	--pb-speed: .45s;
}

body.theme-dark{
	--pb-text-muted: rgba(235,238,245,.75);
	--pb-surface: rgba(30,34,45,.55);
	--pb-surface-strong: rgba(30,34,45,.72);
	--pb-border: rgba(255,255,255,.10);
	--pb-shadow: 0 8px 26px rgba(0,0,0,.45), 0 2px 8px rgba(0,0,0,.3);
	--pb-highlight: rgba(255,255,255,.14);
}

@media (prefers-reduced-motion: reduce){
	*{ animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
}

/* --------------------------------------------------------------------
   1. Premium capsule badges (NEW / UPDATED)
   -------------------------------------------------------------------- */
.bloque-status{
	position: absolute;
	top: 10px;
	left: 10px;
	right: auto;
	width: auto;
	max-width: none;
	margin: 0;
	padding: 5px 14px 5px 12px;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: .5px;
	line-height: 1.5;
	border-radius: var(--pb-radius);
	color: #fff;
	text-transform: uppercase;
	transform: none;
	transform-origin: center;
	z-index: 8;
	display: inline-flex;
	align-items: center;
	gap: 5px;
	border: 1px solid rgba(255,255,255,.35);
	backdrop-filter: blur(6px);
	-webkit-backdrop-filter: blur(6px);
	box-shadow: 0 4px 14px -2px var(--appyn-primary-glow, rgba(0,0,0,.35)), inset 0 1px 0 rgba(255,255,255,.35);
	overflow: hidden;
	animation: pbFloatBadge 4.2s ease-in-out infinite;
}

.bloque-status::before{
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(120deg, transparent 20%, rgba(255,255,255,.55) 45%, transparent 70%);
	transform: translateX(-120%);
	animation: pbShine 4.6s ease-in-out infinite;
	pointer-events: none;
}

.bloque-status.bs-new{
	background: linear-gradient(135deg, var(--new-grad-1), var(--new-grad-2));
	box-shadow: 0 4px 16px -2px var(--new-glow), inset 0 1px 0 rgba(255,255,255,.4);
}

.bloque-status.bs-update{
	background: linear-gradient(135deg, var(--upd-grad-1), var(--upd-grad-2));
	box-shadow: 0 4px 16px -2px var(--upd-glow), inset 0 1px 0 rgba(255,255,255,.4);
}

@keyframes pbFloatBadge{
	0%,100%{ transform: translateY(0); }
	50%{ transform: translateY(-3px); }
}

@keyframes pbShine{
	0%{ transform: translateX(-130%); }
	35%,100%{ transform: translateX(230%); }
}

/* --------------------------------------------------------------------
   2. Floating Badges (up to 3, stacked bottom-right)
   Each badge is an independent element; PHP computes a per-badge
   --afb-offset-y-abs so they stack with equal spacing and never overlap.

   Every visual dimension below is driven by CSS custom properties set
   inline by PHP from the Customizer — nothing is hardcoded:
     --afb-logo-size   -> Logo size slider (10-120px). Controls ONLY the
                           image.
     --afb-ring-size   -> Outer ring slider (0-40px). Padding between the
                           logo and the edge of the visible glass button.
                           Independent from --afb-logo-size.
     --afb-badge-size  -> logo + (ring * 2). The whole visible circle.
     --afb-smoke-*     -> Smoke/glow intensity (Off/Low/Medium/High).
     --afb-caption-*   -> Badge text (size, weight, spacing, color).

   Structure:
     .appyn-float-badge -> fixed wrapper, sized to the visible badge
                            circle (logo + ring). Positions everything.
     .afb-smoke          -> optional animated glow behind the badge.
     .afb-ripple-wrap     -> holds the 5-layer ripple pulse.
     .afb-btn             -> the visible glass circular button. Shrink-
                            wraps the logo via padding = ring size.
     .afb-btn img          -> the logo/icon, sized by --afb-logo-size only.
     .afb-caption           -> persistent badge text below the badge.
     .afb-label              -> existing hover tooltip (unchanged).
   -------------------------------------------------------------------- */
:root{
	/* Defaults reproduce a sensible premium look out of the box.
	   Always overridden inline per-instance by the Customizer settings
	   below — these are only a fallback if a value is ever missing. */
	--afb-logo-size: 46px;
	--afb-ring-size: 14px;
	--afb-badge-size: 74px;
	--afb-float-speed: 3.4s;
	--afb-ripple-duration: 3.6s;
	--afb-pulse-color-rgb: var(--appyn-primary-rgb);
	--afb-glow-color-rgb: var(--appyn-primary-rgb);

	/* Smoke / glow behind the badge — Off by default (0 opacity), so it
	   costs nothing until an admin turns it on. */
	--afb-smoke-opacity: 0;
	--afb-smoke-scale: 1.4;
	--afb-smoke-color-rgb: var(--afb-glow-color-rgb);

	/* Badge text (persistent label under the badge). */
	--afb-caption-size: 12px;
	--afb-caption-weight: 600;
	--afb-caption-spacing: .2px;
	--afb-caption-color: var(--pb-text-muted);
}

.appyn-float-badge{
	position: fixed;
	right: 18px;
	bottom: var(--afb-offset-y-abs, 18px);
	z-index: 999999;
	width: var(--afb-badge-size, 74px);
	height: var(--afb-badge-size, 74px);
	display: flex;
	align-items: center;
	justify-content: center;
	text-decoration: none;
	background: transparent;
	animation: pbFloatY var(--afb-float-speed, 3.4s) ease-in-out infinite;
	transition: transform .45s cubic-bezier(.2,.9,.3,1.3);
	overflow: visible;
}

/* Optional animated smoke/glow behind the badge. Always in the markup
   (so the Customizer can enable it instantly) but fully invisible and
   non-animating by default via data-afb-smoke="off" below — zero cost
   until an admin opts in. GPU-only: transform + opacity, no layout. */
.afb-smoke{
	position: absolute;
	top: 50%;
	left: 50%;
	width: var(--afb-badge-size, 74px);
	height: var(--afb-badge-size, 74px);
	margin-top: calc(var(--afb-badge-size, 74px) / -2);
	margin-left: calc(var(--afb-badge-size, 74px) / -2);
	border-radius: 50%;
	background: radial-gradient(circle, rgba(var(--afb-smoke-color-rgb), .9) 0%, rgba(var(--afb-smoke-color-rgb), 0) 70%);
	opacity: var(--afb-smoke-opacity, 0);
	transform: scale(var(--afb-smoke-scale, 1.4));
	filter: blur(5px);
	animation: afbSmoke calc(var(--afb-ripple-duration, 3.6s) * 1.8) ease-in-out infinite;
	will-change: transform, opacity;
	pointer-events: none;
	z-index: 0;
}
.appyn-float-badge[data-afb-smoke="off"] .afb-smoke{
	animation: none;
	opacity: 0;
}

@keyframes afbSmoke{
	0%, 100%{ transform: scale(var(--afb-smoke-scale, 1.4)); opacity: calc(var(--afb-smoke-opacity, 0) * .65); }
	50%{ transform: scale(calc(var(--afb-smoke-scale, 1.4) * 1.18)); opacity: var(--afb-smoke-opacity, 0); }
}

/* 5-layer ripple/glow pulse — large, bright and smooth. Purely
   decorative, GPU-friendly (transform + opacity only), scales outward
   from the badge itself so it always matches Logo size + Ring size. */
.afb-ripple-wrap{
	position: absolute;
	inset: 0;
	border-radius: 50%;
	pointer-events: none;
	z-index: 1;
}

.afb-ripple{
	position: absolute;
	inset: 0;
	border-radius: 50%;
	border: 3px solid rgba(var(--afb-pulse-color-rgb), .65);
	box-shadow: 0 0 22px 2px rgba(var(--afb-pulse-color-rgb), .35);
	opacity: 0;
	transform: scale(.35);
	animation: afbRipple var(--afb-ripple-duration, 3.6s) cubic-bezier(.16,.8,.3,1) infinite;
	will-change: transform, opacity;
	backface-visibility: hidden;
}
.afb-ripple:nth-child(1){ animation-delay: 0s; }
.afb-ripple:nth-child(2){ animation-delay: calc(var(--afb-ripple-duration, 3.6s) * .2); }
.afb-ripple:nth-child(3){ animation-delay: calc(var(--afb-ripple-duration, 3.6s) * .4); }
.afb-ripple:nth-child(4){ animation-delay: calc(var(--afb-ripple-duration, 3.6s) * .6); }
.afb-ripple:nth-child(5){ animation-delay: calc(var(--afb-ripple-duration, 3.6s) * .8); }

@keyframes afbRipple{
	0%{ transform: scale(.35); opacity: .8; }
	60%{ opacity: .22; }
	100%{ transform: scale(2.2); opacity: 0; }
}

/* The visible glass circular button. Shrink-wraps the logo via padding
   ONLY (padding = ring size), so it always follows logo size but never
   affects — and is never affected by — the ripple or the smoke. */
.afb-btn{
	position: relative;
	z-index: 2;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--afb-ring-size, 14px);
	border-radius: 50%;
	background: var(--pb-surface-strong);
	border: 1px solid rgba(255,255,255,.4);
	backdrop-filter: blur(var(--pb-blur));
	-webkit-backdrop-filter: blur(var(--pb-blur));
	box-shadow: 0 6px 20px rgba(0,0,0,.25);
	transition: transform .45s cubic-bezier(.2,.9,.3,1.3), box-shadow .45s ease, padding .25s ease;
}

.appyn-float-badge img{
	width: var(--afb-logo-size, 46px);
	height: var(--afb-logo-size, 46px);
	object-fit: contain;
	border-radius: 50%;
	pointer-events: none;
	display: block;
	transition: width .25s ease, height .25s ease;
}

.appyn-float-badge .afb-label{
	position: absolute;
	right: calc(100% + 10px);
	top: 50%;
	transform: translateY(-50%) translateX(6px);
	background: var(--pb-surface-strong);
	color: var(--pb-text-muted);
	font-size: 12px;
	font-weight: 600;
	white-space: nowrap;
	padding: 6px 12px;
	border-radius: var(--pb-radius);
	border: 1px solid var(--pb-border);
	box-shadow: var(--pb-shadow);
	opacity: 0;
	pointer-events: none;
	transition: opacity .3s ease, transform .3s ease;
	z-index: 3;
}

.appyn-float-badge:hover .afb-label{
	opacity: 1;
	transform: translateY(-50%) translateX(0);
}

/* Badge text — persistent label below the badge. Fully theme-
   configurable: text, size, weight, letter-spacing and color. */
.appyn-float-badge .afb-caption{
	position: absolute;
	top: 100%;
	left: 50%;
	transform: translateX(-50%);
	margin-top: 6px;
	font-size: var(--afb-caption-size, 12px);
	font-weight: var(--afb-caption-weight, 600);
	letter-spacing: var(--afb-caption-spacing, .2px);
	color: var(--afb-caption-color, var(--pb-text-muted));
	white-space: nowrap;
	line-height: 1.2;
	pointer-events: none;
	text-shadow: 0 1px 3px rgba(0,0,0,.18);
	z-index: 3;
}

@keyframes pbFloatY{
	0%,100%{ transform: translateY(0); }
	50%{ transform: translateY(-6px); }
}

/* Hover animation variants — chosen per badge via the "Hover animation" control. */
.appyn-float-badge.afb-hover-all:hover{
	transform: scale(1.08);
	animation-play-state: paused;
}
.appyn-float-badge.afb-hover-all:hover .afb-btn{
	box-shadow: 0 10px 28px rgba(0,0,0,.3), 0 0 26px 4px rgba(var(--afb-glow-color-rgb), .5);
}
.appyn-float-badge.afb-hover-scale:hover{
	transform: scale(1.08);
	animation-play-state: paused;
}
.appyn-float-badge.afb-hover-lift:hover{
	transform: translateY(-6px);
	animation-play-state: paused;
}
.appyn-float-badge.afb-hover-glow:hover .afb-btn{
	box-shadow: 0 10px 28px rgba(0,0,0,.3), 0 0 26px 4px rgba(var(--afb-glow-color-rgb), .5);
}
.appyn-float-badge.afb-hover-none:hover{
	transform: none;
}

/* Responsive scaling: every dimension here is a ratio of the SAME
   Customizer-driven variables (logo size, ring size, badge size) —
   nothing is a new fixed pixel value, mobile just renders the admin's
   own settings at a slightly smaller, comfortable scale. */
@media (max-width: 600px){
	.appyn-float-badge{
		right: 14px;
		width: calc(var(--afb-badge-size, 74px) * .86);
		height: calc(var(--afb-badge-size, 74px) * .86);
	}
	.appyn-float-badge img{
		width: calc(var(--afb-logo-size, 46px) * .86);
		height: calc(var(--afb-logo-size, 46px) * .86);
	}
	.afb-btn{ padding: calc(var(--afb-ring-size, 14px) * .86); }
	.afb-smoke{
		width: calc(var(--afb-badge-size, 74px) * .86);
		height: calc(var(--afb-badge-size, 74px) * .86);
		margin-top: calc(var(--afb-badge-size, 74px) * .86 / -2);
		margin-left: calc(var(--afb-badge-size, 74px) * .86 / -2);
	}
	.appyn-float-badge .afb-label{ display: none; }
	.appyn-float-badge .afb-caption{ font-size: calc(var(--afb-caption-size, 12px) * .92); margin-top: 5px; }
}

/* Keep the premium look lightweight on very narrow screens: fewer
   concurrent ripple layers instead of disabling the effect outright. */
@media (max-width: 380px){
	.afb-ripple:nth-child(4), .afb-ripple:nth-child(5){ display: none; }
}

/* --------------------------------------------------------------------
   3. Theme-wide premium button system
   Targets every existing Appyn button class so nothing needs to change
   in the templates themselves.
   -------------------------------------------------------------------- */
.buttond,
.downloadAPK,
#list-downloadlinks li a.dapk_b,
#dl-whatsapp,
.buttond.wa,
.app-s .readmore,
.app-s .s2 .meta-cats a,
.section a.more,
.section.blog .bloques li .excerpt .readmore a,
.tags a,
#comments input[type=submit],
#box-report input[type=submit],
.sb_submit[type=submit],
.widget .search-form input[type=submit],
.widget .wp-block-search .wp-block-search__button,
.widget.widget_tag_cloud a,
.catbar li a,
.pagination a,
.pagination .current,
.imageBox .bn,
.imageBox .close,
#backtotop,
#dasl:not([disabled]) {
	position: relative;
	overflow: hidden;
	border: 1px solid var(--pb-border);
	border-radius: var(--pb-radius) !important;
	backdrop-filter: blur(var(--pb-blur));
	-webkit-backdrop-filter: blur(var(--pb-blur));
	box-shadow: var(--pb-shadow), inset 0 1px 0 var(--pb-highlight);
	transition: transform .3s cubic-bezier(.2,.9,.3,1.3), box-shadow .3s ease, filter .3s ease;
	isolation: isolate;
}

.buttond::before,
.downloadAPK::before,
#list-downloadlinks li a.dapk_b::before,
#dl-whatsapp::before,
.buttond.wa::before,
.app-s .readmore::before,
#dasl:not([disabled])::before {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(120deg, transparent 15%, rgba(255,255,255,.45) 45%, transparent 65%);
	transform: translateX(-120%);
	animation: pbShine 4.5s ease-in-out infinite;
	pointer-events: none;
	z-index: 1;
}

.buttond:hover,
.downloadAPK:hover,
#list-downloadlinks li a.dapk_b:hover,
#dl-whatsapp:hover,
.buttond.wa:hover,
.app-s .readmore:hover,
.app-s .s2 .meta-cats a:hover,
.section a.more:hover,
.tags a:hover,
.catbar li a:hover,
.pagination a:hover,
.imageBox .bn:hover,
.imageBox .close:hover,
#backtotop:hover,
#dasl:not([disabled]):hover {
	transform: translateY(-3px) scale(1.015);
	box-shadow: 0 14px 28px -8px rgba(var(--appyn-primary-rgb), .45), var(--pb-shadow), inset 0 1px 0 var(--pb-highlight);
	filter: brightness(1.04);
}

.buttond:active,
.downloadAPK:active,
#dasl:not([disabled]):active {
	transform: translateY(-1px) scale(.98);
}

/* Primary call-to-action buttons: gradient + gentle breathing glow */
.downloadAPK,
#list-downloadlinks li a.dapk_b,
#dasl:not([disabled]) {
	background: linear-gradient(135deg, rgba(var(--appyn-primary-rgb),1), rgba(var(--appyn-primary-rgb),.78));
	color: var(--pb-text) !important;
	font-weight: 700;
	animation: pbBreathe 3.2s ease-in-out infinite;
}

@keyframes pbBreathe{
	0%,100%{ box-shadow: 0 0 0 0 rgba(var(--appyn-primary-rgb),.35), var(--pb-shadow); }
	50%{ box-shadow: 0 0 22px 4px rgba(var(--appyn-primary-rgb),.45), var(--pb-shadow); }
}

/* WhatsApp button */
#dl-whatsapp,
.buttond.wa{
	background: linear-gradient(135deg, var(--wa-grad-1), var(--wa-grad-2));
	color: #fff !important;
	font-weight: 700;
}
#dl-whatsapp:hover,
.buttond.wa:hover{
	box-shadow: 0 14px 28px -6px var(--wa-glow), var(--pb-shadow), inset 0 1px 0 var(--pb-highlight);
}

/* Secondary / neutral buttons: glass surface, no forced gradient */
.app-s .readmore,
.section a.more,
.tags a,
.catbar li a,
.pagination a,
.pagination .current,
.widget.widget_tag_cloud a {
	background: var(--pb-surface);
	color: var(--pb-text-muted) !important;
}

/* Ripple click effect (span injected by premium-ui.js) */
.pb-ripple{
	position: absolute;
	border-radius: 50%;
	transform: scale(0);
	background: rgba(255,255,255,.55);
	pointer-events: none;
	z-index: 2;
	animation: pbRippleAnim .6s ease-out forwards;
}

@keyframes pbRippleAnim{
	to{ transform: scale(2.6); opacity: 0; }
}

@media (max-width: 782px){
	.buttond, .downloadAPK{ padding-left: 18px; padding-right: 18px; }
}

/* --------------------------------------------------------------------
   4. Premium Header Navigation
   Opt-in via #header.header-anim-enabled — layout/structure untouched,
   only hover/active interactions get a premium feel.
   -------------------------------------------------------------------- */
:root{
	--header-glow-color: var(--appyn-primary);
	--header-glow-rgb: var(--appyn-primary-rgb);
	--header-blur-intensity: 14px;
}

#header.header-anim-enabled nav .menu > li > a{
	transition: transform .3s cubic-bezier(.2,.9,.3,1.3), color .3s ease, text-shadow .3s ease;
}

#header.header-anim-enabled nav .menu > li > a::after{
	content: "";
	position: absolute;
	left: 14px;
	right: 14px;
	bottom: 3px;
	height: 2px;
	border-radius: 2px;
	background: var(--header-glow-color);
	transform: scaleX(0);
	transform-origin: center;
	opacity: 0;
	transition: transform .35s cubic-bezier(.2,.9,.3,1.3), opacity .35s ease, box-shadow .35s ease;
	pointer-events: none;
}

#header.header-anim-enabled[data-nav-fx="underline"] nav .menu > li > a::after,
#header.header-anim-enabled[data-nav-fx="all"] nav .menu > li > a::after{
	display: block;
}
#header.header-anim-enabled[data-nav-fx="glow"] nav .menu > li > a::after,
#header.header-anim-enabled[data-nav-fx="lift"] nav .menu > li > a::after{
	display: none;
}

#header.header-anim-enabled nav .menu > li:hover > a::after,
#header.header-anim-enabled nav .menu > li.current-menu-item > a::after{
	transform: scaleX(1);
	opacity: 1;
	box-shadow: 0 0 10px 1px rgba(var(--header-glow-rgb), .65);
}

#header.header-anim-enabled[data-nav-fx="all"] nav .menu > li:hover > a,
#header.header-anim-enabled[data-nav-fx="lift"] nav .menu > li:hover > a{
	transform: translateY(-2px);
}

#header.header-anim-enabled[data-nav-fx="all"] nav .menu > li:hover > a,
#header.header-anim-enabled[data-nav-fx="glow"] nav .menu > li:hover > a{
	text-shadow: 0 0 8px rgba(var(--header-glow-rgb), .55);
}

/* --------------------------------------------------------------------
   5. Sticky Header
   Opt-in via #header.header-sticky-ready. Uses position:sticky so there
   is zero layout shift; premium-ui.js only toggles .header-scrolled.
   -------------------------------------------------------------------- */
#header.header-sticky-ready{
	position: sticky;
	top: 0;
	z-index: 9999;
	transition: box-shadow .4s ease, background-color .4s ease, backdrop-filter .4s ease;
	will-change: box-shadow, background-color;
}

#header.header-sticky-ready.header-scrolled{
	background-color: rgba(29,34,45,.82);
	backdrop-filter: blur(var(--header-blur-intensity, 14px));
	-webkit-backdrop-filter: blur(var(--header-blur-intensity, 14px));
	box-shadow: 0 10px 28px -6px rgba(0,0,0,.35), 0 0 0 1px rgba(var(--header-glow-rgb), .18), 0 4px 18px -2px rgba(var(--header-glow-rgb), .25);
	animation: pbHeaderSlideIn .4s cubic-bezier(.2,.9,.3,1.1);
}

body.theme-dark #header.header-sticky-ready.header-scrolled{
	background-color: rgba(20,22,30,.82);
}

@keyframes pbHeaderSlideIn{
	0%{ transform: translateY(-10px); opacity: .7; }
	100%{ transform: translateY(0); opacity: 1; }
}

/* --------------------------------------------------------------------
   6. Animated Site Logo
   Opt-in per element via classes added in header-default.php. The logo
   artwork itself is never modified — only subtle transform/opacity/
   filter animations wrap around it.
   -------------------------------------------------------------------- */
:root{
	--logo-anim-speed: 4s;
	--logo-hover-scale: 1.08;
	--logo-glow-intensity: 1;
	--logo-pulse-rgb: var(--appyn-primary-rgb);
}

.logo.logo-anim-enabled{
	position: relative;
	display: inline-flex;
	align-items: center;
}

.logo.logo-anim-enabled::before{
	content: "";
	position: absolute;
	inset: -10px;
	border-radius: 50%;
	background: radial-gradient(circle, rgba(var(--logo-pulse-rgb), .38), transparent 72%);
	opacity: 0;
	transform: scale(.85);
	pointer-events: none;
	z-index: 0;
}

.logo.logo-anim-pulse::before{
	animation: pbLogoGlow var(--logo-anim-speed, 4s) ease-in-out infinite;
}

@keyframes pbLogoGlow{
	0%,100%{ opacity: 0; transform: scale(.85); }
	50%{ opacity: calc(.55 * var(--logo-glow-intensity, 1)); transform: scale(1); }
}

.logo.logo-anim-enabled a{
	position: relative;
	z-index: 1;
	display: inline-block;
}

.logo.logo-anim-float a{
	animation: pbLogoFloat var(--logo-anim-speed, 4s) ease-in-out infinite;
}

@keyframes pbLogoFloat{
	0%,100%{ transform: translateY(0); }
	50%{ transform: translateY(-3px); }
}

.logo.logo-anim-enabled a img{
	transition: transform .35s cubic-bezier(.2,.9,.3,1.3), filter .35s ease;
}

.logo.logo-anim-enabled a:hover img{
	transform: scale(var(--logo-hover-scale, 1.08));
	filter: drop-shadow(0 0 10px rgba(var(--logo-pulse-rgb), calc(.55 * var(--logo-glow-intensity, 1))));
}
