Animations, accessibility, and checklists for premium dark UI.
// Card hover
<div className="transition-all duration-300 hover:scale-[1.02]">
Card content
</div>
// Button hover
<button className="transition-colors duration-200 hover:bg-[#6bb890]">
Button
</button>
// Image hover
<img className="transition-transform duration-700 hover:scale-105" />
// npm install react-intersection-observer
import { useInView } from 'react-intersection-observer'
function Component() {
const { ref, inView } = useInView({ triggerOnce: true, threshold: 0.1 })
return (
<div
ref={ref}
className={`transition-all duration-700 ${
inView ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'
}`}
>
Content
</div>
)
}
#0a0f0d: 21:1 (AAA) ✅slate-300 on #0a0f0d: 12.6:1 (AAA) ✅#80cca5 on #0a0f0d: 7.8:1 (AAA) ✅<button className="focus:ring-2 focus:ring-[#80cca5] focus:outline-none">
Button
</button>
<nav>
<ul>
<li><a href="#">Link</a></li>
</ul>
</nav>
#0a0f0d#80cca5 green❌ DON'T:
bg-white, bg-slate-100)dark: variants (this is dark-only)bg-white/50)✅ DO:
Before launching, verify:
#0a0f0d or blacktext-whitetext-slate-300#80cca5 greenbackdrop-blur-xlbg-white/[0.02]dark:)Time to premium: 30-60 minutes Maintenance: Easy (4 components, 1 color palette) Scalability: High (reusable components)