/** Reusable API. These classes never select arbitrary links, forms or plugin controls.
 * Sizes and shape tokens are defaults; compatibility adapters below retain approved profiles.
 */
:root {
 --button-radius-rounded: 9px;
 --button-radius-pill: 999px;
 --button-size-sm-height: 44px;
 --button-size-md-height: 48px;
 --button-size-lg-height: 56px;
 --button-font-size: 14px;
 --button-font-weight: 750;
 --button-focus-width: 3px;
 --button-focus-offset: 4px;
}
:root .theme-button {
 display: inline-flex;
 align-items: center;
 justify-content: center;
 gap: var(--space-2, 8px);
 box-sizing: border-box;
 min-height: var(--button-height, var(--button-size-md-height));
 max-width: 100%;
 padding: var(--button-padding, 12px 20px);
 border: 1px solid var(--button-border, var(--button-primary-background));
 border-radius: var(--button-radius, var(--button-radius-rounded));
 background: var(--button-background, var(--button-primary-background));
 color: var(--button-foreground, var(--button-primary-text));
 font: inherit;
 font-size: var(--button-font-size);
 font-weight: var(--button-font-weight);
 line-height: 1.2;
 text-align: center;
 text-decoration: none;
 overflow-wrap: anywhere;
 cursor: pointer;
 transition: background-color var(--transition, 200ms ease), color var(--transition, 200ms ease), border-color var(--transition, 200ms ease);
}
.theme-button--cta {
 --button-background: var(--button-cta-background);
 --button-border: var(--button-cta-background);
 --button-foreground: var(--button-cta-text);
 --button-hover-background: var(--button-cta-hover);
 --button-hover-border: var(--button-cta-hover);
 --button-hover-foreground: var(--button-cta-hover-text);
}
.theme-button--primary {
 --button-background: var(--button-primary-background);
 --button-border: var(--button-primary-background);
 --button-foreground: var(--button-primary-text);
 --button-hover-background: var(--button-primary-hover);
 --button-hover-border: var(--button-primary-hover);
 --button-hover-foreground: var(--button-primary-hover-text);
}
.theme-button--outline {
 --button-background: transparent;
 --button-border: var(--button-outline-border);
 --button-foreground: var(--button-outline-text);
 --button-hover-background: var(--color-surface);
 --button-hover-border: var(--button-outline-border);
 --button-hover-foreground: var(--button-outline-hover-text);
}
.theme-button--text {
 --button-background: transparent;
 --button-border: transparent;
 --button-foreground: var(--button-outline-text);
 --button-hover-background: transparent;
 --button-hover-border: transparent;
 --button-hover-foreground: var(--button-outline-hover-text);
 --button-padding: 0;
 justify-content: flex-start;
}
.theme-button--on-dark {
 --button-focus: var(--color-focus-on-dark);
}
.theme-button--on-dark:is(.theme-button--outline, .theme-button--text) {
 --button-foreground: var(--button-dark-text);
 --button-border: var(--button-dark-text);
 --button-hover-background: var(--button-dark-text);
 --button-hover-border: var(--button-dark-text);
 --button-hover-foreground: var(--button-dark-inverse-text);
}
.theme-button--on-dark.theme-button--text {
 --button-border: transparent;
 --button-hover-border: transparent;
 --button-hover-background: transparent;
 --button-hover-foreground: var(--button-dark-text);
}
.theme-button--md { --button-height: var(--button-size-md-height); --button-padding: 12px 20px; --button-font-size: 14px; }
.theme-button--sm { --button-height: var(--button-size-sm-height); --button-padding: 10px 16px; --button-font-size: 13px; }
.theme-button--lg { --button-height: var(--button-size-lg-height); --button-padding: 16px 26px; --button-font-size: 16px; }
.theme-button--rounded { --button-radius: var(--button-radius-rounded); }
.theme-button--pill { --button-radius: var(--button-radius-pill); }
.theme-button--full { width: 100%; }
:root .theme-button:hover {
 background: var(--button-hover-background, var(--button-primary-hover));
 border-color: var(--button-hover-border, var(--button-primary-hover));
 color: var(--button-hover-foreground, var(--button-primary-hover-text));
}
.theme-button--text:hover { text-decoration: underline; text-underline-offset: .2em; }
.theme-button:focus-visible { outline: var(--button-focus-width) solid var(--button-focus, var(--color-focus)); outline-offset: var(--button-focus-offset); }
@media (max-width: 37.5rem) { .theme-button--mobile-full { width: 100%; } }

/* Central button contexts: compatibility selectors preserve approved dimensions and shapes. */
/* Preserved context adapters: theme.css */
body.home a.site-header__cta,
a.setup-support__button {
	border-radius: 999px;
}

.site-header__cta {
	min-height: 2.625rem;
	padding-inline: 1.125rem;
	white-space: nowrap;
}

