/** Shopify CDN: Minification failed

Line 1192:9 Expected "*/" to terminate multi-line comment

**/
/* Last updated: 1779273622 */
/* =============================================================
   Cardio Online Superstore — Universal Blog Article Stylesheet
   v2.3.0
   -------------------------------------------------------------
   Source of truth for every visual component the cardio-blog-writer
   plugin emits. Drop into the Shopify theme as a snippet or asset:

     1. Save this file to: theme/assets/article-styles.css
     2. In layout/theme.liquid <head>, add:
          {{ 'article-styles.css' | asset_url | stylesheet_tag }}
        OR scope it to article templates only by adding the link
        inside templates/article.json sections.

   Every class below is the *contract* the plugin emits HTML against.
   Do not rename a class without also updating the cardio-blog-writer
   plugin's blog-write/blog-image/blog-rewrite skills.
   ============================================================= */

/* -------------------------------------------------------------
   Design tokens — override in a theme settings file if the brand
   palette ever changes; defaults match Cardio Online 2026 brand.
   ------------------------------------------------------------- */
:root {
  --co-ink:           #0F1A24;   /* primary text */
  --co-ink-soft:      #3A4754;   /* secondary text */
  --co-mute:          #6B7785;   /* tertiary / captions */
  --co-line:          #E4E8EC;   /* hairlines, borders */
  --co-surface:       #FFFFFF;
  --co-surface-soft:  #F6F8FA;   /* cards, callouts */
  --co-surface-tint:  #EFF3F6;   /* alt rows, accordions */
  --co-accent:        #C8102E;   /* Cardio Online red — CTAs, accents */
  --co-accent-ink:    #FFFFFF;
  --co-success:       #2F7A4D;
  --co-warning:       #B5731A;
  --co-info:          #2867B2;

  --co-radius-sm: 6px;
  --co-radius:    10px;
  --co-radius-lg: 14px;

  --co-shadow-sm: 0 1px 2px rgba(15,26,36,.06), 0 1px 1px rgba(15,26,36,.04);
  --co-shadow:    0 4px 12px rgba(15,26,36,.08), 0 1px 3px rgba(15,26,36,.05);

  --co-font-body:   -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --co-font-mono:   ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
}

/* =============================================================
   1. ARTICLE CONTAINER & TYPOGRAPHY BASELINE
   ============================================================= */
.blog-post {
  font-family: var(--co-font-body);
  color: var(--co-ink);
  line-height: 1.65;
  font-size: 1.0625rem; /* ~17px */
  max-width: 760px;
  margin: 0 auto;
  padding: 0 1.25rem;
}
.blog-post p { margin: 0 0 1.25em; }
.blog-post h1,
.blog-post h2,
.blog-post h3,
.blog-post h4 {
  color: var(--co-ink);
  line-height: 1.25;
  font-weight: 700;
  letter-spacing: -.01em;
  margin: 2em 0 .6em;
}
/* 2026-05-18: full-width H2 underline applied truly globally per Tris.
   Selector group covers every blog article wrapper in use across the store:
     .blog-post       — cardio-blog-writer / cardio-buyers-guide v2.3.0 contract
     .cos-article-fix — cardio-best-roundup v1.4 styled body_html
     .article-content — Flex theme article wrapper (legacy / unwrapped bodies)
   #021526 matches Cardio Online ink used in the roundup template.
   margin-top intentionally omitted -- inherits 2em from heading group above. */
.blog-post h2,
.cos-article-fix h2,
.article-content h2 {
  font-size: 1.625rem;
  color: #021526;
  border-bottom: 2px solid #021526;
  padding-bottom: 8px;
  margin-bottom: 18px;
  line-height: 1.25;
  display: block;
  width: 100%;
}
/* 2026-05-18: H3 hierarchy fix. With the new full-width H2 underline, H3s at
   1.25rem / 700 / #021526 read as "small H2"s instead of subsections. Softer
   ink + lighter weight + smaller size + tighter top margin makes them clearly
   nested under the H2 without extra chrome. */
.blog-post h3,
.cos-article-fix h3,
.article-content h3 {
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--co-ink-soft);
  margin-top: 1.5em;
  margin-bottom: .5em;
}
.blog-post h4 { font-size: 1.0625rem; text-transform: uppercase; letter-spacing: .04em; color: var(--co-ink-soft); }
.blog-post a {
  color: var(--co-accent);
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
}
.blog-post a:hover { text-decoration-thickness: 2px; }

