/* =====================================================================
   Explore Digital — /podcast/ (page 131135) and single podcast episodes
   File:    wp-content/themes/divi-ETS-child-theme/css/podcast.css
   Handle:  exd-podcast   Version: filemtime() (set by exd-podcast-page.php)
   =====================================================================

   PROVENANCE. Every colour, size, radius, shadow, transition and breakpoint
   below is copied from one of these, all read off this site:
     et-cache/129529/et-core-unified-…-129529.min.css   the Divi 5 section kit
                                                        (presets, CTA frame/card,
                                                        card titles, toggles, buttons)
     et-cache/127796/et-core-unified-127796.min.css     /blog/ post cards + wp-pagenavi
     et-cache/global/et-divi-customizer-global.min.css  global type + .btn-blue-*
     et-divi-dynamic-…css                               :root{--gcid-*}, Divi core
     divi-ETS-child-theme/css/header.css                #et-main-area padding-top 85/76
     plugins/seriously-simple-podcasting/assets/css/
       blocks/podcast-list.css  +  castos-player.css    (SSP 3.17.0)
   Exactly four values are NOT measured off this site, and each is labelled
   DERIVED where it is declared:
     --ed-muted: rgba(60,63,69,.75)   the site's body colour at 75%; the site
                                      has no secondary text colour at all
     .ed-hero-art max-width 420/260   the reference hero is an uncapped wide
                                      screenshot; this is a 1:1 cover
     .ed-feed-url resting shadow      the site's ONLY shadow geometry at 0.12
                                      instead of 0.25, because it is a chip and
                                      not a 1440px CTA frame; the hover state
                                      lands exactly on the site's 0.25
     --ssp-player-btns-opacity .65    taken from SSP's own `.player:hover …
                                      button` value, not from this site

   -----------------------------------------------------------------
   SOURCE ORDER — read before adding a rule.
   This file is enqueued on `wp_enqueue_scripts` at priority 30, so in <head>
   it lands with the child-theme block (~160 KB into the reference page's head)
   while Divi's `et-core-unified-*.min.css` prints at ~173 KB — i.e. AFTER us.
   **Source order NEVER favours this file against Divi module or preset CSS.**
   To beat a Divi rule you must win on specificity outright, or match its
   `!important` at strictly higher specificity.
   SSP's two sheets (`ssp-podcast-list`, `ssp-castos-player`) are forward-
   enqueued by the mu-plugin at priority 20, so they do print before us — but
   that forward-enqueue is conditional, so nothing here relies on it: every
   rule that has to beat an SSP rule wins on specificity alone. Each contested
   rule carries its specificity and its adversary's in a comment.

   -----------------------------------------------------------------
   CO-LOCATION. Rules 1 and 2 paint the navy grounds under white type in the
   same three lines as that type. They are FALLBACKS, not overrides: Divi's
   own compiled CSS sets the same colours and, being later at equal
   specificity, wins. They exist because this exact URL has already
   demonstrated Divi's per-page CSS failing to generate; with them the worst
   case is dark-on-pale (readable) instead of white-on-white. Colours in those
   rules are LITERAL HEX, never var(--gcid-*), because the :root{--gcid-*}
   block is emitted into a DIFFERENT generated file from the module CSS.
   ===================================================================== */