.site-closing-cta__button {
	min-height: 52px;
	padding-inline: 27px;
	border-width: 1.5px;
	border-radius: 10px;
	font-size: 14px;
	font-weight: 780;
}

.site-closing-cta__button--primary {
	border-color: var(--button-cta-background);
	background: var(--button-cta-background);
	color: var(--button-cta-text);
	box-shadow: 0 12px 30px rgba(var(--color-cta-rgb), 0.3);
}

.site-closing-cta__button--primary:hover {
	border-color: var(--button-cta-hover);
	background: var(--button-cta-hover);
	color: var(--button-cta-hover-text);
}

.site-closing-cta__button--secondary {
	border-color: rgba(var(--color-on-dark-rgb), 0.52);
	background: rgba(var(--color-background-rgb), 0.08);
	color: var(--color-on-dark);
	backdrop-filter: blur(8px);
}

.site-closing-cta__button--secondary:hover {
	border-color: var(--color-on-dark);
	background: var(--color-background);
	color: var(--color-primary-dark);
}

.site-closing-cta__button .iptvdock-icon {
	display: inline-block;
	width: 18px;
	height: 18px;
	transition: transform var(--transition);
}

.site-closing-cta__button:hover .iptvdock-icon {
	transform: translateX(3px);
}

@media (max-width: 37.5rem) {
.site-closing-cta__button {
		width: 100%;
	}

}

/* Preserved context adapters: home.css */
.home-text-link { display: inline-flex; min-height: 44px; align-items: center; gap: 8px; color: var(--color-primary); font-weight: 750; }

.home-text-link span,
.home-button span { color: var(--color-accent); transition: transform .2s ease; }

.home-text-link:hover span,
.home-button:hover span { transform: translateX(3px); }

.home-comparison a.comparison-card__cta { width: 100%; min-height: 48px; border-color: var(--button-cta-background); background: var(--button-cta-background); color: var(--button-cta-text); font-size: 14px; text-align: center; }

.home-comparison a.comparison-card__cta:hover { border-color: var(--button-cta-hover); background: var(--button-cta-hover); color: var(--button-cta-hover-text); }

.home-comparison a.comparison-card__cta:focus-visible { outline: 3px solid var(--color-focus); outline-offset: 4px; }

.home-stream-smarter a.home-stream-smarter__cta { min-height: 50px; padding: 14px 28px; border-color: var(--button-cta-background); background: var(--button-cta-background); color: var(--button-cta-text); font-size: 15px; }

.home-stream-smarter a.home-stream-smarter__cta:hover { border-color: var(--button-cta-hover); background: var(--button-cta-hover); color: var(--button-cta-hover-text); }

.home-stream-smarter a.home-stream-smarter__cta:focus-visible { outline: 3px solid var(--color-focus-on-dark); outline-offset: 4px; }

.home-reference-intro .home-reference-subscribe,
.home-reference-banner .home-reference-subscribe { min-height: 56px; max-width: 100%; padding: 14px 24px; border-color: var(--button-cta-background); border-radius: 10px; background: var(--button-cta-background); color: var(--button-cta-text); font-size: 16px; font-weight: 700; line-height: 1.3; text-align: center; }

.home-reference-intro .home-reference-subscribe:hover,
.home-reference-banner .home-reference-subscribe:hover { border-color: var(--color-cta-hover); background: var(--color-cta-hover); color: var(--button-cta-hover-text); }

.home-reference-banner .home-reference-subscribe:focus-visible { outline-color: var(--color-on-dark); }

@media (max-width: 64rem) {
.home-reference-banner .home-reference-subscribe { justify-self: start; }

}
@media (max-width: 37.5rem) {
.home-reference-intro .home-reference-subscribe,
.home-reference-banner .home-reference-subscribe { width: 100%; }

}
body.home .site-header__cta { min-height: 42px; padding-inline: 18px; border: 0; border-radius: 10px; background: var(--button-cta-background); color: var(--button-cta-text); box-shadow: 0 7px 18px rgba(var(--color-cta-rgb), .2); }

body.home .site-header__cta:hover { background: var(--button-cta-hover); color: var(--button-cta-hover-text); }

.home-button { min-height: 46px; padding: 0 22px; border: 1.5px solid transparent; border-radius: 10px; font-size: 14px; font-weight: 780; }

.home-hero .home-button { min-height: 56px; padding-inline: 28px; font-size: 16px; font-weight: 700; }

.home-button--primary { background: var(--button-cta-background); color: var(--button-cta-text); box-shadow: 0 12px 30px rgba(var(--color-cta-rgb), .3); }

.home-button--primary:hover { background: var(--button-cta-hover); color: var(--button-cta-hover-text); transform: translateY(-1px); }