/* Inline citation / journal name rendering.

   Rule: blog-write emits <cite> for every journal, publication, report, or
   study title. The <small><em>...</em></small> pattern is BANNED in the
   writer.

   Why <cite> over <small><em>:
   1. Accessibility — <cite> is the semantic element for cited works; screen
      readers announce it correctly. <small><em> shrinks AND italicises,
      which screen readers treat as incidental emphasis on de-emphasised
      text. That's the wrong signal for a journal name.
   2. Visual contract — <small> globally reduces font-size relative to body,
      so a journal name in a body paragraph rendered at ~80% of body size,
      which looks broken next to surrounding citation prose at 100%.
   3. AI citation extraction — Perplexity, ChatGPT, and Google AI Overview
      parse <cite> as a recognised citation marker. <small><em> is invisible
      to citation extractors.

   Both rules below enforce: italic body-text-size, never shrunk. The first
   styles the canonical <cite>; the second is a defensive override for any
   stale published article still emitting the old <small><em> pattern. */
.blog-post cite {
  font-style: italic;
  font-size: inherit;   /* never shrink relative to body text */
  font-weight: inherit;
  color: inherit;
}
.blog-post p small em,
.blog-post p em small,
.blog-post li small em,
.blog-post li em small {
  font-size: inherit;
  font-style: italic;
}

/* =============================================================
   2. HERO IMAGE — first body element, never lazy-loaded
   ============================================================= */
.blog-post .article-hero {
  display: block;
  width: 100%;
  height: auto;
  margin: 0 0 1.75rem;
  border-radius: var(--co-radius-lg);
  aspect-ratio: 1200 / 630;
  object-fit: cover;
  background: var(--co-surface-soft);
  box-shadow: var(--co-shadow-sm);
}

/* Inline images sit clean inside body flow, full-width to readable column */
.blog-post .article-image {
  display: block;
  width: 100%;
  height: auto;
  margin: 1.75rem 0;
  border-radius: var(--co-radius);
  aspect-ratio: 3 / 2;
  object-fit: cover;
  background: var(--co-surface-soft);
}

/* v0.5.5 (Tris 2026-05-19): infographic variant — broadens selector to cover
   .blog-post, .cos-article-fix and .article-content wrappers so cardio-buyers-guide
   inline infographics render full portrait (override the default 3:2 landscape crop). */
.blog-post .article-image--infographic,
.cos-article-fix .article-image--infographic,
.article-content .article-image--infographic {
  aspect-ratio: auto !important;
  object-fit: contain !important;
  max-width: 100%;
  height: auto;
  background: transparent;
}
.blog-post .article-image + figcaption,
.blog-post figure figcaption {
  font-size: .875rem;
  color: var(--co-mute);
  text-align: center;
  margin-top: .5rem;
}

/* =============================================================
   3. JUMP-LINK / TABLE OF CONTENTS
   ============================================================= */
.blog-post .toc {
  background: var(--co-surface-soft);
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius);
  padding: 1.25rem 1.5rem;
  margin: 1.75rem 0;
}
.blog-post .toc__title {
  font-size: .8125rem;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--co-ink-soft);
  margin: 0 0 .75rem;
  font-weight: 700;
}
.blog-post .toc ol {
  margin: 0;
  padding: 0;
  list-style: none;
  counter-reset: toc;
  display: grid;
  gap: .35rem;
}
.blog-post .toc li {
  counter-increment: toc;
  padding-left: 1.75rem;
  position: relative;
}
.blog-post .toc li::before {
  content: counter(toc, decimal-leading-zero) ".";
  position: absolute;
  left: 0;
  top: 0;
  font-size: .8125rem;
  font-weight: 600;
  color: var(--co-mute);
  font-variant-numeric: tabular-nums;
}
.blog-post .toc a {
  color: var(--co-ink);
  text-decoration: none;
  border-bottom: 1px solid transparent;
}
.blog-post .toc a:hover { border-bottom-color: var(--co-accent); color: var(--co-accent); }

/* =============================================================
   4. KEY TAKEAWAYS BOX
   ============================================================= */
.blog-post .key-takeaways {
  background: var(--co-surface-soft);
  border-left: 4px solid var(--co-accent);
  border-radius: var(--co-radius);
  padding: 1.25rem 1.5rem;
  margin: 1.75rem 0;
}
.blog-post .key-takeaways__label {
  display: block;
  font-size: .75rem;
  text-transform: uppercase;
  letter-spacing: .12em;
  color: var(--co-accent);
  font-weight: 700;
  margin-bottom: .5rem;
}
.blog-post .key-takeaways ul {
  margin: 0;
  padding-left: 1.25rem;
}
.blog-post .key-takeaways li {
  margin-bottom: .35rem;
}
.blog-post .key-takeaways li:last-child { margin-bottom: 0; }

/* =============================================================
   5. BLOCKQUOTES & PULL QUOTES (consistent across articles)
   ============================================================= */
