Khi user nhấn nút đổi sáng/tối hoặc ⇧ + L, icon mặt trời xoay 360° và biến đổi sang mặt trăng trong 300ms ease-out — đủ nhanh để nhận thấy, đủ chậm để không gây giật.
@keyframes sun-moon-morph { 0% { transform: rotate(0deg) scale(1); opacity: 1; filter: hue-rotate(0deg); } 33% { transform: rotate(60deg) scale(.85); opacity: .8; filter: hue-rotate(40deg); } 66% { transform: rotate(150deg) scale(.95); opacity: .9; filter: hue-rotate(180deg); } 100% { transform: rotate(360deg) scale(1); opacity: 1; filter: hue-rotate(220deg); } } .morph-demo { animation: sun-moon-morph 300ms ease-out forwards; } /* Respects user motion preference */ @media (prefers-reduced-motion: reduce) { .morph-demo { animation: none; } /* Theme tokens swap immediately, icon swaps without rotation */ }
aria-label="Đổi sang giao diện tối" cập nhật theo trạng thái hiện tại.prefers-color-scheme. Sau đó: ghi nhớ qua localStorage.