.home-button--secondary { border-color: rgba(var(--color-on-dark-rgb), .52); background: rgba(var(--color-background-rgb), .08); color: var(--color-on-dark); backdrop-filter: blur(8px); }

.home-button--secondary:hover { border-color: var(--color-on-dark); background: var(--color-background); color: var(--color-primary-dark); }

@media (max-width: 47.9375rem) {
.home-hero .home-button { width: 100%; max-width: 420px; }

}
.pricing-card__button { width: 100%; min-height: 46px; margin-top: auto; border: 1.5px solid var(--color-primary); border-radius: 10px; background: var(--card-background); color: var(--color-primary); cursor: pointer; font: inherit; font-size: 14px; font-weight: 780; transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease, transform 200ms ease; }

.pricing-card__button .iptvdock-icon { width: 17px; height: 17px; color: inherit; transition: color 200ms ease,transform 200ms ease; }

.pricing-card__button--primary { border-color: var(--button-cta-background); background: var(--button-cta-background); color: var(--button-cta-text); }

.pricing-card__button:hover { background: var(--card-background); color: var(--color-primary); border-color: var(--color-primary); transform: none; }

.pricing-card__button--primary:hover { background: var(--button-cta-background); color: var(--button-cta-text); border-color: var(--button-cta-background); transform: none; }

@media (hover: hover) and (pointer: fine) {
.pricing-card__button:hover,
.pricing-card__button--primary:hover {
		background: var(--color-primary);
		background-color: var(--color-primary);
		color: var(--button-primary-text);
		border-color: var(--color-primary);
		transform: none;
	}

.pricing-card__button:hover .iptvdock-icon,
.pricing-card__button--primary:hover .iptvdock-icon {
		color: var(--button-primary-text);
		transform: translateX(2px);
	}

}
.pricing-trial-panel__button { flex: 0 0 auto; border-color: var(--color-primary); background: var(--color-primary); color: var(--button-primary-text); }

.pricing-trial-panel__button:hover { border-color: var(--color-primary-dark); background: var(--color-primary-dark); color: var(--button-primary-dark-text); }

@media (max-width: 37.5rem) {
.home-section__heading--horizontal .home-text-link { margin-top: 10px; }

.pricing-trial-panel__button { width: 100%; max-width: 260px; }

}
.home-comparison .comparison-card--featured a.comparison-card__cta:focus-visible { outline-color: var(--color-focus-on-dark); }


/* Preserved context adapters: internal-pages.css */
.internal-text-link { color: var(--color-primary); font-weight: 780; text-decoration: none; }

.internal-text-link .iptvdock-icon { width: 1em; height: 1em; margin-left: 5px; transition: transform .2s ease; }

.internal-text-link:hover .iptvdock-icon { transform: translateX(2px); }

.internal-text-link > .iptvdock-icon:first-child { margin-right: 5px; margin-left: 0; }

.internal-text-link:hover > .iptvdock-icon:first-child { transform: translateX(-2px); }

.internal-text-link:hover { color: var(--color-accent); }

.internal-card .internal-text-link { display: inline-block; font-size: 13px; }

.internal-contact-button--primary { border-color: var(--button-cta-background); background: var(--button-cta-background); color: var(--button-cta-text); }

.internal-contact-button--primary:hover { border-color: var(--button-cta-hover); background: var(--button-cta-hover); color: var(--button-cta-hover-text); }

.internal-contact-button--secondary { border-color: rgba(var(--color-on-dark-rgb), .55); background: rgba(var(--color-background-rgb), .08); }

.internal-contact-button--secondary:hover { border-color: var(--color-on-dark); background: var(--color-background); color: var(--color-primary-dark); }

.internal-text-link--light,
.internal-text-link--light:hover { color: var(--color-on-dark); }

.blog-featured__content .internal-text-link,
.blog-card__content .internal-text-link { align-self: flex-start; }

.blog-card__content .internal-text-link { margin-top: auto; font-size: 13px; }

.features-catalog-card .internal-text-link { display: inline-block; margin-top: 28px; }

.features-viewing-card--quality .internal-text-link { display: inline-block; margin-top: 26px; color: var(--color-on-dark); }

.features-service .internal-text-link { display: inline-block; margin-top: 23px; }


/* Preserved context adapters: pricing-page.css */
.pricing-page__selector button { min-height: 48px; padding: 12px 24px; border: 1px solid var(--color-primary); border-radius: 10px; background: var(--color-background); color: var(--color-primary); font: inherit; font-weight: 750; cursor: pointer; }

.pricing-page__selector button[aria-pressed="true"] { background: var(--color-primary); color: var(--button-primary-text); }

.pricing-page__selector button:hover { border-color: var(--color-primary-dark); background: var(--color-primary-dark); color: var(--button-primary-dark-text); }

