/* Small touches Tailwind's CDN build doesn't cover */
.toast { animation: toast-in .25s ease-out; transition: opacity .3s, transform .3s; }
.toast.out { opacity: 0; transform: translateY(8px); }
@keyframes toast-in { from { opacity: 0; transform: translateY(12px) scale(.98); } to { opacity: 1; transform: none; } }
.pop { animation: pop .35s ease-out; }
@keyframes pop { 0% { transform: scale(1); } 40% { transform: scale(1.35); } 100% { transform: scale(1); } }
.htmx-request .htmx-hide-on-request { opacity: .4; }
.cover-shadow { box-shadow: 0 1px 1px rgba(0,0,0,.06), 0 10px 24px -8px rgba(17,21,42,.35); }
.book-spine::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 6%; background: linear-gradient(90deg, rgba(0,0,0,.18), rgba(255,255,255,.08) 60%, transparent); border-radius: inherit; }
details > summary { list-style: none; cursor: pointer; }
details > summary::-webkit-details-marker { display: none; }
.fade-in { animation: toast-in .3s ease-out; }
input[type=number]::-webkit-inner-spin-button { opacity: .4; }
