/* ==========================================================================
   MRS - block bridge
   --------------------------------------------------------------------------
   mrs.css is the approved design system and is not edited. This file maps core
   block markup onto it, so a page assembled in the block editor renders in the
   same language as the approved templates.

   Every rule here exists because core emits different markup than the static
   templates did. Nothing new is invented; the values all come from the tokens.
   ========================================================================== */

/* --- buttons -------------------------------------------------------------
   theme.json covers colour, radius, padding and type. What it cannot express
   is the flex box and the gap, so those live here. */
.wp-block-button__link {
  /* No flex gap here. The design's .btn carries gap:.6rem for buttons that
     hold an icon beside a label, but core emits the label as a run of
     anonymous flex items, so the gap lands between the words and widened
     every button by about 38px. Measured against design/home.html. */
  display: inline-flex;
  align-items: center;
  transition: background .18s ease, color .18s ease, border-color .18s ease;
}

/* The primary button's hover.
   theme.json already sets it, but WordPress wraps element styles in :where() to
   keep their specificity at zero, so mrs.css's global `a:hover { color:
   var(--navy-lift) }` beat it and coloured the label the same #4A56C4 as the
   hover background: contrast ratio 1.0, the text vanished. Every primary button
   on the site was affected, not just the one on /bakery-partners/.
   The design's own .btn:hover lifts to --navy-lift. This goes the other way, to
   --navy-deep, because that is what the operator asked for and white on
   #1B2058 is the stronger pairing of the two. */
.wp-block-button .wp-block-button__link:hover,
.wp-block-button .wp-block-button__link:focus-visible {
  background: var(--navy-deep);
  border-color: var(--navy-deep);
  color: #fff;
}

.wp-block-button.is-style-mrs-ghost .wp-block-button__link {
  background: transparent;
  color: var(--navy);
  border-color: var(--navy);
}
.wp-block-button.is-style-mrs-ghost .wp-block-button__link:hover {
  background: var(--navy);
  color: #fff;
}

.wp-block-button.is-style-mrs-light .wp-block-button__link {
  background: #fff;
  border-color: #fff;
  color: var(--navy-deep);
}
.wp-block-button.is-style-mrs-light .wp-block-button__link:hover {
  background: rgba(255,255,255,.86);
  border-color: rgba(255,255,255,.86);
  color: var(--navy-deep);
}

.wp-block-button.is-style-mrs-onnavy .wp-block-button__link {
  background: transparent;
  border-color: rgba(255,255,255,.55);
  color: #fff;
}
.wp-block-button.is-style-mrs-onnavy .wp-block-button__link:hover {
  background: #fff;
  border-color: #fff;
  color: var(--navy-deep);
}

/* the card action link: type, not a box */
.wp-block-button.is-style-mrs-arrow .wp-block-button__link {
  background: transparent;
  border: 0;
  padding: 0;
  color: var(--navy);
  gap: .55rem;
}
.wp-block-button.is-style-mrs-arrow .wp-block-button__link::after {
  content: "";
  width: 1.5rem;
  height: 1px;
  background: currentColor;
  transition: width .22s ease;
}
.wp-block-button.is-style-mrs-arrow .wp-block-button__link:hover {
  background: transparent;
  color: var(--navy-lift);
}
.wp-block-button.is-style-mrs-arrow .wp-block-button__link:hover::after { width: 2.4rem; }

/* --- groups: bands and panels ------------------------------------------- */
.wp-block-group.is-style-mrs-band       { padding-block: var(--band); }
.wp-block-group.is-style-mrs-band-tight { padding-block: var(--band-tight); }
.wp-block-group.is-style-mrs-band-stone { background: var(--stone); }