.pricing-page__selector button:focus-visible,
.pricing-page .pricing-card__button:focus-visible { outline: 3px solid var(--color-primary-dark); outline-offset: 4px; }

.pricing-page .pricing-card__button--primary { color: var(--button-cta-text); background: var(--button-cta-background); border-color: var(--button-cta-background); }

.pricing-page .pricing-card--featured .pricing-card__button--primary { transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease, transform 200ms ease; }

.pricing-page .pricing-card--featured .pricing-card__button--primary:hover,
.pricing-page .pricing-card--featured .pricing-card__button--primary:focus-visible { color: var(--color-primary-dark); background: var(--card-background); border-color: var(--button-cta-background); }

.pricing-page .pricing-card--featured .pricing-card__button:focus-visible { outline-color: var(--color-on-dark); }

.pricing-help a.pricing-help__cta { min-height: 50px; padding: 14px 30px; border-color: var(--color-primary); background: var(--color-primary); color: var(--button-primary-text); transition: background-color 200ms ease, border-color 200ms ease; }

.pricing-help a.pricing-help__cta:hover { border-color: var(--color-primary-dark); background: var(--color-primary-dark); color: var(--button-primary-dark-text); transform: none; }

.pricing-help a.pricing-help__cta:focus-visible { outline: 3px solid var(--color-primary-dark); outline-offset: 4px; }

@media (max-width: 37.5rem) {
.pricing-page__selector button { padding-inline: 20px; }

}

/* Preserved context adapters: pricing-reference.css */
.pricing-reference__button { display:inline-flex; align-items:center; justify-content:center; min-height:54px; padding:16px 26px; border-radius:10px; background:var(--color-cta); color:var(--button-cta-text); font-weight:750; text-decoration:none; text-align:center; transition:background-color 200ms ease; }

.pricing-reference__button:hover { background:var(--button-cta-hover); color:var(--button-cta-hover-text); }

.pricing-reference__button:focus-visible,
.pricing-reference__support-link:focus-visible { outline:3px solid var(--color-focus); outline-offset:4px; }

.pricing-reference__support-link { display:inline-flex; justify-content:center; margin-top:auto; padding:14px 20px; border:1px solid var(--color-primary); border-radius:9px; color:var(--color-primary); font-weight:750; text-decoration:none; }

.pricing-reference__support-link:hover { background:var(--color-primary); color: var(--button-primary-text); }

.pricing-reference__trial .pricing-reference__button:focus-visible { outline-color:var(--button-cta-text); }

@media(prefers-reduced-motion:reduce) {
.pricing-reference__button { transition:none; }

}

/* Preserved context adapters: setup-guides.css */
.setup-guide-placeholder .internal-text-link { display: inline-block; margin-top: 24px; }

.setup-support__button { display: inline-flex; min-height: 48px; align-items: center; justify-content: center; gap: 9px; padding: 0 18px; border: 1px solid var(--color-primary); border-radius: 11px; color: var(--color-primary); font-weight: 800; text-decoration: none; transition: transform .2s ease,background .2s ease,color .2s ease; }

.setup-support__button .iptvdock-icon { width: 18px; height: 18px; }

.setup-support__button--primary { background: var(--color-primary); color: var(--button-primary-text); }

.setup-support__button:hover { background: var(--color-primary-dark); color: var(--button-primary-dark-text); transform: translateY(-2px); }

.setup-support__button:focus-visible { outline: 3px solid var(--color-focus); outline-offset: 3px; }

@media (max-width: 37.5rem) {
.setup-support__button { width: 100%; }

}
@media (prefers-reduced-motion: reduce) {
.setup-support__button { transition: none; }

.setup-support__button:hover { transform: none; }

}

/* Preserved context adapters: setup-hero.css */
.iptvdock-setup .setup-hero__actions .button {
	min-height: 3rem;
	font-size: 0.875rem;
	text-align: center;
}

.iptvdock-setup .setup-hero__choose:disabled {
	opacity: 0.6;
	cursor: not-allowed;
	transform: none;
	background: var(--color-primary);
	border-color: var(--color-primary);
}

.iptvdock-setup .setup-hero__actions .setup-hero__help {
	background: var(--color-background);
	color: var(--color-primary);
}

.iptvdock-setup .setup-hero__actions .setup-hero__help:hover {
	background: var(--color-soft);
	color: var(--color-primary-dark);
}

@media (max-width: 30rem) {
.iptvdock-setup .setup-hero__actions .button {
		flex: 1 1 100%;
	}

}
.iptvdock-setup .setup-device-card__action a {
	display: flex;
	align-items: center;
	gap: var(--space-2);
	min-height: 2.75rem;
}

.iptvdock-setup .setup-device-card__action a {
	text-decoration: none;
}

