.book-rating {
  --rating-gold: color-mix(in srgb, var(--accent) 78%, #ffd56a 22%);
  --rating-empty: color-mix(in srgb, var(--muted) 72%, transparent);
  --rating-glow: color-mix(in srgb, var(--accent) 46%, transparent);

  display: inline-flex;
  align-items: center;
  gap: 2px;
  width: max-content;
  max-width: 100%;
  color: var(--rating-empty);
  line-height: 1;
}

.book-rating--compact {
  font-size: 16px;
}

.book-rating--regular {
  font-size: 20px;
}

.book-rating.is-editable {
  cursor: pointer;
}

.book-rating.is-disabled {
  cursor: default;
  opacity: 0.46;
}

.book-rating:focus-visible {
  outline: none;
  filter: drop-shadow(0 0 8px var(--rating-glow));
}

.book-rating__star {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1em;
  height: 1em;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  line-height: 1;
  transform-origin: center;
  transition:
    transform 160ms ease,
    color 160ms ease,
    filter 160ms ease;
}

button.book-rating__star {
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
}

.book-rating.is-editable .book-rating__star:hover,
.book-rating.is-editable .book-rating__star.is-preview {
  transform: scale(1.08);
  filter: drop-shadow(0 0 8px color-mix(in srgb, var(--rating-gold) 68%, transparent));
}

.book-rating__star-svg {
  display: block;
  width: 1em;
  height: 1em;
  overflow: visible;
  pointer-events: none;
}

.book-rating__star-empty {
  fill: var(--rating-empty);
}

.book-rating__star-fill {
  fill: var(--rating-gold);
  clip-path: inset(0 calc(100% - var(--book-rating-star-fill, 0%)) 0 0);
  filter: drop-shadow(0 0 5px color-mix(in srgb, var(--rating-gold) 35%, transparent));
}

.book-rating__star.is-empty .book-rating__star-fill {
  filter: none;
}

.book-rating.is-pulsing .book-rating__star-fill {
  animation: book-rating-pulse 360ms ease;
}

@keyframes book-rating-pulse {
  0% { filter: drop-shadow(0 0 0 color-mix(in srgb, var(--rating-gold) 0%, transparent)); }
  55% { filter: drop-shadow(0 0 10px color-mix(in srgb, var(--rating-gold) 68%, transparent)); }
  100% { filter: drop-shadow(0 0 5px color-mix(in srgb, var(--rating-gold) 35%, transparent)); }
}

body[data-page="library"] .book-card-library .book-card-rating-row {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  min-height: 18px;
}

body[data-page="library"] .book-card-library .book-card-rating-row .book-rating {
  transform: translateY(-1px);
}

.book-detail-rating-summary {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

.book-detail-rating-summary strong {
  white-space: nowrap;
}

@media (prefers-reduced-motion: reduce) {
  .book-rating__star {
    transition: none;
  }

  .book-rating.is-pulsing .book-rating__star-fill {
    animation: none;
  }
}