.wp-block-group.is-style-mrs-panel-navy {
  background: var(--navy-deep);
  color: #fff;
}
.is-style-mrs-panel-navy :is(h1, h2, h3, h4, h5) { color: #fff; }
.is-style-mrs-panel-navy h6 { color: var(--amber-lift, #E0A85A); }
.is-style-mrs-panel-navy p { color: rgba(255,255,255,.78); }
/* :not(.wp-block-button__link) matters: a bare descendant selector here
   out-specifies the button styles and paints a white label on a white button. */
.is-style-mrs-panel-navy a:not(.wp-block-button__link) { color: #fff; }
.is-style-mrs-panel-navy hr { border-color: var(--line-dark); }

/* --- paragraphs ---------------------------------------------------------- */
p.is-style-mrs-lead {
  font-size: var(--wp--preset--font-size--lead);
  line-height: 1.62;
  color: var(--ink-mid);
}
.is-style-mrs-panel-navy p.is-style-mrs-lead { color: rgba(255,255,255,.78); }

p.is-style-mrs-util { font-variant-numeric: tabular-nums; }

/* --- lists --------------------------------------------------------------- */
ul.is-style-mrs-ticks,
ul.is-style-mrs-ticks-2c {
  list-style: none;
  /* The reset is for the bullet indent, not for the space above the list.
     Core's flow layout moves the gap between siblings onto the following
     element's top margin and zeroes every bottom margin, and it does that from
     inside :where(), which has no specificity. So `margin: 0` here beat it and
     a list that followed a paragraph sat straight on it, while the same list
     after the same paragraph elsewhere kept 18px because that container is not
     a flow layout. Adjacent margins collapse, so restoring this does not double
     the gap where the paragraph still has one of its own. */
  margin-block-start: var(--wp--preset--spacing--30);
  margin-block-end: 0;
  margin-inline: 0;
  padding: 0;
}
ul.is-style-mrs-ticks li,
ul.is-style-mrs-ticks-2c li {
  position: relative;
  padding-left: 1.6rem;
  margin-bottom: .7rem;
  color: var(--ink-mid);
}
ul.is-style-mrs-ticks li::before,
ul.is-style-mrs-ticks-2c li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .68em;
  width: .55rem;
  height: 1px;
  background: var(--amber);
}
.is-style-mrs-panel-navy ul.is-style-mrs-ticks li,
.is-style-mrs-panel-navy ul.is-style-mrs-ticks-2c li { color: rgba(255,255,255,.8); }

@media (min-width: 44rem) {
  ul.is-style-mrs-ticks-2c { columns: 2; column-gap: 2.5rem; }
  ul.is-style-mrs-ticks-2c li { break-inside: avoid; }
}

/* --- separators ---------------------------------------------------------- */
hr.wp-block-separator.is-style-mrs-amber {
  border: 0;
  border-top: 2px solid var(--amber);
  width: 3.5rem;
  margin-inline: 0;
  opacity: 1;
}

/* --- feature rows -------------------------------------------------------- */
/* Core columns stack at 781px. The design switches at 62rem, where the two
   columns stop being cramped, so the breakpoint is restated here. */
@media (min-width: 782px) and (max-width: 61.99rem) {
  .wp-block-columns.is-style-mrs-feature,
  .wp-block-columns.is-style-mrs-feature-flip { flex-wrap: wrap !important; }
  .wp-block-columns.is-style-mrs-feature > .wp-block-column,
  .wp-block-columns.is-style-mrs-feature-flip > .wp-block-column { flex-basis: 100% !important; }
}
@media (max-width: 61.99rem) {
  /* A hero stacks headline-first: the photo belongs under the text on a narrow
     screen, not above it. The DOM order is image then copy, so the stacked
     column is reversed. Only the hero (mrs-hero); body feature rows keep their
     image-first reading order. */
  .wp-block-columns.is-style-mrs-feature-flip.mrs-hero { flex-direction: column-reverse; }
}
@media (min-width: 62rem) {
  .wp-block-columns.is-style-mrs-feature,
  .wp-block-columns.is-style-mrs-feature-flip {
    gap: clamp(1.75rem, 1rem + 3.4vw, 4.5rem);
    align-items: center;
  }
  .wp-block-columns.is-style-mrs-feature-flip { flex-direction: row-reverse; }
}
.wp-block-columns:is(.is-style-mrs-feature, .is-style-mrs-feature-flip) figure.wp-block-image img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: 2px;
}

/* --- quotes -------------------------------------------------------------- */
.wp-block-quote.is-style-mrs-pull {
  border: 0;
  padding: 0;
  margin-inline: 0;
}
.wp-block-quote.is-style-mrs-pull p {
  font-family: var(--font-display);
  font-size: clamp(1.35rem, 1.15rem + .9vw, 1.85rem);
  line-height: 1.32;
  color: var(--ink);
}
.wp-block-quote.is-style-mrs-pull cite {
  font-family: var(--font-body);
  font-style: normal;
  font-size: 1rem;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.is-style-mrs-panel-navy .wp-block-quote.is-style-mrs-pull p { color: #fff; }
.is-style-mrs-panel-navy .wp-block-quote.is-style-mrs-pull cite { color: rgba(255,255,255,.62); }

/* The testimonial band: one centred block rather than a two-column split.
   The eyebrow is a flex row carrying its own rule, so it needs centring in its
   own right, and the amber separator above the quote is a full-width <hr> that
   has to be narrowed or it runs the width of the band. */
/* The class is doubled so the cap survives core's constrained-layout width, and
   the separator selector carries the element and both classes so it outranks
   the amber rule's own margin-inline: 0. */
.mrs-quote-band.mrs-quote-band {
  max-width: 46rem;
  margin-inline: auto;
  text-align: center;
}
.mrs-quote-band .eyebrow { justify-content: center; }
.mrs-quote-band > :first-child { margin-block-start: 0; }
.mrs-quote-band hr.wp-block-separator.is-style-mrs-amber { margin-inline: auto; }
.mrs-quote-band .wp-block-quote.is-style-mrs-pull { margin-inline: auto; }
.mrs-quote-band .wp-block-quote.is-style-mrs-pull cite { display: block; margin-top: 1rem; }

/* --- images -------------------------------------------------------------- */
.wp-block-image.is-style-mrs-square-corners img { border-radius: 0; }
.wp-block-image img { border-radius: 2px; }

/* ==========================================================================
   Header and footer template parts
   ========================================================================== */

.wp-block-template-part > .mrs-topbar {
  background: var(--navy-deep);
  color: rgba(255,255,255,.8);
}
.mrs-topbar p, .mrs-topbar a { font-size: 1rem; color: rgba(255,255,255,.8); }
.mrs-topbar a { text-decoration: none; }
.mrs-topbar a:hover { color: #fff; text-decoration: underline; }
.mrs-topbar p { margin: 0; }

.mrs-header {
  position: sticky;
  top: 0;
  z-index: 50;
  background: rgba(252,251,249,.94);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--line-soft);
}

/* backdrop-filter makes an element a containing block for position:fixed
   descendants, so the navigation block's overlay was being trapped inside the
   header and rendered 71px tall: the mobile menu did not work at all.
   The blur comes from the design, where the mobile nav is a panel inside the
   header rather than a fixed overlay, so the design never hit this. It stays on
   desktop, where the inline nav is used, and comes off wherever the overlay is. */
@media (max-width: 66rem) {
  .mrs-header {
    backdrop-filter: none;
    background: var(--paper);
  }
}

/* The logo file is a square favicon: navy artwork on an opaque white disc.
   Multiply drops the disc out against the warm-white page, and the crop takes
   the badge to its artwork rather than its padding. */
.mrs-header .wp-block-site-logo img {
  width: 175px;
  height: auto;
  aspect-ratio: 175 / 101;
  object-fit: cover;
  mix-blend-mode: multiply;
}
@media (max-width: 61.99rem) {
  .mrs-header .wp-block-site-logo img { width: 104px; }
}

/* --- footer -------------------------------------------------------------- */
.mrs-footer {
  background: var(--navy-deep);
  color: rgba(255,255,255,.78);
}
.mrs-footer :is(p, li, a) { color: rgba(255,255,255,.78); }
.mrs-footer a { text-decoration: none; }
.mrs-footer a:hover { color: #fff; }
.mrs-footer h2, .mrs-footer h3 {
  font-family: var(--font-body);
  font-size: .875rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: rgba(255,255,255,.5);
  /* The approved design puts 16px under each column heading. The list below it
     has its margins zeroed just below, and core gives a heading no bottom
     margin of its own, so without this the heading sat directly on the first
     link. */
  margin-block-end: 1rem;
}
.mrs-footer .wp-block-navigation { flex-direction: column; align-items: flex-start; gap: .55rem; }
/* The footer link columns are lists semantically, but markers would read as
   decoration next to the hairline rules the design uses elsewhere. */
.mrs-footer ul.wp-block-list { list-style: none; margin: 0; padding: 0; }
.mrs-footer ul.wp-block-list li { margin-bottom: .55rem; font-size: 1rem; }
/* Reverse mark on the dark panel, matching the approved design: the
   navy-on-white file is inverted to white-on-black and screened over the
   indigo, which drops the black away and leaves a clean white mark.
   brightness(0) invert(1) would flood the whole disc white instead. */
.mrs-footer .wp-block-site-logo img {
  width: 150px;
  height: auto;
  aspect-ratio: 175 / 101;
  object-fit: cover;
  object-position: center;
  filter: invert(1) grayscale(1) brightness(1.9);
  mix-blend-mode: screen;
  margin-bottom: 1.25rem;
}
.mrs-footer-base {
  border-top: 1px solid rgba(255,255,255,.16);
  font-size: 1rem;
  letter-spacing: .06em;
  color: rgba(255,255,255,.5);
}
.mrs-footer-base p { color: rgba(255,255,255,.5); }

/* --- utility ------------------------------------------------------------- */
.mrs-flush { padding-inline: 0 !important; }

/* ==========================================================================
   Catalog rows
   --------------------------------------------------------------------------
   The catalog carries no product photography, so the list has to earn its
   keep as type. Hairline rules and tabular SKUs give it the same delivery
   docket voice as the manifest strip, which makes a text list read as a
   deliberate reference rather than as missing images.
   ========================================================================== */

.mrs-catalog-rows { border-top: 1px solid var(--line); }

.mrs-catalog-row {
  border-bottom: 1px solid var(--line-soft);
  padding-block: 1.15rem;
  gap: 1rem 1.5rem;
  align-items: baseline;
}
.mrs-catalog-row:hover { background: var(--stone); }

.mrs-catalog-row h3 { margin: 0; }
.mrs-catalog-row h3 a { text-decoration: none; color: var(--ink); }
.mrs-catalog-row:hover h3 a { color: var(--navy); }

.mrs-catalog-row .wp-block-post-terms { margin: .25rem 0 0; }
.mrs-catalog-row .wp-block-post-terms a { color: var(--ink-soft); text-decoration: none; }
.mrs-catalog-row .wp-block-post-terms a:hover { color: var(--navy); }

.mrs-catalog-row .mrs-sku {
  margin: 0;
  letter-spacing: .06em;
  white-space: nowrap;
}
/* An imported row with no SKU would otherwise leave a bare label. */
.mrs-catalog-row .mrs-sku:empty { display: none; }

/* the single product manifest strip needs its supplier and dietary terms to
   sit on the figure baseline rather than inheriting link styling */
.manifest__item .wp-block-post-terms {
  font-family: var(--font-body);
  font-weight: 700;
  line-height: 1;
  color: var(--navy);
}
.manifest__item .wp-block-post-terms a { color: inherit; text-decoration: none; }
.manifest__item .wp-block-post-terms:empty::before { content: "\2014"; color: var(--ink-soft); }

/* ==========================================================================
   Pattern components
   --------------------------------------------------------------------------
   The approved design wraps each card in a single <a>. Core cannot do that
   without losing the heading and paragraph semantics inside the link, so the
   card is a group and the arrow link is stretched over it instead: same
   click target, correct markup, and the link text still names the
   destination for a screen reader.
   ========================================================================== */

.mrs-cards .wp-block-column { display: flex; }

/* A card is sized by the grid it belongs to, not by how many cards share its
   row. Core gives every column flex-basis:0 and flex-grow:1, so the last row
   of a set that does not divide evenly stretched to fill the width and its
   cards came out wider than the ones above them.

   Core's own rule for a column is two classes deep and is printed after this
   stylesheet, so a tie goes to core: the selectors below carry the columns
   class as well to win outright.

   Core's mobile rule sets flex-basis:100% with !important below 782px, so the
   stacking behaviour is untouched. */
.wp-block-columns.mrs-cards--3 > .wp-block-column {
  flex: 0 0 calc((100% - 2 * var(--wp--preset--spacing--40)) / 3);
}
.wp-block-columns.mrs-cards--4 > .wp-block-column {
  flex: 0 0 calc((100% - 3 * var(--wp--preset--spacing--40)) / 4);
}

.mrs-card {
  position: relative;
  display: flex;
  flex-direction: column;
  width: 100%;
  background: #fff;
  border: 1px solid var(--line-soft);
  border-radius: 2px;
  overflow: hidden;
  transition: border-color .2s ease, transform .2s ease;
}
.mrs-card:hover { border-color: var(--navy); transform: translateY(-3px); }

.mrs-card__media { margin: 0; aspect-ratio: 4 / 3; overflow: hidden; background: var(--stone); }
.mrs-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0;
  transition: transform .5s ease;
}
.mrs-card:hover .mrs-card__media img { transform: scale(1.035); }

.mrs-card__body {
  padding: 1.6rem 1.5rem 1.75rem;
  display: flex;
  flex-direction: column;
  gap: .7rem;
  flex: 1;
}
.mrs-card__title { margin: 0; transition: color .18s ease; }
.mrs-card:hover .mrs-card__title { color: var(--navy); }
.mrs-card__text { margin: 0; flex: 1; font-size: 1rem; }
.mrs-card__action { margin-top: .45rem; }

/* stretch the arrow link across the whole card */
.mrs-card__action .wp-block-button__link::before {
  content: "";
  position: absolute;
  inset: 0;
}

/* --- hero ---------------------------------------------------------------- */

/* --- three reasons ------------------------------------------------------- */
.mrs-defgrid__item { border-top: 1px solid var(--line); padding-top: 1.25rem; }
.mrs-defgrid__item h3 { margin: 0 0 .55rem; }
.mrs-defgrid__item p { margin: 0; font-size: 1rem; }
.is-style-mrs-panel-navy .mrs-defgrid__item { border-top-color: var(--line-dark); }

/* --- closing CTA over a photo --------------------------------------------
   Centred, matching .cta-photo__inner in the approved design. This is the one
   place on the site where centred type is correct: it is the single prefooter
   moment, and the symmetry is what makes it read as a close rather than as
   another section. */
.mrs-cta-photo .wp-block-cover__inner-container {
  max-width: 60rem;
  margin-inline: auto;
  text-align: center;
}
.mrs-cta-photo .is-style-mrs-lead { margin-top: 1.25rem; }
.mrs-cta-photo .wp-block-buttons { justify-content: center; margin-top: 2rem; }
.mrs-cta-photo p { color: rgba(255,255,255,.82); }

/* ==========================================================================
   Partner wall
   --------------------------------------------------------------------------
   The approved design calls for a logo wall. Until a confirmed, current logo
   set arrives this is a name wall: same grid, same rhythm, and every cell
   already links to the filtered catalog, so dropping logos in later is a
   change of contents rather than of structure. The count beside each name is
   real, which makes the list useful rather than decorative.
   ========================================================================== */

/* Separated tiles rather than a hairline grid. A 1px-gap grid over a tinted
   background draws the gap as a rule, which looks right until the last row is
   short: the leftover columns then render as an empty grey slab. */
.mrs-logo-wall__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 13.5rem), 1fr));
  gap: .75rem;
}

/* Grouped by product category, which is the arrangement the approved copy
   asks for. The container stacks the groups; each group holds its own grid, so
   a short group does not leave holes in the next one's rows. */
.mrs-logo-wall--grouped {
  display: flex;
  flex-direction: column;
  gap: clamp(2rem, 1.4rem + 2vw, 3rem);
}
.mrs-logo-group__head {
  font-family: var(--font-display, Georgia, serif);
  font-size: 1.25rem;
  font-weight: 600;
  margin: 0 0 .9rem;
  padding-bottom: .55rem;
  border-bottom: 1px solid var(--line-soft);
}
.mrs-logo-group__head a { color: inherit; text-decoration: none; }
.mrs-logo-group__head a:hover { color: var(--amber); }