.iptvdock-setup .setup-device-card__action a:hover {
	text-decoration: underline;
}

.iptvdock-setup .setup-device-card__action a:focus-visible {
	outline: 2px solid var(--color-focus);
	outline-offset: 3px;
	border-radius: var(--radius-sm);
}

.iptvdock-setup .setup-hero__actions a.setup-hero__choose {
	border-radius: var(--radius-sm);
}

.iptvdock-setup .setup-support-banner__actions .button {
	min-height: 2.75rem;
	border-color: var(--color-on-dark);
	background: var(--color-background);
	color: var(--color-primary-dark);
	font-size: 0.875rem;
	text-align: center;
}

.iptvdock-setup .setup-support-banner__actions .setup-support-banner__contact {
	background: transparent;
	color: var(--color-on-dark);
}

.iptvdock-setup .setup-support-banner__actions .button:hover {
	background: var(--color-soft);
	color: var(--color-primary-dark);
	transform: none;
}

.iptvdock-setup .setup-support-banner__actions .button:focus-visible {
	outline-color: var(--color-on-dark);
	outline-offset: 4px;
}

@media (max-width: 40rem) {
.iptvdock-setup .setup-support-banner__actions .button {
		width: 100%;
		white-space: normal;
	}

}

/* Preserved context adapters: blog.css */
body.iptvdock-blog-view .blog-search button,
body.iptvdock-blog-view .blog-button {display:inline-flex;min-height:48px;align-items:center;justify-content:center;padding:12px 20px;border:1px solid var(--blog-primary);border-radius:9px;font-weight:750;line-height:1.2;text-decoration:none;transition:transform .2s ease,background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease}

body.iptvdock-blog-view .blog-search button,
body.iptvdock-blog-view .blog-button--primary {color:var(--button-primary-text);background:var(--blog-primary)}

body.iptvdock-blog-view .blog-search button:hover,
body.iptvdock-blog-view .blog-button--primary:hover {border-color:var(--color-primary-dark);background:var(--color-primary-dark);box-shadow:0 10px 24px rgba(var(--color-primary-rgb), .22);transform:translateY(-2px)}

body.iptvdock-blog-view .blog-search button:focus-visible,
body.iptvdock-blog-view .blog-button:focus-visible,
body.iptvdock-blog-view .blog-text-link:focus-visible {outline:3px solid var(--color-focus);outline-offset:3px}

body.iptvdock-blog-view .blog-text-link {display:inline-flex;width:max-content;max-width:100%;align-items:center;gap:8px;color:var(--blog-primary);font-weight:750;text-decoration:none}

body.iptvdock-blog-view .blog-text-link span {color:var(--blog-accent);transition:transform .2s ease}

body.iptvdock-blog-view .blog-text-link:hover span {transform:translateX(3px)}

body.iptvdock-blog-view .blog-card__content .blog-text-link {margin-top:auto;font-size:13px}

body.iptvdock-blog-view .blog-button--secondary {border-color:rgba(var(--color-on-dark-rgb), .7);color:var(--color-on-dark);background:transparent}

body.iptvdock-blog-view .blog-button--secondary:hover {border-color:var(--color-on-dark);color:var(--blog-heading);background:var(--color-background);transform:translateY(-2px)}

@media (max-width:23.5rem){
body.iptvdock-blog-view .blog-search button {width:100%;margin-top:9px}

body.iptvdock-blog-view .blog-button {width:100%}

}
@media (prefers-reduced-motion:reduce){
body.iptvdock-blog-view .blog-search button,
body.iptvdock-blog-view .blog-button,
body.iptvdock-blog-view .blog-text-link span {transition:none}

body.iptvdock-blog-view .blog-search button:hover,
body.iptvdock-blog-view .blog-button:hover {transform:none}

}
body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button {display:inline-flex;min-height:56px;align-items:center;justify-content:center;padding:0 20px;border:1px solid transparent;border-radius:10px;font-weight:800;line-height:1.2;transition:transform .2s ease,background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease}

body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button--primary {border-color:transparent;color:var(--color-on-dark);background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-dark) 100%);box-shadow:0 8px 22px rgba(var(--color-primary-dark-rgb), .24)}

body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button--primary:hover,
body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button--primary:focus-visible {border-color:var(--color-primary-dark);color:var(--color-on-dark);background:linear-gradient(135deg,var(--color-primary-dark) 0%,var(--color-primary-dark) 100%);box-shadow:0 10px 26px rgba(var(--color-primary-dark-rgb), .32);transform:translateY(-2px)}

body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button--secondary {border-color:rgba(var(--color-on-dark-rgb), .7);color:var(--color-on-dark);background:transparent;box-shadow:none}

