Fixes + UX: combat HP, char delete, dice animation, compendium filters, import/export

- Combat: relabel HP controls Dmg/Heal, disabled at 0 (were silent no-ops)
- Characters: per-card Delete (confirm) + Export; header Import from JSON
- Dice: tumbling roll animation that settles on the result (a11y-safe)
- Compendium: per-category filters (monster type/CR, spell level/school, item rarity/type) + Clear
- Character import/export to portable JSON (reassigns id, validates on import)
- New: 4 io unit tests, e2e fixes spec (HP damage, delete, CR filter)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-08 00:40:43 +02:00
parent 9ecd817bc6
commit 866f1e1bf1
11 changed files with 554 additions and 41 deletions
+40
View File
@@ -84,3 +84,43 @@ body {
scrollbar-width: thin;
scrollbar-color: var(--app-line) transparent;
}
/* Dice roll animations */
@keyframes dice-tumble {
0% {
transform: scale(0.7) rotate(-12deg);
opacity: 0.5;
}
50% {
transform: scale(1.12) rotate(8deg);
}
75% {
transform: scale(0.96) rotate(-3deg);
}
100% {
transform: scale(1) rotate(0deg);
opacity: 1;
}
}
.animate-dice-settle {
animation: dice-tumble 0.45s cubic-bezier(0.22, 1, 0.36, 1);
}
@keyframes dice-shake {
0%,
100% {
transform: translate(0, 0) rotate(0deg);
}
25% {
transform: translate(-2px, 1px) rotate(-3deg);
}
50% {
transform: translate(2px, -1px) rotate(3deg);
}
75% {
transform: translate(-1px, 2px) rotate(-2deg);
}
}
.animate-dice-rolling {
animation: dice-shake 0.12s linear infinite;
}