.blog-post blockquote {
  margin: 1.75rem 0;
  padding: 1.25rem 1.5rem;
  border-left: 4px solid var(--co-accent);
  background: var(--co-surface-soft);
  border-radius: 0 var(--co-radius) var(--co-radius) 0;
  font-style: normal;
  color: var(--co-ink);
}
.blog-post blockquote p:last-child { margin-bottom: 0; }
.blog-post blockquote cite {
  display: block;
  margin-top: .75rem;
  font-style: normal;
  font-size: .875rem;
  color: var(--co-mute);
}

/* =============================================================
   6. CALLOUT BOXES — info / tip / warning / disclaimer
   ============================================================= */
.blog-post .callout {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: .75rem 1rem;
  align-items: start;
  padding: 1rem 1.25rem;
  border-radius: var(--co-radius);
  border: 1px solid var(--co-line);
  background: var(--co-surface-soft);
  margin: 1.5rem 0;
}
.blog-post .callout__icon {
  width: 24px;
  height: 24px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: .9rem;
  border-radius: 50%;
  background: var(--co-info);
  color: #fff;
}
.blog-post .callout__title {
  font-weight: 700;
  margin: 0 0 .25rem;
}
.blog-post .callout p:last-child { margin-bottom: 0; }
.blog-post .callout--info    { border-color: #B6CFE6; background: #EAF2FA; }
.blog-post .callout--info    .callout__icon { background: var(--co-info); }
.blog-post .callout--tip     { border-color: #BCE0CC; background: #ECF6F0; }
.blog-post .callout--tip     .callout__icon { background: var(--co-success); }
.blog-post .callout--warning { border-color: #E8C996; background: #FCF4E5; }
.blog-post .callout--warning .callout__icon { background: var(--co-warning); }
.blog-post .callout--medical { border-color: #E6B6BC; background: #FAEAEC; }
.blog-post .callout--medical .callout__icon { background: var(--co-accent); }

/* =============================================================
   7. PRODUCT HIGHLIGHT CARD — the universal CRO unit
   -------------------------------------------------------------
   Used for every product mentioned in roundups and tier guides.
   The plugin emits this exact HTML structure via blog-write.
   ============================================================= */
.blog-post .product-card {
  display: grid;
  grid-template-columns: minmax(180px, 240px) 1fr;
  gap: 1.5rem;
  align-items: stretch;
  padding: 1.25rem;
  margin: 1.75rem 0;
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius-lg);
  background: var(--co-surface);
  box-shadow: var(--co-shadow-sm);
  transition: box-shadow .2s ease, transform .2s ease;
}
.blog-post .product-card:hover {
  box-shadow: var(--co-shadow);
  transform: translateY(-1px);
}
.blog-post .product-card__media {
  display: block;
  position: relative;
  aspect-ratio: 4 / 5;
  border-radius: var(--co-radius);
  overflow: hidden;
  background: var(--co-surface-soft);
}
.blog-post .product-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.blog-post .product-card__badge {
  position: absolute;
  top: .5rem;
  left: .5rem;
  background: var(--co-accent);
  color: var(--co-accent-ink);
  font-size: .6875rem;
  text-transform: uppercase;
  letter-spacing: .06em;
  font-weight: 700;
  padding: .25rem .5rem;
  border-radius: var(--co-radius-sm);
}
.blog-post .product-card__body {
  display: flex;
  flex-direction: column;
  gap: .5rem;
}
.blog-post .product-card__name {
  font-size: 1.125rem;
  font-weight: 700;
  margin: 0;
  line-height: 1.3;
  color: var(--co-ink);
}
.blog-post .product-card__name a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px solid transparent;
}
.blog-post .product-card__name a:hover {
  border-bottom-color: var(--co-accent);
}
.blog-post .product-card__price {
  font-size: 1.0625rem;
  font-weight: 700;
  color: var(--co-accent);
  margin: 0;
}
.blog-post .product-card__price del {
  color: var(--co-mute);
  font-weight: 400;
  margin-right: .35rem;
}
.blog-post .product-card__bestfor {
  font-size: .9375rem;
  color: var(--co-ink-soft);
  margin: 0;
  line-height: 1.45;
}
.blog-post .product-card__bestfor strong {
  color: var(--co-ink);
}
.blog-post .product-card__procons {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: .75rem;
  margin: .5rem 0;
}
.blog-post .product-card__procons ul {
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: .9rem;
  display: grid;
  gap: .25rem;
}
.blog-post .product-card__procons li {
  padding-left: 1.25rem;
  position: relative;
  line-height: 1.4;
  color: var(--co-ink-soft);
}
.blog-post .product-card__procons .pros li::before {
  content: "✓";
  color: var(--co-success);
  position: absolute;
  left: 0;
  font-weight: 700;
}
.blog-post .product-card__procons .cons li::before {
  content: "−";
  color: var(--co-warning);
  position: absolute;
  left: 0;
  font-weight: 700;
}
.blog-post .product-card__procons-label {
  font-size: .6875rem;
  text-transform: uppercase;
  letter-spacing: .08em;
  font-weight: 700;
  color: var(--co-mute);
  margin-bottom: .25rem;
  display: block;
}
.blog-post .product-card__cta {
  margin-top: auto;
  padding-top: .5rem;
}

/* Product CTA button — replaces every "URL: [link]" anchor */
.blog-post .product-link-button {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  background: var(--co-accent);
  color: var(--co-accent-ink) !important;  /* override .blog-post a colour */
  text-decoration: none !important;
  font-weight: 700;
  padding: .65rem 1.1rem;
  border-radius: var(--co-radius-sm);
  font-size: .9375rem;
  border: 2px solid var(--co-accent);
  transition: background .15s ease, transform .15s ease;
}
.blog-post .product-link-button:hover {
  background: #A60D26;
  border-color: #A60D26;
  transform: translateY(-1px);
  text-decoration: none !important;
}
.blog-post .product-link-button::after {
  content: "→";
  display: inline-block;
  transition: transform .15s ease;
}
.blog-post .product-link-button:hover::after { transform: translateX(2px); }

/* Secondary (outlined) variant — for "view collection" type CTAs */
.blog-post .product-link-button--secondary {
  background: transparent;
  color: var(--co-accent) !important;
  border-color: var(--co-accent);
}
.blog-post .product-link-button--secondary:hover {
  background: var(--co-accent);
  color: var(--co-accent-ink) !important;
}

/* =============================================================
   8. PRICE-TIER CARDS — for home gym setup tiers, multi-product builds
   ============================================================= */
.blog-post .tier-card {
  display: block;
  padding: 1.25rem 1.5rem;
  margin: 1.5rem 0;
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius-lg);
  background: var(--co-surface);
  box-shadow: var(--co-shadow-sm);
}
.blog-post .tier-card__header {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: baseline;
  gap: .5rem;
  border-bottom: 1px solid var(--co-line);
  padding-bottom: .75rem;
  margin-bottom: 1rem;
}
.blog-post .tier-card__name {
  margin: 0;
  font-size: 1.25rem;
  font-weight: 700;
}
.blog-post .tier-card__range {
  font-size: 1.0625rem;
  font-weight: 700;
  color: var(--co-accent);
  font-variant-numeric: tabular-nums;
}
.blog-post .tier-card__items {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 1rem;
  margin-top: 1rem;
}
.blog-post .tier-card__item {
  display: grid;
  grid-template-rows: auto auto auto;
  gap: .35rem;
  text-align: center;
  padding: .75rem;
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius);
  background: var(--co-surface-soft);
}
.blog-post .tier-card__item img {
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: contain;
  background: #fff;
  border-radius: var(--co-radius-sm);
}
.blog-post .tier-card__item-name {
  font-size: .875rem;
  font-weight: 600;
  line-height: 1.3;
  margin: .25rem 0 0;
}
.blog-post .tier-card__item-price {
  font-size: .875rem;
  font-weight: 700;
  color: var(--co-accent);
  font-variant-numeric: tabular-nums;
}
.blog-post .tier-card__total {
  display: block;
  margin-top: 1rem;
  padding-top: .75rem;
  border-top: 1px solid var(--co-line);
  font-size: .9375rem;
  text-align: right;
  color: var(--co-ink-soft);
}
.blog-post .tier-card__total strong {
  color: var(--co-ink);
  font-size: 1.0625rem;
}

