feat: add templates, history, comparison mode, animations, and empty states

- Add text templates with 16 pre-made options across 4 categories (greeting, tech, fun, seasonal)
- Add copy history panel tracking last 10 copied items with restore functionality
- Add font comparison mode to view multiple fonts side-by-side (up to 6 fonts)
- Add smooth animations: slide-down, slide-up, scale-in, fade-in, pulse, and shimmer
- Add loading skeletons for better perceived performance
- Add EmptyState component with contextual messages and icons
- Add hover effects and transitions throughout the UI
- Improve visual feedback with animated badges and shadows

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-09 14:10:08 +01:00
parent 7ef4ea026e
commit a09d2c3eef
12 changed files with 872 additions and 49 deletions

View File

@@ -116,6 +116,42 @@
.slide-in-from-right-full {
animation: slideInFromRight 0.3s ease-out;
}
.slide-down {
animation: slideDown 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.slide-up {
animation: slideUp 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.scale-in {
animation: scaleIn 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.pulse-subtle {
animation: pulseSubtle 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
.shimmer {
background: linear-gradient(
90deg,
transparent,
rgba(255, 255, 255, 0.1),
transparent
);
background-size: 200% 100%;
animation: shimmer 2s infinite;
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes slideInFromRight {
@@ -128,3 +164,54 @@
opacity: 1;
}
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes scaleIn {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes pulseSubtle {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.8;
}
}
@keyframes shimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}