::view-transition {
  pointer-events: none;
}

::view-transition-old(root),
::view-transition-new(root) {
  animation-duration: 350ms;
  animation-timing-function: ease-in-out;
}

.theme-toggle {
  --morph-ease: cubic-bezier(0.23, 1, 0.32, 1);
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  border-radius: 50%;
  touch-action: manipulation;
  user-select: none;
}

.theme-toggle[hidden] {
  display: none;
}

.theme-toggle svg {
  display: block;
  translate: 0 1px;
}

/* Rotate the artwork, not its viewport: avoid root-SVG layer changes at rest. */
.theme-toggle__rotation {
  transform: rotate(0deg);
  transform-box: view-box;
}

.theme-toggle__rotation,
.theme-toggle__disc,
.theme-toggle__bite,
.theme-toggle__ray {
  transform-origin: 0 0;
}

.theme-toggle__disc {
  transform: scale(1);
}

/* The bite travels on a straight line, five degrees above three o'clock. */
.theme-toggle__bite {
  transform: translate(19.923894px, -1.743115px);
}

.theme-toggle__ray {
  --ray-delay: calc(60ms + (7 - var(--ray-index)) * 18ms);
  --fade-duration: 180ms;
  transform: translateX(7.5px) scaleX(1);
  opacity: 1;
}

.theme-toggle[aria-pressed="true"] .theme-toggle__rotation {
  transform: rotate(-40deg);
}

.theme-toggle[aria-pressed="true"] .theme-toggle__disc {
  transform: scale(2);
}

.theme-toggle[aria-pressed="true"] .theme-toggle__bite {
  transform: translate(7.47146px, -0.653668px);
}

.theme-toggle[aria-pressed="true"] .theme-toggle__ray {
  --ray-delay: calc(var(--ray-index) * 18ms);
  --fade-duration: 120ms;
  transform: translateX(3.5px) scaleX(0.6);
  opacity: 0;
}

/* Enable only after initial state is rendered: no entrance animation.
   CSS transitions also reverse smoothly on rapid repeated clicks. */
.theme-toggle[data-ready] .theme-toggle__rotation,
.theme-toggle[data-ready] .theme-toggle__disc,
.theme-toggle[data-ready] .theme-toggle__bite {
  transition: transform 400ms var(--morph-ease);
}

.theme-toggle[data-ready] .theme-toggle__ray {
  transition: transform 400ms var(--morph-ease) var(--ray-delay),
    opacity var(--fade-duration) var(--morph-ease) var(--ray-delay);
}

@media (prefers-reduced-motion: reduce) {
  .theme-toggle[data-ready] .theme-toggle__rotation,
  .theme-toggle[data-ready] .theme-toggle__disc,
  .theme-toggle[data-ready] .theme-toggle__bite {
    transition: none;
  }

  .theme-toggle[data-ready] .theme-toggle__ray {
    transition: opacity 100ms ease-out;
  }
}
