    :root {
      color-scheme: dark;
      --transition-ms: 800ms;
      --transition-half-ms: 400ms;
      --flip-out-angle: 90deg;
      --flip-in-angle: -90deg;
      --slide-out-x: -100%;
      --slide-in-x: 100%;
      --wipe-start: inset(0 0 0 100%);
      --progress-color: #9146ff;
      --progress-height: 6px;
      --clip-info-font-size: 32px;
      --clip-info-meta-size: 20px;
    }

    * { box-sizing: border-box; }

    html, body {
      width: 100%;
      height: 100%;
      margin: 0;
      overflow: hidden;
      background: transparent;
    }

    body {
      font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    }

    #stage {
      position: fixed;
      inset: 0;
      overflow: hidden;
      perspective: 1800px;
      perspective-origin: 50% 50%;
      transform-style: preserve-3d;
      background: transparent;
    }

    .page {
      position: absolute;
      inset: 0;
      transform-origin: 50% 50%;
      transform-style: preserve-3d;
      backface-visibility: hidden;
    }

    /* Hint compositing only while a transition is actually in progress. */
    .page[class*="tx-"] { will-change: transform, opacity; }

    .page video {
      width: 100%;
      height: 100%;
      display: block;
      object-fit: contain;
      background: transparent;
      backface-visibility: hidden;
    }

    .page::after {
      content: "";
      position: absolute;
      inset: 0;
      pointer-events: none;
      opacity: 0;
      background: linear-gradient(90deg, rgba(0,0,0,.34), rgba(0,0,0,0) 46%, rgba(255,255,255,.09));
    }

    .page.active {
      z-index: 2;
      visibility: visible;
      transform: none;
      opacity: 1;
      clip-path: inset(0);
      filter: none;
    }

    .page.preload {
      z-index: 1;
      visibility: visible;
      pointer-events: none;
      transform: translateZ(0);
      opacity: 0;
      clip-path: inset(0);
    }

    /* Zentrierter Blatt-Flip */
    .page.tx-pageflip-out {
      z-index: 4;
      visibility: visible;
      animation: pageFlipOut var(--transition-half-ms) cubic-bezier(.55,.04,.72,.55) forwards;
    }
    .page.tx-pageflip-out::after {
      animation: pageShadeOut var(--transition-half-ms) ease-in forwards;
    }
    .page.tx-pageflip-in {
      z-index: 4;
      visibility: visible;
      animation: pageFlipIn var(--transition-half-ms) cubic-bezier(.18,.68,.32,1) forwards;
    }
    .page.tx-pageflip-in::after {
      animation: pageShadeIn var(--transition-half-ms) ease-out forwards;
    }
    @keyframes pageFlipOut {
      from { transform: rotateY(0deg) scale(1); }
      to   { transform: rotateY(var(--flip-out-angle)) scale(.985); }
    }
    @keyframes pageFlipIn {
      from { transform: rotateY(var(--flip-in-angle)) scale(.985); }
      to   { transform: rotateY(0deg) scale(1); }
    }
    @keyframes pageShadeOut { from { opacity: 0; } to { opacity: .55; } }
    @keyframes pageShadeIn  { from { opacity: .55; } to { opacity: 0; } }

    /* Crossfade */
    .page.tx-fade-out {
      z-index: 3;
      visibility: visible;
      animation: fadeOut var(--transition-ms) ease-in-out forwards;
    }
    .page.tx-fade-in {
      z-index: 4;
      visibility: visible;
      animation: fadeIn var(--transition-ms) ease-in-out forwards;
    }
    @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } }
    @keyframes fadeIn  { from { opacity: 0; } to { opacity: 1; } }

    /* Horizontaler Slide */
    .page.tx-slide-out {
      z-index: 3;
      visibility: visible;
      animation: slideOut var(--transition-ms) cubic-bezier(.4,0,.2,1) forwards;
    }
    .page.tx-slide-in {
      z-index: 4;
      visibility: visible;
      animation: slideIn var(--transition-ms) cubic-bezier(.4,0,.2,1) forwards;
    }
    @keyframes slideOut { from { transform: translateX(0); } to { transform: translateX(var(--slide-out-x)); } }
    @keyframes slideIn  { from { transform: translateX(var(--slide-in-x)); } to { transform: translateX(0); } }

    /* Zoom / Push */
    .page.tx-zoom-out {
      z-index: 3;
      visibility: visible;
      animation: zoomOut var(--transition-ms) cubic-bezier(.4,0,.2,1) forwards;
    }
    .page.tx-zoom-in {
      z-index: 4;
      visibility: visible;
      animation: zoomIn var(--transition-ms) cubic-bezier(.16,1,.3,1) forwards;
    }
    @keyframes zoomOut { from { transform: scale(1); opacity: 1; } to { transform: scale(1.10); opacity: 0; } }
    @keyframes zoomIn  { from { transform: scale(.88); opacity: 0; } to { transform: scale(1); opacity: 1; } }

    /* Wipe: neuer Clip wird von der gewählten Seite aufgedeckt */
    .page.tx-wipe-out {
      z-index: 3;
      visibility: visible;
      transform: none;
      opacity: 1;
    }
    .page.tx-wipe-in {
      z-index: 4;
      visibility: visible;
      will-change: clip-path;
      animation: wipeIn var(--transition-ms) cubic-bezier(.4,0,.2,1) forwards;
    }
    @keyframes wipeIn { from { clip-path: var(--wipe-start); } to { clip-path: inset(0); } }

    #message {
      position: fixed;
      inset: 0;
      display: none;
      place-items: center;
      padding: 28px;
      background: #101014;
      color: #fff;
      z-index: 40;
    }
    #message > div {
      max-width: 900px;
      padding: 22px 26px;
      background: #1d1d24;
      border-radius: 14px;
      line-height: 1.45;
      font-size: 20px;
    }
    #message code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