/* =============================================================
   9. FAQ ACCORDION — uses native <details>/<summary> for a11y
   ============================================================= */
/* 2026-05-18: rewritten as a UNIVERSAL rule so every article gets the same
   rounded-card accordion the cardio-buyers-guide used to emit inline. Previous
   version only matched .blog-post + used brand red plus icon -- that's why the
   upright-bike BG rendered raw <details> triangles while the recumbent BG
   (with its inline <style> scoped to .cos-article-fix) showed styled cards.
   Selector: details:not(.infographic-prompt) under any of the three article
   wrappers. Catches every FAQ regardless of whether the markup uses
   .faq__item, .bg-faq-item, or bare <details>. Cyan plus icon (#00d1ff)
   matches the Cardio Online accent. Open swaps + for en-dash. */
.blog-post .faq,
.cos-article-fix .faq,
.article-content .faq {
  margin: 1.5rem 0;
}
/* Selectors widened beyond the original wrapper-scoped trio so the rule
   matches FAQ markup regardless of ancestor class. .faq__item and
   .bg-faq-item catch the cardio-buyers-guide markup directly. .faq > details
   catches any bare <details> nested under a .faq wrapper. The wrapper-scoped
   selectors stay as a final fallback. !important on the four visual-contract
   properties guards against any theme/extension CSS that resets borders or
   backgrounds on <details> at unexpected specificity (May 2026: page-crafter
   and hey-bear extensions both ship global details overrides). */
