/* ==========================================================================
   EGW Broadcast — Audio player skin (v1.2.7)

   Loaded LAST: bc-audio-skin depends on bc-experience, which depends on
   egw-console, which depends on ephesus-broadcast-responsive. So this sheet
   comes after every other player rule.

   WHY A LAYER RATHER THAN A REWRITE
   ephesus-audio-player.css is 1,222 lines with literal colours in 97
   selectors and a parallel dark theme keyed on [data-resolved-theme="dark"].
   Rewriting it wholesale would put the highest-risk component in the theme
   through a full regression. Instead ephesus-audio-player.js resolves the
   --eap-* tokens from the site --bcx-* palette, and this file repaints the
   surfaces that were hardcoded.

   SPECIFICITY — the thing that caught me out in v1.2.6.
   broadcast-responsive.css writes its player rules as

       body .ephesus-audio-player .eap-side { … !important }          (0,2,2)

   and v1.2.6's skin wrote

       .eap-side { … !important }                                      (0,1,0)

   Two !important declarations do NOT fall back to source order — specificity
   is compared first, so the responsive sheet won and the sidebar kept its
   translucent cream. Every selector here is therefore written to match or
   exceed that shape:

       body .ephesus-audio-player                                      (0,1,1)
       body .ephesus-audio-player .eap-x                               (0,2,2)
       body .ephesus-audio-player[data-resolved-theme="dark"] .eap-x   (0,3,2)

   !important is never applied to a custom property.
   ========================================================================== */

/* ── 1. the shell ───────────────────────────────────────────────────────── */
/* v1.2.8 — :not([data-eap-admin~="surface"]). When the Audio Player Manager
   has a player background configured, that colour is the admin's decision
   and broadcast-responsive.css already paints it from --eap-player-bg-rgb.
   This layer forcing --bcx-card over the top is exactly why nothing an
   admin chose ever appeared. */
