UI/UX polish: a11y, player controls, undo, stats ranges

- toasts: aria-live region + action button (used for history delete Undo)
- history cards: keyboard-reachable title link; delete = remove + Undo
  (re-POSTs the entry; no full list re-render)
- fail(): home/retry affordances instead of a dead-end error line
- per-view document.title + move focus to the new view on render
- player controls: episode jump (E#), auto-next toggle (persisted),
  picture-in-picture (when supported)
- auto-next off: 'Next: En' toast with Play instead of the countdown
- no-results search + empty home: recent-search chips (shared helper)
- stats: 30d/90d/1y period chips (api already supported days=N)
- search input: autocapitalize/spellcheck off; reduced-motion disables
  shimmer/toast animation; username in the menu on narrow screens
This commit is contained in:
jozamudi committed 2026-08-30 20:53:55 +00:00
1 parent 8f519b0251
commit c2461f8fba
3 files changed
+133 -27

No files matched your search

+6 -1
View File
@@ -16,6 +16,8 @@ button.tiny.danger { border-color: #7f1d1d; color: #f87171; }
background: var(--card); border: 1px solid var(--bd); border-radius: 8px;
padding: .35rem; min-width: 160px; z-index: 2; }
#menubox.open #menu-items { display: block; }
.menu-user { padding: .45rem .6rem .3rem; font-size: .8rem; color: var(--muted);
border-bottom: 1px solid var(--bd); margin-bottom: .25rem; }
#menu-items button, #menu-items a { display: block; width: 100%; text-align: left; margin-top: .15rem; }
header #me { margin-left: auto; }
#q { width: 100%; padding: 0.5rem 0.8rem; border-radius: 8px; border: 1px solid var(--bd);
@@ -93,6 +95,8 @@ h2 { margin: 0.4rem 0; }
.detail-prog { margin-top: .1rem; font-size: .85rem; }
.mini-info { display: flex; flex-direction: column; padding: .5rem; }
.mini-meta { font-size: .75rem; color: var(--muted); margin-top: .1rem; }
@media (prefers-reduced-motion: reduce) { .skel, .toast { animation: none; } }
@media (max-width: 640px) {
.hero-sec { grid-template-columns: 100px 1fr; grid-template-areas: "img right"; gap: .8rem; padding: .8rem; }
.hero img { width: 100px; }
@@ -142,7 +146,8 @@ button.tiny.on { border-color: var(--acc); color: var(--acc); }
display: flex; flex-direction: column; gap: .4rem; z-index: 9; }
@keyframes toast-in { from { opacity: 0; transform: translateY(.4rem); } }
.toast { background: var(--card); border: 1px solid var(--acc); color: var(--fg);
padding: .45rem .9rem; border-radius: 8px; font-size: .85rem; animation: toast-in .2s ease; }
padding: .45rem .9rem; border-radius: 8px; font-size: .85rem; animation: toast-in .2s ease;
display: flex; align-items: center; gap: .55rem; }
.crumb { display: inline-block; font-size: .85rem; color: var(--muted); margin-bottom: .2rem; }
.crumb:hover { color: var(--acc); }
.sec-head { display: flex; align-items: baseline; gap: .8rem; }