body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button--secondary:hover,
body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button--secondary:focus-visible {border-color:var(--color-on-dark);color:var(--blog-heading);background:var(--color-background);box-shadow:0 10px 26px rgba(var(--color-primary-dark-rgb), .32);transform:translateY(-2px)}

@media (max-width:47.99rem){
body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button {width:100%;max-width:340px}

}
@media (prefers-reduced-motion:reduce){
body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button {transition:none}

body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button:hover,
body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button:focus-visible {transform:none}

}
body.iptvdock-blog-view .blog-button--primary,
body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button--primary { background: var(--button-cta-background); border-color: var(--button-cta-background); color: var(--color-cta-ink); }

body.iptvdock-blog-view .blog-button--primary:hover,
body.iptvdock-blog-view .blog-button--primary:focus-visible,
body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button--primary:hover,
body.iptvdock-blog-view .blog-single__body .blog-final-cta .blog-button--primary:focus-visible { background: var(--button-cta-hover); border-color: var(--button-cta-hover); color: var(--color-on-dark); }

body.iptvdock-blog-view .blog-final-cta .blog-button:focus-visible { outline: 3px solid var(--color-on-dark); outline-offset: 3px; }

body.iptvdock-blog-view .blog-search button:focus-visible,
body.iptvdock-blog-view .blog-final-cta .blog-button:focus-visible {
	outline-color: var(--color-focus-on-dark);
}

/* Shared interaction states: named theme controls only, never menu/plugin controls. */
:where(.theme-button, .site-header__cta, .home-button, .home-reference-subscribe,
.comparison-card__cta, .home-stream-smarter__cta, .pricing-card__button,
.pricing-trial-panel__button, .pricing-help__cta, .pricing-reference__button,
.site-closing-cta__button, .internal-contact-button, .setup-support__button,
.iptvdock-setup .setup-hero__actions .button,
.iptvdock-setup .setup-support-banner__actions .button,
.blog-button, .blog-search button, .pricing-page__selector button):active:not(:disabled):not([aria-disabled="true"]) { filter: brightness(.96); }
:is(.theme-button, .site-header__cta, .home-button, .home-reference-subscribe,
.comparison-card__cta, .home-stream-smarter__cta, .pricing-card__button,
.pricing-trial-panel__button, .pricing-help__cta, .pricing-reference__button,
.site-closing-cta__button, .internal-contact-button, .setup-support__button,
.iptvdock-setup .setup-hero__actions .button,
.iptvdock-setup .setup-support-banner__actions .button,
.blog-button, .blog-search button, .pricing-page__selector button):is(:disabled, [aria-disabled="true"]) {
 opacity: .6;
 cursor: not-allowed;
 pointer-events: none;
 transform: none;
 filter: none;
 box-shadow: none;
}
@media (prefers-reduced-motion: reduce) {
 :is(.theme-button, .site-header__cta, .home-button, .home-reference-subscribe,
.comparison-card__cta, .home-stream-smarter__cta, .pricing-card__button,
.pricing-trial-panel__button, .pricing-help__cta, .pricing-reference__button,
.site-closing-cta__button, .internal-contact-button, .setup-support__button,
.iptvdock-setup .setup-hero__actions .button,
.iptvdock-setup .setup-support-banner__actions .button,
.blog-button, .blog-search button, .pricing-page__selector button) { transition: none; }
 :is(.theme-button, .site-header__cta, .home-button, .home-reference-subscribe,
.comparison-card__cta, .home-stream-smarter__cta, .pricing-card__button,
.pricing-trial-panel__button, .pricing-help__cta, .pricing-reference__button,
.site-closing-cta__button, .internal-contact-button, .setup-support__button,
.iptvdock-setup .setup-hero__actions .button,
.iptvdock-setup .setup-support-banner__actions .button,
.blog-button, .blog-search button, .pricing-page__selector button):hover { transform: none; }
}

/* Dark contact panel: the generic teal focus ring cannot contrast with its surface. */
.internal-contact-actions .button:focus-visible { outline-color: var(--color-focus-on-dark); }

/* Unified role profiles. One profile wins over the retained legacy adapters above.
 * Layout rules (width, flex, margins and mobile stacking) remain owned by their contexts.
 * All colour values continue to come from the site-specific semantic palette.
 */
