/* OMHM shared background system (batch 41, 2026-10-04). Ruling: "Bright and still". Source: handoff R2 sections 5 and 6.
   Layer order, bottom to top: the root plaid, a local plate, the feather mask on that plate, a local readability support, content.
   Opacity and masks live on decorative layers only; a section container is never faded. Motion numbers come from omhm-motion-tokens-20261004.css. */

/* ---------- 1. Root plaid: one page-spanning layer, vivid red and black at source sharpness, stationary ----------
   The layer is the batch 17 body::before (one element, one origin, so no join can seam). Its drift binding, its multiply dim and the site-wide
   side veil (body::after) are retired here. Dimming now lives only in local supports. */
html body.om-mvp::before{
  animation:none;transform:none;will-change:auto;
  background-color:transparent;background-blend-mode:normal;
  background-image:url('./journey-weave-tile.jpg');background-size:187px 186px;background-position:0 0;background-repeat:repeat;
}
html body.om-mvp::after{content:none;display:none}
/* The Holiday Market sheet still bound its own plaid drift to the body; that plaid is hidden by batch 17, so the binding goes too. */
html body.om-mvp{animation:none}

/* ---------- 2a. Tree-led feature ----------
   Put .om41-tree on a section, a .om41-plate (picture, aria-hidden) as its child and data-om41-drift on the section if the plate may drift.
   The plate fades in over the first --om41-tree-in of its region, holds, fades out over the last --om41-tree-out, and feathers --om41-tree-side at the sides.
   The region is the section plus --om41-tree-bleed-bottom below it and the page gutters beside it. Drift moves the plate image only, inside an overscan. */
.om41-tree{
  --om41-tree-in:14%;--om41-tree-out:18%;--om41-tree-side:8%;
  --om41-tree-bleed-top:0px;--om41-tree-bleed-bottom:96px;
  position:relative;isolation:isolate;
  margin-bottom:max(64px,var(--om41-tree-bleed-bottom));
}
.om41-tree>.om41-plate{
  position:absolute;z-index:-3;display:block;margin:0;padding:0;overflow:hidden;pointer-events:none;
  top:calc(var(--om41-tree-bleed-top) * -1);bottom:calc(var(--om41-tree-bleed-bottom) * -1);
  left:calc((100vw - 100%) / -2);right:calc((100vw - 100%) / -2);
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--om41-tree-in),#000 calc(100% - var(--om41-tree-out)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--om41-tree-side),#000 calc(100% - var(--om41-tree-side)),transparent 100%);
  -webkit-mask-composite:source-in;
  mask-image:linear-gradient(to bottom,transparent 0,#000 var(--om41-tree-in),#000 calc(100% - var(--om41-tree-out)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--om41-tree-side),#000 calc(100% - var(--om41-tree-side)),transparent 100%);
  mask-composite:intersect;
}
.om41-tree>.om41-plate img{position:absolute;display:block;max-width:none;object-fit:cover;
  top:calc(var(--om41-drift-px) * -1);left:calc(var(--om41-drift-px) * -1);width:calc(100% + var(--om41-drift-px) * 2);height:calc(100% + var(--om41-drift-px) * 2)}
/* The drift itself is written by motion-batch41-20261004.js (transform on the plate image only) and only while data-om41-live is 1. */
.om41-tree[data-om41-live="1"]>.om41-plate img{will-change:transform}
/* Phones: the hero region is tall, so the fades take the short end of their ranges and the support starts lighter, which lets more of the plate show through the well. */
@media(max-width:767px){.om41-tree{--om41-tree-bleed-bottom:64px;--om41-tree-in:10%;--om41-tree-out:15%;--om41-tree-side:8%}.om41-tree .om41-support.gd30-well::before{--om41-support-a:.8}}

/* ---------- 2b. Open plaid interlude ----------
   An element with no plate: it holds open space of one feather span so the bright plaid reads between two features. 0 to 15 percent black over the plaid. */
.om41-interlude{
  --om41-interlude-h:clamp(80px,9vw,140px);--om41-interlude-black:.08;
  position:relative;display:block;height:var(--om41-interlude-h);margin:0;padding:0;pointer-events:none;
}
.om41-interlude::before{
  content:"";position:absolute;top:0;bottom:0;left:calc((100vw - 100%) / -2);right:calc((100vw - 100%) / -2);
  background:rgba(0,0,0,var(--om41-interlude-black));
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 25%,#000 75%,transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 25%,#000 75%,transparent 100%);
}
@media(max-width:767px){.om41-interlude{--om41-interlude-h:clamp(48px,12vw,80px)}}
.om41-interlude+.editorial-capacity{margin-top:0}