:root{
  /* Palette — every hex below is in the site's own --gcid-* palette or is a
     literal used by the reference page's compiled CSS. */
  --ed-navy:#062252;              /* --gcid-08e91lx1tn */
  --ed-navy-2:#0a285c;            /* .et_pb_column_25 / group preset gradient start */
  --ed-heading:#003189;           /* --gcid-heading-color */
  --ed-body:#3c3f45;              /* --gcid-body-color */
  --ed-muted:rgba(60,63,69,.75);  /* DERIVED: --ed-body at 75%. The site has no
                                     secondary text colour; this is the only
                                     invented value in the palette and it is a
                                     transparency of a real one, not a new hex. */
  --ed-pale:#deeffe;              /* --gcid-kqez7xaqmx */
  --ed-blue:#0080ff;              /* --gcid-lf3jgdd3g8 */
  --ed-yellow:#ffca43;            /* --gcid-x23bzql0sh */
  --ed-white:#ffffff;             /* --gcid-pdvj3l22ca */

  /* Geometry */
  --ed-radius:10px;               /* .et_pb_column_25 card radius == /blog/ card-image radius */
  --ed-radius-btn:6px;            /* byix5tavy3 + r1y0y3l8ja + .btn-blue-solid */
  --ed-shadow:0px 8px 24px 0px rgba(6,33,82,0.25);   /* .et_pb_row_13 — the ONLY
                                     design shadow that exists on this site */
  --ed-gap-y:40px;                /* --vertical-gap:40px — the reference's hero row,
                                     S2 section and 2x2 grid all use it */

  /* Type */
  --ed-sans:'Poppins',Helvetica,Arial,Lucida,sans-serif;      /* --et_global_body_font */
  --ed-serif:'Merriweather',Georgia,"Times New Roman",serif;  /* --et_global_heading_font */
  --ed-card-title:24px;           /* .et_pb_text_2 .et_pb_text_inner h3 — the site's
                                     card-title size, pinned at every breakpoint */
  --ed-p:var(--gvid-za4kwdu2ih, clamp(16px, calc(1.125rem + ((1vw - 11px) * 1.6667)), 18px));
  /* ^ the site's body clamp. The literal fallback is the stored value of
       gvid-za4kwdu2ih, repeated because Divi emits the :root{--gvid-*} block
       into a different generated file from the module CSS. */
}

/* =====================================================================
   1. CO-LOCATION FALLBACK — navy hero band + its white type
   ===================================================================== */