:root {
 --button-profile-height: 48px;
 --button-profile-padding: 12px 24px;
 --button-profile-radius: var(--button-radius-pill);
 --button-profile-weight: 750;
 --button-profile-font-size: 14px;
}
html:root body :is(.site-header__cta,
 .home-button,
 .home-reference-subscribe,
 .comparison-card__cta,
 .home-stream-smarter__cta,
 .pricing-card__button,
 .pricing-trial-panel__button,
 .pricing-help__cta,
 .pricing-reference__button,
 .site-closing-cta__button,
 .internal-contact-button,
 .setup-support__button,
 .iptvdock-setup .setup-hero__actions .button,
 .iptvdock-setup .setup-support-banner__actions .button,
 .blog-button,
 .blog-search button,
 .internal-device-guidance > .button,
 .internal-empty-state .button,
 .theme-button:not(.theme-button--text)) {
 display: inline-flex;
 align-items: center;
 justify-content: center;
 gap: 8px;
 box-sizing: border-box;
 min-height: var(--button-profile-height);
 max-width: 100%;
 padding: var(--button-profile-padding);
 border: 1px solid var(--button-border, var(--button-primary-background));
 border-radius: var(--button-profile-radius);
 background: var(--button-background, var(--button-primary-background));
 color: var(--button-foreground, var(--button-primary-text));
 font-family: inherit;
 font-size: var(--button-profile-font-size);
 font-weight: var(--button-profile-weight);
 line-height: 1.2;
 text-align: center;
 text-decoration: none;
 white-space: normal;
 overflow-wrap: anywhere;
 box-shadow: none;
 transform: none;
 cursor: pointer;
 transition: background-color var(--transition), color var(--transition), border-color var(--transition);
}
/* Commercial conversions keep the semantic CTA fill; standard actions keep brand fill. */
:is(body.home .site-header__cta, .home-button--primary, .home-reference-subscribe,
 .comparison-card__cta, .home-stream-smarter__cta, .pricing-card__button,
 .pricing-reference__button, .site-closing-cta__button--primary,
 .internal-contact-button--primary, .blog-button--primary) {
 --button-background: var(--button-cta-background);
 --button-border: var(--button-cta-background);
 --button-foreground: var(--button-cta-text);
 --button-hover-background: var(--button-cta-hover);
 --button-hover-border: var(--button-cta-hover);
 --button-hover-foreground: var(--button-cta-hover-text);
}
/* Secondary controls use the same outline profile on all light surfaces. */
:is(.home-button--secondary, .setup-hero__help, .setup-support-banner__actions .button,
 .site-closing-cta__button--secondary, .internal-contact-button--secondary,
 .setup-support__button:not(.setup-support__button--primary), .blog-button--secondary) {
 --button-background: transparent;
 --button-border: var(--button-outline-border);
 --button-foreground: var(--button-outline-text);
 --button-hover-background: var(--color-surface);
 --button-hover-border: var(--button-outline-border);
 --button-hover-foreground: var(--button-outline-hover-text);
}
/* Explicit dark-surface contexts: same geometry, contrasting outline and focus. */
:is(.home-hero .home-button, .home-reference-banner .home-reference-subscribe,
 .comparison-card--featured .comparison-card__cta, .home-stream-smarter__cta,
 .site-closing-cta__button, .internal-contact-button, .setup-support-banner__actions .button,
 .blog-final-cta .blog-button, .blog-search button,
 .pricing-page .pricing-card--featured .pricing-card__button) {
 --button-focus: var(--color-focus-on-dark);
}
:is(.home-hero .home-button--secondary, .site-closing-cta__button--secondary,
 .internal-contact-button--secondary, .setup-support-banner__actions .button,
 .blog-button--secondary) {
 --button-border: var(--button-dark-text);
 --button-foreground: var(--button-dark-text);
 --button-hover-background: var(--button-dark-text);
 --button-hover-border: var(--button-dark-text);
 --button-hover-foreground: var(--button-dark-inverse-text);
}
html:root body :is(.site-header__cta,
 .home-button,
 .home-reference-subscribe,
 .comparison-card__cta,
 .home-stream-smarter__cta,
 .pricing-card__button,
 .pricing-trial-panel__button,
 .pricing-help__cta,
 .pricing-reference__button,
 .site-closing-cta__button,
 .internal-contact-button,
 .setup-support__button,
 .iptvdock-setup .setup-hero__actions .button,
 .iptvdock-setup .setup-support-banner__actions .button,
 .blog-button,
 .blog-search button,
 .internal-device-guidance > .button,
 .internal-empty-state .button,
 .theme-button:not(.theme-button--text)):hover {
 background: var(--button-hover-background, var(--button-primary-hover));
 border-color: var(--button-hover-border, var(--button-primary-hover));
 color: var(--button-hover-foreground, var(--button-primary-hover-text));
 box-shadow: none;
 transform: none;
}
html:root body :is(.site-header__cta,
 .home-button,
 .home-reference-subscribe,
 .comparison-card__cta,
 .home-stream-smarter__cta,
 .pricing-card__button,
 .pricing-trial-panel__button,
 .pricing-help__cta,
 .pricing-reference__button,
 .site-closing-cta__button,
 .internal-contact-button,
 .setup-support__button,
 .iptvdock-setup .setup-hero__actions .button,
 .iptvdock-setup .setup-support-banner__actions .button,
 .blog-button,
 .blog-search button,
 .internal-device-guidance > .button,
 .internal-empty-state .button,
 .theme-button:not(.theme-button--text)):focus-visible {
 outline: var(--button-focus-width) solid var(--button-focus, var(--color-focus));
 outline-offset: var(--button-focus-offset);
 background: var(--button-background, var(--button-primary-background));
 border-color: var(--button-border, var(--button-primary-background));
 color: var(--button-foreground, var(--button-primary-text));
 box-shadow: none;
 transform: none;
}
html:root body :is(.site-header__cta,
 .home-button,
 .home-reference-subscribe,
 .comparison-card__cta,
 .home-stream-smarter__cta,
 .pricing-card__button,
 .pricing-trial-panel__button,
 .pricing-help__cta,
 .pricing-reference__button,
 .site-closing-cta__button,
 .internal-contact-button,
 .setup-support__button,
 .iptvdock-setup .setup-hero__actions .button,
 .iptvdock-setup .setup-support-banner__actions .button,
 .blog-button,
 .blog-search button,
 .internal-device-guidance > .button,
 .internal-empty-state .button,
 .theme-button:not(.theme-button--text)):active:not(:disabled):not([aria-disabled="true"]) { filter: none; transform: none; box-shadow: inset 0 0 0 1px currentColor; }