/* A white tile rather than the paper ground: about half the supplied logos
   carry an opaque white background of their own, and on any other colour those
   read as pale rectangles sitting in the grid. */
.mrs-logo-wall__cell {
  margin: 0;
  background: #fff;
  border: 1px solid var(--line-soft);
  padding: 1.15rem 1.15rem 1rem;
  display: flex;
  flex-direction: column;
  gap: .8rem;
  min-height: 10.5rem;
}
.mrs-logo-wall__cell:hover { background: var(--paper); }

/* The logo box is a fixed height so the names below it sit on one baseline
   across the row, whatever proportions the artwork arrives in. */
.mrs-logo-wall__img {
  margin: 0;
  flex: 1 1 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 0;
}
.mrs-logo-wall__img a,
.mrs-logo-wall__img img {
  display: block;
  max-height: 5.4rem;
  width: auto;
  max-width: 100%;
  object-fit: contain;
}

.mrs-logo-wall__name {
  margin: 0;
  padding-top: .7rem;
  border-top: 1px solid var(--line-soft);
}
.mrs-logo-wall__name a {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: .6rem;
  width: 100%;
  text-decoration: none;
  color: var(--ink);
  font-size: .9rem;
  line-height: 1.3;
}
.mrs-logo-wall__cell:hover .mrs-logo-wall__name a { color: var(--navy); }

.mrs-logo-wall__count {
  font-variant-numeric: tabular-nums;
  font-size: .78rem;
  letter-spacing: .06em;
  color: var(--ink-soft);
  flex: none;
}

/* --- form slot ----------------------------------------------------------- */
/* Marks the place the contact form drops into, so the page reads as finished
   apart from one obvious gap rather than as broken. */
.mrs-form-slot {
  border: 1px dashed var(--line);
  border-radius: 2px;
  padding: 1.4rem 1.5rem;
  color: var(--ink-soft);
  background: var(--surface);
  max-width: 46rem;
}

/* The manifest is a grid in mrs.css. WordPress's flow layout adds a top margin
   between siblings, which in a grid context pushes cells off their rows, so it
   is cleared here rather than by editing the approved stylesheet. */
.wp-block-group.manifest > * { margin-block-start: 0; }
.mrs-logo-wall > *, .mrs-logo-wall__grid > * { margin-block-start: 0; }

/* --- profile rows -------------------------------------------------------- */
/* Name and role beside the bio. A hairline above each profile does the work a
   portrait would otherwise do: it separates one person from the next without
   pretending an image is coming. */
.mrs-profile {
  border-top: 1px solid var(--line);
  padding-top: 2rem;
  margin-bottom: 2.75rem;
}
.mrs-profile:last-child { margin-bottom: 0; }
.mrs-profile h2 { margin: 0 0 .5rem; }
.mrs-profile .manifest__label { margin: 0; }

/* ==========================================================================
   Wide alignment gutters
   --------------------------------------------------------------------------
   The approved design's .wrap is max-width 1320px INCLUDING its inline
   padding, so at desktop the content box is 1240px starting 100px from the
   viewport edge.

   WordPress gives an alignwide child max-width 1320px and centres it, without
   the root padding, so content started at 60px: 40px further left than the
   design on each side. Restoring the gutter here makes an alignwide block
   land exactly where the design puts it, and box-sizing is already border-box
   so the outer width stays 1320px.

   Verified by pixel diff against design/home.html: header content x moved
   from 61 to 103, matching the template.
   ========================================================================== */
.is-layout-constrained > .alignwide {
  padding-inline: clamp(1.15rem, .6rem + 2.2vw, 2.5rem);
}

/* --- inverted manifest, for indigo panels -------------------------------- */
.manifest--invert .manifest__figure { color: #fff; }
.manifest--invert .manifest__label  { color: rgba(255,255,255,.62); }
.is-style-mrs-panel-navy .manifest,
.is-style-mrs-panel-navy .manifest__item { border-color: var(--line-dark); }
.is-style-mrs-panel-navy .manifest__item { border-left-color: rgba(255,255,255,.14); }

/* --- full-width amber rule ------------------------------------------------ */
/* The design's marker for a section that stands apart. Full container width,
   not the short centred rule core gives a separator by default. */
hr.wp-block-separator.is-style-mrs-amber-full {
  border: 0;
  border-top: 3px solid var(--amber);
  width: 100%;
  max-width: none;
  opacity: 1;
  margin: 0 0 clamp(2rem, 1.3rem + 2.4vw, 3.25rem);
}

/* --- hero manifest -------------------------------------------------------- */
/* The design butts the manifest strip straight up against the bottom edge of
   the hero photograph. The pattern carries a top margin for use elsewhere on
   a page, so it is removed only in the hero. */
.mrs-hero + .wp-block-group.manifest { margin-top: 0; }

/* Hero photograph. The design fixes its shape rather than stretching it to the
   text: 4:3 while the columns are stacked, square once they sit side by side at
   62rem. Letting the image drive the row height instead made the hero ~100px
   taller than the template and wrapped the two buttons onto separate lines. */
.mrs-hero .mrs-hero__media { margin: 0; }
.mrs-hero .mrs-hero__media img {
  width: 100%;
  height: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: 2px;
}
@media (min-width: 62rem) {
  .mrs-hero .mrs-hero__media img { aspect-ratio: 1 / 1; }
}

/* ==========================================================================
   Uppercase label scale
   --------------------------------------------------------------------------
   mrs.css sets every uppercase label to .875rem in a late block that overrides
   its own earlier declarations:

     "Set in capitals, so 14px stays legible and reads as a label rather than
      competing with the body copy."

   theme.json was first built from those earlier declarations, so eyebrows,
   button labels and card actions all rendered at 16px. That made every button
   14% too wide, wrapped the hero's two buttons onto separate lines, and
   inflated the vertical rhythm of every page.

   Elements that carry an mrs.css class (.eyebrow, .manifest__label,
   .brand__tag) already inherit the correct size. These are the block-editor
   equivalents that do not.
   ========================================================================== */
.wp-block-button.is-style-mrs-arrow .wp-block-button__link { font-size: .875rem; }

/* --- FAQ accordions ------------------------------------------------------ */
/* Core Details blocks, dressed as the design's hairline list. No plugin, and
   the markup is a native disclosure widget so it works without JavaScript. */
.mrs-faq {
  border-top: 1px solid var(--line);
  padding-block: 1.15rem;
}
.mrs-faq:last-of-type { border-bottom: 1px solid var(--line); }
.mrs-faq summary {
  font-family: var(--font-display);
  font-size: clamp(1.25rem, 1.12rem + .55vw, 1.5rem);
  line-height: 1.3;
  cursor: pointer;
  color: var(--ink);
}
.mrs-faq summary:hover { color: var(--navy); }
.mrs-faq[open] summary { color: var(--navy); margin-bottom: .75rem; }
/* No measure cap on the answer: the question above it runs the full width of
   the band, and an answer indented to 62 characters under a full-width question
   reads as a different column. */
.mrs-faq p { margin: 0; color: var(--ink-mid); }

/* --- query cards ---------------------------------------------------------- */
/* A card is already a link target, so underlining the title and the category
   label inside it adds noise the design does not have. */
.mrs-card .wp-block-post-title a,
.mrs-card .wp-block-post-terms a {
  text-decoration: none;
  color: inherit;
}
.mrs-card .wp-block-post-title a { color: var(--ink); }
.mrs-card:hover .wp-block-post-title a { color: var(--navy); }
.mrs-card .wp-block-post-terms { margin: 0; }
.mrs-card .wp-block-post-excerpt__excerpt { margin: 0; font-size: 1rem; color: var(--ink-mid); }
.mrs-card .wp-block-post-excerpt__more-text { display: none; }
.mrs-card .wp-block-post-featured-image { margin: 0; aspect-ratio: 4 / 3; overflow: hidden; }
.mrs-card .wp-block-post-featured-image img { width: 100%; height: 100%; object-fit: cover; border-radius: 0; }

/* the featured article row at the top of the Resource Center */
.wp-block-query .wp-block-post-title a { text-decoration: none; }
.wp-block-query .wp-block-post-title a:hover { color: var(--navy-lift); }
.wp-block-query .wp-block-post-terms a { text-decoration: none; }

/* ==========================================================================
   Forminator, dressed as the design's forms
   --------------------------------------------------------------------------
   The plugin's own stylesheet is switched off (design: none) so there is no
   CSS fight, and its markup is mapped onto the form components already in
   mrs.css: .field, .field-grid, .fieldset, .checks, .check.

   Everything here exists because Forminator emits its own class names. The
   values all come from the approved design.
   ========================================================================== */

/* Left, not centred. The form is a direct child of the band, and core's
   constrained-layout rule sets margin-left/right to auto with !important, so a
   plain margin-inline:0 lost and the form sat in the middle of the page with
   the heading above it flush left. Hence the !important here: it is answering
   core's, not overriding a considered value.
   The measure stays: a text input 1,240px wide is not easier to fill in. */
.mrs-form-slot-wrap > .forminator-ui,
.forminator-ui {
  max-width: 52rem;
  margin-inline: 0 !important;
}

/* rows and columns */
.forminator-row {
  display: grid;
  gap: 1.1rem;
  grid-template-columns: repeat(12, 1fr);
  margin-bottom: 1.1rem;
}
.forminator-col { grid-column: span 12; }
@media (min-width: 40rem) {
  .forminator-col-4 { grid-column: span 4; }
  .forminator-col-6 { grid-column: span 6; }
  .forminator-col-12 { grid-column: span 12; }
}

/* labels */
.forminator-label {
  display: block;
  font-family: var(--font-body);
  font-size: .875rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: .45rem;
}
.forminator-required { color: var(--amber); }
.forminator-description { font-size: .9rem; color: var(--ink-soft); margin-top: .35rem; }

/* text inputs */
.forminator-input,
.forminator-textarea,
.forminator-select,
.forminator-ui select {
  font-family: var(--font-body);
  font-size: 1rem;
  color: var(--ink);
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: .85rem .9rem;
  width: 100%;
}
.forminator-input:focus,
.forminator-textarea:focus,
.forminator-select:focus,
.forminator-ui select:focus {
  border-color: var(--navy);
  outline: none;
  box-shadow: 0 0 0 3px rgba(46,55,144,.13);
}
.forminator-textarea { min-height: 9rem; resize: vertical; }

/* checkbox and radio groups: the design's .checks grid */
.forminator-field-checkbox,
.forminator-field-radio {
  display: grid;
  gap: .6rem;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr));
  margin-top: .25rem;
}
.forminator-checkbox,
.forminator-radio {
  display: flex;
  align-items: flex-start;
  gap: .6rem;
  font-size: 1rem;
  line-height: 1.45;
  color: var(--ink-mid);
  cursor: pointer;
}
.forminator-checkbox input,
.forminator-radio input {
  margin-top: .28rem;
  accent-color: var(--navy);
  flex: none;
}
.forminator-checkbox-label,
.forminator-radio-label { display: inline; }

