/* tc-prose-blocks.css - author block utilities ported from the fearless-aiims theme's
   editor-styles.min.css, re-scoped from bare .checklist-* / .stat-list-* / .blockquote-*
   selectors to .tc-prose descendants so they only apply inside article content.
   These class names are baked into post_content in the database across the blog,
   case-study and whitepaper posts, so they are a CONTENT dependency, not a design
   choice. The article type scale lives in the Bricks global class 'tc-prose' instead.

   NOTE: every rem in the source has been resolved to px at 16px/rem. The old theme's
   root font-size is 16px; Bricks' is 10px, so leaving rem values in place rendered the
   whole article at 62.5% (blockquote padding 28px -> 17.5px, and so on).

   Generated - do not hand-edit. Source: theme/assets/css/editor-styles.min.css */
.tc-prose .checklist-1, .tc-prose .checklist-10, .tc-prose .checklist-2, .tc-prose .checklist-3, .tc-prose .checklist-4, .tc-prose .checklist-5, .tc-prose .checklist-6, .tc-prose .checklist-7, .tc-prose .checklist-8, .tc-prose .checklist-9{--checklist-mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='14'%3E%3Cpath d='M2.372 4.107 0 6.611l6.852 6.72L17.92 2.263 15.672 0 6.983 8.719z'/%3E%3C/svg%3E");list-style-type:none}.tc-prose .checklist-10>:not([hidden])~:not([hidden]), .tc-prose .checklist-1>:not([hidden])~:not([hidden]), .tc-prose .checklist-2>:not([hidden])~:not([hidden]), .tc-prose .checklist-3>:not([hidden])~:not([hidden]), .tc-prose .checklist-4>:not([hidden])~:not([hidden]), .tc-prose .checklist-5>:not([hidden])~:not([hidden]), .tc-prose .checklist-6>:not([hidden])~:not([hidden]), .tc-prose .checklist-7>:not([hidden])~:not([hidden]), .tc-prose .checklist-8>:not([hidden])~:not([hidden]), .tc-prose .checklist-9>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(8px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(8px*var(--tw-space-y-reverse))}.tc-prose .checklist-1, .tc-prose .checklist-10, .tc-prose .checklist-2, .tc-prose .checklist-3, .tc-prose .checklist-4, .tc-prose .checklist-5, .tc-prose .checklist-6, .tc-prose .checklist-7, .tc-prose .checklist-8, .tc-prose .checklist-9{padding-left:0;&>li{position:relative;padding-left:32px}&>li{&:before{position:absolute;left:0;top:5px;height:14px;width:18px;-webkit-mask-repeat:no-repeat;-webkit-mask-size:contain;mask-repeat:no-repeat;mask-size:contain;content:"";mask-image:var(--checklist-mask);-webkit-mask-image:var(--checklist-mask)}}}.tc-prose .checklist-2>li{&:before{--tw-bg-opacity:1;background-color:rgb(var(--color-brand-hover)/var(--tw-bg-opacity,1))}& strong:first-child{--tw-text-opacity:1;color:rgb(var(--color-brand-hover)/var(--tw-text-opacity,1))}}.tc-prose .checklist-3>li{&:before{--tw-bg-opacity:1;background-color:rgb(3 107 198/var(--tw-bg-opacity,1))}& strong:first-child{--tw-text-opacity:1;color:rgb(3 107 198/var(--tw-text-opacity,1))}}.tc-prose .checklist-4{--checklist-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18' fill='none'%3E%3Ccircle cx='9' cy='9' r='9' fill='%23F99621'/%3E%3Cpath d='M4.7206 7.08106L3 8.95906L7.97059 14L16 5.69727L14.3692 4L8.06617 10.5405L4.7206 7.08106Z' fill='white'/%3E%3C/svg%3E");&>li{&:before{top:3px;height:18px;background-color:transparent;background-size:contain;background-repeat:no-repeat;background-image:var(--checklist-mask);mask-image:none;-webkit-mask-image:none}& strong:first-child{--tw-text-opacity:1;color:rgb(4 87 165/var(--tw-text-opacity,1))}}}.tc-prose .checklist-5{--checklist-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18' fill='none'%3E%3Ccircle cx='9' cy='9' r='9' fill='%23036BC6'/%3E%3Cpath d='M8 3H11V11H8V3Z' fill='%23D9D9D9'/%3E%3Ccircle cx='9.5' cy='13.5' r='1.5' fill='%23D9D9D9'/%3E%3C/svg%3E");&>li{&:before{top:3px;height:18px;background-color:transparent;background-size:contain;background-repeat:no-repeat;background-image:var(--checklist-mask);mask-image:none;-webkit-mask-image:none}}}.tc-prose .checklist-6{--checklist-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='11' viewBox='0 0 8 11' fill='none'%3E%3Crect x='7.52774' y='5.40642' width='3' height='7.64582' transform='rotate(135 7.52774 5.40642)' fill='%230457A5'/%3E%3Crect x='5.40641' y='3.28511' width='3' height='7.64582' transform='rotate(45 5.40641 3.28511)' fill='%230457A5'/%3E%3C/svg%3E");&>li{&:before{top:7px;height:11px;background-color:transparent;background-size:contain;background-repeat:no-repeat;background-image:var(--checklist-mask);mask-image:none;-webkit-mask-image:none}}}.tc-prose .checklist-7{--checklist-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='11' viewBox='0 0 8 11' fill='none'%3E%3Crect x='7.52774' y='5.40642' width='3' height='7.64582' transform='rotate(135 7.52774 5.40642)' fill='%23f3740d'/%3E%3Crect x='5.40641' y='3.28511' width='3' height='7.64582' transform='rotate(45 5.40641 3.28511)' fill='%23f3740d'/%3E%3C/svg%3E");&>li{&:before{top:7px;height:11px;background-color:transparent;background-size:contain;background-repeat:no-repeat;background-image:var(--checklist-mask);mask-image:none;-webkit-mask-image:none}}}.tc-prose .checklist-8{--checklist-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none'%3E%3Cpath d='M6.11766 10.3892L4 12.455L10.1176 18L20 8.867L17.9928 7L10.2353 14.1946L6.11766 10.3892Z' fill='%23036BC6'/%3E%3Crect x='1' y='1' width='22' height='22' rx='2' stroke='%230457A5' stroke-width='2'/%3E%3C/svg%3E");&>li{&:before{top:0;height:24px;width:24px;background-color:transparent;background-size:contain;background-repeat:no-repeat;background-image:var(--checklist-mask);mask-image:none;-webkit-mask-image:none}}&>li.has-large-font-size{&:before{top:10px}}}.tc-prose .checklist-9{--checklist-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 17 17' fill='none'%3E%3Crect x='1' y='1' width='15' height='15' stroke='%23F99621' stroke-width='2'/%3E%3C/svg%3E");&>li{&:before{background-color:transparent;background-size:contain;background-repeat:no-repeat;background-image:var(--checklist-mask);mask-image:none;-webkit-mask-image:none}}}.tc-prose .checklist-10{--checklist-mask:url("data:image/svg+xml;utf8,%3Csvg width='16' height='11' viewBox='0 0 16 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='7.52774' y='5.40642' width='3' height='7.64582' transform='rotate(135 7.52774 5.40642)' fill='%23F99621'/%3E%3Crect x='5.40641' y='3.28511' width='3' height='7.64582' transform='rotate(45 5.40641 3.28511)' fill='%23F99621'/%3E%3Crect x='15.5277' y='5.40642' width='3' height='7.64582' transform='rotate(135 15.5277 5.40642)' fill='%23F99621'/%3E%3Crect x='13.4064' y='3.28511' width='3' height='7.64582' transform='rotate(45 13.4064 3.28511)' fill='%23F99621'/%3E%3C/svg%3E");&>li{&:before{background-color:transparent;background-size:contain;background-repeat:no-repeat;background-image:var(--checklist-mask);mask-image:none;-webkit-mask-image:none}}}.tc-prose ol.gap-4 li+li{margin-top:16px}.tc-prose .stat-list-1{display:grid;list-style-type:none;grid-template-columns:repeat(1,minmax(0,1fr));gap:0;--tw-bg-opacity:1;background-color:rgb(4 87 165/var(--tw-bg-opacity,1));padding-top:16px;padding-bottom:16px;padding-left:0;font-size:14px;line-height:20px}@media (min-width:640px){.tc-prose .stat-list-1{grid-template-columns:repeat(2,minmax(0,1fr));padding-left:24px;padding-right:24px}}.tc-prose .stat-list-1{&>li{padding-left:44px;padding-right:44px;padding-top:16px;padding-bottom:16px;text-align:center;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media (min-width:640px){&>li{padding-left:24px;padding-right:24px}}&>li{& strong:first-child{margin-bottom:16px;display:block;font-size:50px;line-height:120%}}}.tc-prose .blockquote_bg{margin:0;--tw-bg-opacity:1;background-color:rgb(4 87 165/var(--tw-bg-opacity,1));padding:28px;font-size:22px;line-height:150%;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.tc-prose .blockquote_bg a{cursor:pointer;text-decoration-line:none}.tc-prose .blockquote_bg a, .tc-prose .blockquote_bg:hover a{color:inherit}.tc-prose .blockquote-1{text-align:center;margin:0;--tw-bg-opacity:1;background-color:rgb(4 87 165/var(--tw-bg-opacity,1));padding:28px;font-size:22px;line-height:150%;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.tc-prose .blockquote-1 a{cursor:pointer;text-decoration-line:none}.tc-prose .blockquote-1 a, .tc-prose .blockquote-1:hover a{color:inherit}.tc-prose .blockquote-2{margin:0;--tw-bg-opacity:1;background-color:rgb(4 87 165/var(--tw-bg-opacity,1));padding:28px;font-size:22px;line-height:150%;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.tc-prose .blockquote-2 a{cursor:pointer;text-decoration-line:none}.tc-prose .blockquote-2 a, .tc-prose .blockquote-2:hover a{color:inherit}.tc-prose .blockquote-3{--tw-text-opacity:1;color:rgb(57 164 247/var(--tw-text-opacity,1))}.tc-prose .blockquote-4{--tw-bg-opacity:1;background-color:rgb(4 87 165/var(--tw-bg-opacity,1));padding:28px;text-align:center;font-size:18px;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.tc-prose .bg-with-quote{padding:300px 12px 70px;& blockquote{margin-top:0}}@media (min-width:640px){.tc-prose picture:has(.alignright){float:right;margin-left:32px}}.tc-prose .hilite-xl{font-size:28px}.tc-prose .has-large-font-size{font-size:25px;line-height:1.5}@media (min-width:1024px){.tc-prose .has-large-font-size{font-size:28px}}
/* ---------------------------------------------------------------------------
   Rhythm rules that belong with the tc-prose global class but which Bricks
   cannot store: its global-class CSS parser silently strips any selector
   carrying :first-child or :last-child, and flattens a descendant selector
   that follows a class (".tc-prose .bg-with-quote blockquote" was saved as
   ".tc-prose .bg-with-quote"). Verified by round-tripping through
   bricks/create-global-class and bricks/update-global-class - both drop them.
   Reproduced here so the rhythm matches production. If Bricks ever learns
   these selectors, move them back into the global class.
   --------------------------------------------------------------------------- */
.tc-prose h2:first-child,
.tc-prose h3:first-child,
.tc-prose h4:first-child,
.tc-prose h5:first-child,
.tc-prose h6:first-child{margin-top:0}
.tc-prose .bg-with-quote blockquote{margin-top:0}

/* Paragraphs inside a pull quote inherit the quote's 22px/33px - the article p
   rule sets margins only, never font-size, or nested quotes collapse to 16/24.
   Production zeroes the outer margins of the first and last paragraph. */
.tc-prose blockquote > p:first-child{margin-top:0}
.tc-prose blockquote > p:last-child{margin-bottom:0}

/* ---------------------------------------------------------------------------
   Tailwind utilities that authors used directly inside post_content. The old
   theme compiled these from its Tailwind build; the Bricks site has no Tailwind,
   so they resolve to nothing and the affected text renders at body size.
   Values are Tailwind v3 defaults resolved at a 16px root.
   Add to this list as more are found - sweep with:
     [...content.querySelectorAll('*')].flatMap(e => [...e.classList])
   and diff the computed styles against production.
   --------------------------------------------------------------------------- */
.tc-prose .text-7xl{font-size:72px;line-height:1}

/* ---------------------------------------------------------------------------
   Zero-valued resets. Bricks' global-class CSS parser silently DROPS any
   declaration whose value is 0 ("padding-left:0", "margin-top:0" and friends
   all vanished on round-trip, while "margin:16px 0" survived), so these cannot
   live in the tc-prose global class. Specificity is deliberate:
     .tc-prose blockquote        (0,1,1) beats Bricks' bare "blockquote" but
                                 still loses to .tc-prose .blockquote-1 (0,2,0),
                                 which is what production does.
     .tc-prose img.alignright    (0,2,1) beats Bricks' ".alignright".
   --------------------------------------------------------------------------- */
/* Bricks styles bare <blockquote> as a pull quote: padding-left:30px and a 4px
   border-left. Production has neither (border: 0 everywhere). The border alone
   narrowed the quote by 4px and pushed one quote to an extra line. */
.tc-prose blockquote{padding-left:0;border-width:0}
.tc-prose img.alignright{margin:0}
/* Production zeroes the bottom margin on lists (they carry margin-top only).
   Bricks leaves the UA 16px, which collapses out of the content element and
   added 16px to the column. */
.tc-prose ul,.tc-prose ol{margin-bottom:0}
/* Table cells wrap their content in <p>. Production gives those no margin;
   the article p rule would otherwise add 32px to every cell. */
.tc-prose td>p,.tc-prose th>p{margin:0}
/* Bricks' frontend.min.css sets a bare `table{width:100%}`; the old theme sets nothing, so
   production tables shrink-to-fit unless the author gave a width attribute. Tables that DO
   carry `width="N"` are handled in tc-prose-styles.php (the attribute is a presentational
   hint and loses to Bricks' rule, so it is promoted to an inline style there). */
.tc-prose table:not([width]){width:auto}
/* Confine a wide table's overflow to the table itself. tc_prose_table_scroll() wraps every
   prose table in .tc-table-scroll; without this the authored 941px table pushed the whole
   PAGE sideways on a phone (document.scrollWidth 958 against a 440 viewport), dragging the
   body copy, sidebar and footer with it. At desktop the column is wider than the table so
   no scrollbar is produced and nothing changes. */
.tc-prose .tc-table-scroll{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
/* Inline links in article copy are the brand orange on production (rgb(243,116,13) =
   --tc-brand), with no underline. Under Bricks they inherited the body ink (rgb(33,37,41)),
   so every in-copy link in every blog / case-study / whitepaper body read as plain text —
   user-reported on the pet-care post ("Petcover" et al, 10 links on that page alone).
   `:not(#tcnull)` is REQUIRED, not decoration. Bricks' theme styles emit an ID-scoped
   `#brx-content a{color:…}` (1,0,1), which outranks a plain `.tc-prose a` (0,1,1) and even
   `.tc-prose p a` (0,1,2) — both were verified to lose. Repointing the Bricks theme style
   instead is wrong: that is site-wide, and production's nav and footer links are not orange.
   `:not(#tcnull)` adds one id to the count so this wins in-article only, and `#tcnull`
   matches nothing. Same trick the migration already uses for media queries.
   Blockquote links stay inherited: the ported `.blockquote-N a{color:inherit}` rules are
   raised the same way below, so pull quotes keep production's behaviour.
   SCOPED TO BLOG POSTS ONLY (`body.single-post`) at the user's instruction — case studies
   and whitepapers keep the inherited ink. Production's case-study bodies carry no in-copy
   links at all (checked: /client-case-studies/petcover/ has zero), so this cannot contradict
   production there; if a whitepaper ever turns out to use orange links, widen the selector
   rather than dropping the scope. */
body.single-post .tc-prose a:not(#tcnull){color:var(--tc-brand)}

/* Article table colours. Production (measured on the pet-care post):
     thead tr                  background #0457A5 (= --tc-primary)
     th                        #fff, 700, centred, 12px padding
     tbody tr:nth-child(even)  background rgba(135,201,237,.25)  (#87C9ED at 25%)
     tbody tr:nth-child(odd)   transparent
   Under Bricks the table rendered with no fills at all — white header, no zebra — so the
   header read as plain body text. User-reported twice. `:not(#tcnull)` again, because Bricks'
   ID-scoped theme-style rules for tables outrank plain class selectors (same reason as the
   link colour above). The stripe is kept as a literal: it is a 25% alpha of #87C9ED and no
   --tc-* token carries that value. */
body.single-post .tc-prose table thead tr:not(#tcnull){background-color:var(--tc-primary)}
body.single-post .tc-prose table th:not(#tcnull){color:#fff}
body.single-post .tc-prose table tbody tr:nth-child(even):not(#tcnull){background-color:rgba(135,201,237,.25)}
body.single-post .tc-prose [class*="blockquote"] a:not(#tcnull),
body.single-post .tc-prose .bg-with-quote a:not(#tcnull){color:inherit}

/* ---------------------------------------------------------------------------
   Case-study callout boxes: .box-solution / .box-outcomes
   Ported from the theme's COMPILED main.min.css, not from editor-styles.min.css
   or the Tailwind source — which is why they were missed on the first pass.

   These sit on Gutenberg group blocks inside case-study post_content
   (`<div class="wp-block-group box-solution ...">`), so they are the same kind of
   author-class dependency as the checklists. They were the whole 112px gap in the
   case-study single's group blocks.

   rem resolved to px at 16px/rem (2rem = 32, .5rem = 8), per the note above.

   NOTE the theme also sets `& ul { padding-left: 0 }` on these boxes, but
   `.has-sidebar .container ul { padding-left: 20px }` (0,2,1) outranks it (0,1,1)
   and production computes 20px. Deliberately omitted rather than reproduced —
   copying it here would win a tie it loses in production.
   --------------------------------------------------------------------------- */
.tc-prose .box-outcomes,
.tc-prose .box-solution{--checklist-mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='14'%3E%3Cpath d='M2.372 4.107 0 6.611l6.852 6.72L17.92 2.263 15.672 0 6.983 8.719z'/%3E%3C/svg%3E");border-radius:20px;padding:32px}

.tc-prose .box-outcomes ul,
.tc-prose .box-solution ul{list-style-type:none}

.tc-prose .box-outcomes ul>:not([hidden])~:not([hidden]),
.tc-prose .box-solution ul>:not([hidden])~:not([hidden]){margin-top:8px}

.tc-prose .box-outcomes li,
.tc-prose .box-solution li{position:relative;padding-left:32px}

.tc-prose .box-outcomes li::before,
.tc-prose .box-solution li::before{content:"";position:absolute;left:0;top:.45em;width:18px;height:14px;
  -webkit-mask-image:var(--checklist-mask);mask-image:var(--checklist-mask);
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  -webkit-mask-size:contain;mask-size:contain}

/* Solution box: primary-blue panel, tertiary-orange headings, ticks and strongs */
.tc-prose .box-solution{background-color:var(--tc-primary,#0457A5);color:#fff}
.tc-prose .box-solution h2{color:var(--tc-brand-hover,#F99621)}
.tc-prose .box-solution li::before{background-color:var(--tc-brand-hover,#F99621)}
.tc-prose .box-solution li strong{color:var(--tc-brand-hover,#F99621)}

/* Outcomes box: transparent panel, primary-600 headings and ticks */
.tc-prose .box-outcomes h2{color:var(--tc-primary-600,#036BC6)}
.tc-prose .box-outcomes h2+p{color:var(--tc-primary-600,#036BC6)}
.tc-prose .box-outcomes li::before{background-color:var(--tc-primary-600,#036BC6)}

/* ---------------------------------------------------------------------------
   Gutenberg heading + paragraph rhythm, from the theme's compiled main.min.css.
   `.wp-block-heading` only exists on block-editor headings, so this touches the
   case-study content and NOT the whitepaper or blog articles, whose h2s are
   plain <h2> and already match production.
   Values are the theme's, rem resolved to px at 16px/rem.
   --------------------------------------------------------------------------- */
.tc-prose h2.wp-block-heading{margin-bottom:24px}

@media (min-width:1024px){
  .tc-prose h2.wp-block-heading{margin-bottom:28px}
}

@media (min-width:1280px){
  .tc-prose h2.wp-block-heading{margin-bottom:40px}
}

/* margin-TOP is a flat 32, NOT the block rule's 24/40/60 — corrected July 31 2026.
   `.has-sidebar .container h2, h3, … { @apply mt-8 }` (elements.css) is (0,2,1) and
   out-specifies `* + h2.wp-block-heading` (0,1,1), so production computes 32 at
   every width. Verified on the blog single: mt 32 @800, @1200 and @1900.

   Why the original 24/40/60 port passed its own verification: on the case-study
   single EVERY `h2.wp-block-heading` is the first child of a `.wp-block-group.box-*`,
   so `h2:first-child { mt-0 }` applies and the sibling rule never matched anything.
   The value was wrong from the start and only a template with prose-level h2s
   could show it — the blog single, where it cost 28px x 4 headings. */
.tc-prose *+h2.wp-block-heading{margin-top:32px}

/* h3.wp-block-heading — NEVER PORTED. Every prose h3 rendered at the inherited
   16/24 instead of the theme's clamp. Found July 31 2026 on the OLDEST blog post
   (how-offshore-teams-redefine-virtual-assistance, May 2024): 5 h3s at 24px each
   against production's 42px = 90px, which was the entire 82px content-column
   delta. The newest post hid it because its h3s sit inside the callout groups.

   Production (theme main.min.css):

     * + h3.wp-block-heading {
       font-size: clamp(1.5625rem, 1.3596rem + 0.8658vw, 2.1875rem);
       margin-top: 1.5rem; margin-bottom: 1.5rem;
     }
     @media (min-width:1024px) { * + h3.wp-block-heading { margin: 2.5rem 0 } }

   rem -> px at 16px/rem: clamp(25px, 21.7536px + 0.8658vw, 35px) — it caps at
   ~1529px, so a 1490-only check reads 33.5 and looks plausible. Verified against
   production: 28.68 @800, 32.1432 @1200, 35 @1900.

   Weight and line-height come from the theme's bare `h3` (600 / 120%), which
   Bricks does not apply either. The `* +` sibling form is production's own: a
   first-child h3 deliberately keeps the bare 20px.

   MARGINS — measured, not copied from the block rule. Inside the sidebar layout
   `.has-sidebar .container h2, h3, … { @apply mt-8 }` (elements.css) is (0,2,1)
   and beats `* + h3.wp-block-heading` (0,1,1), so production's margin-TOP is a
   flat **32px** at every width, while margin-BOTTOM does follow the block rule
   (24 → 40 at ≥1024). Verified on production: mt 32 / mb 24 @800, mt 32 / mb 40
   @1200 and @1900. Porting the block rule's 24/40 top instead cost 8px per
   heading. */
.tc-prose *+h3.wp-block-heading{
  font-size:clamp(25px, 21.7536px + 0.8658vw, 35px);
  line-height:1.2;
  font-weight:600;
  margin-top:32px;
  margin-bottom:24px;
}

@media (min-width:1024px){
  .tc-prose *+h3.wp-block-heading{margin-bottom:40px}
}

/* Global in the theme; the last paragraph of any container drops its bottom
   margin. Matters wherever a <p> is the last child — inside the case-study
   callout boxes it was 16px of overshoot. */
.tc-prose p:last-child{margin-bottom:0}

/* ...and the mirror of it at the top. Production's FIRST prose paragraph computes
   margin-top 0 where ours had the flat 16px, which is the last 16px of the blog
   single's content column (3556 -> 3540). Same family as the theme's existing
   `h2:first-child / h3:first-child { mt-0 }` resets above. */
.tc-prose>p:first-child{margin-top:0}

/* Production renders Gutenberg group blocks as `display: block`, even though the
   markup carries `is-layout-flex` / `wp-container-core-group-is-layout-*`.
   WordPress emits an inline layout style for those classes (display:flex +
   flex-direction:column + gap) and it IS in effect here but is not on production.

   The difference is not cosmetic: in flex layout adjacent margins do NOT collapse,
   so the h2's 40px bottom margin and the next paragraph's 16px top margin stack
   instead of collapsing to 40 — that plus the 8px gap was +48px on every box.
   Forcing block restores production's box model exactly. */
.tc-prose .wp-block-group.is-layout-flex{display:block;gap:normal}

/* Production renders block images with no margin; the browser/Bricks default gave
   ours 16px top and bottom, and the top margin collapsed out of the content
   element into the Bricks column wrapper — 16px on the section that the content
   element's own height never showed. */
/* Bricks sets `margin-block: 1em` (a LOGICAL property, so a physical `margin`
   shorthand does not touch it) via
     .wp-block-image:not(.alignleft):not(.aligncenter):not(.alignright)
                    :not(.alignwide):not(.alignfull)
   which is specificity (0,6,0) — a plain `.tc-prose figure.wp-block-image`
   (0,2,1) loses. Mirroring Bricks' own selector shape inside .tc-prose gives
   (0,7,1) and reads as "the same set Bricks targets, but only in article
   content" — clearer than stacking !important or repeating the class six times. */
.tc-prose figure.wp-block-image:not(.alignleft):not(.aligncenter):not(.alignright):not(.alignwide):not(.alignfull){margin:0;margin-block:0}
