/* First-visit loader (sh-film-loader.ts) and the black boot cover that
   sh-early.js raises before the first paint on a first visit. The cover
   lifts itself after 2.4 s even if the film bundle never runs. */
html.sh-boot body::before {
  content: ""; position: fixed; inset: 0; z-index: 200; background: var(--sh-ink-0); pointer-events: none;
  animation: sh-boot-out .4s 2.4s forwards;
}
@keyframes sh-boot-out { to { opacity: 0; visibility: hidden; } }
.sh-loader { position: fixed; inset: 0; z-index: 200; background: var(--sh-ink-0); pointer-events: none; transition: opacity .4s var(--sh-ease-out) .12s, background-color .4s; }
.sh-loader__wire { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.sh-loader__line { fill: none; stroke: rgb(255 255 255 / 30%); stroke-width: 1; stroke-dasharray: 1; stroke-dashoffset: 1; }
.sh-loader__line.is-faint { stroke: rgb(255 255 255 / 16%); }
.sh-loader.is-drawn .sh-loader__line { animation: sh-wire .7s var(--sh-ease-out) forwards; }
@keyframes sh-wire { to { stroke-dashoffset: 0; } }
.sh-loader__status {
  position: absolute; left: 50%; bottom: 56px; display: flex; gap: 18px; margin: 0; transform: translateX(-50%);
  color: var(--sh-fg-2); font: 500 11px/1 var(--sh-font-mono); letter-spacing: .2em; text-transform: uppercase; white-space: nowrap;
}
.sh-loader__pct { color: var(--sh-gold-hi); font-variant-numeric: tabular-nums; }
.sh-loader__bar { position: absolute; left: 50%; bottom: 40px; width: 160px; height: 1px; margin-left: -80px; background: var(--sh-fg); transform: scaleX(0); transform-origin: left; }
.sh-loader::before { content: ""; position: absolute; left: 50%; bottom: 40px; width: 160px; height: 1px; margin-left: -80px; background: rgb(255 255 255 / 14%); }
.sh-loader.is-leaving { background-color: transparent; opacity: 0; }
.sh-loader.is-leaving .sh-loader__wire { transition: opacity .6s; opacity: 0; }