/* the submit button uses the site's button, not the plugin's */
.forminator-button-submit {
  display: inline-flex;
  align-items: center;
  font-family: var(--font-body);
  font-size: .875rem;
  font-weight: 700;
  letter-spacing: .11em;
  text-transform: uppercase;
  padding: .95rem 1.7rem;
  border: 1px solid var(--navy);
  border-radius: 2px;
  background: var(--navy);
  color: #fff;
  cursor: pointer;
  transition: background .18s ease, border-color .18s ease;
}
.forminator-button-submit:hover { background: var(--navy-lift); border-color: var(--navy-lift); }

/* A form inside a navy panel: the label colour and the submit button are both
   set for paper and disappear against the dark ground. The inputs stay white,
   which is what makes the field obvious at a glance on a band whose whole job
   is to be noticed. */
.is-style-mrs-panel-navy .forminator-label { color: rgba(255,255,255,.8); }
.is-style-mrs-panel-navy .forminator-description { color: rgba(255,255,255,.65); }
.is-style-mrs-panel-navy .forminator-input,
.is-style-mrs-panel-navy .forminator-select,
.is-style-mrs-panel-navy .forminator-ui select { border-color: transparent; }
.is-style-mrs-panel-navy .forminator-button-submit {
  background: #fff;
  border-color: #fff;
  color: var(--navy);
}
.is-style-mrs-panel-navy .forminator-button-submit:hover {
  background: var(--paper);
  border-color: var(--paper);
  color: var(--navy-deep);
}

/* The free-guide band under the homepage hero: the book's cover beside a short
   teaser. Deep enough to be noticed, shallow enough that it does not become a
   section of its own. */
.mrs-guide-banner {
  background: var(--navy-deep);
  padding-block: clamp(1.6rem, 1.1rem + 1.6vw, 2.4rem);
}
.mrs-guide-banner__inner {
  display: grid;
  gap: clamp(1.4rem, 1rem + 1.6vw, 2.4rem);
  align-items: center;
}
@media (min-width: 46rem) {
  .mrs-guide-banner__inner { grid-template-columns: minmax(0, 1fr) 165px; }
}
.mrs-guide-banner__cover { margin: 0; }
.mrs-guide-banner__cover img {
  display: block;
  width: 165px;
  border-radius: 2px;
  box-shadow: 0 10px 28px rgba(0, 0, 0, .35);
}
.mrs-guide-banner__body > :first-child { margin-block-start: 0; }
.mrs-guide-banner__label {
  margin: 0 0 .4rem;
  font-family: var(--font-body);
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: #fff;
}
.mrs-guide-banner__title {
  margin: 0 0 .55rem;
  color: #fff;
}
/* No measure cap here: the teaser runs the full width of the band, which is
   what was asked for. It is three lines rather than a paragraph, so the long
   line length costs less than it would in body copy. */
.mrs-guide-banner__text {
  margin: 0 0 1.15rem;
  color: rgba(255, 255, 255, .82);
  font-size: 1rem;
}
.mrs-guide-banner .wp-block-buttons { margin-block: 0; }
.mrs-guide-banner .wp-block-button__link {
  padding: .7rem 1.4rem;
  font-size: .8125rem;
}

@media (max-width: 45.99rem) {
  .mrs-guide-banner__cover img { width: 130px; }
}