.faq__item,
.bg-faq-item,
.faq > details,
.blog-post details:not(.infographic-prompt),
.cos-article-fix details:not(.infographic-prompt),
.article-content details:not(.infographic-prompt) {
  margin: 12px 0 !important;
  border: 1px solid var(--co-line) !important;
  border-radius: 8px !important;
  background: var(--co-surface) !important;
  overflow: hidden !important;
}
.faq__item > summary,
.bg-faq-item > summary,
.faq > details > summary,
.blog-post details:not(.infographic-prompt) > summary,
.cos-article-fix details:not(.infographic-prompt) > summary,
.article-content details:not(.infographic-prompt) > summary {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  padding: 14px 18px;
  cursor: pointer;
  font-weight: 700;
  font-size: 1.0625rem;
  color: #021526;
  background: var(--co-surface);
  list-style: none;
  user-select: none;
}
.faq__item > summary::-webkit-details-marker,
.bg-faq-item > summary::-webkit-details-marker,
.faq > details > summary::-webkit-details-marker,
.blog-post details:not(.infographic-prompt) > summary::-webkit-details-marker,
.cos-article-fix details:not(.infographic-prompt) > summary::-webkit-details-marker,
.article-content details:not(.infographic-prompt) > summary::-webkit-details-marker {
  display: none;
}
.faq__item > summary::after,
.bg-faq-item > summary::after,
.faq > details > summary::after,
.blog-post details:not(.infographic-prompt) > summary::after,
.cos-article-fix details:not(.infographic-prompt) > summary::after,
.article-content details:not(.infographic-prompt) > summary::after {
  content: "+";
  font-size: 1.3rem;
  font-weight: 400;
  color: #00d1ff;
  line-height: 1;
  flex-shrink: 0;
}
.faq__item[open] > summary::after,
.bg-faq-item[open] > summary::after,
.faq > details[open] > summary::after,
.blog-post details:not(.infographic-prompt)[open] > summary::after,
.cos-article-fix details:not(.infographic-prompt)[open] > summary::after,
.article-content details:not(.infographic-prompt)[open] > summary::after {
  content: "\2013";
}
.faq__item > summary:hover,
.bg-faq-item > summary:hover,
.faq > details > summary:hover,
.blog-post details:not(.infographic-prompt) > summary:hover,
.cos-article-fix details:not(.infographic-prompt) > summary:hover,
.article-content details:not(.infographic-prompt) > summary:hover {
  color: #00d1ff;
}
.blog-post .faq__answer,
.cos-article-fix .faq__answer,
.article-content .faq__answer {
  padding: 0 18px 16px;
  color: var(--co-ink-soft);
  line-height: 1.65;
}
.blog-post .faq__answer p,
.cos-article-fix .faq__answer p,
.article-content .faq__answer p {
  margin: 0 0 10px;
}
.blog-post .faq__answer p:last-child,
.cos-article-fix .faq__answer p:last-child,
.article-content .faq__answer p:last-child {
  margin-bottom: 0;
}
/* Fallback for articles that emit raw <p>/<ul> directly inside <details>
   without a .faq__answer wrapper -- pad the body so it aligns with the edge. */
.blog-post details:not(.infographic-prompt) > :not(summary):not(.faq__answer),
.cos-article-fix details:not(.infographic-prompt) > :not(summary):not(.faq__answer),
.article-content details:not(.infographic-prompt) > :not(summary):not(.faq__answer) {
  padding: 0 18px 16px;
  color: var(--co-ink-soft);
  line-height: 1.65;
}

/* =============================================================
   10. SPACE COMPARISON / FOOTPRINT MOCKUPS
   -------------------------------------------------------------
   Used when an article compares equipment dimensions, height
   needed, or floor area required against typical Australian
   spaces (single garage, double garage, spare room, PT studio).
   ============================================================= */
.blog-post .footprint {
  margin: 1.75rem 0;
  padding: 1.25rem;
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius-lg);
  background: var(--co-surface-soft);
}
.blog-post .footprint__caption {
  font-size: .8125rem;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--co-ink-soft);
  font-weight: 700;
  margin-bottom: .75rem;
}
.blog-post .footprint__legend {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin-top: .75rem;
  font-size: .875rem;
  color: var(--co-ink-soft);
}
.blog-post .footprint__legend-item {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
}
.blog-post .footprint__legend-swatch {
  width: 14px;
  height: 14px;
  border-radius: 3px;
  display: inline-block;
  border: 1px solid var(--co-line);
}
/* Inline SVG inside .footprint scales naturally */
.blog-post .footprint svg { width: 100%; height: auto; display: block; }

