mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-14 13:16:16 -08:00
feat(details): redesigned episode list, section rhythm and hero fade (#1859)
* fix(details): continue the hero artwork under the first section The vertical scrim stopped at the hero's bottom edge, so a bright backdrop ended in a visible band above the Episodes heading. The hero now grows by a 140px tail that the shell pulls the sections up over, and the scrim resolves to the exact page surface behind the heading. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(details): one section header and a 56px rhythm below the hero Episodes, Cast & crew and Similar now share app-detail-section-header: an 18px/600 title, a muted tabular counter and lead/end slots. The Episodes counter adds the watched count ("8 episodes · 3 watched"), and sections sit 56px apart, with 56px after the last one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(details): flat episode rows with a reserved action slot Each episode is now one app-episode-item, a list row or a grid card: - a number column, a 168px thumbnail with a watched check, a progress bar only for started episodes and a play overlay - title with "46 min · 12 Jan" (time left once started) and a plot clamped to two lines at 74ch - mark watched, download and a "…" menu in a 112px slot that is always reserved and shows on hover or keyboard focus, so nothing shifts - the whole item is one stretched button: Tab focuses it, Enter plays - the playing or last unfinished episode is highlighted The "…" menu holds Episode details and, for a started episode, Play from beginning, which Xtream and Stalker now start at 0. TMDB's episode runtime fills the meta line when the provider sends none. The list is the default view for anyone who has not chosen one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(details): segmented list/grid switch and a 30px season pill The view toggle becomes a 2px-padded segmented track with 30×26 segments and a neutral checked segment; the season pills and the season dropdown share the section header's 30px pill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(details): no season synopsis that repeats the series description Providers often send the series plot, or its first sentences, as every season's description, so the same text showed twice a few hundred pixels apart. The season strip now drops a synopsis that equals the hero's description, or is cut short from it, and clamps its own to two lines at 72ch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(details): draw the episode thumbnail hairline as a border An inset shadow over the artwork is invisible to the surface-contrast checks and to forced-colors mode; a 1px border is what both read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(e2e): follow the list-first, flat episode items The list is now the default view, rows and cards share .episode-item classes, and grid titles no longer carry the "N." prefix. The surface checks measure the thumbnail hairline instead of a row border, assert that hovering a row does not move its title, and capture list, grid and hover screenshots. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(ui): episode list, section rhythm and hero tail contracts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(dashboard): continue the hero artwork under the first rail The dashboard hero's fade ended at its edge, so the artwork stopped just above the Continue Watching heading. Like the details hero, it now grows by a 160px tail that the rails are pulled up over: the art fades behind the first rail's heading and reaches the page colour before its cards, so the rail's scroll-edge fades never show as a box. The narrow layout, whose slide carries its own scrim block, keeps no tail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(changes): note the smoother hero fade Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(details): season chips up to four, a counts menu from five, no season art The season picker drops every poster: chips for up to four seasons, a menu button from five whose rows read the season and "N episodes · M watched". The season synopsis loses its cover, sits on the number column 24px above the list and renders nothing without a plot of its own. The player's episode panel shares the picker and loses its dropdown thumbnails too; its season strip stays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(details): bare rows for seasons without metadata, skeletons while it loads A season whose final episode data has no plot and no usable still (the series poster or season cover repeated as a still counts as none) renders 44px rows: number, title, meta and an inline check or progress bar, the same action slot, no grid toggle. While the provider list or a TMDB lookup that could still fill a bare-looking season is outstanding, the episodes are skeleton rows at the full row's exact geometry instead of a spinner; a season the provider already describes renders at once. Xtream tracks the show match and each season's enrichment in the store; Stalker tracks its show match in the selection state and settled season fetches in its TMDB service, and now reports a regular series' season request as loading instead of an empty series. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(details): loading skeletons laid out like the loaded page The hero skeleton targeted ngx-skeleton-loader's old `.loader` class, so its blocks kept the library's light default fill and margins; `display: block` stacked the chips and buttons into columns; and the details column sat at the top while the loaded one is bottom-aligned, so the title dropped ~150px on load. It is now plain shimmer blocks at the loaded hero's geometry with the stage height kept while loading. The Xtream series page shows an episodes section skeleton under it, and the Stalker series hero holds the Play button's place while seasons load. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(e2e): the modeled Stalker series renders bare rows Its episodes repeat the series poster and carry no plots, so the shared series surface check now expects 44px bare rows without thumbnails or a grid toggle in both themes. The thumbnail hairline and grid checks stay in the Xtream suite, whose episodes have stills. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * style(details): format the season picker stylesheet Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(details): episode skeletons never outlive their metadata The loading state added for TMDB-enriched episode rows could stick or flicker: - an empty season is never enriched, so its host never settled it and the season showed six skeleton rows forever instead of its empty state; - Xtream re-marked an enriched season pending on every selection write, turning rendered rows back into skeletons (and dropping row focus) for each cache read; - a superseded lookup of a reopened series, or of a Stalker item without an id, could settle a newer lookup's pending state or never clear it; - TMDB requests have no timeout, so a blocked TMDB host held provider episodes back for minutes. Metadata now only holds back a season that has episodes, the wait is capped at 4s per season, only the latest lookup of a key (or selection) settles it, a settled Xtream season stays settled within a visit and a new visit starts its seasons afresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(details): described seasons render at once; room for titles on phones Metadata lookups held every season as skeletons until TMDB answered, even one the provider had already described with plots and stills. The state now waits for metadata only when the current data would render bare; described rows show at once and the metadata lands in place. At a pane width of 480px or less the list row kept the 112px thumbnail and the action slot beside the text, leaving a 320px phone about 18px for the title. The thumbnail shrinks to 96px there and the actions take their own row under the text. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(details): keep phone-width grid cards stacked The phone-width grid-area placements applied to grid cards too, which declare no template areas, so a card's artwork and text overlapped in a narrow pane. The placements are scoped to list rows; the surface check now also asserts a card's text stays under its artwork at 360px. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(details): a still that only one episode carries is not a repeat The distinct-stills check counted unique image URLs and treated a single one as the series poster repeated, so a season where one episode has a genuine still and the rest have none lost that still and went bare, with its grid toggle. One image on one episode is now a still; only one image on several episodes counts as a repeat. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(details): phone-width skeleton rows match the rows they precede At a pane width of 480px or less the finished list row uses a 96px thumbnail and an action row under the text, but its skeleton kept the 112px single-row layout, so pictures and text moved when loading ended. The skeleton row now carries an empty 34px action slot and mirrors the phone layout. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(details): no air date from a placeholder or an impossible day The Date constructor turned a provider's "0000-00-00" into a day in 1899 and rolled "2025-02-31" into March, so the episode meta line showed dates nobody sent. An ISO day is now validated part by part and an invalid one leaves the date out. The season menu's container colour goes through mat.menu-overrides(), as the UI guidelines require. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * style(details): spinner colours through mat.progress-spinner-overrides() The episode item set the spinner's indicator colour as raw --mat-* declarations; the UI guidelines want Material tokens set through the component's overrides mixin, which rejects unknown names at build time. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(details): unknown season counts, resume position, hero-skeleton spec A lazy Stalker VOD season the portal has not answered yet showed "0 episodes" in the season menu: the picker now takes the per-season load states and shows no count for such a season. A started episode whose duration nobody knows (no provider or TMDB runtime, none saved with the position) lost its saved position from the meta line; it now reads "Resume at 12:34". The downloads offline-detail spec queried the ngx-skeleton-loader the hero skeleton no longer uses; it queries the hero-skeleton test id. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(playback): a reused external player starts each load at its own offset MPV and VLC are launched with a global --start / --start-time for a resumed title, and a reused process applies that to every later load: "Play from beginning", the next episode and a later resume all began at the first launch's offset. The seek sent right after loadfile does not help — mpv rejects it before the file is loaded, and the command sender never reads the reply (verified against a real mpv over IPC). Every reuse load now carries a per-file start (0 unless an offset is requested): mpv's loadfile options and VLC's :start-time input option. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(details): loading flags follow the detail container, menus know unloaded seasons The fullscreen episode picker reports its season through the same onSeasonSelected as the detail container, so the Stalker view's episode-list and metadata loading flags followed whichever season was picked last: choosing another lazy season in fullscreen turned the detail page's loaded season into skeletons until the portal answered. Both flags now follow the detail container's own selection. The fullscreen panel also shares the season picker but never forwarded its per-season load states, so a lazy season read "0 episodes" in its menu; the states are forwarded now. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(details): Xtream metadata loading follows the detail container too Like the Stalker view, the Xtream seasons service keyed its metadata loading flag off the season selected last, which the fullscreen episode picker also sets: picking another season there could hide the detail page's settled bare rows behind skeletons for up to four seconds. The flag now reads the detail container's own selection; the picker's choice still gets enriched. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2dff91c9f2
commit
50d45bc7c0
119 files changed
+5065
-2341
No files matched your search
@@ -1,39 +1,32 @@
|
||||
// Cover size tokens — consumed by all cover/poster grids and rails.
|
||||
// Toggled via [data-cover-size] attribute on <html>, set from SettingsStore.
|
||||
// --season-cover-width sizes the season cover beside the season tabs on the
|
||||
// series detail page; medium matches the About block's 120px poster.
|
||||
:root {
|
||||
--cover-grid-min-width: 148px;
|
||||
--cover-rail-width: 172px;
|
||||
--cover-gap: 16px;
|
||||
--season-cover-width: 120px;
|
||||
}
|
||||
|
||||
:root[data-cover-size='small'] {
|
||||
--cover-grid-min-width: 120px;
|
||||
--cover-rail-width: 140px;
|
||||
--cover-gap: 12px;
|
||||
--season-cover-width: 96px;
|
||||
}
|
||||
|
||||
:root[data-cover-size='medium'] {
|
||||
--cover-grid-min-width: 148px;
|
||||
--cover-rail-width: 172px;
|
||||
--cover-gap: 16px;
|
||||
--season-cover-width: 120px;
|
||||
}
|
||||
|
||||
:root[data-cover-size='large'] {
|
||||
--cover-grid-min-width: 200px;
|
||||
--cover-rail-width: 220px;
|
||||
--cover-gap: 20px;
|
||||
--season-cover-width: 144px;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
:root[data-cover-size='large'] {
|
||||
--cover-grid-min-width: 160px;
|
||||
--cover-rail-width: 170px;
|
||||
--season-cover-width: 120px;
|
||||
}
|
||||
}
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "الموسم {{number}}",
|
||||
"EPISODE_COUNT_ONE": "حلقة واحدة",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} حلقات",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} تمت مشاهدتها",
|
||||
"BACK_TO_PLAYING_EPISODE": "العودة إلى الحلقة قيد التشغيل",
|
||||
"GRID_VIEW": "عرض شبكي",
|
||||
"LIST_VIEW": "عرض قائمة",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "الحلقات",
|
||||
"EPISODE_NUMBER": "الحلقة {{episode}}",
|
||||
"RESET_PROGRESS": "إعادة ضبط التقدم",
|
||||
"PLAY_FROM_BEGINNING": "التشغيل من البداية",
|
||||
"OTHER_SOURCES": "مصادر أخرى",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "فتح في مشغّل خارجي",
|
||||
"SHOW_IN_CATEGORY": "عرض في الفئة",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} س {{minutes}} د",
|
||||
"DURATION_MINUTES": "{{minutes}} د",
|
||||
"WATCHED": "تمت مشاهدته",
|
||||
"RESUME_AT": "استئناف عند {{time}}",
|
||||
"TRAILER_MUTE": "كتم صوت الإعلان",
|
||||
"TRAILER_UNMUTE": "تشغيل صوت الإعلان",
|
||||
"PROGRESS_RESET": "تمت إعادة ضبط التقدم",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "الموسم {{number}}",
|
||||
"EPISODE_COUNT_ONE": "حلقة وحدة",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} حلقات",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} تشافو",
|
||||
"BACK_TO_PLAYING_EPISODE": "رجوع للحلقة اللي كتشغل",
|
||||
"GRID_VIEW": "عرض الشبكة",
|
||||
"LIST_VIEW": "عرض اللائحة",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "الحلقات",
|
||||
"EPISODE_NUMBER": "الحلقة {{episode}}",
|
||||
"RESET_PROGRESS": "رجّع التقدم",
|
||||
"PLAY_FROM_BEGINNING": "شغّل من اللول",
|
||||
"OTHER_SOURCES": "مصادر أخرى",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "حلّ فمشغّل خارجي",
|
||||
"SHOW_IN_CATEGORY": "ورّي فالفئة",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} س {{minutes}} د",
|
||||
"DURATION_MINUTES": "{{minutes}} د",
|
||||
"WATCHED": "تشاف",
|
||||
"RESUME_AT": "كمّل من {{time}}",
|
||||
"TRAILER_MUTE": "سكّت الإعلان",
|
||||
"TRAILER_UNMUTE": "خدّم صوت الإعلان",
|
||||
"PROGRESS_RESET": "ترجّع التقدم",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Сезон {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 эпізод",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} эпізодаў",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} прагледжана",
|
||||
"BACK_TO_PLAYING_EPISODE": "Назад да бягучага эпізоду",
|
||||
"GRID_VIEW": "Выгляд сеткай",
|
||||
"LIST_VIEW": "Выгляд спісам",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Серыі",
|
||||
"EPISODE_NUMBER": "Серыя {{episode}}",
|
||||
"RESET_PROGRESS": "Скінуць прагрэс",
|
||||
"PLAY_FROM_BEGINNING": "Глядзець з пачатку",
|
||||
"OTHER_SOURCES": "Іншыя крыніцы",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Адкрыць у знешнім плэеры",
|
||||
"SHOW_IN_CATEGORY": "Паказаць у катэгорыі",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} г {{minutes}} хв",
|
||||
"DURATION_MINUTES": "{{minutes}} хв",
|
||||
"WATCHED": "прагледжана",
|
||||
"RESUME_AT": "Працягнуць з {{time}}",
|
||||
"TRAILER_MUTE": "Выключыць гук трэйлера",
|
||||
"TRAILER_UNMUTE": "Уключыць гук трэйлера",
|
||||
"PROGRESS_RESET": "Прагрэс скінуты",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Staffel {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 Episode",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} Episoden",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} gesehen",
|
||||
"BACK_TO_PLAYING_EPISODE": "Zurück zur laufenden Folge",
|
||||
"GRID_VIEW": "Rasteransicht",
|
||||
"LIST_VIEW": "Listenansicht",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Episoden",
|
||||
"EPISODE_NUMBER": "Episode {{episode}}",
|
||||
"RESET_PROGRESS": "Fortschritt zurücksetzen",
|
||||
"PLAY_FROM_BEGINNING": "Von Anfang an abspielen",
|
||||
"OTHER_SOURCES": "Andere Quellen",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "In externem Player öffnen",
|
||||
"SHOW_IN_CATEGORY": "In Kategorie anzeigen",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} h {{minutes}} min",
|
||||
"DURATION_MINUTES": "{{minutes}} min",
|
||||
"WATCHED": "gesehen",
|
||||
"RESUME_AT": "Fortsetzen bei {{time}}",
|
||||
"TRAILER_MUTE": "Trailer stummschalten",
|
||||
"TRAILER_UNMUTE": "Trailer-Ton einschalten",
|
||||
"PROGRESS_RESET": "Fortschritt zurückgesetzt",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Σεζόν {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 επεισόδιο",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} επεισόδια",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} προβλήθηκαν",
|
||||
"BACK_TO_PLAYING_EPISODE": "Πίσω στο επεισόδιο που παίζει",
|
||||
"GRID_VIEW": "Προβολή πλέγματος",
|
||||
"LIST_VIEW": "Προβολή λίστας",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Επεισόδια",
|
||||
"EPISODE_NUMBER": "Επεισόδιο {{episode}}",
|
||||
"RESET_PROGRESS": "Επαναφορά προόδου",
|
||||
"PLAY_FROM_BEGINNING": "Αναπαραγωγή από την αρχή",
|
||||
"OTHER_SOURCES": "Άλλες πηγές",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Άνοιγμα σε εξωτερικό player",
|
||||
"SHOW_IN_CATEGORY": "Εμφάνιση στην κατηγορία",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} ώ {{minutes}} λ",
|
||||
"DURATION_MINUTES": "{{minutes}} λεπ.",
|
||||
"WATCHED": "παρακολουθήθηκε",
|
||||
"RESUME_AT": "Συνέχεια από {{time}}",
|
||||
"TRAILER_MUTE": "Σίγαση τρέιλερ",
|
||||
"TRAILER_UNMUTE": "Ενεργοποίηση ήχου τρέιλερ",
|
||||
"PROGRESS_RESET": "Η πρόοδος επαναφέρθηκε",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Season {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 episode",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} episodes",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} watched",
|
||||
"BACK_TO_PLAYING_EPISODE": "Back to playing episode",
|
||||
"GRID_VIEW": "Grid view",
|
||||
"LIST_VIEW": "List view",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Episodes",
|
||||
"EPISODE_NUMBER": "Episode {{episode}}",
|
||||
"RESET_PROGRESS": "Reset progress",
|
||||
"PLAY_FROM_BEGINNING": "Play from beginning",
|
||||
"OTHER_SOURCES": "Other sources",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Open in external player",
|
||||
"SHOW_IN_CATEGORY": "Show in category",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} h {{minutes}} min",
|
||||
"DURATION_MINUTES": "{{minutes}} min",
|
||||
"WATCHED": "watched",
|
||||
"RESUME_AT": "Resume at {{time}}",
|
||||
"TRAILER_MUTE": "Mute trailer",
|
||||
"TRAILER_UNMUTE": "Unmute trailer",
|
||||
"PROGRESS_RESET": "Progress reset",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Temporada {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 episodio",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} episodios",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} vistos",
|
||||
"BACK_TO_PLAYING_EPISODE": "Volver al episodio en reproducción",
|
||||
"GRID_VIEW": "Vista de cuadrícula",
|
||||
"LIST_VIEW": "Vista de lista",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Episodios",
|
||||
"EPISODE_NUMBER": "Episodio {{episode}}",
|
||||
"RESET_PROGRESS": "Restablecer progreso",
|
||||
"PLAY_FROM_BEGINNING": "Reproducir desde el principio",
|
||||
"OTHER_SOURCES": "Otras fuentes",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Abrir en reproductor externo",
|
||||
"SHOW_IN_CATEGORY": "Mostrar en la categoría",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} h {{minutes}} min",
|
||||
"DURATION_MINUTES": "{{minutes}} min",
|
||||
"WATCHED": "visto",
|
||||
"RESUME_AT": "Continuar en {{time}}",
|
||||
"TRAILER_MUTE": "Silenciar tráiler",
|
||||
"TRAILER_UNMUTE": "Activar sonido del tráiler",
|
||||
"PROGRESS_RESET": "Progreso restablecido",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Saison {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 épisode",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} épisodes",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} vus",
|
||||
"BACK_TO_PLAYING_EPISODE": "Retour à l'épisode en cours",
|
||||
"GRID_VIEW": "Vue en grille",
|
||||
"LIST_VIEW": "Vue en liste",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Épisodes",
|
||||
"EPISODE_NUMBER": "Épisode {{episode}}",
|
||||
"RESET_PROGRESS": "Réinitialiser la progression",
|
||||
"PLAY_FROM_BEGINNING": "Lire depuis le début",
|
||||
"OTHER_SOURCES": "Autres sources",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Ouvrir dans un lecteur externe",
|
||||
"SHOW_IN_CATEGORY": "Afficher dans la catégorie",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} h {{minutes}} min",
|
||||
"DURATION_MINUTES": "{{minutes}} min",
|
||||
"WATCHED": "vu",
|
||||
"RESUME_AT": "Reprendre à {{time}}",
|
||||
"TRAILER_MUTE": "Couper le son de la bande-annonce",
|
||||
"TRAILER_UNMUTE": "Activer le son de la bande-annonce",
|
||||
"PROGRESS_RESET": "Progression réinitialisée",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "{{number}}. évad",
|
||||
"EPISODE_COUNT_ONE": "1 epizód",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} epizód",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} megnézve",
|
||||
"BACK_TO_PLAYING_EPISODE": "Vissza a lejátszás alatt álló epizódhoz",
|
||||
"GRID_VIEW": "Rácsnézet",
|
||||
"LIST_VIEW": "Listanézet",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Epizódok",
|
||||
"EPISODE_NUMBER": "{{episode}}. epizód",
|
||||
"RESET_PROGRESS": "Haladás törlése",
|
||||
"PLAY_FROM_BEGINNING": "Lejátszás az elejétől",
|
||||
"OTHER_SOURCES": "Más források",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Megnyitás külső lejátszóban",
|
||||
"SHOW_IN_CATEGORY": "Megjelenítés a kategóriában",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} ó {{minutes}} p",
|
||||
"DURATION_MINUTES": "{{minutes}} perc",
|
||||
"WATCHED": "megnézve",
|
||||
"RESUME_AT": "Folytatás innen: {{time}}",
|
||||
"TRAILER_MUTE": "Előzetes némítása",
|
||||
"TRAILER_UNMUTE": "Előzetes hangjának bekapcsolása",
|
||||
"PROGRESS_RESET": "Haladás törölve",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Stagione {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 episodio",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} episodi",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} visti",
|
||||
"BACK_TO_PLAYING_EPISODE": "Torna all'episodio in riproduzione",
|
||||
"GRID_VIEW": "Vista griglia",
|
||||
"LIST_VIEW": "Vista elenco",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Episodi",
|
||||
"EPISODE_NUMBER": "Episodio {{episode}}",
|
||||
"RESET_PROGRESS": "Azzera avanzamento",
|
||||
"PLAY_FROM_BEGINNING": "Riproduci dall'inizio",
|
||||
"OTHER_SOURCES": "Altre fonti",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Apri nel lettore esterno",
|
||||
"SHOW_IN_CATEGORY": "Mostra nella categoria",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} h {{minutes}} min",
|
||||
"DURATION_MINUTES": "{{minutes}} min",
|
||||
"WATCHED": "visto",
|
||||
"RESUME_AT": "Riprendi da {{time}}",
|
||||
"TRAILER_MUTE": "Disattiva audio del trailer",
|
||||
"TRAILER_UNMUTE": "Attiva audio del trailer",
|
||||
"PROGRESS_RESET": "Avanzamento azzerato",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "シーズン{{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 エピソード",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} エピソード",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} 本視聴済み",
|
||||
"BACK_TO_PLAYING_EPISODE": "再生中のエピソードに戻る",
|
||||
"GRID_VIEW": "グリッド表示",
|
||||
"LIST_VIEW": "リスト表示",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "エピソード",
|
||||
"EPISODE_NUMBER": "第{{episode}}話",
|
||||
"RESET_PROGRESS": "再生位置をリセット",
|
||||
"PLAY_FROM_BEGINNING": "最初から再生",
|
||||
"OTHER_SOURCES": "他のソース",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "外部プレーヤーで開く",
|
||||
"SHOW_IN_CATEGORY": "カテゴリで表示",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}}時間{{minutes}}分",
|
||||
"DURATION_MINUTES": "{{minutes}}分",
|
||||
"WATCHED": "視聴済み",
|
||||
"RESUME_AT": "{{time}} から再開",
|
||||
"TRAILER_MUTE": "予告編をミュート",
|
||||
"TRAILER_UNMUTE": "予告編の音を出す",
|
||||
"PROGRESS_RESET": "再生位置をリセットしました",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "시즌 {{number}}",
|
||||
"EPISODE_COUNT_ONE": "에피소드 1개",
|
||||
"EPISODE_COUNT_OTHER": "에피소드 {{count}}개",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}}개 시청함",
|
||||
"BACK_TO_PLAYING_EPISODE": "재생 중인 에피소드로 돌아가기",
|
||||
"GRID_VIEW": "그리드 보기",
|
||||
"LIST_VIEW": "목록 보기",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "에피소드",
|
||||
"EPISODE_NUMBER": "{{episode}}화",
|
||||
"RESET_PROGRESS": "진행 상태 초기화",
|
||||
"PLAY_FROM_BEGINNING": "처음부터 재생",
|
||||
"OTHER_SOURCES": "다른 소스",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "외부 플레이어로 열기",
|
||||
"SHOW_IN_CATEGORY": "카테고리에서 보기",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}}시간 {{minutes}}분",
|
||||
"DURATION_MINUTES": "{{minutes}}분",
|
||||
"WATCHED": "시청함",
|
||||
"RESUME_AT": "{{time}}부터 이어보기",
|
||||
"TRAILER_MUTE": "예고편 음소거",
|
||||
"TRAILER_UNMUTE": "예고편 소리 켜기",
|
||||
"PROGRESS_RESET": "진행 상태를 초기화했습니다",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Seizoen {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 aflevering",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} afleveringen",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} bekeken",
|
||||
"BACK_TO_PLAYING_EPISODE": "Terug naar lopende aflevering",
|
||||
"GRID_VIEW": "Rasterweergave",
|
||||
"LIST_VIEW": "Lijstweergave",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Afleveringen",
|
||||
"EPISODE_NUMBER": "Aflevering {{episode}}",
|
||||
"RESET_PROGRESS": "Voortgang wissen",
|
||||
"PLAY_FROM_BEGINNING": "Vanaf het begin afspelen",
|
||||
"OTHER_SOURCES": "Andere bronnen",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Openen in externe speler",
|
||||
"SHOW_IN_CATEGORY": "Tonen in categorie",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} u {{minutes}} min",
|
||||
"DURATION_MINUTES": "{{minutes}} min",
|
||||
"WATCHED": "bekeken",
|
||||
"RESUME_AT": "Hervatten bij {{time}}",
|
||||
"TRAILER_MUTE": "Trailer dempen",
|
||||
"TRAILER_UNMUTE": "Trailergeluid aan",
|
||||
"PROGRESS_RESET": "Voortgang gewist",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Sezon {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 odcinek",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} odcinków",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} obejrzanych",
|
||||
"BACK_TO_PLAYING_EPISODE": "Wróć do odtwarzanego odcinka",
|
||||
"GRID_VIEW": "Widok siatki",
|
||||
"LIST_VIEW": "Widok listy",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Odcinki",
|
||||
"EPISODE_NUMBER": "Odcinek {{episode}}",
|
||||
"RESET_PROGRESS": "Resetuj postęp",
|
||||
"PLAY_FROM_BEGINNING": "Odtwórz od początku",
|
||||
"OTHER_SOURCES": "Inne źródła",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Otwórz w zewnętrznym odtwarzaczu",
|
||||
"SHOW_IN_CATEGORY": "Pokaż w kategorii",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} godz. {{minutes}} min",
|
||||
"DURATION_MINUTES": "{{minutes}} min",
|
||||
"WATCHED": "obejrzane",
|
||||
"RESUME_AT": "Wznów od {{time}}",
|
||||
"TRAILER_MUTE": "Wycisz zwiastun",
|
||||
"TRAILER_UNMUTE": "Włącz dźwięk zwiastuna",
|
||||
"PROGRESS_RESET": "Postęp zresetowany",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Temporada {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 episódio",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} episódios",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} assistidos",
|
||||
"BACK_TO_PLAYING_EPISODE": "Voltar ao episódio em reprodução",
|
||||
"GRID_VIEW": "Visualização em grade",
|
||||
"LIST_VIEW": "Visualização em lista",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Episódios",
|
||||
"EPISODE_NUMBER": "Episódio {{episode}}",
|
||||
"RESET_PROGRESS": "Redefinir progresso",
|
||||
"PLAY_FROM_BEGINNING": "Reproduzir desde o início",
|
||||
"OTHER_SOURCES": "Outras fontes",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Abrir no reprodutor externo",
|
||||
"SHOW_IN_CATEGORY": "Mostrar na categoria",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} h {{minutes}} min",
|
||||
"DURATION_MINUTES": "{{minutes}} min",
|
||||
"WATCHED": "assistido",
|
||||
"RESUME_AT": "Retomar em {{time}}",
|
||||
"TRAILER_MUTE": "Silenciar trailer",
|
||||
"TRAILER_UNMUTE": "Ativar som do trailer",
|
||||
"PROGRESS_RESET": "Progresso redefinido",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "Сезон {{number}}",
|
||||
"EPISODE_COUNT_ONE": "1 эпизод",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} эпизодов",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} просмотрено",
|
||||
"BACK_TO_PLAYING_EPISODE": "Вернуться к воспроизводимому эпизоду",
|
||||
"GRID_VIEW": "Вид сеткой",
|
||||
"LIST_VIEW": "Вид списком",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Серии",
|
||||
"EPISODE_NUMBER": "Серия {{episode}}",
|
||||
"RESET_PROGRESS": "Сбросить прогресс",
|
||||
"PLAY_FROM_BEGINNING": "Смотреть с начала",
|
||||
"OTHER_SOURCES": "Другие источники",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Открыть во внешнем плеере",
|
||||
"SHOW_IN_CATEGORY": "Показать в категории",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} ч {{minutes}} мин",
|
||||
"DURATION_MINUTES": "{{minutes}} мин",
|
||||
"WATCHED": "просмотрено",
|
||||
"RESUME_AT": "Продолжить с {{time}}",
|
||||
"TRAILER_MUTE": "Выключить звук трейлера",
|
||||
"TRAILER_UNMUTE": "Включить звук трейлера",
|
||||
"PROGRESS_RESET": "Прогресс сброшен",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "{{number}}. Sezon",
|
||||
"EPISODE_COUNT_ONE": "1 bölüm",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} bölüm",
|
||||
"EPISODES_WATCHED_COUNT": "{{count}} izlendi",
|
||||
"BACK_TO_PLAYING_EPISODE": "Oynatılan bölüme dön",
|
||||
"GRID_VIEW": "Izgara görünümü",
|
||||
"LIST_VIEW": "Liste görünümü",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "Bölümler",
|
||||
"EPISODE_NUMBER": "Bölüm {{episode}}",
|
||||
"RESET_PROGRESS": "İlerlemeyi sıfırla",
|
||||
"PLAY_FROM_BEGINNING": "Baştan oynat",
|
||||
"OTHER_SOURCES": "Diğer kaynaklar",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "Harici oynatıcıda aç",
|
||||
"SHOW_IN_CATEGORY": "Kategoride göster",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} sa {{minutes}} dk",
|
||||
"DURATION_MINUTES": "{{minutes}} dk",
|
||||
"WATCHED": "izlendi",
|
||||
"RESUME_AT": "{{time}} konumundan devam et",
|
||||
"TRAILER_MUTE": "Fragmanı sessize al",
|
||||
"TRAILER_UNMUTE": "Fragman sesini aç",
|
||||
"PROGRESS_RESET": "İlerleme sıfırlandı",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "第 {{number}} 季",
|
||||
"EPISODE_COUNT_ONE": "1 集",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} 集",
|
||||
"EPISODES_WATCHED_COUNT": "已看 {{count}} 集",
|
||||
"BACK_TO_PLAYING_EPISODE": "返回正在播放的剧集",
|
||||
"GRID_VIEW": "网格视图",
|
||||
"LIST_VIEW": "列表视图",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "剧集",
|
||||
"EPISODE_NUMBER": "第 {{episode}} 集",
|
||||
"RESET_PROGRESS": "重置进度",
|
||||
"PLAY_FROM_BEGINNING": "从头播放",
|
||||
"OTHER_SOURCES": "其他来源",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "在外部播放器中打开",
|
||||
"SHOW_IN_CATEGORY": "在分类中显示",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} 小时 {{minutes}} 分钟",
|
||||
"DURATION_MINUTES": "{{minutes}} 分钟",
|
||||
"WATCHED": "已观看",
|
||||
"RESUME_AT": "从 {{time}} 继续",
|
||||
"TRAILER_MUTE": "预告片静音",
|
||||
"TRAILER_UNMUTE": "取消预告片静音",
|
||||
"PROGRESS_RESET": "进度已重置",
|
||||
|
||||
@@ -1323,6 +1323,7 @@
|
||||
"SEASON_TAB": "第 {{number}} 季",
|
||||
"EPISODE_COUNT_ONE": "1 集",
|
||||
"EPISODE_COUNT_OTHER": "{{count}} 集",
|
||||
"EPISODES_WATCHED_COUNT": "已看 {{count}} 集",
|
||||
"BACK_TO_PLAYING_EPISODE": "返回正在播放的集數",
|
||||
"GRID_VIEW": "格狀檢視",
|
||||
"LIST_VIEW": "清單檢視",
|
||||
@@ -1406,6 +1407,7 @@
|
||||
"EPISODES": "集數",
|
||||
"EPISODE_NUMBER": "第 {{episode}} 集",
|
||||
"RESET_PROGRESS": "重設進度",
|
||||
"PLAY_FROM_BEGINNING": "從頭播放",
|
||||
"OTHER_SOURCES": "其他來源",
|
||||
"OPEN_IN_EXTERNAL_PLAYER": "在外部播放器開啟",
|
||||
"SHOW_IN_CATEGORY": "在分類中顯示",
|
||||
@@ -1415,6 +1417,7 @@
|
||||
"DURATION_HOURS_MINUTES": "{{hours}} 小時 {{minutes}} 分鐘",
|
||||
"DURATION_MINUTES": "{{minutes}} 分鐘",
|
||||
"WATCHED": "已觀看",
|
||||
"RESUME_AT": "從 {{time}} 繼續",
|
||||
"TRAILER_MUTE": "預告片靜音",
|
||||
"TRAILER_UNMUTE": "取消預告片靜音",
|
||||
"PROGRESS_RESET": "進度已重設",
|
||||
|
||||
@@ -111,6 +111,9 @@ html {
|
||||
// Live / on-air accent (broadcast indicator)
|
||||
--app-live-color: #d12c2c;
|
||||
|
||||
// Done / watched status (episode watched toggle)
|
||||
--app-success-color: #15803d;
|
||||
|
||||
// Content area
|
||||
--app-content-shadow: -2px 4px 12px rgba(0, 0, 0, 0.06);
|
||||
|
||||
@@ -211,6 +214,9 @@ html {
|
||||
// Live / on-air accent (broadcast indicator)
|
||||
--app-live-color: #ff8f8f;
|
||||
|
||||
// Done / watched status (episode watched toggle)
|
||||
--app-success-color: #4ade80;
|
||||
|
||||
// Content area
|
||||
--app-content-shadow: -4px 8px 20px rgba(0, 0, 0, 0.18);
|
||||
|
||||
|
||||
Reference in new issue
Block a user