/* validation and response messages */
.forminator-error-message { color: var(--block, #A32B2B); font-size: .9rem; margin-top: .35rem; }
/* Forminator ships the response container on every page load and marks it
   aria-hidden until there is something to say. Styling it unconditionally left
   an empty grey bar above the form. */
.forminator-response-message[aria-hidden="true"] { display: none; }
.forminator-response-message {
  border-left: 3px solid var(--navy);
  background: var(--stone);
  padding: 1rem 1.25rem;
  margin-bottom: 1.5rem;
}
.forminator-response-message.forminator-error { border-left-color: var(--block, #A32B2B); }
.forminator-response-message p { margin: 0; }

/* Forminator renders a checkbox group as label.forminator-option wrapping the
   input and its text, inside .forminator-multiselect or .forminator-checkbox.
   Both are laid out as the design's .checks grid. */
.forminator-multiselect,
.forminator-field-checkbox,
.forminator-field-radio {
  display: grid;
  gap: .6rem;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr));
  margin-top: .35rem;
  max-height: none;
  overflow: visible;
  border: 0;
  background: none;
  padding: 0;
}
.forminator-option,
label.forminator-checkbox,
label.forminator-radio {
  display: flex;
  align-items: flex-start;
  gap: .6rem;
  font-size: 1rem;
  line-height: 1.45;
  color: var(--ink-mid);
  cursor: pointer;
}
.forminator-option input {
  margin-top: .28rem;
  accent-color: var(--navy);
  flex: none;
  width: auto;
}

/* Inputs keep the design's white ground; the plugin ships a tinted default. */
.forminator-ui .forminator-input,
.forminator-ui .forminator-textarea,
.forminator-ui select { background: #fff; }

/* --- contact details ------------------------------------------------------ */
.mrs-contact-details .wp-block-column {
  border-top: 1px solid var(--line);
  padding-top: 1.25rem;
}
.mrs-contact-details .manifest__label { margin: 0 0 .5rem; }
.mrs-contact-details p { margin: 0; color: var(--ink-mid); }
.mrs-contact-details a { color: var(--navy); text-decoration: none; }
.mrs-contact-details a:hover { text-decoration: underline; }

/* ==========================================================================
   Product catalog
   --------------------------------------------------------------------------
   A filter rail beside the results, built from the design's own sidebar
   components (.article-layout's grid, .side-block's navy rule and label) so the
   catalog belongs to the site rather than looking like a plugin.

   The card has a fixed top line (SKU left, dietary flags right), a flexible
   title, and a bottom-anchored bakery partner. That shape repeats exactly from
   card to card, which is what lets a grid of 36 products read as a grid rather
   than as a jumble of different-sized blocks.
   ========================================================================== */

.mrs-catalog-layout {
  display: grid;
  gap: clamp(1.75rem, 1.1rem + 2.4vw, 3.25rem);
  align-items: start;
}
@media (min-width: 62rem) {
  .mrs-catalog-layout { grid-template-columns: 16rem minmax(0, 1fr); }
}

/* --- the rail ------------------------------------------------------------- */
.mrs-catalog-rail { display: grid; gap: 1.75rem; align-content: start; }
@media (min-width: 62rem) {
  .mrs-catalog-rail { position: sticky; top: 7rem; }
}

.mrs-facet__list { margin: 0; padding: 0; list-style: none; }
.mrs-facet__list li { margin: 0; }

.mrs-facet__link {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: .6rem;
  padding: .42rem 0;
  font-size: 1rem;
  line-height: 1.35;
  color: var(--ink-mid);
  text-decoration: none;
  border-bottom: 1px solid var(--line-soft);
}
.mrs-facet__list li:last-child .mrs-facet__link { border-bottom: 0; }
.mrs-facet__link:hover { color: var(--navy); }
.mrs-facet__link.is-current { color: var(--navy); font-weight: 700; }

.mrs-facet__count {
  font-variant-numeric: tabular-nums;
  font-size: .8rem;
  color: var(--ink-soft);
  flex: none;
}
.mrs-facet__link.is-current .mrs-facet__count { color: var(--navy); }

/* the dietary toggles read as checkboxes without being form controls */
.mrs-facet__link--toggle { align-items: center; }
.mrs-facet__box {
  width: .95rem;
  height: .95rem;
  border: 1px solid var(--line);
  border-radius: 2px;
  background: #fff;
  flex: none;
  margin-right: .1rem;
  position: relative;
}
.mrs-facet__link--toggle.is-current .mrs-facet__box {
  background: var(--navy);
  border-color: var(--navy);
}
.mrs-facet__link--toggle.is-current .mrs-facet__box::after {
  content: "";
  position: absolute;
  left: .28rem; top: .09rem;
  width: .25rem; height: .5rem;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.mrs-facet__link--toggle > span:nth-child(2) { flex: 1; }

/* the rail's two small forms */
.mrs-rail-form .res-find { margin-top: .2rem; }
.mrs-rail-select {
  width: 100%;
  font-family: var(--font-body);
  font-size: 1rem;
  color: var(--ink);
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: .7rem .75rem;
}
.mrs-rail-select:focus {
  outline: none;
  border-color: var(--navy);
  box-shadow: 0 0 0 3px rgba(46,55,144,.13);
}
.mrs-rail-go {
  margin-top: .6rem;
  font-family: var(--font-body);
  font-size: .875rem;
  font-weight: 700;
  letter-spacing: .11em;
  text-transform: uppercase;
  padding: .6rem 1.1rem;
  border: 1px solid var(--navy);
  border-radius: 2px;
  background: var(--navy);
  color: #fff;
  cursor: pointer;
}

/* --- results header ------------------------------------------------------- */
.mrs-catalog-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 1rem;
  padding-bottom: .85rem;
  border-bottom: 2px solid var(--navy);
  margin-bottom: 1.35rem;
}
.mrs-catalog__count {
  margin: 0;
  font-family: var(--font-body);
  font-size: .875rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.mrs-sort { display: flex; align-items: center; gap: .55rem; }
.mrs-sort label {
  font-size: .875rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.mrs-sort select {
  font-family: var(--font-body);
  font-size: 1rem;
  color: var(--ink);
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: .5rem .6rem;
}
.mrs-sort select:focus { outline: none; border-color: var(--navy); }

/* --- active filter chips -------------------------------------------------- */
.mrs-chips {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .5rem;
  margin-bottom: 1.35rem;
}
.mrs-chips__label {
  font-size: .875rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-right: .15rem;
}
.mrs-chip {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  font-size: .95rem;
  padding: .32rem .65rem;
  border: 1px solid var(--line);
  border-radius: 2px;
  background: #fff;
  color: var(--ink);
  text-decoration: none;
}
.mrs-chip:hover { border-color: var(--navy); color: var(--navy); }
.mrs-chip__x { color: var(--ink-soft); font-size: 1.05rem; line-height: 1; }
.mrs-chip:hover .mrs-chip__x { color: var(--navy); }
.mrs-chips__clear {
  font-size: .875rem;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

/* --- the card grid -------------------------------------------------------- */
/* Three across on desktop. The card carries every field a product has, so it
   needs the width: at six across the meta table wrapped onto four lines and the
   whole grid read as noise. One across on a phone, two in between. */
.mrs-catalog {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
}
@media (min-width: 34rem) {
  .mrs-catalog { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 62rem) {
  .mrs-catalog {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.15rem;
  }
}

.mrs-card-p {
  background: #fff;
  border: 1px solid var(--line-soft);
  border-radius: 2px;
  padding: 1.15rem 1.3rem 1.1rem;
  display: flex;
  flex-direction: column;
  min-height: 12.5rem;
  transition: border-color .18s ease, transform .18s ease, box-shadow .18s ease;
}
.mrs-card-p:hover {
  border-color: var(--navy);
  transform: translateY(-2px);
  box-shadow: 0 6px 18px rgba(20,22,58,.07);
}

.mrs-card-p__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .5rem;
  margin-bottom: .85rem;
  min-height: 1.25rem;
}
.mrs-card-p__sku {
  font-family: var(--font-body);
  font-variant-numeric: tabular-nums;
  font-size: .8rem;
  letter-spacing: .1em;
  color: var(--ink-soft);
}
.mrs-card-p__tags { display: flex; gap: .3rem; flex: none; }

.mrs-tag {
  font-family: var(--font-body);
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .08em;
  color: var(--amber-text);
  border: 1px solid currentColor;
  border-radius: 2px;
  padding: .1rem .32rem;
  line-height: 1.4;
  text-decoration: none;
  cursor: help;
}

/* Not a link. There is nothing behind it that is not already on the card. */
.mrs-card-p__title {
  font-family: var(--font-display);
  font-size: 1.16rem;
  line-height: 1.32;
  letter-spacing: 0;
  color: var(--ink);
  margin: 0 0 1.1rem;
  /* Long SKU-style names break mid-token without this. */
  overflow-wrap: anywhere;
}

/* Bottom-anchored, so the tables line up across a row however long the titles
   above them run. */
.mrs-card-p__meta {
  margin: auto 0 0;
  padding-top: .85rem;
  border-top: 1px solid var(--line-soft);
  display: grid;
  gap: .3rem;
  font-size: .875rem;
}
.mrs-card-p__row {
  display: grid;
  grid-template-columns: 9rem minmax(0, 1fr);
  gap: .75rem;
  align-items: baseline;
}
.mrs-card-p__label {
  margin: 0;
  font-size: .72rem;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.mrs-card-p__value {
  margin: 0;
  color: var(--ink-mid);
  overflow-wrap: anywhere;
}
.mrs-card-p__value a { color: var(--navy); text-decoration: none; }
.mrs-card-p__value a:hover { text-decoration: underline; }

/* Below the two-column breakpoint the label column eats the value, so the pair
   stacks instead. */
@media (max-width: 26rem) {
  .mrs-card-p__row { grid-template-columns: 1fr; gap: 0; }
}

.mrs-catalog__empty { max-width: 46ch; color: var(--ink-mid); }

/* --- pagination ----------------------------------------------------------- */
.mrs-catalog__pagination {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
  margin-top: var(--band-tight);
}
.mrs-catalog__pagination .page-numbers {
  font-family: var(--font-body);
  font-size: 1rem;
  font-variant-numeric: tabular-nums;
  padding: .6rem .9rem;
  border: 1px solid var(--line);
  border-radius: 2px;
  color: var(--ink-mid);
  text-decoration: none;
  min-width: 2.75rem;
  text-align: center;
}
.mrs-catalog__pagination .page-numbers:hover { border-color: var(--navy); color: var(--navy); }
.mrs-catalog__pagination .page-numbers.current {
  background: var(--navy);
  border-color: var(--navy);
  color: #fff;
}
.mrs-catalog__pagination .page-numbers.dots { border-color: transparent; }

/* ==========================================================================
   Bands butt against each other
   --------------------------------------------------------------------------
   WordPress applies the global block gap as a top margin to every block in a
   flow or constrained layout, including the full-width bands and the footer.

   In this design a band carries its own vertical padding and meets the next
   one edge to edge, so that margin shows as a strip of page background between
   them: a pale line above every indigo panel, above the closing photo CTA, and
   above the footer. Removing it is what makes the sections meet.

   Scoped to full-width bands and the footer, so ordinary block spacing inside
   a band is untouched. */
.wp-site-blocks > footer.wp-block-template-part,
.wp-site-blocks > .alignfull,
.wp-block-post-content > .alignfull,
.wp-block-post-content > .wp-block-cover.alignfull,
main.wp-block-group > .alignfull {
  margin-block-start: 0;
}

/* The rail's section labels are h2, matching the card titles beside them, so
   the page outline runs h1 then h2 with nothing skipped. mrs.css styles
   .side-block h3, so the same treatment is restated here for h2. */
.mrs-catalog-rail .side-block h2 {
  font-family: var(--font-body);
  font-size: .875rem;
  letter-spacing: .11em;
  text-transform: uppercase;
  color: var(--ink-soft);
  font-weight: 700;
  margin: 0 0 1rem;
  line-height: 1.4;
}

/* --- testimonials -------------------------------------------------------- */
/* Bridges core quote markup onto the design's .quote card. mrs.css styles
   ".quote blockquote" and ".quote figcaption"; core gives a <p> inside the
   blockquote and a <cite> where the figcaption would be. The curly quotes move
   to the paragraph, because on the blockquote they land on their own line. */
.quote-grid > .wp-block-group { margin: 0; }
.quote .wp-block-quote { margin: 0 0 1.1rem; padding: 0; border: 0; }
.quote .wp-block-quote::before,
.quote .wp-block-quote::after { content: none; }
.quote .wp-block-quote p {
  margin: 0;
  font-family: var(--font-display);
  font-size: 1.16rem;
  line-height: 1.5;
  color: var(--ink);
}
.quote .wp-block-quote p::before { content: "\201C"; }
.quote .wp-block-quote p::after  { content: "\201D"; }
.quote .wp-block-quote cite {
  display: block;
  margin-top: 1.1rem;
  font-style: normal;
  font-size: .875rem;
  letter-spacing: .11em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

/* --- department directory ------------------------------------------------ */
/* A plain roster inside the definition-grid card: names at body size, the
   extension set in tabular figures so the column of numbers lines up. */
.mrs-dept-list {
  list-style: none;
  margin: .9rem 0 0;
  padding: 0;
}
.mrs-dept-list li {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: .75rem;
  padding: .45rem 0;
  border-top: 1px solid var(--line-soft);
  font-size: 1rem;
}
.mrs-dept-list li:first-child { border-top: 0; }
.mrs-dept-list a {
  font-variant-numeric: tabular-nums;
  font-size: .9rem;
  letter-spacing: .04em;
  color: var(--navy);
  text-decoration: none;
  flex: none;
}
.mrs-dept-list a:hover { text-decoration: underline; }

/* --- Publuu flipbook ------------------------------------------------------ */
/* The guide reader. A fixed aspect box rather than a fixed height, so the
   spread keeps its proportions from a phone up to a wide desktop. */
.mrs-flipbook {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 3;
  min-height: 22rem;
  border: 1px solid var(--line-soft);
  background: var(--stone);
}
.mrs-flipbook iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}
@media (min-width: 48rem) {
  .mrs-flipbook { aspect-ratio: 16 / 10; }
}

/* --- bakery partner photography ------------------------------------------ */
/* The product shots at the top of a supplier archive. Fixed-ratio frames with
   object-fit, because the source images came off the old site at a range of
   proportions and a ragged strip reads worse than a cropped one. */
.mrs-partner-shots {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: .6rem;
}
@media (min-width: 40rem) {
  .mrs-partner-shots { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (min-width: 62rem) {
  .mrs-partner-shots {
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: .75rem;
  }
}
.mrs-partner-shots__item {
  margin: 0;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: #fff;
  border: 1px solid var(--line-soft);
}
.mrs-partner-shots__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* --- section split -------------------------------------------------------- */
/* The design's section shape: eyebrow and heading in a left column, copy in a
   right column, the pair spanning the full 1320px wrap. See .split and .wrap in
   mrs.css and the "Smart Purchasing" section of /design/industry-healthcare.html.
   Core Columns already gives two equal columns above 782px and stacks below, so
   this only has to correct the details core cannot know about. */
.mrs-split { align-items: start; }

/* The heading column stops growing before the body column does: a display-l
   heading set across 640px reads as a banner rather than a heading. */
.mrs-split > .wp-block-column:first-child > * { max-width: 34rem; }

/* Paragraph rhythm inside the body column follows .body-copy, which is tighter
   than the full-width paragraph spacing used elsewhere. */
.mrs-split > .wp-block-column:last-child > p { margin-block: 0 1.15rem; }
.mrs-split > .wp-block-column:last-child > p:last-child { margin-bottom: 0; }

/* The heading carries its own bottom margin when it is alone in a column, and
   at the top of a column it should not add space above itself. */
.mrs-split .wp-block-column > :first-child { margin-block-start: 0; }

/* Below the breakpoint the two columns stack, and the heading needs air under
   it again. */
@media (max-width: 781px) {
  .mrs-split > .wp-block-column:first-child { margin-bottom: .5rem; }
  .mrs-split > .wp-block-column:first-child > * { max-width: none; }
}

/* --- preset colours on a dark panel --------------------------------------- */
/* WordPress emits its preset colour classes with !important, so a paragraph
   carrying has-ink-mid-color keeps its dark grey even inside a navy panel,
   where it is close to invisible. The design's own answer is
   .panel-navy .defgrid__desc { color: rgba(255,255,255,.75) }; this generalises
   that to every preset ink colour so no future placement can reintroduce it. */
.is-style-mrs-panel-navy .has-ink-mid-color,
.is-style-mrs-panel-navy .has-ink-soft-color,
.is-style-mrs-panel-navy .has-ink-color {
  color: rgba(255, 255, 255, .78) !important;
}

/* --- full-bleed photo band ------------------------------------------------ */
/* A visual pause between text sections. Fixed ratio so the band's height does
   not depend on which photograph lands in it, and shallower on a phone where a
   21:9 crop of a pastry case is a sliver. */
.mrs-photo-band {
  margin: 0;
}
.mrs-photo-band img {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  display: block;
}
@media (min-width: 62rem) {
  .mrs-photo-band img { aspect-ratio: 21 / 8; }
}

/* --- section head --------------------------------------------------------- */
/* Sits inside the 1320px wrap, so it is flush left with the cards or grid it
   introduces. That alignment is the point: the text used to be centred in an
   820px column and so sat indented from everything below it.
   The design caps .section-head at 46rem. That cap is deliberately not applied
   here, because the operator asked for full-width text sections and 46rem is
   narrower still than the 820px they were objecting to. Where line length
   genuinely matters, the two-column .mrs-split does the work instead. */
.mrs-section-head { margin-inline: 0; }
.mrs-section-head > :first-child { margin-block-start: 0; }
.mrs-section-head > :last-child { margin-block-end: 0; }

/* Nothing to correct for loose blocks: with the global content size at the wrap,
   core centres them at exactly the width everything else uses. Forcing
   margin-inline:0 here pulled them to the padding edge, 40px left of the text
   they sit under. */

/* --- footer columns ------------------------------------------------------- */
/* Five columns now the Industries list is in: the intro plus four link lists.
   Core stacks Columns below 782px and leaves everything between that and the
   desktop width to fend for itself, where five columns of links get too narrow
   to read. Two-up in the middle range, one-up on a phone. */
@media (min-width: 782px) and (max-width: 74rem) {
  .mrs-footer > .wp-block-columns {
    flex-wrap: wrap !important;
  }
  .mrs-footer > .wp-block-columns > .wp-block-column {
    flex-basis: calc(50% - 1.25rem) !important;
    flex-grow: 0;
  }
  .mrs-footer > .wp-block-columns > .wp-block-column:first-child {
    flex-basis: 100% !important;
  }
}


/* --- the hidden attribute ------------------------------------------------- */
/* A class that sets `display` outranks the browser's own `[hidden]{display:none}`,
   so any element given a display value ignores el.hidden entirely. That is how
   the catalog's pagination and its exhausted load-more button both stayed
   visible at the bottom of an infinite scroll while reporting hidden === true.
   One rule, so it cannot come back somewhere else. */
[hidden] { display: none !important; }

/* --- catalog infinite scroll ---------------------------------------------- */
/* The button is the control; the sentinel above it is what the observer
   watches. Both sit under the grid, and the numbered pagination is hidden
   rather than removed so it comes back if a fetch fails. */
.mrs-catalog__sentinel {
  height: 1px;
  margin-top: -1px;
}

.mrs-catalog__more {
  display: block;
  margin: 2rem auto 0;
  font-family: var(--font-body);
  font-size: .875rem;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--navy);
  background: transparent;
  border: 1px solid var(--navy);
  border-radius: 2px;
  padding: .95rem 1.7rem;
  cursor: pointer;
  transition: background .18s ease, color .18s ease;
}
.mrs-catalog__more:hover:not(:disabled) { background: var(--navy); color: #fff; }
.mrs-catalog__more:disabled { opacity: .6; cursor: default; }

/* Visible to a screen reader, and visible on screen only when it has something
   to say, so a normal load does not leave an empty line under the grid. */
.mrs-catalog__status {
  margin: 1rem 0 0;
  text-align: center;
  font-size: .9rem;
  color: var(--ink-soft);
}
.mrs-catalog__status:empty { display: none; }

/* Three across when the cards are a teaser rather than the catalog itself:
   there is no filter rail beside them, so the row has the width for it. */
@media (min-width: 62rem) {
  .mrs-catalog--teaser { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* --- contact details in the hero ------------------------------------------ */
/* Stacked under the lead in the hero's own column, so the phone number is
   beside the headline rather than in a strip further down the page. */
.mrs-contact-details {
  margin-top: 2rem;
  display: grid;
  gap: 1.25rem 2rem;
  /* Two across: Call us beside Email us, Where we deliver beside Find us. */
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
@media (max-width: 32rem) {
  .mrs-contact-details { grid-template-columns: 1fr; }
}
.mrs-contact-details__item {
  margin-block-start: 0;
  padding-top: .9rem;
  border-top: 1px solid var(--line-soft);
}
.mrs-contact-details__value { margin: .35rem 0 0; font-size: 1.05rem; }
.mrs-contact-details__note { margin: .15rem 0 0; font-size: .9rem; }

/* --- stacked bios --------------------------------------------------------- */
/* The next-generation bios are paragraphs of prose, not definitions. In three
   narrow columns every one broke into a ragged stack. */
.mrs-bios {
  display: grid;
  gap: var(--band-tight);
}
.mrs-bio { border-top: 2px solid var(--navy); padding-top: 1.1rem; }
.mrs-bio p { color: var(--ink-mid); }

/* The button that reveals the filter rail on a phone. Hidden by JavaScript
   above the breakpoint, and never inserted at all without JavaScript, so the
   rail stays plainly visible when the script does not run. */
.mrs-filter-toggle {
  display: block;
  width: 100%;
  margin-bottom: 1.25rem;
  padding: .85rem 1.1rem;
  font-family: var(--font-body);
  font-size: .875rem;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  text-align: left;
  color: var(--navy);
  background: transparent;
  border: 1px solid var(--line);
  border-radius: 2px;
  cursor: pointer;
}
.mrs-filter-toggle::after {
  content: "+";
  float: right;
  font-size: 1.1rem;
  line-height: 1;
}
.mrs-filter-toggle[aria-expanded="true"]::after { content: "\2212"; }
.mrs-filter-toggle:hover,
.mrs-filter-toggle:focus-visible {
  border-color: var(--navy);
  background: var(--paper-2, transparent);
}

/* A facet with nothing left under the other filters. Kept in place so the list
   does not reshuffle while you filter, but not a link and not pretending to be
   one. */
.mrs-facet__link.is-empty {
  color: var(--ink-soft);
  cursor: default;
  opacity: .55;
}
.mrs-facet__link.is-empty:hover { color: var(--ink-soft); }

/* --- guides index --------------------------------------------------------- */
/* One guide is a row, not a card: a 200px photograph with the copy beside it,
   both starting at the same left edge as the section head above. */
.mrs-guide-row {
  display: grid;
  grid-template-columns: 200px minmax(0, 1fr);
  gap: clamp(1.25rem, .9rem + 1.4vw, 2.25rem);
  align-items: start;
  border-top: 2px solid var(--navy);
  padding-top: 1.4rem;
}
.mrs-guide-row + .mrs-guide-row { margin-top: var(--band-tight); }
.mrs-guide-row__media { margin: 0; }
/* Portrait, because the thumbnail is a book cover rather than a photograph. A
   4/3 crop cut the title off the top of it. */
.mrs-guide-row__media img {
  display: block;
  width: 200px;
  aspect-ratio: 3 / 4;
  object-fit: cover;
  box-shadow: 0 6px 18px rgba(27, 32, 88, .16);
}
.mrs-guide-row__body > :first-child { margin-block-start: 0; }
.mrs-guide-row__body h2 a { color: inherit; text-decoration: none; }
.mrs-guide-row__body h2 a:hover { color: var(--navy-lift); }

@media (max-width: 40rem) {
  .mrs-guide-row { grid-template-columns: 1fr; }
}

/* --- resource centre hero ------------------------------------------------- */
/* The featured article uses the approved design's own res-lead classes, so
   mrs.css carries its typography and media crop. Only the block wrappers that
   sit between those classes and the markup mrs.css expects belong here. */
.res-lead__media { margin: 0; }
.res-lead__body > :first-child { margin-block-start: 0; }
.res-lead__body .wp-block-post-title { margin-block: .35rem 0; }
.res-lead__body .wp-block-post-title a { color: inherit; text-decoration: none; }
.res-lead__body .wp-block-post-title a:hover { color: var(--navy-lift); }
.res-lead__body .wp-block-post-date { margin-block: 1rem 1.15rem; }

/* --- guide landing page --------------------------------------------------- */
/* Copy on the left, the download form on the right, so the form is above the
   fold on the page whose whole job is handing over the guide. */
.mrs-guide-form {
  background: #fff;
  border: 1px solid var(--line-soft);
  border-top: 2px solid var(--navy);
  border-radius: 2px;
  padding: 1.75rem 1.6rem;
  align-self: start;
}
.mrs-guide-form > :first-child { margin-block-start: 0; }
.mrs-guide-form .forminator-ui { max-width: none; }
@media (min-width: 782px) {
  .mrs-guide-hero > .wp-block-column:first-child { flex-basis: 54% !important; }
  .mrs-guide-hero > .wp-block-column.mrs-guide-form { flex-basis: 46% !important; }
}

/* --- Resource Center rail -------------------------------------------------- */
/* The standfirst sits in a narrow column beside the articles, as
   /design/resources.html has it, rather than under a hero photograph. */
/* The Resource Center masthead: eyebrow, h1 and intro centred as one block.
   It names the page rather than heading a section. The measure is capped
   because a centred paragraph 1,240px wide is unreadable, and the eyebrow is a
   flex row carrying its own rule, so it needs centring in its own right. */
/* The class is doubled so the cap survives core's own constrained-layout
   max-width, which is what kept the heading running the full page width. */
.mrs-res-masthead.mrs-res-masthead {
  max-width: 850px;
  margin-inline: auto;
  text-align: center;
}
.mrs-res-masthead .eyebrow { justify-content: center; }
.mrs-res-masthead > :first-child { margin-block-start: 0; }
.mrs-res-masthead h1 { margin-block-end: 1.1rem; }
.mrs-res-masthead p:last-child { margin-block-end: 0; }

/* The featured article: photograph left, words right, across the full width.
   Stacked it pushed the article grid most of a screen down the page; in the old
   19rem-rail layout it only had two thirds of the width, which is a strange
   amount of room for the thing the page leads with. */
.mrs-res-lead-row { display: grid; gap: clamp(1.5rem, 1rem + 2vw, 2.75rem); align-items: start; }
@media (min-width: 62rem) {
  .mrs-res-lead-row { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); }
  .mrs-res-lead-row .res-lead__body { padding-top: 0; }
}

/* Equal-height cards. The grid stretches its rows, so each card fills its cell
   and the body pushes the Read more control to the bottom: without this the
   controls sat at the end of each excerpt and stepped down the row. */
.mrs-cards.is-layout-grid { align-items: stretch; }
.mrs-cards.is-layout-grid > .wp-block-group,
.mrs-cards.is-layout-grid > .wp-block-post {
  height: 100%;
}
.mrs-cards .mrs-card {
  display: flex;
  flex-direction: column;
  height: 100%;
}
.mrs-cards .mrs-card__body {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
}
.mrs-cards .mrs-card__action { margin-top: auto; padding-top: 1rem; }

/* The Read more control on an article card, and on the featured article in the
   Resource Center hero. core/read-more is a link, not a button block, so it does
   not pick up the arrow button style by class; this gives it the same treatment
   the product cards use. */
.mrs-card .wp-block-read-more,
.res-lead__body .wp-block-read-more {
  font-family: var(--font-body);
  font-size: .875rem;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--navy);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: .6rem;
}
.mrs-card .wp-block-read-more::after,
.res-lead__body .wp-block-read-more::after {
  content: "";
  width: 1.6rem;
  height: 1px;
  background: currentColor;
  transition: width .18s ease;
}
.mrs-card:hover .wp-block-read-more::after,
.res-lead__body .wp-block-read-more:hover::after { width: 2.4rem; }

/* --- breadcrumbs --------------------------------------------------------- */
/* Small, quiet, and above the first heading. It is navigation, not content, so
   it takes the utility scale rather than the body scale and never competes
   with the h1 under it. */
.mrs-crumbs {
  margin-block: 1.5rem 0;
  font-size: .8125rem;
  line-height: 1.5;
}
/* Core's constrained layout zeroes the top margin of a first child, and the
   trail is always a first child. Core's rule is a class plus :first-child and
   it is printed inline, after this stylesheet, so a tie goes to core: the
   element name on both sides is what settles it. */
main.wp-block-group > nav.mrs-crumbs,
.mrs-crumbs-bar > nav.mrs-crumbs { margin-block-start: 1.5rem; }
.mrs-crumbs__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: .3rem .55rem;
}
.mrs-crumbs__item { display: flex; align-items: baseline; gap: .55rem; }
/* The separator is drawn rather than written, so it is never read aloud and
   never copied when someone selects the trail. */
.mrs-crumbs__item + .mrs-crumbs__item::before {
  content: "";
  width: .38rem;
  height: .38rem;
  border-right: 1px solid var(--line);
  border-top: 1px solid var(--line);
  transform: rotate(45deg);
  flex: 0 0 auto;
  align-self: center;
}
/* The links and the current page must differ by something other than colour,
   or the trail fails "links rely on color to be distinguishable". Weight does
   it: the page you are on is the heavier, darker one, and the links are not
   underlined until hover, so the trail stays quiet. */
.mrs-crumbs a { color: var(--ink-soft); text-decoration: none; }
.mrs-crumbs a:hover,
.mrs-crumbs a:focus-visible { color: var(--amber-text); text-decoration: underline; }
.mrs-crumbs__current { color: var(--ink); font-weight: 600; }
/* A wrapper, not a band. It exists so the trail lines up with the page's own
   content width; the trail's own margin does the vertical spacing. It used to
   carry that padding, which meant the front page, where the block renders
   nothing because there is no trail above Home, still got an empty 24px strip
   above the hero.

   The inline padding is the alignment. A page's bands are alignfull, and core
   pulls an alignfull child out to the viewport edge and then re-applies the
   root padding inside it, so a section head ends up two doses in from the edge
   while this wrapper, sitting directly in main, had only one. They agreed above
   1400px by coincidence, because the wide size minus two doses of padding is
   exactly the content size, and drifted apart below it. Matching the wide size
   and adding the second dose puts the trail in the same box as the heading
   under it at every width.

   Archive and single templates put the trail directly in main alongside content
   that is also directly in main, so they were never affected and are not
   touched here. */
.mrs-crumbs-bar {
  padding-block: 0;
  padding-inline: var(--wp--style--root--padding-left) var(--wp--style--root--padding-right);
  max-width: var(--wp--style--global--wide-size);
  margin-inline: auto;
}

/* --- reading time -------------------------------------------------------- */
.mrs-readtime { margin: 0; color: var(--ink-soft); }
/* A dot between the date and the reading time, drawn on the second item so a
   single item never trails a stray separator. */
.mrs-post-meta > * + *::before {
  content: "\00b7";
  margin-right: .75rem;
  color: var(--line);
}

/* --- share --------------------------------------------------------------- */
.mrs-share {
  border-top: 1px solid var(--line-soft);
  padding-top: 1.4rem;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: .6rem 1.5rem;
}
.mrs-share__label {
  margin: 0;
  font-size: .75rem;
  letter-spacing: .11em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--ink-soft);
}
.mrs-share__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: .5rem .75rem;
}
.mrs-share__link {
  display: inline-block;
  padding: .35rem .8rem;
  border: 1px solid var(--line);
  font-size: .85rem;
  color: var(--navy);
  text-decoration: none;
  transition: background-color .15s ease, border-color .15s ease;
}
.mrs-share__link:hover { background: var(--stone); border-color: var(--navy); }
.mrs-share__link.is-copied { background: var(--navy); border-color: var(--navy); color: #fff; }

/* --- related articles ---------------------------------------------------- */
.mrs-related > :first-child { margin-block-start: 0; }
.mrs-related__list {
  list-style: none;
  margin: 1.5rem 0 0;
  padding: 0;
  display: grid;
  gap: clamp(1.5rem, 1rem + 2vw, 2.4rem);
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
}
.mrs-related__item { display: flex; flex-direction: column; gap: .55rem; }
.mrs-related__media { display: block; }
.mrs-related__media img {
  width: 100%;
  /* height:auto lets aspect-ratio govern. Without it the img kept its 675px
     height attribute and object-fit cropped a 4:3 slot into a tall column. */
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
}
.mrs-related__title { margin: 0; font-size: 1.15rem; line-height: 1.25; }
.mrs-related__title a { color: var(--navy); text-decoration: none; }
.mrs-related__title a:hover { color: var(--amber); }
.mrs-related__excerpt { margin: 0; color: var(--ink-mid); font-size: .9375rem; }

/* --- Resource Center filters --------------------------------------------- */
.mrs-rfilter {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1rem 2rem;
  margin-block: 1.75rem 2.25rem;
  padding-bottom: 1.25rem;
  border-bottom: 1px solid var(--line-soft);
}
.mrs-rfilter__chips {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: .5rem;
}
.mrs-rfilter__chip {
  display: inline-flex;
  align-items: baseline;
  gap: .4rem;
  padding: .3rem .75rem;
  border: 1px solid var(--line);
  font-size: .85rem;
  color: var(--navy);
  text-decoration: none;
  white-space: nowrap;
}
.mrs-rfilter__chip:hover { background: var(--stone); border-color: var(--navy); }
.mrs-rfilter__chip.is-active {
  background: var(--navy);
  border-color: var(--navy);
  color: #fff;
}
.mrs-rfilter__chip.is-active:hover {
  background: var(--navy-deep);
  border-color: var(--navy-deep);
  color: #fff;
}
.mrs-rfilter__count { font-size: .75rem; opacity: .7; font-variant-numeric: tabular-nums; }
.mrs-rfilter__search { display: flex; gap: .5rem; flex: 1 1 15rem; max-width: 24rem; }
.mrs-rfilter__search input[type="search"] {
  flex: 1 1 auto;
  min-width: 0;
  padding: .45rem .7rem;
  border: 1px solid var(--line);
  background: #fff;
  font: inherit;
  font-size: .9rem;
  color: var(--ink);
}
.mrs-rfilter__search input[type="search"]:focus-visible {
  outline: 2px solid var(--amber);
  outline-offset: 1px;
}
.mrs-rfilter__search button {
  padding: .45rem 1rem;
  border: 1px solid var(--navy);
  background: var(--navy);
  color: #fff;
  font: inherit;
  font-size: .85rem;
  cursor: pointer;
}
.mrs-rfilter__search button:hover { background: var(--navy-deep, var(--navy)); }

@media (max-width: 40rem) {
  .mrs-rfilter { flex-direction: column; align-items: stretch; }
  /* flex: 1 1 15rem was horizontal growth on desktop. Once the filter stacks
     into a column that main axis is vertical, so the search grew to a 240px
     tall box. It is a normal-height field here. */
  .mrs-rfilter__search { flex: none; max-width: none; }

  /* Related articles as compact rows: a small thumbnail beside the title, so
     three teasers do not become three full-width, 600px-tall photos. */
  .mrs-related__list { grid-template-columns: 1fr; gap: 1.1rem; }
  .mrs-related__item {
    display: grid;
    grid-template-columns: 5.5rem 1fr;
    column-gap: .9rem;
    row-gap: .2rem;
    align-items: start;
  }
  .mrs-related__media { grid-column: 1; grid-row: 1 / 4; align-self: start; }
  /* Fixed square, and align-self:start so the cell is not stretched to the row
     span. Without both, the img width:100% resolved against a stretched cell
     and the photo came out 88px wide but ~675px tall. */
  .mrs-related__media img { width: 5.5rem; height: 5.5rem; aspect-ratio: auto; }
  .mrs-related__item > :not(.mrs-related__media) { grid-column: 2; }
  .mrs-related__title { font-size: 1.05rem; }
  .mrs-related__excerpt { display: none; }
}


/* ==========================================================================
   Tablet: the stacked range (641px - 991px)
   --------------------------------------------------------------------------
   Between the phone (<=640px) and the width where two-column bands return
   (62rem), a component that is right at both ends can be wrong in the middle:
   a five-across stat strip, a four-up card row, a two-column tick list all
   turn cramped on a tablet. These are the arrangements the client asked for at
   this width. Nothing here touches phone or desktop. */
@media (min-width: 40.0625rem) and (max-width: 61.99rem) {

  /* Delivery stats: three across, two down. Only strips of five or more, so a
     four-figure strip is left to sit on one row. */
  .manifest:has(> .manifest__item:nth-child(5)) {
    grid-template-columns: repeat(3, 1fr);
  }
  .manifest:has(> .manifest__item:nth-child(5)) .manifest__item {
    border-left: 1px solid var(--line-soft);
    border-top: 0;
  }
  .manifest:has(> .manifest__item:nth-child(5)) .manifest__item:nth-child(3n+1) {
    border-left: 0;
  }
  .manifest:has(> .manifest__item:nth-child(5)) .manifest__item:nth-child(n+4) {
    border-top: 1px solid var(--line-soft);
  }
  .manifest--invert:has(> .manifest__item:nth-child(5)) .manifest__item {
    border-color: rgba(255,255,255,.14);
  }

  /* The Products "Seven Ways In" cards: half width, two across, rather than a
     four-up row squeezed onto a tablet. */
  .wp-block-columns.mrs-cards--4 { flex-wrap: wrap !important; }
  .wp-block-columns.mrs-cards--4 > .wp-block-column {
    flex: 0 0 calc((100% - var(--wp--preset--spacing--40)) / 2) !important;
  }

  /* The definition grids (how we help, supporting every daypart): three across.
     Five items become three then two. */
  .wp-block-columns.mrs-defgrid { flex-wrap: wrap !important; }
  .wp-block-columns.mrs-defgrid > .wp-block-column {
    flex: 0 0 calc((100% - 2 * var(--wp--preset--spacing--50)) / 3) !important;
  }

  /* Two-column tick lists (featured product solutions, why choose us) to one
     column: a ten-item list in two tablet columns is a wall of half-lines. */
  ul.is-style-mrs-ticks-2c { columns: 1 !important; }
}

/* --- contrast ------------------------------------------------------------ */
/* The amber at #B5761E reaches 3.64:1 on paper and 3.19:1 on stone. As a rule,
   a border or a background that is fine; as 14px uppercase label text it is
   below the 4.5:1 that WCAG AA asks for, and it is the eyebrow above almost
   every section on the site.

   Darkened by a fifth for text only. --amber keeps its value, so every rule,
   separator and border in the approved design is untouched, and the two tones
   sit close enough that a rule beside its own label still reads as one colour.
   #936018 measures 5.17:1 on paper and 4.53:1 on stone.

   The ink-soft grey behind a testimonial's attribution is the same story at
   4.01:1 on stone. */
:root {
  --amber-text: #936018;

  /* ink-soft is captions and meta, and nothing else: never a background, never
     a border. At #6E7192 it passes on paper at 4.57:1 and fails on stone at
     4.01:1, and every testimonial attribution sits on stone. Darkened by a
     fourteenth, which clears both grounds and is not a visible change. */
  --ink-soft: #666988;
}
/* Core emits its preset colour classes with !important, so the override says so
   too. This is the only place in the theme that needs it. */
.has-amber-color,
.has-amber-color a { color: var(--amber-text) !important; }

.eyebrow,
.eyebrow a,
.wp-block-post-terms,
.wp-block-post-terms a,
.wp-block-post-terms__prefix,
.mrs-rfilter__chip:hover { color: var(--amber-text); }

/* The eyebrow's own rule keeps the lighter amber: it is a 1px line, not text,
   and the two tones read as one colour beside each other. */
.eyebrow::before { background: var(--amber); }

/* --- the top of the page ------------------------------------------------- */
/* The approved design puts 63px between the bottom of the header and the first
   eyebrow. The build had 128: WordPress's own block gap between the header
   template part and main (24), an empty breadcrumb wrapper (24), and then the
   first band carrying the full 80px band padding it would need if it were a
   band in the middle of a page rather than the first thing under a header.

   The band padding is written inline by the block, so overriding it has to say
   !important. The two zeroes above it do not. */
main.wp-block-group { margin-block-start: 0; }

main > .entry-content > :first-child,
main > .mrs-crumbs-bar + .entry-content > :first-child,
main > .mrs-crumbs + * {
  padding-top: var(--mrs-first-pad, 4rem) !important;
  margin-block-start: 0;
}

/* With a trail above it the first band needs less room, because the trail has
   already broken the page away from the header. */
main:has(.mrs-crumbs) { --mrs-first-pad: 2.5rem; }

/* ==========================================================================
   Mobile
   ==========================================================================
   Four adjustments for small screens. Each one is here rather than in the
   markup so the same blocks serve both, and none of them changes what is on
   the page at desktop width. */

@media (max-width: 40rem) {


  /* The stat cells run full width. At two across, a figure and its label had
     about 150px between the rules, and the longer labels broke over three
     lines while their neighbour sat on one. */
  .manifest.manifest { grid-template-columns: 1fr; }
  .manifest .manifest__item { border-left: 0; border-top: 1px solid var(--line-soft); }
  .manifest .manifest__item:first-child { border-top: 0; }
  /* The two-column rule in the approved stylesheet clears the top border on
     the first two cells, which in one column leaves the second cell without
     the rule that separates it. */
  .manifest .manifest__item:nth-child(2) { border-top: 1px solid var(--line-soft); }
  .manifest--invert .manifest__item:nth-child(2) { border-top-color: rgba(255,255,255,.14); }

  /* The closing line sits hard left under the columns above it rather than
     being laid out as a row that happens to wrap. */
  /* Core prints the group's flex layout inline, after this stylesheet, so the
     element name is what carries this past it. */
  div.mrs-footer-base {
    display: block;
    text-align: left;
  }
  .mrs-footer-base > * + * { margin-top: .75rem; }
}

/* ==========================================================================
   Mobile: one gutter, not two
   --------------------------------------------------------------------------
   The approved design uses a single ~18px side gutter on phones, with every
   heading, paragraph, card and control on the same left edge. The build had
   two edges: content inside a band picked up the band's root padding AND a
   second dose from the desktop-only rules below, landing ~19px further in than
   the custom blocks and full-width breakouts beside it. That mismatch is what
   read as "not aligned with the text" on page after page.

   Below WP's own column-stacking width, the second dose is removed so content
   sits at main's single root-padding edge. Desktop keeps both doses, where
   they were pixel-matched to the design and must not change. */
/* The single gutter covers the whole stacked range, not just phones. Two-column
   bands return at 62rem, and below that the design uses one ~28px side gutter
   (its .wrap padding scales to about that at tablet width). The desktop rule
   that makes an alignwide block match the 1320px wrap is a SECOND dose there,
   because the alignwide is already inside a band that re-added the root padding.
   Above 62rem the second dose is correct and pixel-matched, so it stays. */
/* The single gutter belongs at every width below where the 1320px wide-size
   stops fitting (~1400px / 87.5rem), not only below 62rem.

   The design (mrs.css) makes --wrap and --wrap-wide the same 1320px with one
   shared clamp() padding, so every section, heading and body alike, sits at one
   gutter at all widths. The theme's root padding equals that clamp, so a
   content-size heading already lands on the design gutter. An alignwide block
   adds the clamp a SECOND time on top of the root padding: above 1400px it
   centres at 1320 and that padding pulls its inner content back to the reading
   width, matching the design; below 1400px it hits the viewport cap while still
   subtracting the padding, so its content sits one root-padding dose in from the
   heading beside it. Zeroing the padding across that whole range puts body and
   heading on the same gutter, which is what the design does there. */
@media (max-width: 87.5rem) {
  /* Track the content-size text exactly, don't just drop the padding. Between
     about 1360 and 1400px the content-size heading (1240) still fits with room
     and so WordPress centres it, while an edge-to-edge alignwide fills wider and
     ends up left of it. Capping the alignwide to the same content-size makes it
     centre on the identical box at every width in this range, and it rejoins the
     desktop rule cleanly at 1400 where 1320 minus the clamp padding is 1240. */
  .is-layout-constrained > .alignwide {
    padding-inline: 0;
    max-width: var(--wp--style--global--content-size);
  }
  /* The breadcrumb bar carries the same second dose (it was built to match the
     two-dose headings), so across this range it gets the same treatment, or the
     trail sits ~36px right of the heading beneath it. */
  .mrs-crumbs-bar {
    padding-inline: 0;
    max-width: var(--wp--style--global--content-size);
  }
}

/* Cards stack to one column on phones only; the tablet band above sets their
   own two- and three-up arrangements. */
@media (max-width: 47.99rem) {
  .wp-block-columns.mrs-cards--3 > .wp-block-column,
  .wp-block-columns.mrs-cards--4 > .wp-block-column { flex-basis: 100%; }
  .mrs-cards .wp-block-column { display: block; }
}

/* --- topbar: mobile and tablet -------------------------------------------
   The header collapses to the hamburger at <=66rem. The topbar follows it: the
   serving line and "Become a Customer" (which repeats Contact Us) drop, and the
   two remaining items span the bar, phone left and Contact Us right. */
@media (max-width: 66rem) {
  .mrs-topbar__note { display: none; }
  .mrs-topbar__actions { flex: 1 1 100%; justify-content: space-between; column-gap: 1rem; }
}
