| 1 | /* ============================================================
|
|---|
| 2 | * embed.css — eigen, in-huisstijl media-embeds (embed-player.js)
|
|---|
| 3 | * YouTube/SoundCloud = volledig eigen controls; Spotify = onze frame + hun UI.
|
|---|
| 4 | * Gebruikt de site-tokens (--paper/--ink/--accent/--rule/--radius) → past zich
|
|---|
| 5 | * automatisch aan elk thema (light/dark/varianten) aan.
|
|---|
| 6 | * ============================================================ */
|
|---|
| 7 |
|
|---|
| 8 | .folio-embed.pcms-embed-card {
|
|---|
| 9 | margin: 2rem 0;
|
|---|
| 10 | border: 1px solid var(--rule, #e8e2d5);
|
|---|
| 11 | border-radius: var(--radius, 8px);
|
|---|
| 12 | background: var(--paper-2, #f2ede0);
|
|---|
| 13 | overflow: hidden;
|
|---|
| 14 | position: relative;
|
|---|
| 15 | }
|
|---|
| 16 |
|
|---|
| 17 | /* Placeholder vóór embed-player.js de kaart opbouwt (of als JS uitstaat). */
|
|---|
| 18 | .pcms-embed-card.pcms-embed-loading {
|
|---|
| 19 | min-height: 64px;
|
|---|
| 20 | }
|
|---|
| 21 | /* Fallback-tekst zolang JS de kaart nog niet heeft opgebouwd (of als JS uitstaat).
|
|---|
| 22 | * buildCard() haalt .pcms-embed-loading weg → deze ::after verdwijnt vanzelf. */
|
|---|
| 23 | .pcms-embed-card.pcms-embed-loading::after {
|
|---|
| 24 | content: "Speler laden\2026";
|
|---|
| 25 | display: block;
|
|---|
| 26 | padding: 1.25rem 1.5rem;
|
|---|
| 27 | color: var(--ink-faint, #a8a29e);
|
|---|
| 28 | font-size: .85rem;
|
|---|
| 29 | font-family: var(--font-mono, monospace);
|
|---|
| 30 | }
|
|---|
| 31 |
|
|---|
| 32 | /* ---- Video-stage (YouTube): 16:9 ---- */
|
|---|
| 33 | .pcms-embed-stage {
|
|---|
| 34 | position: relative;
|
|---|
| 35 | width: 100%;
|
|---|
| 36 | aspect-ratio: 16 / 9;
|
|---|
| 37 | background: #000;
|
|---|
| 38 | }
|
|---|
| 39 | .pcms-embed-stage .pcms-embed-mount,
|
|---|
| 40 | .pcms-embed-stage iframe {
|
|---|
| 41 | position: absolute;
|
|---|
| 42 | inset: 0;
|
|---|
| 43 | width: 100% !important;
|
|---|
| 44 | height: 100% !important;
|
|---|
| 45 | border: 0;
|
|---|
| 46 | }
|
|---|
| 47 | .pcms-embed-poster {
|
|---|
| 48 | position: absolute;
|
|---|
| 49 | inset: 0;
|
|---|
| 50 | width: 100%;
|
|---|
| 51 | height: 100%;
|
|---|
| 52 | border: 0;
|
|---|
| 53 | padding: 0;
|
|---|
| 54 | cursor: pointer;
|
|---|
| 55 | background-size: cover;
|
|---|
| 56 | background-position: center;
|
|---|
| 57 | background-color: #000;
|
|---|
| 58 | display: grid;
|
|---|
| 59 | place-items: center;
|
|---|
| 60 | transition: opacity var(--transition, 180ms);
|
|---|
| 61 | }
|
|---|
| 62 | .pcms-embed-card.is-mounted .pcms-embed-poster { display: none; }
|
|---|
| 63 |
|
|---|
| 64 | /* ---- Audio-layout (SoundCloud / Spotify-facade) ---- */
|
|---|
| 65 | .pcms-embed-audio {
|
|---|
| 66 | display: flex;
|
|---|
| 67 | align-items: stretch;
|
|---|
| 68 | gap: 0;
|
|---|
| 69 | min-height: 96px;
|
|---|
| 70 | }
|
|---|
| 71 | .pcms-embed-art {
|
|---|
| 72 | flex: 0 0 96px;
|
|---|
| 73 | width: 96px;
|
|---|
| 74 | height: 96px;
|
|---|
| 75 | border: 0;
|
|---|
| 76 | padding: 0;
|
|---|
| 77 | cursor: pointer;
|
|---|
| 78 | background: var(--paper, #faf8f3) center / cover no-repeat;
|
|---|
| 79 | display: grid;
|
|---|
| 80 | place-items: center;
|
|---|
| 81 | color: var(--ink, #1a1a1a);
|
|---|
| 82 | }
|
|---|
| 83 | .pcms-embed-art.has-art .pcms-embed-bigplay {
|
|---|
| 84 | background: rgba(0,0,0,.45);
|
|---|
| 85 | border-radius: 50%;
|
|---|
| 86 | }
|
|---|
| 87 | .pcms-embed-info {
|
|---|
| 88 | flex: 1 1 auto;
|
|---|
| 89 | min-width: 0;
|
|---|
| 90 | display: flex;
|
|---|
| 91 | flex-direction: column;
|
|---|
| 92 | justify-content: center;
|
|---|
| 93 | gap: .2rem;
|
|---|
| 94 | padding: .75rem 1rem;
|
|---|
| 95 | }
|
|---|
| 96 | .pcms-embed-info .pcms-embed-title {
|
|---|
| 97 | font-weight: 600;
|
|---|
| 98 | font-size: .95rem;
|
|---|
| 99 | color: var(--ink, #1a1a1a);
|
|---|
| 100 | overflow: hidden;
|
|---|
| 101 | text-overflow: ellipsis;
|
|---|
| 102 | white-space: nowrap;
|
|---|
| 103 | }
|
|---|
| 104 | .pcms-embed-info .pcms-embed-sub {
|
|---|
| 105 | font-size: .8rem;
|
|---|
| 106 | color: var(--ink-muted, #6b6560);
|
|---|
| 107 | overflow: hidden;
|
|---|
| 108 | text-overflow: ellipsis;
|
|---|
| 109 | white-space: nowrap;
|
|---|
| 110 | }
|
|---|
| 111 |
|
|---|
| 112 | /* SoundCloud-iframe: functioneel maar onzichtbaar (we sturen via de Widget-API
|
|---|
| 113 | * en tonen onze eigen balk). Off-screen i.p.v. display:none zodat de widget
|
|---|
| 114 | * betrouwbaar initialiseert + audio blijft spelen. */
|
|---|
| 115 | .pcms-embed-card--soundcloud .pcms-embed-mount {
|
|---|
| 116 | position: absolute;
|
|---|
| 117 | left: -99999px;
|
|---|
| 118 | top: 0;
|
|---|
| 119 | width: 320px;
|
|---|
| 120 | height: 60px;
|
|---|
| 121 | opacity: 0;
|
|---|
| 122 | pointer-events: none;
|
|---|
| 123 | }
|
|---|
| 124 | /* Verborgen YouTube-audio-speler ván de site-audiospeler (onderbalk). Off-screen
|
|---|
| 125 | * met echte grootte zodat de browser 'm niet pauzeert; alleen het geluid telt. */
|
|---|
| 126 | #pcms-yt-host {
|
|---|
| 127 | position: absolute;
|
|---|
| 128 | left: -99999px;
|
|---|
| 129 | top: 0;
|
|---|
| 130 | width: 320px;
|
|---|
| 131 | height: 180px;
|
|---|
| 132 | opacity: 0;
|
|---|
| 133 | pointer-events: none;
|
|---|
| 134 | }
|
|---|
| 135 | /* Audio-only embed-kaart die nu via de onderbalk speelt = launcher-hint. */
|
|---|
| 136 | .pcms-embed-elsewhere { opacity: .9; }
|
|---|
| 137 | .pcms-embed-elsewhere .pcms-embed-title::after {
|
|---|
| 138 | content: ' — speelt in de speler ↓';
|
|---|
| 139 | font-weight: normal;
|
|---|
| 140 | opacity: .6;
|
|---|
| 141 | font-size: .85em;
|
|---|
| 142 | }
|
|---|
| 143 |
|
|---|
| 144 | /* Audio-only YouTube: de YT-speler draait verborgen (off-screen) maar moet een
|
|---|
| 145 | * echte grootte houden, anders pauzeert de browser 'm. Alleen het geluid telt. */
|
|---|
| 146 | .pcms-embed-card--youtube.pcms-embed-audio-mode .pcms-embed-mount {
|
|---|
| 147 | position: absolute;
|
|---|
| 148 | left: -99999px;
|
|---|
| 149 | top: 0;
|
|---|
| 150 | width: 320px;
|
|---|
| 151 | height: 180px;
|
|---|
| 152 | opacity: 0;
|
|---|
| 153 | pointer-events: none;
|
|---|
| 154 | }
|
|---|
| 155 |
|
|---|
| 156 | /* Spotify: hun iframe IS de speler → tonen. Onze facade (art+info) verdwijnt
|
|---|
| 157 | * zodra de controller gemount is. */
|
|---|
| 158 | .pcms-embed-card--spotify .pcms-embed-mount { display: block; width: 100%; }
|
|---|
| 159 | .pcms-embed-card--spotify .pcms-embed-mount iframe {
|
|---|
| 160 | width: 100% !important;
|
|---|
| 161 | border: 0;
|
|---|
| 162 | display: block;
|
|---|
| 163 | }
|
|---|
| 164 | .pcms-embed-card--spotify.is-mounted .pcms-embed-art,
|
|---|
| 165 | .pcms-embed-card--spotify.is-mounted .pcms-embed-info { display: none; }
|
|---|
| 166 | .pcms-embed-card--spotify:not(.is-mounted) .pcms-embed-mount { display: none; }
|
|---|
| 167 |
|
|---|
| 168 | /* Spotify in een nette witte box (Robin 2026-06-15): witte rand + rounded +
|
|---|
| 169 | * schaduw. Hogere specificity (.folio-embed.pcms-embed-card--spotify) zodat dit
|
|---|
| 170 | * de generieke .folio-embed.pcms-embed-card-basis (gelijke specificity) wint —
|
|---|
| 171 | * staat ook later in het bestand. */
|
|---|
| 172 | .folio-embed.pcms-embed-card--spotify {
|
|---|
| 173 | border: 3px solid #ffffff; /* witte rand blijft */
|
|---|
| 174 | border-radius: 16px;
|
|---|
| 175 | box-shadow: 0 4px 18px rgba(0, 0, 0, .18);
|
|---|
| 176 | /* bg + overflow:hidden erven van de basis-kaart → de binnenste box krijgt
|
|---|
| 177 | * weer de thema-kleur (var(--paper-2)) i.p.v. wit; facade-tekst gebruikt de
|
|---|
| 178 | * gewone thema-tokens en blijft dus leesbaar. */
|
|---|
| 179 | }
|
|---|
| 180 |
|
|---|
| 181 | /* ---- Grote play-knop (poster/art) ---- */
|
|---|
| 182 | .pcms-embed-bigplay {
|
|---|
| 183 | width: 64px;
|
|---|
| 184 | height: 64px;
|
|---|
| 185 | display: grid;
|
|---|
| 186 | place-items: center;
|
|---|
| 187 | border-radius: 50%;
|
|---|
| 188 | background: var(--accent, #c2410c);
|
|---|
| 189 | color: #fff;
|
|---|
| 190 | box-shadow: 0 4px 16px rgba(0,0,0,.35);
|
|---|
| 191 | transition: transform var(--transition, 180ms);
|
|---|
| 192 | }
|
|---|
| 193 | .pcms-embed-art .pcms-embed-bigplay { width: 44px; height: 44px; }
|
|---|
| 194 | .pcms-embed-bigplay svg { width: 42%; height: 42%; }
|
|---|
| 195 | .pcms-embed-poster:hover .pcms-embed-bigplay,
|
|---|
| 196 | .pcms-embed-art:hover .pcms-embed-bigplay { transform: scale(1.08); }
|
|---|
| 197 |
|
|---|
| 198 | /* ---- Onze controlebalk (YouTube/SoundCloud) ---- */
|
|---|
| 199 | .pcms-embed-bar {
|
|---|
| 200 | display: flex;
|
|---|
| 201 | align-items: center;
|
|---|
| 202 | gap: .65rem;
|
|---|
| 203 | padding: .55rem .75rem;
|
|---|
| 204 | border-top: 1px solid var(--rule, #e8e2d5);
|
|---|
| 205 | background: var(--paper, #faf8f3);
|
|---|
| 206 | }
|
|---|
| 207 | .pcms-embed-pp {
|
|---|
| 208 | flex: 0 0 auto;
|
|---|
| 209 | width: 38px;
|
|---|
| 210 | height: 38px;
|
|---|
| 211 | border: 0;
|
|---|
| 212 | border-radius: 50%;
|
|---|
| 213 | cursor: pointer;
|
|---|
| 214 | background: var(--accent, #c2410c);
|
|---|
| 215 | color: #fff;
|
|---|
| 216 | display: grid;
|
|---|
| 217 | place-items: center;
|
|---|
| 218 | }
|
|---|
| 219 | .pcms-embed-pp svg { width: 18px; height: 18px; }
|
|---|
| 220 | .pcms-embed-cur, .pcms-embed-dur {
|
|---|
| 221 | flex: 0 0 auto;
|
|---|
| 222 | font-size: .75rem;
|
|---|
| 223 | color: var(--ink-muted, #6b6560);
|
|---|
| 224 | font-variant-numeric: tabular-nums;
|
|---|
| 225 | min-width: 2.6em;
|
|---|
| 226 | text-align: center;
|
|---|
| 227 | }
|
|---|
| 228 | /* Volume: mute-knop + compacte schuif (alleen YT/SC — eigen controls). */
|
|---|
| 229 | .pcms-embed-mute {
|
|---|
| 230 | flex: 0 0 auto;
|
|---|
| 231 | width: 28px; height: 28px;
|
|---|
| 232 | border: 0; background: none; padding: 0;
|
|---|
| 233 | color: var(--ink-muted, #6b6560);
|
|---|
| 234 | cursor: pointer;
|
|---|
| 235 | display: grid; place-items: center;
|
|---|
| 236 | }
|
|---|
| 237 | .pcms-embed-mute svg { width: 18px; height: 18px; }
|
|---|
| 238 | .pcms-embed-vol {
|
|---|
| 239 | flex: 0 0 auto;
|
|---|
| 240 | width: 64px;
|
|---|
| 241 | cursor: pointer;
|
|---|
| 242 | accent-color: var(--accent, #c2410c);
|
|---|
| 243 | }
|
|---|
| 244 | @media (max-width: 480px) {
|
|---|
| 245 | /* Smal scherm: schuif weg, alleen de mute-knop houden (ruimte). */
|
|---|
| 246 | .pcms-embed-vol { display: none; }
|
|---|
| 247 | }
|
|---|
| 248 | .pcms-embed-seek {
|
|---|
| 249 | position: relative;
|
|---|
| 250 | flex: 1 1 auto;
|
|---|
| 251 | height: 16px;
|
|---|
| 252 | cursor: pointer;
|
|---|
| 253 | }
|
|---|
| 254 | .pcms-embed-seek::before {
|
|---|
| 255 | content: "";
|
|---|
| 256 | position: absolute;
|
|---|
| 257 | left: 0; right: 0; top: 50%;
|
|---|
| 258 | transform: translateY(-50%);
|
|---|
| 259 | height: 4px;
|
|---|
| 260 | border-radius: 2px;
|
|---|
| 261 | background: var(--rule-2, #d4ccb8);
|
|---|
| 262 | }
|
|---|
| 263 | .pcms-embed-seek-fill {
|
|---|
| 264 | position: absolute;
|
|---|
| 265 | left: 0; top: 50%;
|
|---|
| 266 | transform: translateY(-50%);
|
|---|
| 267 | height: 4px;
|
|---|
| 268 | width: 0%;
|
|---|
| 269 | border-radius: 2px;
|
|---|
| 270 | background: var(--accent, #c2410c);
|
|---|
| 271 | pointer-events: none;
|
|---|
| 272 | z-index: 1;
|
|---|
| 273 | }
|
|---|
| 274 | .pcms-embed-badge {
|
|---|
| 275 | flex: 0 0 auto;
|
|---|
| 276 | font-size: .68rem;
|
|---|
| 277 | letter-spacing: .04em;
|
|---|
| 278 | text-transform: uppercase;
|
|---|
| 279 | color: var(--ink-faint, #a8a29e);
|
|---|
| 280 | text-decoration: none;
|
|---|
| 281 | }
|
|---|
| 282 | .pcms-embed-badge:hover { color: var(--accent, #c2410c); }
|
|---|
| 283 |
|
|---|
| 284 | /* Provider-accent op de badge */
|
|---|
| 285 | .pcms-embed-card--youtube .pcms-embed-badge { color: #ff0033; }
|
|---|
| 286 | .pcms-embed-card--soundcloud .pcms-embed-badge { color: #ff5500; }
|
|---|
| 287 |
|
|---|
| 288 | /* ---- Spotify-frame-badge (geen eigen balk) ---- */
|
|---|
| 289 | .pcms-embed-frame-badge {
|
|---|
| 290 | padding: .4rem .75rem;
|
|---|
| 291 | border-top: 1px solid var(--rule, #e8e2d5);
|
|---|
| 292 | background: var(--paper, #faf8f3);
|
|---|
| 293 | font-size: .68rem;
|
|---|
| 294 | letter-spacing: .04em;
|
|---|
| 295 | text-transform: uppercase;
|
|---|
| 296 | }
|
|---|
| 297 | .pcms-embed-frame-badge a { color: #1db954; text-decoration: none; }
|
|---|
| 298 | .pcms-embed-frame-badge a:hover { text-decoration: underline; }
|
|---|
| 299 | .pcms-embed-card--spotify.is-mounted .pcms-embed-frame-badge { display: none; }
|
|---|
| 300 |
|
|---|
| 301 | /* ---- Busy / error ---- */
|
|---|
| 302 | .pcms-embed-card.pcms-embed-busy { cursor: progress; }
|
|---|
| 303 | .pcms-embed-card.pcms-embed-error .pcms-embed-sub { color: #c0392b; }
|
|---|
| 304 |
|
|---|
| 305 | .pcms-embed-bigplay,
|
|---|
| 306 | .pcms-embed-pp,
|
|---|
| 307 | .pcms-embed-poster { -webkit-tap-highlight-color: transparent; }
|
|---|