.ed-hero-band{background-color:#062252}
.ed-hero-copy .et_pb_text_inner h1{color:#ffffff!important}
.ed-hero-copy .et_pb_text_inner p{color:#ffffff!important}
/* Deliberately no font-size / line-height here: the hero copy must keep the
   preset's own body clamp (16→18px) and 1.6em, exactly like every other
   paragraph on the site. */

/* =====================================================================
   2. CO-LOCATION FALLBACK — navy CTA card + its white type
   Gradients are .et_pb_row_13 and .et_pb_column_25, value for value.
   ===================================================================== */
.ed-cta-frame{background-image:linear-gradient(90deg,#ffffff 0%,#0080ff 100%)}
.ed-cta-card{background-image:linear-gradient(90deg,#0a285c 0%,#003189 100%)}
.ed-cta-copy .et_pb_text_inner h3,
.ed-cta-copy .et_pb_text_inner p{color:#ffffff!important}

/* =====================================================================
   3. HERO COVER ART
   Centring is owned by M3's own `advanced.align` attribute (desktop, tablet
   and phone), which Divi compiles to `text-align:center` on the module and
   which centres the inline-block .et_pb_image_wrap. There is deliberately NO
   margin rule here: the previous `.ed-hero-art .et_pb_image{margin:0}` was
   pinning the module against `.et_flex_column>.et_pb_image{margin-left:unset}`
   and was the reason the art hung left above 980px.
   The two max-widths are DERIVED — the reference hero has no cap because it is
   a wide screenshot; this is a 1:1 cover, and uncapped it would out-scale the
   hero copy beside it.
   ===================================================================== */
.ed-hero-art img{
  display:block;width:100%;max-width:420px;height:auto;
  border-radius:var(--ed-radius);
}

/* =====================================================================
   4. S2 BEAT ICONS
   The reference sizes its beat icons with .et_pb_row_1 svg{height:clamp(...)}.
   Ours are <img>, and each card's <img width="32" height="30"> attributes are
   wrong for three of the four files, so height + width:auto is what actually
   sizes them. display:block also stops the wrapping <h3>'s 1.3em line-height
   from adding leading around the glyph.
   (0,1,2) — nothing on the site targets images inside .et_pb_text_inner.
   ===================================================================== */
.et_pb_text_inner img.ed-beat-icon{
  height:clamp(24px, calc(1.875rem + ((1vw - 14.4px) * 1.3043)), 30px);
  width:auto;display:block;margin:0;
}

/* =====================================================================
   5. THE FEED ADDRESS CHIP  (S4, a real <a> inside a divi/text)
   Adversary: the Text-Default preset's link rule
     .preset--module--divi-text--jbt3qp5vgk .et_pb_text_inner a  (0,2,1)
     { font-weight:700; text-decoration-line:underline;
       text-decoration-color:#005ef5; text-decoration-style:solid;
       color:#005ef5; line-height:1.6em }
   plus Divi's per-module copy of it, `.et_pb_text_N .et_pb_text_inner a`,
   also (0,2,1). Ours is (0,2,1) too — a TIE — and Divi prints later, so
   `!important` is genuinely required. It is used on exactly the four
   declarations needed to cover those six properties and nowhere else:
   font-family, font-size, display, background, padding, radius, shadow and
   overflow are set directly on the anchor, which no rule at any specificity
   contests.
   No monospace: the site has exactly two typefaces and this file does not
   introduce a third.
   ===================================================================== */
.et_pb_text_inner a.ed-feed-url{
  display:block;
  background:var(--ed-white);
  border-radius:var(--ed-radius-btn);
  padding:16px 20px;
  font-family:var(--ed-sans);
  font-size:16px;                                    /* --gvid-wis6hihqj2 */
  overflow-x:auto;white-space:nowrap;
  box-shadow:0px 8px 24px 0px rgba(6,33,82,0.12);    /* the site's only shadow
                                                        geometry, alpha stepped
                                                        down for a small chip */
  transition:color .3s ease,box-shadow .3s ease;     /* the button preset's
                                                        300ms ease */
  font-weight:400!important;                         /* vs preset 700 */
  line-height:1.5!important;                         /* vs preset 1.6em */
  color:var(--ed-heading)!important;                 /* vs preset #005ef5 */
  text-decoration:none!important;                    /* vs preset underline/#005ef5/solid */
}
.et_pb_text_inner a.ed-feed-url:hover{
  color:var(--ed-blue)!important;
  box-shadow:var(--ed-shadow);                       /* lands exactly on .et_pb_row_13 */
}

/* =====================================================================
   6. ANCHOR OFFSET FOR THE FIXED HEADER
   header{position:fixed}; #et-main-area{padding-top:85px} desktop,
   76px at max-width:1175px (child-theme header.css). +20px breathing.
   ===================================================================== */
#episodes{scroll-margin-top:105px}
@media only screen and (max-width:1175px){#episodes{scroll-margin-top:96px}}

/* =====================================================================
   7. THE EPISODE ARCHIVE
   DOM (measured from a real 12-episode render on this server):
     .et_pb_code.ed-episode-list > .et_pb_code_inner > .ed-episodes
       > .ssp-podcast-list.ssp-el-N
         > .ssp-podcast-list__articles
           > article.podcast-<ID>.podcast.type-podcast
             > h3.ssp-episode-title > a.entry-title-link
             > .podcast-content
                 > <p> [ div.castos-player , div.podcast_meta ] </p>
                 > p.ssp-episode-list-content
         > .ssp-podcast-list__pagination.ssp-podcast-list__pagination--full
   Card language is the /blog/ post card, value for value: transparent, no
   border, no card shadow, 10px radius on the image only, aspect-ratio 2/1 +
   object-fit:cover, hover scale(1.1) on .2s all ease-in-out, 40px rhythm,
   separated by the site's only hairline idiom, 1px solid #deeffe.
   The "no chrome" half of that needs no declarations: SSP's list layout adds
   none. It is only `layout="cards"` that brings a background, an 8px radius
   and a shadow, and this stylesheet deliberately does NOT half-support that
   mode — the `divi/code` token must stay `layout=list`.
   ===================================================================== */

/* SSP prints <style>.ssp-el-N{--ssp-*}</style> INLINE, in the body, at (0,1,0)
   on a class produced by wp_unique_id() — unstable, never target it. This is
   (0,2,0), so it wins on specificity without naming that class and regardless
   of source order. It is also why the shortcode passes no colour arguments. */
.ed-episodes .ssp-podcast-list{
  --ssp-episode-list-title-size:var(--ed-card-title);
  --ssp-episode-list-cols:1;
  --ssp-episode-list-gap:var(--ed-gap-y);
  --ssp-episode-list-article-margin-bottom:0;
  --ssp-episode-list-title-color:var(--ed-heading);
  --ssp-episode-list-text-color:var(--ed-body);
  --ssp-episode-list-link-color:var(--ed-blue);
  --ssp-episode-list-pagination-color:var(--ed-heading);
  --ssp-episode-list-pagination-active:var(--ed-heading);
}
/* Belt and braces: if SSP ever renames --ssp-episode-list-gap the flex gap
   would silently fall back to its 10px default. (0,2,0) vs SSP's (0,1,0). */
.ed-episodes .ssp-podcast-list__articles{gap:var(--ed-gap-y)}

/* (0,2,1) vs SSP's `.ssp-podcast-list article` (0,1,1).
   min-width:0 replaces SSP's min-width:100px so a long unbroken word cannot
   widen the flex item and force a horizontal page scroll. */
.ed-episodes .ssp-podcast-list article{
  margin-bottom:0;
  padding:0 0 var(--ed-gap-y);
  border-bottom:1px solid var(--ed-pale);
  min-width:0;
}
.ed-episodes .ssp-podcast-list article:last-child{padding-bottom:0;border-bottom:0}

/* TITLE — the site's own card-title treatment, not an invented one:
   `.et_pb_text_2 .et_pb_text_inner h3` = Merriweather 700 / 24px / 1.3em /
   #003189, which is exactly what the S2 and S3 card titles on this same page
   render at, at every breakpoint. (An earlier draft used Poppins 500/18px on
   the grounds that "Merriweather is never used below 30px on this site" —
   that is false: the same file also carries the toggle preset at Merriweather
   400/20px, and both render on this page.)
   (0,3,1) vs SSP's `.ssp-podcast-list article .ssp-episode-title` (0,2,1) and
   vs the global `h1,h2,h3,h4,h5,h6{...}` rules (0,0,1). */
.ed-episodes .ssp-podcast-list article .ssp-episode-title{
  margin:0 0 16px;padding:0;
  font-family:var(--ed-serif);font-weight:700;
  font-size:var(--ssp-episode-list-title-size);line-height:1.3em;
  color:var(--ed-heading);
  overflow-wrap:anywhere;
}
/* (0,4,2) vs SSP's `.ssp-podcast-list article .ssp-episode-title a` (0,3,2)
   and the global `a{color:#003189}` (0,0,1). */
.ed-episodes .ssp-podcast-list article .ssp-episode-title a.entry-title-link{
  color:inherit;text-decoration:none;
}
/* (0,5,2) vs SSP's `… .ssp-episode-title a:hover{opacity:0.75}` (0,4,2).
   The site's link affordance is an underline, not a fade. */
.ed-episodes .ssp-podcast-list article .ssp-episode-title a.entry-title-link:hover{
  opacity:1;text-decoration:underline;
}

/* The template wraps the player in <p> but emits two <div>s inside it, so the
   HTML parser hoists them out and leaves an empty <p> on each side (verified
   against the real 12-episode render). Divi gives every <p> padding-bottom:1em,
   so without this every row gains two ghost ~1em gaps. wpautop can leave the
   same artefact around code-module output.
   (0,2,1)/(0,3,1) already beat `p{padding-bottom:1em}` (0,0,1); the
   !important is there because this hides a parser artefact and must never
   lose to a rule nobody has thought of. */
.ed-episodes .ssp-podcast-list .podcast-content>p:empty,
.ed-episodes p:empty,
.ed-episode-list .et_pb_code_inner>p:empty{display:none!important;margin:0;padding:0}

/* EXCERPT — the site's body clamp and the preset's 1.6em, not a fixed size. */
.ed-episodes .ssp-podcast-list p.ssp-episode-list-content{
  margin:0 0 20px;padding:0;
  font-family:var(--ed-sans);font-size:var(--ed-p);line-height:1.6em;
  color:var(--ed-body);
}
.ed-episodes .ssp-podcast-list p.ssp-episode-list-content:empty{display:none}

/* META STRIP — "Download file | Play in new window | Duration | Recorded on".
   16px is the site's smallest real type size (--gvid-wis6hihqj2, #top-menu a);
   there is no 14px anywhere on exploredigital.com. */
.ed-episodes .ssp-podcast-list .podcast_meta{margin:16px 0 0}
.ed-episodes .ssp-podcast-list .podcast_meta aside,
.ed-episodes .ssp-podcast-list .podcast_meta p{margin:0;padding:0}
.ed-episodes .ssp-podcast-list .podcast_meta p{
  font-family:var(--ed-sans);font-size:16px;line-height:1.6em;color:var(--ed-muted);
}
/* The duration/date <span>s take --ssp-episode-list-text-color from SSP's
   `.ssp-podcast-list article .podcast_meta span` (0,3,2), which would leave
   them at full body colour inside a muted line. (0,4,2) fixes that. */
.ed-episodes .ssp-podcast-list article .podcast_meta span{color:var(--ed-muted)}
/* (0,3,1) vs SSP's `.ssp-podcast-list article a:not(.entry-title-link)` (0,2,2). */
.ed-episodes .ssp-podcast-list .podcast_meta a{color:var(--ed-blue);text-decoration:none}
.ed-episodes .ssp-podcast-list .podcast_meta a:hover{text-decoration:underline}

/* EPISODE IMAGE — dormant today (display_image="false"), pre-styled so the
   shortcode argument can be flipped with no CSS work. Every value is the
   /blog/ post card's. */
.ed-episodes .ssp-podcast-list a.podcast-image-link{
  display:block;margin:0 0 16px;border-radius:var(--ed-radius);
  overflow:hidden;line-height:0;
}
.ed-episodes .ssp-podcast-list a.podcast-image-link img{
  width:100%;aspect-ratio:2 / 1;object-fit:cover;border-radius:var(--ed-radius);
  transition:0.2s all ease-in-out;
}
.ed-episodes .ssp-podcast-list article:hover a.podcast-image-link img{transform:scale(1.1)}
.ed-episodes .ssp-podcast-list a.podcast-image-link:empty{display:none}

/* ---------------------------------------------------------------------
   PAGINATION = the site's own wp-pagenavi idiom, rebuilt on .page-numbers.
   Measured (et-core-unified-127796.min.css):
     .wp-pagenavi{text-align:center}   .wp-pagenavi>*{margin:0 10px}
     span.current{color:#fff;background:#003189;padding:4px 12px;border-radius:4px}
     a.previouspostslink{margin-right:50px}  a.nextpostslink{margin-left:50px}
     @media(max-width:424px){ those two become 30px }
   So the site's real gaps are 10+10=20px between items, 50+10=60px either side
   of prev/next, and 30+10=40px at <=424. This is a flex container, where `gap`
   ADDS to item margins rather than replacing them, so the margins here are
   40px / 20px, not 50px / 30px — otherwise the same gaps would come out 70px
   and 42px.
   Container is (0,2,0) vs SSP's `.ssp-podcast-list__pagination--full` (0,1,0);
   items are (0,3,0)/(0,4,0)/(0,4,1) vs SSP's (0,2,0)/(0,3,0)/(0,3,1).
   --------------------------------------------------------------------- */
.ed-episodes .ssp-podcast-list__pagination:empty{display:none}
.ed-episodes .ssp-podcast-list__pagination{
  margin-top:48px;
  display:flex;justify-content:center;align-items:center;
  gap:20px;flex-wrap:wrap;
  font-family:var(--ed-sans);font-weight:500;font-size:16px;
}
.ed-episodes .ssp-podcast-list__pagination .page-numbers{
  display:inline-block;padding:4px 12px;border-radius:4px;
  color:var(--ed-heading);text-decoration:none;
  transition:0.2s all ease-in-out;
}
.ed-episodes .ssp-podcast-list__pagination .page-numbers.current,
.ed-episodes .ssp-podcast-list__pagination a.page-numbers:hover{
  background:var(--ed-heading);color:var(--ed-white);
}
/* SSP fades every pagination link on hover (`__pagination a:hover{opacity:.75}`,
   (0,1,1)); we invert on hover instead, so the fade has to go. */
.ed-episodes .ssp-podcast-list__pagination a.page-numbers:hover{opacity:1}
.ed-episodes .ssp-podcast-list__pagination .page-numbers.dots{
  background:none;color:var(--ed-body);padding-left:0;padding-right:0;
}
.ed-episodes .ssp-podcast-list__pagination .prev.page-numbers{margin-right:40px}
.ed-episodes .ssp-podcast-list__pagination .next.page-numbers{margin-left:40px}

/* =====================================================================
   8. CASTOS HTML5 PLAYER, re-skinned to the palette
   Unscoped from .ed-episodes on purpose, so single episode pages match the
   archive. SSP declares its palette as custom properties on :root, so the
   colour work is a variable swap on the player element and no selector fight
   at all; only the values castos-player.css hard-codes need selectors, and
   every one of those is Castos red (#df4e4f / #dd4142). That red inventory is
   complete: --ssp-progress-bar-color, --ssp-play-btn-color, .close-btn span,
   .player-panel-row button:hover, .share-icon:hover, .player-btn__volume.off.
   Every selector below carries a leading `div` — the player root is always
   <div class="castos-player …> — purely to buy one element unit of
   specificity, so none of these rules depends on the conditional forward-
   enqueue of ssp-castos-player putting SSP's sheet ahead of ours.
   If SSP ever renames the variables the player falls back to its stock dark
   skin: dark-on-white, still legible on our white band.
   ===================================================================== */
div.castos-player{                                   /* (0,1,1) vs SSP (0,1,0) */
  --ssp-dark-mode-text-color:#ffffff;                 /* --gcid-pdvj3l22ca */
  --ssp-dark-mode-bg1-color:#062252;                  /* --gcid-08e91lx1tn (gradient top) */
  --ssp-dark-mode-bg2-color:#003189;                  /* --gcid-heading-color (gradient bottom)
                                                          — the same #062252/#0a285c → #003189
                                                          ramp as the CTA card and the S1 band */
  --ssp-dark-mode-player-panel-bg:var(--ed-navy-2);   /* .et_pb_column_25 gradient start */
  --ssp-dark-mode-player-panel-input-bg:#003189;
  --ssp-progress-bar-color:#ffca43;                   /* --gcid-x23bzql0sh */
  --ssp-play-btn-color:#062252;                       /* navy glyph on the yellow disc */
  --ssp-player-btns-opacity:.65;                      /* SSP's own `.player:hover … button`
                                                          value, so the controls are legible at
                                                          rest and hovering never dims them */
  font-family:var(--ed-sans);
  max-width:100%;
}
div.castos-player .player{border-radius:var(--ed-radius)}      /* (0,2,1) vs SSP's 4px (0,2,0) */
div.castos-player .player__body{min-width:0}                   /* long titles must not blow out
                                                                  the 150px 1fr grid */
/* The disc. SSP paints it #fff via the `background` shorthand at (0,2,0). */
div.castos-player .play-progress .play-pause-controls{background-color:var(--ed-yellow)}   /* (0,3,1) */
/* .pause-btn is a full 44px white circle stacked ON TOP of that disc, so
   without this the control turns white the moment playback starts.
   (0,4,1) vs SSP's (0,4,0). */
div.castos-player .play-progress .play-pause-controls .pause-btn{background-color:var(--ed-yellow)}
/* The progress groove. SSP paints it #4c4659 at (0,3,0) in dark mode and
   #d3d3d3 at (0,2,0) under `@media (prefers-color-scheme: light)`; this is
   (0,4,1) and beats both. */
div.castos-player.dark-mode .play-progress .ssp-progress{background-color:var(--ed-navy)}
/* Panel close button: white disc (SSP already), navy X instead of red.
   (0,3,2) vs SSP's `.castos-player.dark-mode .close-btn span` (0,3,1). */
div.castos-player.dark-mode .close-btn span{background-color:var(--ed-heading)}
/* (0,3,1) + !important vs SSP's (0,2,0) + !important. */
div.castos-player .player-btn__volume.off{background-color:var(--ed-yellow)!important}
/* (0,2,2) vs SSP's `.castos-player .player-panels-nav button` (0,2,1). */
div.castos-player .player-panels-nav button{border-radius:var(--ed-radius-btn)}
/* The two red hover states, both !important in SSP.
   (0,3,1) vs (0,3,0)  and  (0,4,2) vs (0,4,1). */
div.castos-player .share-icon:hover,
div.castos-player .player-panel .player-panel-row button:hover{
  background-color:var(--ed-blue)!important;
}
/* The RSS-feed and episode-URL fields inside the Subscribe/Share panels.
   SSP sets #d4c9c9 at (0,4,1); this is (0,4,2). */
div.castos-player.dark-mode .player-panel .player-panel-row :is(input,textarea){color:#ffffff}

/* =====================================================================
   9. THE EMPTY STATE, supplied by exd-podcast-page.php
     <div class="ed-podcast-empty"><h3>…</h3><p>…</p><p><a class="ed-btn">…</a></p></div>
   A #deeffe panel is the site's own band colour used as a card. That IS a
   stated deviation — #deeffe appears on this site only as a full-bleed section
   band, a wave-divider fill, the mobile-menu hairline and the open/close menu
   chip; it is never a rounded panel. Everything else about the card is
   measured: the radius and the padding ramp are .et_pb_column_25's own
   (56 / 36 / 40-20), the heading is the same Merriweather 700 / 24px / 1.3em
   card title the episode rows use, the measure is the 800px narrow measure the
   site uses on its FAQ row and on S4, and .ed-btn reproduces the byix5tavy3
   preset declaration for declaration.
   .ed-podcast-empty h3 is (0,1,1) and beats every global h1..h6 rule (0,0,1);
   .ed-podcast-empty p is (0,1,1) and beats Divi core's p{padding-bottom:1em}.
   ===================================================================== */
.ed-podcast-empty{
  margin:0;padding:56px;text-align:center;
  background:var(--ed-pale);border-radius:var(--ed-radius);
  font-family:var(--ed-sans);color:var(--ed-body);
}
.ed-podcast-empty h3{
  margin:0 0 16px;padding:0;
  font-family:var(--ed-serif);font-weight:700;
  font-size:var(--ed-card-title);line-height:1.3em;
  color:var(--ed-heading);
}
.ed-podcast-empty p{
  margin:0 auto 24px;padding:0;max-width:800px;
  font-size:var(--ed-p);line-height:1.6em;color:var(--ed-body);
}
.ed-podcast-empty p:last-child{margin-bottom:0}
.ed-podcast-empty .ed-btn{
  display:inline-block;
  font-family:var(--ed-sans);font-weight:700;font-size:18px;line-height:1.7em;
  color:var(--ed-navy);
  background-color:var(--ed-yellow);
  border:2px solid var(--ed-yellow);
  border-radius:var(--ed-radius-btn);
  padding:12px 16px;
  text-decoration:none;
  transition:background-color 300ms ease,border-color 300ms ease,color 300ms ease;
}
.ed-podcast-empty .ed-btn:hover{
  background-color:var(--ed-blue);border-color:var(--ed-blue);color:var(--ed-white);
}

/* =====================================================================
   10. RESPONSIVE — the site's own 980 / 700 / 424 breakpoints
   ===================================================================== */
@media only screen and (max-width:980px){
  /* Both button presets ship css.tablet.freeForm = "width:100%;text-align:center",
     which compiles to @media(max-width:980px){…{width:100%;text-align:center}}.
     The empty-state CTA has to switch at the SAME breakpoint, or across the
     whole 701–980px range it is an auto-width pill sitting directly below S4's
     identically-labelled full-bleed "Subscribe by RSS" button. */
  .ed-podcast-empty .ed-btn{display:block;text-align:center}
  .ed-podcast-empty{padding:36px}          /* .et_pb_column_25 tablet padding */
}
@media only screen and (max-width:700px){
  .ed-hero-art img{max-width:260px}        /* DERIVED — see §3 */
  /* 63 characters of feed address must never force a horizontal page scroll. */
  .et_pb_text_inner a.ed-feed-url{white-space:normal;word-break:break-all;padding:16px}
  .ed-episodes .ssp-podcast-list{--ssp-episode-list-gap:32px}   /* --vertical-gap:32px */
  .ed-episodes .ssp-podcast-list article{padding-bottom:32px}
  .ed-episodes .ssp-podcast-list__pagination{margin-top:32px}
  .ed-podcast-empty{padding:40px 20px}     /* .et_pb_column_25 phone padding */
}
@media only screen and (max-width:424px){
  /* 20 + the 20px flex gap = the site's own 40px at this breakpoint. */
  .ed-episodes .ssp-podcast-list__pagination .prev.page-numbers{margin-right:20px}
  .ed-episodes .ssp-podcast-list__pagination .next.page-numbers{margin-left:20px}
}