/* ---------- 2c. Local support, and the calm reading surface built on it ----------
   .om41-support lays a directional near-black layer behind one reading area: --om41-support-a at the start edge to --om41-support-b at the far edge (65 to 85 percent).
   It is confined to its element (plus an optional bleed) and may feather its own edges; it is never a viewport-wide slab. */
.om41-support,
.ab23-mwide .ab23-label--c,.ab23-matters li,.ab23-care p,.ab23-better-a,.ab23-better-b,.ab23-twist-b .ab23-mint,.ab23-sense,.ab23-pair--c,.ab23-diff-close .ab23-beat--c{position:relative;isolation:isolate}
.om41-support::before,
.ab23-mwide .ab23-label--c::before,.ab23-matters li::before,.ab23-care p::before,.ab23-better-a::before,.ab23-better-b::before,.ab23-twist-b .ab23-mint::before,.ab23-sense::before,.ab23-pair--c::before,.ab23-diff-close .ab23-beat--c::before{
  --om41-support-a:.85;--om41-support-b:.65;--om41-support-angle:100deg;
  --om41-support-inset-x:0px;--om41-support-inset-y:0px;--om41-support-fx:0%;--om41-support-fy:0%;--om41-support-radius:0px;
  content:"";position:absolute;z-index:-1;pointer-events:none;
  inset:var(--om41-support-inset-y) var(--om41-support-inset-x);
  border-radius:var(--om41-support-radius);
  background:linear-gradient(var(--om41-support-angle),rgba(5,5,5,var(--om41-support-a)) 0%,rgba(5,5,5,var(--om41-support-b)) 100%);
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--om41-support-fy),#000 calc(100% - var(--om41-support-fy)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--om41-support-fx),#000 calc(100% - var(--om41-support-fx)),transparent 100%);
  -webkit-mask-composite:source-in;
  mask-image:linear-gradient(to bottom,transparent 0,#000 var(--om41-support-fy),#000 calc(100% - var(--om41-support-fy)),transparent 100%),linear-gradient(to right,transparent 0,#000 var(--om41-support-fx),#000 calc(100% - var(--om41-support-fx)),transparent 100%);
  mask-composite:intersect;
}
/* Calm reading surface: the support bleeds past the text block and feathers into the plaid. No frame, no slab. */
body.om-mvp .om41-reading.editorial-well{background:transparent;border-top:0;box-shadow:none}
/* The bleed never passes the page gutter (at 768 the gutter is 16px, so the bleed is 16px and the document stays inside the viewport). */
.om41-reading.om41-support::before{--om41-support-inset-x:calc(min(40px,(100vw - 100%) / 2) * -1);--om41-support-inset-y:-36px;--om41-support-fx:5%;--om41-support-fy:10%;--om41-support-radius:14px}
@media(max-width:767px){.om41-reading.om41-support::before{--om41-support-inset-x:-8px;--om41-support-inset-y:-28px;--om41-support-fx:4%;--om41-support-fy:8%}}

/* ---------- 3. Guide proof (hero well): the well keeps its frame and becomes the local support over the plate ---------- */
body.om-mvp .om41-tree .om41-support.gd30-well{background:transparent}
body.om-mvp .om41-tree .om41-support.gd30-well::before{--om41-support-inset-x:0px;--om41-support-inset-y:0px;--om41-support-fx:0%;--om41-support-fy:0%}

/* ---------- 4. INTERIM supports (batch 41, coordinator ruling): text that sat on the retired dim plaid ----------
   About and Home put text straight on the plaid. On the bright plaid white text reaches only 3.93:1 and mint 2.85:1, so each block gets the same local support as the
   calm reading surface: confined to the text block, bleeding past it by a few pixels but never past the page gutter, feathered, 80 to 70 percent. No copy, no layout and
   no markup change. Delete a rule here when that page's own batch applies its real treatment.
   Batch 44 (2026-10-05): the Home entries (category captions, the Previous, count and Next row) are gone; the mixed carousel carries its own black card, chip and buttons. */
.ab23-mwide .ab23-label--c::before,.ab23-matters li::before,.ab23-care p::before,.ab23-better-a::before,.ab23-better-b::before,.ab23-twist-b .ab23-mint::before,.ab23-sense::before,.ab23-pair--c::before,.ab23-diff-close .ab23-beat--c::before{
  --om41-support-a:.8;--om41-support-b:.7;
  --om41-support-inset-x:calc(min(18px,(100vw - 100%) / 2) * -1);--om41-support-inset-y:-10px;
  --om41-support-fx:12px;--om41-support-fy:10px;--om41-support-radius:12px;
}
/* A short line inside a full-width block gets a support only as wide as the line needs (the captions are centered, so the support is centered on them; nothing in the layout moves). */
.ab23-twist-b .ab23-mint::before{right:auto;width:min(100%,320px)}
