/* Corrections layered over the captured Webflow stylesheet.
 *
 * pages/<route>/index.html and its assets/ are overwritten wholesale every time
 * capture/mirror.py runs, so nothing hand-written may live in them. This file
 * is the seam: capture stays a faithful copy of what Webflow serves, and every
 * deliberate change to it sits here, in one readable place, and survives the
 * next capture.
 *
 * It is injected last, after the Webflow sheet, so a plain single-class
 * selector here beats the same selector there. Raising specificity or reaching
 * for !important should not be necessary; if it seems to be, check whether the
 * rule being fought is actually more specific rather than just later.
 */

/* ---------------------------------------------------------------------------
 * Horizontal scrollbars on the newspaper columns
 *
 * The four columns (.ruby-scroll) and the information blob are declared
 * `overflow: scroll`, which is shorthand for BOTH axes. `scroll` differs from
 * `auto` in that it reserves a scrollbar whether or not there is anything to
 * scroll, so each column carried a horizontal bar permanently.
 *
 * Measured on the capture at 1440px: every one of these has scrollWidth exactly
 * equal to clientWidth, so the horizontal bars were tracking zero overflow.
 * Nothing is clipped by turning them off.
 *
 * Vertical becomes `auto` rather than `scroll` for the same reason: the columns
 * genuinely overflow vertically so the bar still appears, but it is no longer
 * reserved on the ones that happen to be short.
 *
 * Whether these bars are visible at all depends on the reader's system setting.
 * macOS defaults to overlay scrollbars, which is why this does not reproduce in
 * a default headless browser; with "Show scroll bars: Always" the reserved
 * track is drawn and the layout loses a strip of every column to it.
 * ------------------------------------------------------------------------- */
.ruby-scroll,
.introduction-blob,
.intro-column-list,
.column-list.scroll-hidden {
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior-y: contain;
}

/* ---------------------------------------------------------------------------
 * Custom cursor
 *
 * The captured CSS hides the native pointer unconditionally with
 * `body { cursor: none }`, while nothing in the page ever moves the custom one.
 * Hiding a pointer you are not replacing leaves a page with no pointer at all,
 * so the hide is moved behind a class that _shared/js/cursor.js adds only once
 * it has actually taken over. If that script fails to load or the device has no
 * fine pointer, the native cursor is simply left alone.
 *
 * The !important is deliberate and is the one place it is warranted here. The
 * rule it has to beat is `.body.arrow-cursor-off { cursor: none }`, two classes
 * on an element we do not author, and those generated class names can change on
 * any Webflow republish. Matching that specificity would mean hard-coding
 * `arrow-cursor-off` into a safety net whose whole job is to still work when
 * something unexpected has happened. It is scoped to :not(.cursor-live), so it
 * stops applying the instant the script takes over.
 * ------------------------------------------------------------------------- */
body:not(.cursor-live) { cursor: auto !important; }

/* Webflow also forces `cursor: none` on individual elements, which would
 * survive the body-level reset. Two classes each, so a descendant selector
 * clears them without !important. */
body:not(.cursor-live) .text-block-47,
body:not(.cursor-live) .kingdom-page-link,
body:not(.cursor-live) .nav-home-link,
body:not(.cursor-live) .reel-vimeo,
body:not(.cursor-live) .designer-note { cursor: pointer; }

body.cursor-live,
body.cursor-live * { cursor: none; }
