/* ⛔ SPECIFICITY IS A DIMENSION, NOT A BUG YOU FIX ONE RULE AT A TIME.
 * Twice now an override in this file was present, matched, loaded LAST — and lost, because
 * the donor writes its rules as `.based-byob-pp--bbw.based-byob-pp--bbw .thing` (two classes) while mine named
 * one. Patching the individual rule that lost is the arithmetic; the algebra is to make
 * EVERY rule in this file outrank a two-class donor rule by construction.
 *
 * Each selector's leading class is DOUBLED (`.x` -> `.x.x`). That is the standard way to buy
 * specificity without changing what the selector matches: `.x.x` selects exactly what `.x`
 * selects, at one more class of weight. No !important anywhere — !important wins by opting
 * out of the cascade, which makes the NEXT override unfixable.
 * Generated by the build; edit the source rules, not this transform.
 */

/* JACK HENRY — RENDER FIXES. Generated by the build, loaded LAST.
 *
 * Everything here was found by MEASURING THE RUNNING PAGE, not by reading CSS. Each rule
 * names the number that found it, so a later change that re-breaks it is obvious.
 *
 * ⛔ WHY A SEPARATE FILE. These are OUR decisions, not translations of the donor's. Folding
 *    them into the inverted donor CSS would make it impossible to tell which values came
 *    from their design and which came from ours, and the next person would "fix" one by
 *    reverting the other. [[a-module-is-modular-only-while-one-copy-ships]]
 */

/* 1. MUTED TEXT — measured 2.65:1 on white, needs 4.5:1 for 14px body.
 *    The donor set muted text at 40% ink on a DARK ground, where 40% white reads fine.
 *    Inverted, 40% black on white does not: the same alpha is a different contrast on a
 *    different ground. Alpha does not survive a luminance inversion; only ratios do. */
.based-byob-pp__checkout.based-byob-pp__checkout, .based-byob-pp__checkout.based-byob-pp__checkout * {
  color: rgba(0, 0, 0, 0.66);        /* -> 4.85:1 */
}/* 2. HERO HEADLINE OVER PHOTOGRAPHY — the automated audit CANNOT score this: the
 *    background is an image, so it returns "PHOTO" and skips. That silence is not a pass.
 *    The donor's hero was a dark photo with light type; ours is Jack Henry's own daylight
 *    photograph, so the headline runs from a bright area into mid-tone fur and loses the
 *    letterforms halfway through the word.
 *    A scrim is the fix rather than a text-shadow: shadow fakes separation and still
 *    fails on a mid-tone, a scrim actually changes the ground the type sits on. */
.based-byob-pp__hero.based-byob-pp__hero { position: relative; }.based-byob-pp__hero.based-byob-pp__hero::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(
    100deg,
    rgba(255, 255, 255, 0.94) 0%,
    rgba(255, 255, 255, 0.88) 30%,
    rgba(255, 255, 255, 0.55) 52%,
    rgba(255, 255, 255, 0) 72%
  );
}.based-byob-pp__hero-inner.based-byob-pp__hero-inner { position: relative; z-index: 2; }/* 3. HERO CROP — the source is a 2736x3472 PORTRAIT product-launch photograph dropped into
 *    a wide band, so the default centre crop cuts the model's eyes and keeps his chin.
 *    Anchoring high keeps a face in frame, which is what the photograph is for. */
.based-byob-pp__hero.based-byob-pp__hero { background-position: 50% 18%; }/* 4. WAS-PRICE. The sale is 25% off everything, so each card carries two numbers. The
 *    struck number is the real list price — the discount is shown, never manufactured. */
