.beecast-player {
--beecast-color-surface: #121417;
--beecast-color-surface-raised: rgba(255, 255, 255, 0.04);
--beecast-color-text: #cdd3dc;
--beecast-color-text-muted: rgba(205, 211, 220, 0.8);
--beecast-color-accent: #6a9ded;
--beecast-color-focus: rgba(88, 166, 255, 0.5);
--beecast-color-marker: #d5b45e;
--beecast-color-live: #78bd65;
--beecast-color-error: #e05f65;
--beecast-control-height: 44px;
--beecast-radius: 4px;
--beecast-font-ui: 13px/1.2 ui-sans-serif, system-ui, sans-serif;
--beecast-font-terminal: 13px/1.25 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
--sp-bg: var(--beecast-color-surface);
--sp-fg: var(--beecast-color-text);
--sp-c0: #1c1f24; --sp-c1: #e05f65; --sp-c2: #78bd65; --sp-c3: #d5b45e;
--sp-c4: #6a9ded; --sp-c5: #bd7bd8; --sp-c6: #55b8c2; --sp-c7: #b8bfc9;
--sp-c8: #596273; --sp-c9: #ff8188; --sp-c10: #98d989; --sp-c11: #f0d182;
--sp-c12: #8fb7ff; --sp-c13: #d99df0; --sp-c14: #7fd6df; --sp-c15: #eef1f5;
display: flex;
flex-direction: column;
min-height: 0;
box-sizing: border-box;
background: var(--sp-bg);
color: var(--sp-fg);
border-radius: var(--beecast-radius);
outline: none;
overflow: hidden;
}
.beecast-player[data-theme="light"] {
--beecast-color-surface: #f4f5f7;
--beecast-color-surface-raised: rgba(0, 0, 0, 0.04);
--beecast-color-text: #1c1f24;
--beecast-color-text-muted: rgba(28, 31, 36, 0.75);
--beecast-color-accent: #3b6fd4;
--beecast-color-focus: rgba(59, 111, 212, 0.45);
--beecast-color-marker: #b8860b;
--beecast-color-live: #3d8b40;
--sp-bg: #f4f5f7;
--sp-fg: #1c1f24;
}
@media (prefers-color-scheme: light) {
.beecast-player[data-theme="system"] {
--beecast-color-surface: #f4f5f7;
--beecast-color-surface-raised: rgba(0, 0, 0, 0.04);
--beecast-color-text: #1c1f24;
--beecast-color-text-muted: rgba(28, 31, 36, 0.75);
--beecast-color-accent: #3b6fd4;
--beecast-color-focus: rgba(59, 111, 212, 0.45);
--beecast-color-marker: #b8860b;
--beecast-color-live: #3d8b40;
--sp-bg: #f4f5f7;
--sp-fg: #1c1f24;
}
}
.beecast-player:focus-visible { box-shadow: 0 0 0 2px var(--beecast-color-focus); }
.beecast-player.arrival-flash { animation: beecast-arrival 900ms ease-out; }
@keyframes beecast-arrival { from { box-shadow: 0 0 0 3px var(--beecast-color-focus); } to { box-shadow: none; } }
.sp-stage {
position: relative;
flex: 1 1 auto;
min-height: 0;
min-width: 0;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.beecast-player:fullscreen,
:fullscreen .beecast-player {
width: 100%; height: 100%; border-radius: 0;
}
.beecast-player:fullscreen .sp-bar,
:fullscreen .beecast-player .sp-bar {
position: relative;
z-index: 20;
box-sizing: border-box;
padding-right: 0.35rem;
}
.beecast-player [hidden] { display: none !important; }
.sp-screen-box { overflow: hidden; position: relative; flex: 0 0 auto; }
.sp-overlay {
position: absolute; inset: 0; z-index: 3;
display: flex; align-items: center; justify-content: center;
background: rgba(0, 0, 0, 0.42);
cursor: pointer;
}
.sp-overlay:focus-visible {
outline: 2px solid var(--beecast-color-accent);
outline-offset: -4px;
}
.sp-bigplay {
margin: 0;
display: flex;
align-items: center;
justify-content: center;
width: 7rem;
height: 7rem;
color: #fff;
opacity: 0.92;
filter: drop-shadow(0 0 1px rgba(0, 0, 0, 0.9)) drop-shadow(0 4px 18px rgba(0, 0, 0, 0.65));
transition: opacity 0.15s, transform 0.15s;
user-select: none;
}
.sp-bigplay-icon {
display: block;
width: 100%;
height: 100%;
}
.sp-overlay:hover .sp-bigplay,
.sp-overlay:focus-visible .sp-bigplay {
opacity: 1;
transform: scale(1.06);
}
@media (prefers-reduced-motion: reduce) {
.beecast-player.arrival-flash { animation: none; outline: 2px solid var(--beecast-color-accent); }
.sp-toast { transition: none; }
.sp-bigplay { transition: none; }
.sp-overlay:hover .sp-bigplay,
.sp-overlay:focus-visible .sp-bigplay { transform: none; }
}
.sp-a11y {
position: absolute;
width: 1px; height: 1px;
padding: 0; margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: pre;
border: 0;
}
.sp-chapters {
position: absolute; top: 0; right: 0; bottom: 0; z-index: 4;
width: min(320px, 60%);
overflow-y: auto;
background: rgba(9, 11, 15, 0.92);
border-left: 1px solid rgba(255, 255, 255, 0.14);
font: 12px/1.45 ui-sans-serif, system-ui, sans-serif;
padding: 8px;
display: flex;
flex-direction: column;
gap: 6px;
box-sizing: border-box;
pointer-events: auto;
}
.beecast-player.sp-chapters-dock .sp-stage {
flex-direction: row;
align-items: center;
justify-content: flex-start;
}
.beecast-player.sp-chapters-dock .sp-screen-box {
flex: 1 1 auto;
min-width: 0;
width: auto;
}
.beecast-player.sp-chapters-dock .sp-chapters {
position: static;
flex: 0 0 min(280px, 32%);
width: min(280px, 32%);
max-width: 320px;
align-self: stretch;
z-index: 1;
}
.sp-chap {
display: flex; flex-direction: column; justify-content: center;
gap: 0.15rem; width: 100%; text-align: left;
font: inherit; color: var(--sp-fg);
background: #0d1117; border: 1px solid #2a3140;
border-left: 3px solid #2a3140; border-radius: 6px;
cursor: pointer; padding: 0.45rem 0.65rem;
box-sizing: border-box;
pointer-events: auto;
}
.sp-chap:hover { border-color: #3a4558; background: #161b22; }
.sp-chap:focus-visible {
outline: 2px solid var(--beecast-color-accent);
outline-offset: 1px;
}
.sp-chap-state {
display: flex; align-items: center; gap: 0.35rem;
font-size: 0.72rem; font-weight: 600;
text-transform: uppercase; letter-spacing: 0.04em;
color: var(--beecast-color-text-muted);
}
.sp-chap-id {
font-weight: 600; font-size: 0.95rem;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.sp-chap-meta {
font-size: 0.75rem; color: var(--beecast-color-text-muted);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
font-variant-numeric: tabular-nums;
}
.sp-chap-on {
border-left-color: #3fb950;
background: #161b22;
}
.sp-chap-on .sp-chap-state,
.sp-chap-on .sp-chap-id { color: #3fb950; }
.sp-chap-ann .sp-chap-id { font-style: italic; opacity: 0.95; }
.sp-toast {
position: absolute; left: 50%; bottom: 52px; z-index: 6;
transform: translateX(-50%) translateY(0.6rem);
display: flex; flex-direction: column; justify-content: center;
gap: 0.15rem;
max-width: min(22rem, calc(100% - 24px));
min-width: min(12rem, calc(100% - 24px));
padding: 0.45rem 0.75rem;
border-radius: 6px;
background: #0d1117;
border: 1px solid #2a3140;
border-left: 3px solid #3fb950;
color: var(--sp-fg);
font: 0.85rem/1.25 ui-sans-serif, system-ui, sans-serif;
text-align: left;
box-shadow: 0 10px 28px rgba(0, 0, 0, 0.4);
opacity: 0; pointer-events: none;
transition: opacity 0.22s ease, transform 0.22s ease;
box-sizing: border-box;
}
.sp-toast-show { opacity: 1; transform: translateX(-50%) translateY(0); }
.sp-toast-state {
display: flex; align-items: center; gap: 0.35rem;
font-size: 0.72rem; font-weight: 600;
text-transform: uppercase; letter-spacing: 0.04em;
color: #3fb950;
}
.sp-toast-id {
font-weight: 600; font-size: 0.95rem; color: #3fb950;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.sp-toast-meta {
font-size: 0.75rem; color: var(--beecast-color-text-muted);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
font-variant-numeric: tabular-nums;
}
.sp-screen {
margin: 0;
padding: 4px 6px;
font: var(--beecast-font-terminal);
white-space: pre;
transform-origin: top left;
width: max-content;
}
.sp-screen span { display: inline-block; }
.sp-probe { visibility: hidden; position: absolute; }
.sp-b { font-weight: 700; }
.sp-d { opacity: 0.6; }
.sp-i { font-style: italic; }
.sp-u { text-decoration: underline; }
.sp-s { text-decoration: line-through; }
.sp-u.sp-s { text-decoration: underline line-through; }
.sp-cur { outline: 1px solid var(--sp-fg); outline-offset: -1px; }
.sp-bar {
display: flex;
align-items: center;
flex: 0 0 auto;
flex-wrap: nowrap;
gap: 10px;
width: 100%;
min-height: var(--beecast-control-height);
padding: 10px 12px;
background: var(--beecast-color-surface-raised);
border-top: 1px solid rgba(255, 255, 255, 0.08);
font: var(--beecast-font-ui);
user-select: none;
box-sizing: border-box;
position: relative;
z-index: 6;
overflow: visible;
}
.sp-bar button {
font: inherit;
color: var(--sp-fg);
background: transparent;
border: none;
cursor: pointer;
padding: 8px 12px;
border-radius: 4px;
min-height: 36px;
min-width: 36px;
line-height: 1.2;
flex: 0 0 auto;
}
.sp-bar button:hover { color: #fff; background: rgba(255, 255, 255, 0.06); }
.sp-bar button:focus-visible {
outline: 2px solid var(--beecast-color-accent);
outline-offset: 1px;
}
.sp-play { font-size: 18px; padding: 8px 14px; min-width: 40px; }
.sp-live {
font-weight: 600;
letter-spacing: 0.02em;
color: var(--beecast-color-text-muted);
}
.sp-live.on {
color: var(--beecast-color-live);
background: rgba(120, 189, 101, 0.12);
}
.sp-live.on:hover { color: var(--beecast-color-live); background: rgba(120, 189, 101, 0.18); }
.sp-speedwrap {
position: relative;
display: inline-flex;
flex: 0 0 auto;
align-items: center;
}
.sp-speed {
min-width: 3.25em;
font-variant-numeric: tabular-nums;
font-weight: 600;
}
.sp-speedmenu {
position: absolute; bottom: calc(100% + 8px); right: 0; z-index: 30;
display: flex; flex-direction: column;
min-width: 4.5em; padding: 4px;
background: #161a20;
border: 1px solid rgba(255, 255, 255, 0.16);
border-radius: var(--beecast-radius);
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5);
}
.sp-speedopt {
text-align: center;
border-radius: 3px;
min-height: 32px;
padding: 6px 10px;
}
.sp-speedopt.sp-on {
color: var(--sp-c12);
font-weight: 700;
box-shadow: inset 0 0 0 1px var(--beecast-color-accent);
}
.sp-speedopt:hover { background: rgba(106, 157, 237, 0.18); }
.sp-speedopt:focus-visible {
outline: 2px solid var(--beecast-color-accent);
outline-offset: 0;
}
.sp-time, .sp-dur {
color: var(--beecast-color-text-muted);
min-width: 3.6em;
text-align: center;
font-variant-numeric: tabular-nums;
flex: 0 0 auto;
font-size: 13px;
}
.sp-seek {
position: relative;
flex: 1 1 auto;
min-width: 64px;
height: 10px;
border-radius: 5px;
background: rgba(255, 255, 255, 0.12);
cursor: pointer;
touch-action: none;
}
.sp-seek:focus-visible {
outline: 2px solid var(--beecast-color-accent);
outline-offset: 3px;
}
.sp-fill {
position: absolute; left: 0; top: 0; bottom: 0;
width: 0;
border-radius: 3px;
background: var(--beecast-color-accent);
pointer-events: none;
}
.beecast-player.sp-islive .sp-fill { width: 100% !important; background: var(--beecast-color-live); }
.sp-markers { position: absolute; inset: 0; pointer-events: none; }
.sp-marker {
position: absolute; top: -2px; bottom: -2px; width: 2px;
background: var(--beecast-color-marker);
pointer-events: auto;
}
.sp-marker-ann {
width: 0;
border-left: 2px dashed var(--beecast-color-marker);
background: transparent;
}
beecast-player {
display: block;
width: 100%;
height: 100%;
}
@media (max-width: 430px) {
.sp-bar { gap: 4px; padding: 6px; }
.sp-bar button { padding-left: 8px; padding-right: 8px; }
.sp-time, .sp-dur { display: none; }
.sp-seek { min-width: 40px; }
}