
.vd-viewer {
  position: relative;
  overflow: hidden;
  touch-action: none;
  user-select: none;
  background: var(--vd-surface, #1b1b1f);
}
.vd-viewer__surface {
  display: block;
  width: 100%;
  height: 100%;
  /* Text was measured against real faces; a synthesised bold or slant is not
     one of them, and would draw wider or narrower than it was laid out. */
  font-synthesis: none;
}
/* Every space layout measured, drawn. `xml:space="preserve"` is also set, but
   Chromium ignores it when set through setAttribute rather than parsed from
   markup, and collapsed double spaces shifted the rest of the line. */
.vd-viewer__surface text {
  white-space: pre;
}
/* No `will-change` on the camera group. It made the document its own
   composited layer, and every camera step then rebuilt the compositor's layer
   list from one entry per clipped or filtered item: 40 ms a step at 60 pages,
   most of a pan. Without it a step repaints what is on screen instead, which is
   cheap except under a large blur. */
.vd-viewer__page {
  /* An embedder with a no-shadow brand sets --vd-page-shadow: none. */
  filter: var(--vd-page-shadow, drop-shadow(0 6px 24px rgb(0 0 0 / 0.35)));
}
/* An asset whose bytes are not here. Visible, and obviously not a design choice. */
.vd-viewer__missing {
  fill: none;
  stroke: #94a3b8;
  stroke-width: 1;
  stroke-dasharray: 4 4;
}
/* The player: black around the slide, and nothing else on screen. */
.vd-player {
  outline: none;
  cursor: default;
}
/* A button or a link under the pointer. Before idle, which wins when both apply. */
.vd-player--link {
  cursor: pointer;
}
.vd-player--idle {
  cursor: none;
}
/* Positioned, so a transition's still of the page being left can go under or
   over it by document order alone. */
.vd-player .vd-viewer__surface {
  position: relative;
}
/* The page being left, frozen for a transition. Opaque, or the new page would
   show through it. More specific than the rule above, which it also matches. */
.vd-player .vd-player__still {
  position: absolute;
  inset: 0;
  background: #000;
  pointer-events: none;
}
/* Not on screen yet, or gone already: what motion is holding back. */
.vd-player [data-vd-hidden] {
  visibility: hidden;
}
.vd-player .vd-viewer__page {
  filter: none;
}
.vd-player__mask {
  pointer-events: none;
}
.vd-player__counter {
  position: absolute;
  right: 16px;
  bottom: 16px;
  padding: 4px 10px;
  border-radius: 8px;
  background: rgb(0 0 0 / 0.6);
  color: #fff;
  font: 500 12px/1.4 system-ui, sans-serif;
  font-variant-numeric: tabular-nums;
  opacity: 0;
  transition: opacity 200ms;
  pointer-events: none;
}
.vd-player__counter--shown {
  opacity: 1;
}
@media (prefers-reduced-motion: reduce) {
  .vd-player__counter {
    transition: none;
  }
}
/* Blur filters re-rasterise at every scale; drop it while the camera moves. */
.vd-viewer--interacting .vd-viewer__page {
  filter: none;
}
