/* ------------------------------------------------------------
   Line reveal (js/line-reveal.js)
   Each line of a split paragraph is a mask with the line's type
   inside it; the type rises out of the mask. These only exist while
   the paragraph is split - once it lands the script puts the plain
   text back.

   Both boxes are exactly one line box tall and nothing else: no
   padding, no margin. The swap back to plain text is only seamless
   if the split lays out to the same pixel, and a negative margin to
   buy room for descenders does not survive that - stacked block
   margins collapse, so every line sat lower than the real text and
   the paragraph jumped up on revert. The copy this is used on is set
   at 1.55 leading, which already clears the descenders.
   ------------------------------------------------------------ */
.lr-line {
  display: block;
  overflow: hidden;
}

.lr-in {
  display: block;
  /* The split already decided where each line breaks; a subpixel of
     rounding must not wrap a line a second time inside its mask. */
  white-space: nowrap;
  /* Keeps the band's z-index: -1 behind this line's type but in
     front of the paper under the paragraph. */
  isolation: isolate;
}

/* The line's text, as a plain inline box so it lays out exactly as
   the paragraph's own text does. Positioned only so the band can be
   sized to the words. */
.lr-t {
  position: relative;
}

/* The accent as a ground under ink - the same band .ap-hl lays under
   "built in" in the hero, sized to the type rather than the line box
   and sat a touch low, so it reads as a marker pass over the
   x-height rather than a selection box. */
.lr-mark {
  position: absolute;
  z-index: -1;
  left: -0.14em;
  right: -0.14em;
  top: calc(50% - 0.44em);
  height: 0.98em;
  background: var(--sw-accent, #d9ff3d);
  transform: scaleX(0);
  transform-origin: 0% 50%;
  pointer-events: none;
}