/* Height-comparison variant — equipment vs. ceiling height, person ref */
.blog-post .height-compare {
  margin: 1.75rem 0;
  padding: 1.25rem;
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius-lg);
  background: var(--co-surface);
}
.blog-post .height-compare svg { width: 100%; height: auto; display: block; }

/* =============================================================
   11. MUSCLE-GROUP ANATOMY FIGURE
   -------------------------------------------------------------
   Used whenever an article references muscle groups by anatomical
   name (pectoralis major, latissimus dorsi, etc). Plugin generates
   an inline SVG body diagram with the relevant muscles highlighted.
   ============================================================= */
.blog-post .anatomy {
  display: grid;
  grid-template-columns: minmax(180px, 260px) 1fr;
  gap: 1.5rem;
  align-items: start;
  margin: 1.75rem 0;
  padding: 1.25rem;
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius-lg);
  background: var(--co-surface-soft);
}
.blog-post .anatomy__figure svg {
  width: 100%;
  height: auto;
  display: block;
}
.blog-post .anatomy__caption {
  font-size: .8125rem;
  color: var(--co-mute);
  margin-top: .5rem;
  text-align: center;
}
.blog-post .anatomy__legend ul {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: .5rem;
}
.blog-post .anatomy__legend li {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: .5rem;
  align-items: baseline;
  font-size: .9375rem;
  color: var(--co-ink-soft);
}
.blog-post .anatomy__legend strong {
  color: var(--co-ink);
}
.blog-post .anatomy__legend-swatch {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  display: inline-block;
  margin-top: .35rem;
}

/* =============================================================
   12. PROS / CONS GRID (when not inside a product card)
   ============================================================= */
.blog-post .procons-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  margin: 1.5rem 0;
}
.blog-post .procons-grid__col {
  padding: 1rem 1.25rem;
  border-radius: var(--co-radius);
  border: 1px solid var(--co-line);
}
.blog-post .procons-grid__col--pros {
  border-color: #BCE0CC;
  background: #ECF6F0;
}
.blog-post .procons-grid__col--cons {
  border-color: #E8C996;
  background: #FCF4E5;
}
.blog-post .procons-grid__title {
  font-size: .8125rem;
  text-transform: uppercase;
  letter-spacing: .08em;
  font-weight: 700;
  margin: 0 0 .5rem;
}
.blog-post .procons-grid--pros .procons-grid__title { color: var(--co-success); }
.blog-post .procons-grid--cons .procons-grid__title { color: var(--co-warning); }
.blog-post .procons-grid ul { margin: 0; padding-left: 1.25rem; }
.blog-post .procons-grid li { margin-bottom: .35rem; line-height: 1.45; }
.blog-post .procons-grid li:last-child { margin-bottom: 0; }

/* =============================================================
   13. TABLES — comparison/spec tables, consistent across articles
   ============================================================= */
.blog-post table {
  width: 100%;
  border-collapse: collapse;
  margin: 1.5rem 0;
  font-size: .9375rem;
  border-radius: var(--co-radius);
  overflow: hidden;
  border: 1px solid var(--co-line);
}
.blog-post thead { background: var(--co-surface-soft); }
.blog-post th {
  text-align: left;
  font-weight: 700;
  padding: .75rem 1rem;
  border-bottom: 2px solid var(--co-line);
  color: var(--co-ink);
}
.blog-post td {
  padding: .75rem 1rem;
  border-bottom: 1px solid var(--co-line);
  vertical-align: top;
}
.blog-post tbody tr:nth-child(even) { background: var(--co-surface-tint); }
.blog-post tbody tr:last-child td { border-bottom: 0; }

/* =============================================================
   14. EXERCISE CARDS & ROUTINE TABLES
   -------------------------------------------------------------
   Standardised display for any article that lists exercises with
   sets, reps, and rest. Two components:

   (a) .exercise — per-exercise card. Self-contained: red number
       badge, title, three prescription chips (Sets / Reps / Rest),
       and a description paragraph.

   (b) .routine-table — multi-exercise summary table for programme
       summaries (push-pull-legs splits, weekly templates).
       Five columns: # / Exercise / Sets / Reps / Rest.

   Numbers are continuous across the article (1, 2, 3 …),
   not reset per H3 section. Section headings stay as <h3>.
   ============================================================= */

