Add BunnyCDN integration, on-air website badge, publish script fixes
- On-air toggle uploads status.json to BunnyCDN + purges cache, website polls it every 15s to show live ON AIR / OFF AIR badge - Publish script downloads Castopod's copy of audio for CDN upload (byte-exact match), removes broken slug fallback, syncs all episode media to CDN after publishing - Fix f-string syntax error in publish_episode.py (Python <3.12) - Enable CORS on BunnyCDN pull zone for json files - CDN URLs for website OG images, stem recorder bug fixes, LLM token budget tweaks, session context in CLAUDE.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,75 @@ a:hover {
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
/* On-Air Badge */
|
||||
.on-air-badge {
|
||||
display: none;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.5rem;
|
||||
background: var(--accent-red);
|
||||
color: #fff;
|
||||
padding: 0.4rem 1.2rem;
|
||||
border-radius: 50px;
|
||||
font-size: 0.85rem;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
animation: on-air-glow 2s ease-in-out infinite;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.on-air-badge.visible {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.on-air-dot {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 50%;
|
||||
background: #fff;
|
||||
animation: on-air-blink 1s step-end infinite;
|
||||
}
|
||||
|
||||
@keyframes on-air-glow {
|
||||
0%, 100% { box-shadow: 0 0 8px rgba(204, 34, 34, 0.5); }
|
||||
50% { box-shadow: 0 0 20px rgba(204, 34, 34, 0.8); }
|
||||
}
|
||||
|
||||
@keyframes on-air-blink {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.3; }
|
||||
}
|
||||
|
||||
/* Off-Air Badge */
|
||||
.off-air-badge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #444;
|
||||
color: var(--text-muted);
|
||||
padding: 0.35rem 1.1rem;
|
||||
border-radius: 50px;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.off-air-badge.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.phone.live .phone-number {
|
||||
color: var(--accent-red);
|
||||
text-shadow: 0 0 16px rgba(204, 34, 34, 0.35);
|
||||
}
|
||||
|
||||
.phone.live .phone-label {
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
/* Subscribe buttons */
|
||||
.subscribe-row {
|
||||
display: flex;
|
||||
|
||||
Reference in New Issue
Block a user