diff --git a/packages/html/src/define/base.css b/packages/html/src/define/base.css
new file mode 100644
index 00000000..52f880c7
--- /dev/null
+++ b/packages/html/src/define/base.css
@@ -0,0 +1,25 @@
+video-player {
+ display: contents;
+}
+
+video-player video,
+video-player hls-video,
+video-player simple-hls-video {
+ display: block;
+ width: 100%;
+ height: 100%;
+}
+
+video-player video::-webkit-media-text-track-container {
+ transition: transform var(--media-caption-track-duration, 150ms) ease-out;
+ transition-delay: var(--media-caption-track-delay, 600ms);
+ transform: translateY(var(--media-caption-track-y, 0)) scale(0.98);
+ z-index: var(--media-caption-track-z, 1);
+ font-family: inherit;
+}
+
+@media (prefers-reduced-motion: reduce) {
+ video-player video::-webkit-media-text-track-container {
+ transition-duration: 50ms;
+ }
+}
diff --git a/packages/html/src/define/skin-mixin.ts b/packages/html/src/define/skin-mixin.ts
index 46835daa..81614dd6 100644
--- a/packages/html/src/define/skin-mixin.ts
+++ b/packages/html/src/define/skin-mixin.ts
@@ -1,37 +1,14 @@
import type { ReactiveElement } from '@videojs/element';
import type { Constructor } from '@videojs/utils/types';
+import styles from './base.css?inline';
-/**
- * Light DOM stylesheet that bridges CSS custom properties set by skins
- * to native WebKit text track pseudo-elements on the slotted `