html:root body :is(.site-header__cta,
 .home-button,
 .home-reference-subscribe,
 .comparison-card__cta,
 .home-stream-smarter__cta,
 .pricing-card__button,
 .pricing-trial-panel__button,
 .pricing-help__cta,
 .pricing-reference__button,
 .site-closing-cta__button,
 .internal-contact-button,
 .setup-support__button,
 .iptvdock-setup .setup-hero__actions .button,
 .iptvdock-setup .setup-support-banner__actions .button,
 .blog-button,
 .blog-search button,
 .internal-device-guidance > .button,
 .internal-empty-state .button,
 .theme-button:not(.theme-button--text)):is(:disabled, [aria-disabled="true"]) { opacity: .6; pointer-events: none; cursor: not-allowed; filter: none; }
/* Lightweight actions remain text, including links inside device cards. */
html:root body :is(.theme-button--text, .internal-text-link, .home-text-link, .blog-text-link, .pricing-reference__support-link, .iptvdock-setup .setup-device-card__action a) {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 padding: 0;
 border: 0;
 border-radius: 0;
 background: transparent;
 color: var(--button-foreground, var(--button-outline-text));
 font-size: 13px;
 font-weight: var(--button-profile-weight);
 line-height: 1.4;
 text-decoration: none;
 box-shadow: none;
}
html:root body :is(.theme-button--text, .internal-text-link, .home-text-link, .blog-text-link, .pricing-reference__support-link, .iptvdock-setup .setup-device-card__action a):hover { color: var(--button-hover-foreground, var(--button-outline-hover-text)); text-decoration: underline; text-underline-offset: .2em; background: transparent; transform: none; }
html:root body :is(.theme-button--text, .internal-text-link, .home-text-link, .blog-text-link, .pricing-reference__support-link, .iptvdock-setup .setup-device-card__action a):focus-visible { outline: var(--button-focus-width) solid var(--button-focus, var(--color-focus)); outline-offset: var(--button-focus-offset); }
html:root body :is(.theme-button--text, .internal-text-link, .home-text-link, .blog-text-link, .pricing-reference__support-link, .iptvdock-setup .setup-device-card__action a) .iptvdock-icon { width: 1em; height: 1em; margin: 0; color: inherit; transform: none; }
html:root body :is(.theme-button--text, .internal-text-link, .home-text-link, .blog-text-link, .pricing-reference__support-link, .iptvdock-setup .setup-device-card__action a) > span { color: inherit; transform: none; transition: none; }
/* Keep the existing white text links on dark feature/device sections. */
:is(.internal-text-link--light, .features-viewing-card--quality .internal-text-link) {
 --button-foreground: var(--button-dark-text);
 --button-hover-foreground: var(--button-dark-text);
 --button-focus: var(--color-focus-on-dark);
}
@media (prefers-reduced-motion: reduce) {
 html:root body :is(.site-header__cta,
 .home-button,
 .home-reference-subscribe,
 .comparison-card__cta,
 .home-stream-smarter__cta,
 .pricing-card__button,
 .pricing-trial-panel__button,
 .pricing-help__cta,
 .pricing-reference__button,
 .site-closing-cta__button,
 .internal-contact-button,
 .setup-support__button,
 .iptvdock-setup .setup-hero__actions .button,
 .iptvdock-setup .setup-support-banner__actions .button,
 .blog-button,
 .blog-search button,
 .internal-device-guidance > .button,
 .internal-empty-state .button,
 .theme-button:not(.theme-button--text)) { transition: none; }
}