body .ephesus-audio-player:not([data-eap-admin~="surface"]){
  background:var(--bcx-card,#F1EFE9) !important;
}
body .ephesus-audio-player{
  color:var(--bcx-ink,#1A1A1A) !important;
  border:1px solid var(--bcx-line,rgba(17,17,17,.13)) !important;
  border-radius:20px !important;
  box-shadow:var(--bcx-shadow-card,0 22px 48px -30px rgba(17,17,17,.20)) !important;
}
body .ephesus-audio-player[data-resolved-theme="dark"]:not([data-eap-admin~="surface"]){
  background:var(--bcx-card,#282723) !important;
}
body .ephesus-audio-player[data-resolved-theme="dark"]{
  color:var(--bcx-ink,#F8F8F6) !important;
  box-shadow:var(--bcx-shadow-card,0 18px 40px -20px rgba(0,0,0,.55)) !important;
}

/* ── 2. bars and panels — all opaque, per the house rule ───────────────── */
body .ephesus-audio-player .eap-topbar,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-topbar{
  background:var(--bcx-stage,#F4F3ED) !important;
  border-bottom:1px solid var(--bcx-line,rgba(17,17,17,.13)) !important;
  -webkit-backdrop-filter:none !important;backdrop-filter:none !important;
}
body .ephesus-audio-player .eap-side,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-side{
  background:var(--bcx-well,#E9E7DF) !important;
  border-left:1px solid var(--bcx-line,rgba(17,17,17,.13)) !important;
  -webkit-backdrop-filter:none !important;backdrop-filter:none !important;
}
body .ephesus-audio-player .eap-side-body,
body .ephesus-audio-player .eap-tabs,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-side-body,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-tabs{
  background:transparent !important;
  border-color:var(--bcx-line,rgba(17,17,17,.13)) !important;
}
body .ephesus-audio-player .eap-viz-pop,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-viz-pop{
  background:var(--bcx-card,#F1EFE9) !important;
  border:1px solid var(--bcx-line,rgba(17,17,17,.13)) !important;
  box-shadow:var(--bcx-shadow-card,0 22px 48px -30px rgba(17,17,17,.20)) !important;
  -webkit-backdrop-filter:none !important;backdrop-filter:none !important;
}
body .ephesus-audio-player .eap-scrub-tip,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-scrub-tip{
  background:var(--bcx-ink,#1A1A1A) !important;
  color:var(--bcx-card,#F1EFE9) !important;
  border:0 !important;
}
body .ephesus-audio-player .eap-transport,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-transport{
  background:transparent !important;
  border-top-color:var(--bcx-line,rgba(17,17,17,.13)) !important;
}

/* ── 3. text that failed AA ─────────────────────────────────────────────
   rgba(0,0,0,.4) on the cream surface measured ~2.6:1. All of these are body
   text, so they take the contrast-checked muted ink. */
body .ephesus-audio-player .eap-sub,
body .ephesus-audio-player .eap-scrub-times,
body .ephesus-audio-player .eap-out-time,
body .ephesus-audio-player .eap-side-empty,
body .ephesus-audio-player .eap-kicker,
body .ephesus-audio-player .eap-pastor,
body .ephesus-audio-player .eap-description,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-sub,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-scrub-times,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-out-time,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-side-empty,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-kicker,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-pastor,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-description{
  color:var(--bcx-ink-2,#5C5C58) !important;
}
body .ephesus-audio-player .eap-title,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-title{
  color:var(--bcx-ink,#1A1A1A) !important;
}
body .ephesus-audio-player .eap-kicker-chapter,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-kicker-chapter{
  color:var(--eap-accent) !important;
}
/* the dark branding strip was near-black at 13% on a near-black surface */
body .ephesus-audio-player[data-resolved-theme="dark"]::after{
  color:var(--bcx-ink-3,#B2AEA0) !important;
}

/* ── 4. controls ────────────────────────────────────────────────────────── */
body .ephesus-audio-player .eap-iconbtn{
  color:var(--bcx-ink-2,#5C5C58) !important;
  border-radius:10px;
}
body .ephesus-audio-player .eap-iconbtn:hover,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-iconbtn:hover{
  background:var(--bcx-tint-2,rgba(17,17,17,.08)) !important;
  color:var(--bcx-ink,#1A1A1A) !important;
}
body .ephesus-audio-player .eap-iconbtn.is-on{
  background:var(--eap-accent-soft) !important;
  color:var(--eap-accent) !important;
}
body .ephesus-audio-player .eap-play{
  background:var(--eap-accent) !important;
  color:var(--eap-on-accent,#fff) !important;
  box-shadow:0 8px 22px -10px var(--eap-accent) !important;
}
body .ephesus-audio-player .eap-subscribe{
  border-color:var(--bcx-line-strong,rgba(17,17,17,.24)) !important;
  color:var(--bcx-ink,#1A1A1A) !important;
}
body .ephesus-audio-player .eap-subscribe.is-on{
  background:var(--eap-accent) !important;
  color:var(--eap-on-accent,#fff) !important;
  border-color:var(--eap-accent) !important;
}
body .ephesus-audio-player .eap-ref-dot,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-ref-dot{
  background:var(--bcx-card,#F1EFE9) !important;
  border-color:var(--eap-accent) !important;
  box-shadow:none !important;
}
body .ephesus-audio-player .eap-chapter-tick{
  background:var(--bcx-tint-5,rgba(17,17,17,.32)) !important;
}
body .ephesus-audio-player .eap-save{
  background:var(--bcx-ink,#1A1A1A) !important;
  color:var(--bcx-page,#FBFAF7) !important;
  /* v1.2.7 — was 36x36, under the 44px minimum on a coarse pointer */
  min-width:44px;min-height:44px;
}
body .ephesus-audio-player .eap-tab{
  color:var(--bcx-ink-2,#5C5C58) !important;
}
body .ephesus-audio-player .eap-tab.is-on{
  background:var(--eap-accent) !important;
  color:var(--eap-on-accent,#fff) !important;
}
/* v1.2.7 — the pill was accent text on an accent wash, which is the same
   trap the eyebrow fell into: the wash tints the background TOWARDS the text
   and eats the contrast (4.00:1 for teal, 4.49:1 for gold). Outlined instead
   of filled: on the plain card the same colours give 4.76:1 and 5.31:1. */
body .ephesus-audio-player .eap-scripture-pill,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-scripture-pill{
  background:transparent !important;
  color:var(--eap-accent) !important;
  border:1px solid color-mix(in srgb,var(--eap-accent) 45%,transparent) !important;
}
body .ephesus-audio-player .eap-side-fontctl,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-side-fontctl{
  background:var(--bcx-tint-2,rgba(17,17,17,.08)) !important;
  border-color:var(--bcx-line-strong,rgba(17,17,17,.24)) !important;
  color:var(--bcx-ink,#1A1A1A) !important;
}
body .ephesus-audio-player .eap-viz-trigger,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-viz-trigger{
  border-color:var(--bcx-line-strong,rgba(17,17,17,.24)) !important;
  color:var(--bcx-ink-2,#5C5C58) !important;
}
body .ephesus-audio-player .eap-viz-trigger[aria-expanded="true"],
body .ephesus-audio-player .eap-viz-pop-row.is-on,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-viz-trigger[aria-expanded="true"],
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-viz-pop-row.is-on{
  background:var(--eap-accent-soft) !important;
  color:var(--eap-accent) !important;
}

/* ── 4b. the waveform ──────────────────────────────────────────────────── */
body .ephesus-audio-player .eap-wb,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-wb{
  background:var(--bcx-tint-4,rgba(17,17,17,.20)) !important;
}
body .ephesus-audio-player .eap-wb.played,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-wb.played{
  background:var(--eap-grp-waveform,var(--eap-accent)) !important;
}
body .ephesus-audio-player .eap-scrub:hover .eap-wb:not(.played),
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-scrub:hover .eap-wb:not(.played){
  background:var(--bcx-tint-5,rgba(17,17,17,.32)) !important;
}

/* ── 5. a visible focus ring ────────────────────────────────────────────
   The player set outline-color only, which leaves the UA default style and
   width and is invisible on several of its surfaces. */
body .ephesus-audio-player :where(button,a,input,select,[tabindex]):focus-visible{
  outline:2px solid var(--bcx-brand,#9E4A08) !important;
  outline-offset:3px !important;
  /* v1.2.7 — no border-radius here. The `body` prefix this layer adds
     makes the rule (0,2,1), an exact tie with broadcast-responsive's
     shape rules, and this sheet loads later — so an un-important
     border-radius:8px was squaring off the play button, every icon
     button and the Subscribe pill the moment they took keyboard focus.
     The outline is drawn on the element's own radius anyway. */
}

/* ── 6. reduced motion ──────────────────────────────────────────────────
   The 1,222-line player stylesheet had no prefers-reduced-motion block at
   all, so a visitor with vestibular sensitivity still got the 60fps canvas
   visualiser, the pulsing 96-bar waveform and the shimmer skeleton. */
@media (prefers-reduced-motion: reduce){
  body .ephesus-audio-player *,
  body .ephesus-audio-player *::before,
  body .ephesus-audio-player *::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
  }
  body .ephesus-audio-player .eap-skel-cover,
  body .ephesus-audio-player .eap-skel-line{
    animation:none !important;
    background:var(--bcx-tint-2,rgba(17,17,17,.08)) !important;
  }
  body .ephesus-audio-player .eap-wb{ transform:none !important; }
  body .ephesus-audio-player canvas{ display:none !important; }
}

/* ==========================================================================
   7. THE PAGE AROUND THE PLAYER
   The channel pages (Audio / Video / Radio / Schedule) carry
   body.bcx-channel-* so each takes its own identity colour, the same hue its
   cards and nav underline already use on the landing page.
   ========================================================================== */
body{ --bcx-channel: var(--bcx-brand, #9E4A08); --bcx-channel-soft: var(--bcx-brand-soft, rgba(158,74,8,.12)); }
body.bcx-channel-audio{ --bcx-channel: var(--bcx-audio); --bcx-channel-soft: var(--bcx-audio-soft); }
body.bcx-channel-video{ --bcx-channel: var(--bcx-video); --bcx-channel-soft: var(--bcx-video-soft); }
body.bcx-channel-radio{ --bcx-channel: var(--bcx-radio); --bcx-channel-soft: var(--bcx-radio-soft); }
body.bcx-channel-sched{ --bcx-channel: var(--bcx-sched); --bcx-channel-soft: var(--bcx-sched-soft); }

body[class*="bcx-channel-"] .eyebrow{
  background:var(--bcx-channel-soft) !important;
  color:var(--bcx-channel) !important;
  border-color:color-mix(in srgb,var(--bcx-channel) 40%,transparent) !important;
}

/* ---- sort toolbar ---- */
body .bc-sort{ display:flex;align-items:center;gap:8px; }
body .bc-sort__label{
  display:inline-flex;align-items:center;gap:6px;
  font-size:.63rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--bcx-ink-3,#666359);
}
body .bc-sort__select{
  padding:9px 12px;border-radius:10px;
  border:1px solid var(--bcx-line-strong,rgba(17,17,17,.24));
  background:var(--bcx-field,#E7E5DC);color:var(--bcx-ink,#1A1A1A);
  font:inherit;font-size:.8rem;font-weight:600;cursor:pointer;
  transition:border-color .25s ease,background .25s ease;
}
body .bc-sort__select:hover{ border-color:var(--bcx-channel); }

/* ---- library grid ---- */
body .bc-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(min(100%,230px),1fr));
  gap:14px;
}
body .bc-grid > a,
body .bc-grid > article,
body .broadcast-card{
  background:var(--bcx-card,#F1EFE9);
  border:1px solid var(--bcx-line,rgba(17,17,17,.13));
  border-radius:16px;overflow:hidden;
  transition:transform .3s var(--bcx-ease,cubic-bezier(.16,1,.3,1)),
             border-color .3s ease,box-shadow .3s ease;
}
body .bc-grid > a:hover,
body .bc-grid > article:hover,
body .broadcast-card:hover{
  transform:translateY(-4px);
  border-color:var(--bcx-channel);
  box-shadow:var(--bcx-shadow-float,0 14px 30px -14px rgba(17,17,17,.26));
}
body .broadcast-card__title{ color:var(--bcx-ink,#1A1A1A); }
body .broadcast-card__meta,
body .broadcast-card__speaker,
body .broadcast-card__series{ color:var(--bcx-ink-2,#5C5C58); }
body .broadcast-card__chip{
  background:var(--bcx-channel-soft) !important;
  color:var(--bcx-channel) !important;
}

/* ---- empty states ---- */
body .bc-empty,
body .eap-empty-state{
  text-align:center;padding:38px 22px;border-radius:16px;
  border:1px dashed var(--bcx-line-strong,rgba(17,17,17,.24));
  background:var(--bcx-card,#F1EFE9);
}
body .bc-empty__icon,
body .eap-empty-icon{
  width:60px;height:60px;border-radius:17px;margin:0 auto 14px;
  display:grid;place-items:center;
  background:var(--bcx-channel-soft);color:var(--bcx-channel);
}
body .bc-empty__title,
body .eap-empty-title{ margin:0 0 6px;font-size:1rem;font-weight:700;color:var(--bcx-ink,#1A1A1A); }
body .bc-empty__lead,
body .eap-empty-message{ margin:0 auto 18px;font-size:.85rem;color:var(--bcx-ink-2,#5C5C58);max-width:42ch; }

@media(max-width:640px){
  body .bc-grid{ grid-template-columns:repeat(auto-fill,minmax(min(100%,150px),1fr)); }
  body .broadcast-section__head{ flex-wrap:wrap;gap:12px; }
}


/* ==========================================================================
   8. ROUND-3 FIXES (v1.2.7) — from the deep audit
   ========================================================================== */

/* 8a. Cover artwork sits on a DARK media gradient, not on a page surface, so
   it must not take the page's muted ink. The player's own rule pointed both
   of these at --eap-grp-text-muted, which this layer maps to the site's
   muted ink — dark grey on a near-black gradient, 2.74:1. */
body .ephesus-audio-player .eap-cover-default__kicker,
body .ephesus-audio-player .eap-cover-default__title,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-cover-default__kicker,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-cover-default__title{
  color:var(--bcx-on-media,#fff) !important;
}

/* 8b. Scripture verses and outline bullets were rgba(0,0,0,.55) / .66 with no
   dark variant at all — 1.20:1 and 1.23:1 on the dark card. */
body .ephesus-audio-player .eap-scr-text,
body .ephesus-audio-player .eap-scr-ref,
body .ephesus-audio-player .eap-out-points,
body .ephesus-audio-player .eap-out-points li,
body .ephesus-audio-player .eap-tx-line,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-scr-text,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-scr-ref,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-out-points,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-out-points li,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-tx-line{
  color:var(--bcx-ink-2,#5C5C58) !important;
}
/* the line you are actually on takes full ink, and its time marker the accent */
body .ephesus-audio-player .eap-tx-line.is-on,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-tx-line.is-on{
  color:var(--bcx-ink,#1A1A1A) !important;
}
body .ephesus-audio-player .eap-tx-line.is-on .eap-tx-time,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-tx-line.is-on .eap-tx-time{
  color:var(--eap-accent) !important;
}
/* 8c. Out-of-focus transcript lines were rendered at 22% opacity — 1.6:1 in
   light. Dim them with colour, which stays legible, not with opacity. */
/* NB: no `opacity:1 !important` here. The JS writes a per-line inline
   opacity to build the focus band, and a stylesheet !important beats an
   inline declaration — it disabled the teleprompter entirely. The floor
   is raised in the JS instead, so the band still works and its dimmest
   line is still legible. */
body .ephesus-audio-player .eap-tx-line:not(.is-on){
  color:var(--bcx-ink-3,#666359) !important;
}

/* 8d. The fullscreen drawer's close button was a white X on the mint accent
   in dark — 1.48:1. Use the same on-accent token the play button uses. */
body .ephesus-audio-player .eap-side-close,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-side-close{
  background:var(--eap-accent) !important;
  color:var(--eap-on-accent,#fff) !important;
  box-shadow:none !important;
  min-width:44px;min-height:44px;
}

/* 8e. The Save button had no visible on-state once this layer forced its
   background; give it the accent the way every other toggle here does. */
body .ephesus-audio-player .eap-save.is-on,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-save.is-on{
  background:var(--eap-accent) !important;
  color:var(--eap-on-accent,#fff) !important;
}
body .ephesus-audio-player .eap-save:not(.is-on):hover{
  background:var(--bcx-ink-2,#5C5C58) !important;
}

/* 8f. The sticky mini-player was entirely unskinned: a translucent navy bar
   in dark and an off-ladder cream in light. It lives on <body>, so the site
   tokens are in scope directly. */
body .eap-sticky-mini{
  background:var(--bcx-card,#F1EFE9) !important;
  color:var(--bcx-ink,#1A1A1A) !important;
  border-top:1px solid var(--bcx-line,rgba(17,17,17,.13)) !important;
  box-shadow:var(--bcx-shadow-card,0 -8px 30px -18px rgba(17,17,17,.4)) !important;
  -webkit-backdrop-filter:none !important;backdrop-filter:none !important;
}
body .eap-sticky-mini__title{ color:var(--bcx-ink,#1A1A1A) !important; }
body .eap-sticky-mini__sub{ color:var(--bcx-ink-2,#5C5C58) !important; }
body .eap-sticky-mini__btn{
  background:var(--eap-accent,var(--bcx-audio)) !important;
  color:var(--eap-on-accent,#fff) !important;
  border:0 !important;
  min-width:44px;min-height:44px;
}

/* 8g. Six controls sat under the 44px coarse-pointer minimum. */
@media (pointer: coarse){
  body .ephesus-audio-player .eap-ref-dot,
  body .ephesus-audio-player .eap-save,
  body .ephesus-audio-player .eap-side-fontctl,
  body .ephesus-audio-player .eap-side-close,
  body .eap-sticky-mini__btn{
    min-width:44px;min-height:44px;
  }
  /* the scripture dots are markers on the bar, so grow the hit area only.
     NB: no position here — .eap-ref-dot is position:absolute and is
     already a containing block for its own ::after. Forcing relative
     un-anchored every marker from the scrub bar. */
  body .ephesus-audio-player .eap-ref-dot{
    min-width:0;min-height:0;
  }
  body .ephesus-audio-player .eap-ref-dot::after{
    content:"";position:absolute;left:50%;top:50%;
    width:44px;height:44px;transform:translate(-50%,-50%);
  }
}

/* 8h. Desktop fullscreen backdrop was a hardcoded cold charcoal in dark. */
body .ephesus-audio-player.eap-fs,
body .ephesus-audio-player[data-resolved-theme="dark"].eap-fs{
  background:var(--bcx-page,#FBFAF7) !important;
  border-radius:0 !important;
  border:0 !important;
  box-shadow:none !important;
}


/* ==========================================================================
   9. ROUND-5 FIXES (v1.2.7) — accessibility plumbing and the last
      colour gap the audit found
   ========================================================================== */

/* 9a. .eap-tx-text is painted white inside `@media (max-width:760px)` for the
   dark fullscreen drawer, with no light-mode arm — so on a phone in light
   mode the whole transcript was white on cream (1.07:1) and the active line
   was pure white (1.11:1). The token flips with the mode, so one pair does
   both. The focus-band dimming is applied as inline per-line opacity by the
   JS, so it keeps working over the top of this. */
body .ephesus-audio-player .eap-tx-text,
body .ephesus-audio-player.eap-fs .eap-tx-text,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-tx-text,
body .ephesus-audio-player[data-resolved-theme="dark"].eap-fs .eap-tx-text{
  color:var(--bcx-ink-2,#5C5C58) !important;
}
body .ephesus-audio-player .eap-tx-line.is-on .eap-tx-text,
body .ephesus-audio-player.eap-fs .eap-tx-line.is-on .eap-tx-text,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-tx-line.is-on .eap-tx-text,
body .ephesus-audio-player[data-resolved-theme="dark"].eap-fs .eap-tx-line.is-on .eap-tx-text{
  color:var(--bcx-ink,#1A1A1A) !important;
}

/* 9b. Transcript cues are now real <button>s so a keyboard can reach them.
   Strip the UA button chrome; the grid template in the player sheet still
   describes the layout. */
body .ephesus-audio-player button.eap-tx-line{
  appearance:none;-webkit-appearance:none;
  width:100%;
  background:transparent;
  border:0;
  margin:0;
  font:inherit;
  color:inherit;
  text-align:left;
}

/* 9c. The screen-reader-only live region. */
body .ephesus-audio-player .eap-sr-live{
  position:absolute;
  width:1px;height:1px;
  margin:-1px;padding:0;
  overflow:hidden;
  clip:rect(0 0 0 0);
  clip-path:inset(50%);
  white-space:nowrap;
  border:0;
}

/* 9d. The sticky mini-player animated opacity only, so both of its buttons
   were tabbable and readable from page load. visibility animates alongside
   opacity, so the slide-up is unchanged. */
body .eap-sticky-mini{ visibility:hidden; }
body .eap-sticky-mini.is-on{ visibility:visible; }

/* 9e. Fail visible. The skeleton is cleared by .is-ready, which the
   constructor adds last, so any throw during init used to leave a shimmer
   placeholder and nothing else. bootAll() now adds both classes on the way
   out and injects a plain <audio> element. */
body .ephesus-audio-player.eap-init-failed .eap-skeleton{ display:none !important; }
body .ephesus-audio-player.eap-init-failed{
  padding:22px;
  background:var(--bcx-card,#F1EFE9) !important;
  color:var(--bcx-ink,#1A1A1A) !important;
}
body .ephesus-audio-player .eap-fallback{
  display:grid;gap:12px;justify-items:start;
}
body .ephesus-audio-player .eap-fallback__title{
  margin:0;font-size:1rem;font-weight:700;color:var(--bcx-ink,#1A1A1A);
}
body .ephesus-audio-player .eap-fallback__note{
  margin:0;font-size:.85rem;color:var(--bcx-ink-2,#5C5C58);
}
body .ephesus-audio-player .eap-fallback audio{ width:100%;max-width:520px; }

/* 9f. The error note the media 'error' handler appends. */
body .ephesus-audio-player .eap-error-note{
  margin:8px 0 0;
  font-size:.82rem;
  color:var(--bcx-error,#B42318);
}


/* ==========================================================================
   10. ROUND-6 (v1.2.7) — the remaining low-severity colour defects
   ========================================================================== */

/* 10a. The skeleton shimmer is three white alphas, so on the dark card it
   flashed bright white before the player painted. Tints invert with the
   mode, so one rule covers both. */
body .ephesus-audio-player .eap-skel-cover,
body .ephesus-audio-player .eap-skel-line,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-skel-cover,
body .ephesus-audio-player[data-resolved-theme="dark"] .eap-skel-line{
  background:linear-gradient(90deg,
    var(--bcx-tint-2, rgba(17,17,17,.08)) 25%,
    var(--bcx-tint-4, rgba(17,17,17,.20)) 50%,
    var(--bcx-tint-2, rgba(17,17,17,.08)) 75%) !important;
  background-size:200% 100% !important;
}

/* 10b. A floor under the waveform bars, so a future NaN height cannot blank
   the scrubber the way an untitled broadcast did. */
body .ephesus-audio-player .eap-wb{ min-height:6px; }


/* ==========================================================================
   11. ROUND-8 (v1.2.7) — what the change review found in round 5's own
      accessibility work
   ========================================================================== */

/* 11a. Out-of-focus transcript lines carry a JS-written inline opacity, so a
   keyboard user tabbing to one got a focus ring drawn at that same opacity.
   Full opacity while focused; the band resumes when focus leaves. */
body .ephesus-audio-player .eap-tx-line:focus-visible{
  opacity:1 !important;
}