/* (a) Per-exercise card */
.cos-article-fix .exercise, .exercise {
  display: grid;
  grid-template-columns: 56px 1fr;
  gap: .9rem 1rem;
  padding: 1rem 1.25rem;
  margin: 1.25rem 0;
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius);
  background: var(--co-surface);
  box-shadow: var(--co-shadow-sm);
}
.cos-article-fix .exercise, .exercise__num {
  grid-row: 1 / span 2;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: var(--co-accent);
  color: var(--co-accent-ink);
  font-weight: 800;
  font-size: 1.15rem;
  display: flex;
  align-items: center;
  justify-content: center;
  font-variant-numeric: tabular-nums;
  align-self: start;
}
.cos-article-fix .exercise, .exercise__head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 1rem;
  flex-wrap: wrap;
  min-width: 0;
}
.cos-article-fix .exercise, .exercise__title {
  font-weight: 700;
  font-size: 1.05rem;
  line-height: 1.3;
  margin: 0;
  color: var(--co-ink);
  text-transform: none;
  letter-spacing: 0;
}
.cos-article-fix .exercise, .exercise__prescription {
  display: flex;
  gap: .35rem;
  flex-shrink: 0;
  flex-wrap: nowrap;
}
.cos-article-fix .exercise, .exercise__prescription span {
  background: var(--co-surface-soft);
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius-sm);
  padding: .25rem .55rem;
  font-size: .78rem;
  font-weight: 700;
  color: var(--co-ink);
  font-variant-numeric: tabular-nums;
  line-height: 1.2;
  white-space: nowrap;
  text-align: center;
}
.cos-article-fix .exercise, .exercise__prescription span strong {
  display: block;
  font-weight: 800;
}
.cos-article-fix .exercise, .exercise__prescription span small {
  display: block;
  font-size: .6rem;
  font-weight: 600;
  color: var(--co-mute);
  text-transform: uppercase;
  letter-spacing: .06em;
  margin-top: .1rem;
}
.cos-article-fix .exercise, .exercise__desc {
  grid-column: 2;
  margin: 0;
  color: var(--co-ink-soft);
  font-size: .95rem;
  line-height: 1.55;
}
.cos-article-fix .exercise, .exercise__desc + .exercise__desc {
  margin-top: .5rem;
}

/* (b) Routine summary table */
.cos-article-fix .routine-table, .routine-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  margin: 1.5rem 0;
  font-size: .95rem;
  border: 1px solid var(--co-line);
  border-radius: var(--co-radius);
  overflow: hidden;
  background: var(--co-surface);
}
.cos-article-fix .routine-table, .routine-table thead th {
  background: var(--co-ink);
  color: #fff;
  text-align: left;
  padding: .75rem 1rem;
  font-size: .75rem;
  text-transform: uppercase;
  letter-spacing: .08em;
  font-weight: 700;
  border-bottom: none;
}
.cos-article-fix .routine-table, .routine-table thead th:first-child { width: 48px; text-align: center; }
.cos-article-fix .routine-table, .routine-table thead th:nth-child(3),
.cos-article-fix .routine-table, .routine-table thead th:nth-child(4),
.cos-article-fix .routine-table, .routine-table thead th:nth-child(5) {
  width: 80px;
  text-align: center;
}
.cos-article-fix .routine-table, .routine-table tbody td {
  padding: .85rem 1rem;
  border-top: 1px solid var(--co-line);
  vertical-align: middle;
  border-bottom: none;
}
.cos-article-fix .routine-table, .routine-table tbody tr:first-child td { border-top: none; }
.cos-article-fix .routine-table, .routine-table tbody tr:nth-child(even) { background: var(--co-surface-soft); }
.cos-article-fix .routine-table, .routine-table tbody td:first-child {
  text-align: center;
  color: var(--co-accent);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}
.cos-article-fix .routine-table, .routine-table tbody td:nth-child(2) {
  font-weight: 600;
  color: var(--co-ink);
}
.cos-article-fix .routine-table, .routine-table tbody td:nth-child(3),
.cos-article-fix .routine-table, .routine-table tbody td:nth-child(4) {
  text-align: center;
  font-variant-numeric: tabular-nums;
  font-weight: 700;
}
.cos-article-fix .routine-table, .routine-table tbody td:nth-child(5) {
  text-align: center;
  color: var(--co-mute);
  font-size: .9rem;
  font-variant-numeric: tabular-nums;
}

/* =============================================================
   15. REFERENCES LIST (APA)
   ============================================================= */
.blog-post .references {
  margin-top: 2.5rem;
  padding-top: 1.5rem;
  border-top: 2px solid var(--co-line);
  font-size: .9375rem;
  color: var(--co-ink-soft);
}
.blog-post .references h2 {
  font-size: 1.125rem;
  margin-top: 0;
}
.blog-post .references ol {
  padding-left: 1.5rem;
  display: grid;
  gap: .5rem;
}
.blog-post .references li { line-height: 1.5; }
.blog-post .references cite { font-style: italic; font-size: inherit; }