.jh-card-was.jh-card-was {
  text-decoration: line-through;
  /* 0.45 measured 3.31:1 — my own rule, and it failed the same audit that caught the
   * donor's. Black at alpha A on white blends to 255*(1-A); solving that for 4.5:1 gives
   * A = 0.514, so 0.56 is the first sensible step with margin. Computed, not eyeballed. */
  color: rgba(0, 0, 0, 0.56);        /* -> 4.94:1 */
  margin-right: 0.45em;
  font-weight: 400;
}/* 5. EMPTY-SLOT HINT — measured 3.91:1 at 10px, and the true figure is worse than that.
 *    TWO things dim this text and they MULTIPLY:
 *      .based-byob-pp__slots--grid.based-byob-pp__slots--grid .based-byob-pp__slot-hint { color: var(--hx-scrim-04) }*      .based-byob-pp--bbw.based-byob-pp--bbw        .based-byob-pp__slot-hint { opacity: .5 }*    so a translucent ink is then halved again by an element opacity. My first attempt set
 *    only the colour, and at one class of specificity it lost the cascade to both — the
 *    file was loaded, the rule matched, and nothing moved.
 *    [[a-no-op-that-reads-as-a-working-fix]]
 *
 *    Fixed at matching specificity, and opacity is returned to 1 so ONE value controls the
 *    contrast. Compounding dimmers cannot be reasoned about; a single ink can. */
.based-byob-pp__slots--grid.based-byob-pp__slots--grid .based-byob-pp__slot-hint, .based-byob-pp--bbw.based-byob-pp--bbw .based-byob-pp__slot-hint, .based-byob-pp--bbw.based-byob-pp--bbw .based-byob-pp__mobile-slot-hint {
  color: rgba(0, 0, 0, 0.56);        /* -> 4.94:1 */
  opacity: 1;
}/* 6. TYPE — the census found Inter still bound on 286 elements. Jack Henry ships NO webfont:
 *    0 @font-face in their live theme, 0 font files on their live page, so their identity IS
 *    the system stack. The donor's Inter is declared from an INLINE <style> block, which the
 *    file-based rebrand cannot see — a stylesheet is not always a file. */
body, body *:not(.lenis.lenis) {
  font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
               "Helvetica Neue", Arial, sans-serif;
}/* 7. EMPTY-SRC IMAGES — 2 <img> with src="" resolve against the page URL, so the browser
 *    re-requests the document, decodes it as an image and fails. They are engine placeholders
 *    that should simply not paint until they hold a product. */
img[src=""], img:not([src]) { display: none; }/* 8. CHECKOUT NOTE — measured 1.96:1 at 10px. The donor sets opacity:.3 on it as a resting
 *    "not yet actionable" state, but it never brightens: the engine changes the BUTTON, not
 *    this line. So a permanent 30% on 10px type is not a state, it is unreadable body copy.
 *    Dimmer than the surrounding ink, still legible — the hierarchy the donor wanted, at a
 *    ratio a reader can actually resolve. */
.based-byob-pp__checkout-note.based-byob-pp__checkout-note {
  opacity: 1;
  color: rgba(0, 0, 0, 0.56);        /* -> 4.94:1 */
}/* 9. THE WORDMARK SLOTS + THE COLUMN THE REMOVAL COLLAPSED.
 *
 * ⛔ REMOVING A FLEX SIBLING RESIZES THE ONES THAT REMAIN. Deleting the donor's "Get Your
 *    Routine" promo was correct — it advertised a page jack-henry-co does not have — but that
 *    card was a flex child of .bbw-footer__top.bbw-footer__top, and taking it out let the 100%-wide watermark
 *    wrapper eat the whole nowrap row. .bbw-footer__brand.bbw-footer__brand is `flex: 1 1 0`, so with no free
 *    space left it computed to 0px WIDE and 1502px TALL: the mission text wrapped to roughly
 *    one character per line and the logo vanished.
 *    A/B proved it was the removal, not this stylesheet — the collapse persisted with these
 *    rules disabled. Detector: box ~0 wide while >=20 tall.
 *    [[an-inserted-image-can-crush-its-heading-to-zero-width]]
 *    The fix is to give the column a real basis so nothing can squeeze it to nothing.
 */
.bbw-footer__brand.bbw-footer__brand { flex: 0 0 290px; min-width: 240px; }.bbw-footer__watermark-wrap.bbw-footer__watermark-wrap { flex: 1 1 auto; min-width: 0; }/* An <img> with no explicit width collapses to 0 in these flex rows — the donor's marks were
 * inline SVG sized by their own CSS; ours are <img>. Give each slot a real width. */
.bbw-footer__logo.bbw-footer__logo { width: 132px; height: auto; flex: 0 0 auto; }.bbw-header__logo.bbw-header__logo img { width: 96px; height: auto; }.bbw-footer__watermark.bbw-footer__watermark { width: 100%; height: auto; opacity: .09; }