/* =============================================================
   16. RESPONSIVE — collapse multi-column blocks on mobile
   ============================================================= */
@media (max-width: 640px) {
  .blog-post { font-size: 1rem; }
  .blog-post .product-card,
  .blog-post .anatomy {
    grid-template-columns: 1fr;
  }
  .blog-post .product-card__media {
    aspect-ratio: 16 / 10;
  }
  .blog-post .product-card__procons,
  .blog-post .procons-grid {
    grid-template-columns: 1fr;
  }
  .blog-post h2,
  .cos-article-fix h2,
  .article-content h2 { font-size: 1.4rem; }
  .blog-post h3,
  .cos-article-fix h3,
  .article-content h3 { font-size: 1.0625rem; }
  /* Exercise card: prescription chips wrap below title on mobile */
  .cos-article-fix .exercise, .exercise__head {
    flex-direction: column;
    align-items: flex-start;
    gap: .5rem;
  }
  .cos-article-fix .exercise, .exercise__prescription {
    width: 100%;
  }
  .cos-article-fix .exercise, .exercise__prescription span { flex: 1; }
  /* Routine table: tighten padding on mobile */
  .cos-article-fix .routine-table, .routine-table thead th,
  .cos-article-fix .routine-table, .routine-table tbody td {
    padding: .6rem .5rem;
    font-size: .85rem;
  }
  .cos-article-fix .routine-table, .routine-table thead th:nth-child(3),
  .cos-article-fix .routine-table, .routine-table thead th:nth-child(4),
  .cos-article-fix .routine-table, .routine-table thead th:nth-child(5) {
    width: auto;
  }
}

/* =============================================================
   17. PRINT SAFETY — accordions open, links visible
   ============================================================= */
@media print {
  .blog-post details:not(.infographic-prompt) > summary::after,
  .cos-article-fix details:not(.infographic-prompt) > summary::after,
  .article-content details:not(.infographic-prompt) > summary::after { content: ""; }
  .blog-post details:not(.infographic-prompt),
  .cos-article-fix details:not(.infographic-prompt),
  .article-content details:not(.infographic-prompt) { break-inside: avoid; }
  .blog-post details:not(.infographic-prompt):not([open]) > *:not(summary),
  .cos-article-fix details:not(.infographic-prompt):not([open]) > *:not(summary),
  .article-content details:not(.infographic-prompt):not([open]) > *:not(summary) {
    display: block !important;
  }
  .blog-post a { text-decoration: underline; color: var(--co-ink); }
}

/* =============================================================
   18. ROUNDUP TOP-PICKS ROW — DESKTOP STACK FIX (2026-05-15)
   -------------------------------------------------------------
   The cardio-best-roundup v1.4 generator (build_styled_body.py)
   emits .co-top-picks-row with an inline `grid-template-columns:
   1fr 1fr` so Editor's Pick and Runner-up sit side-by-side on
   desktop. At half-width each the inner 3-column card grid
   (140px image | 1fr text | auto CTA) collapses the text column
   to ~180px, so product names wrap into 4 narrow lines and the
   feature bullets read as a stacked strip.

   Fix: stack the row vertically on desktop. Each card now gets
   the full article column width and the generator's original
   inner grid renders uncrowded — image on the left, name and
   bullets across the middle, CTA + guarantee pill on the right.

   The generator's inline <=760px media query already collapses
   the row to a single column on mobile, so we only need to
   override the >=761px case.
   ============================================================= */
@media (min-width: 761px) {
  .cos-article-fix .co-top-picks-row,
  .co-top-picks-row {
    grid-template-columns: 1fr !important;
    row-gap: 20px !important;
  }
  /* Inner card: keep generator's 3-col layout but size the CTA
     column to fit the longest button text ("SHOP THE EDITOR'S
     PICK") without clipping. */
  .cos-article-fix .co-mini-card__layout,
  .co-mini-card__layout {
    grid-template-columns: 160px 1fr auto !important;
    column-gap: 28px !important;
    align-items: center !important;
  }
  .cos-article-fix .co-mini-card__layout > div:nth-child(1) img,
  .co-mini-card__layout > div:nth-child(1) img {
    max-width: 160px !important;
  }
  /* CTA cell: don't let the column shrink to clip the button.
     Allow inline contents to size naturally and keep the button
     text on a single line. */
  .cos-article-fix .co-mini-card__layout > div:nth-child(3),
  .co-mini-card__layout > div:nth-child(3) {
    white-space: nowrap !important;
    min-width: max-content !important;
  }
  .cos-article-fix .co-mini-card__layout > div:nth-child(3) a,
  .co-mini-card__layout > div:nth-child(3) a {
    white-space: nowrap !important;
  }
  /* Prod