205 Commits
Author SHA1 Message Date
lscambo13 da00ec6b39 Fix: Typo! 2026-07-05 15:58:17 +05:30
lscambo13 6659e42fe5 New: Added a way to easily switch between IMDb and TMDB star colors (#300)
```
.starIcon{
    /* use --imdb for a gold star */
    --colors: var(--tmdb);
}
```
2026-07-05 15:54:06 +05:30
lscambo13 f916d5a8af Fix: Three-dot menu button on cards was too thin 2026-07-05 15:35:53 +05:30
lscambo13 d876036eb0 Fix: Smaller column gap and many other overrides were not being applied on phones
Fix: Made the icon shadow a touch sharper
dev: rearranged some code and updated a color
2026-07-05 15:32:49 +05:30
lscambo13 3c4e59be76 New: Added scroll snapping to horizontal lists 2026-06-28 20:39:17 +05:30
lscambo13 c95c635bb8 New: The save button in user settings pages is now always in view 2026-06-28 20:37:14 +05:30
lscambo13 f016aa8397 Fix: Delete button was losing its color when focused 2026-06-28 20:23:55 +05:30
lscambo13 ea2c414089 dev: rearranged some code 2026-06-28 20:21:31 +05:30
lscambo13 635ecf1501 dev: tweaked some css variables 2026-06-28 20:14:35 +05:30
lscambo13 2e8bc25e7e Fix: With media bar add-on, dimming behind the drawer wasn't working 2026-06-28 18:17:42 +05:30
lscambo13 b2036f52b5 New: Introduced support for Theme Videos
- they should be placed inside `backdrops` folder like:
` ./Movie (Year)/backdrops/theme1.mp4`
2026-06-20 23:52:17 +05:30
lscambo13 062aecdbb9 Fix: Hamburger menu was not covering the whole screen height on some iPhones (#262) 2026-06-20 21:51:57 +05:30
lscambo13 c85814e879 Fix: TMDB reviews section added by Jellyfin Enhanced was overflowing the layout (#234) 2026-06-12 20:36:12 +05:30
lscambo13 2fb990e597 dev: potential fix for #163, #192, #196, and #262 2026-06-12 19:57:20 +05:30
lscambo13 b9bad1d34e New: Support for the 'Episodes On Series Page' feature via KefinTweaks (#282) 2026-06-10 21:27:04 +05:30
lscambo13 1cf0ff8ff5 Fix: Avoid adding margin to empty containers added by KefinTweaks 2026-06-09 19:22:16 +05:30
lscambo13 2d3961c126 dev: disabled ordering during minification; it didn't make a difference. 2026-06-09 19:20:26 +05:30
lscambo13andMacley 7381e6358f New: Support for starr and Letterboxd external links via Jellyfin Enhanced (#297)
* Remove background color from external links button

* Add back previous change for default bg arr link

* Add custom hover colors to arr links provided by JellyFin Enhanced

* fix: removed redundant selectors; updated colors for higher contrast on hover and active

---------

Co-authored-by: Macley <26381427+Macleykun@users.noreply.github.com>
2026-06-08 19:39:23 +05:30
lscambo13 c8ef5af7de RELEASE: ElegantFin v26.06.06 2026-06-06 23:59:34 +05:30
lscambo13 61bf0407f1 Fix: Brought back small padding around cards on phones to account for multi-selection checkbox outline 2026-06-06 23:53:31 +05:30
lscambo13 a2a05e1ab6 Merge branch 'main' of https://github.com/lscambo13/ElegantFin 2026-06-06 23:39:55 +05:30
lscambo13 9c24801ff9 Docs: Update README for clarity and new customisation options 2026-06-06 23:32:19 +05:30
lscambo13 7f9aec6672 Docs: Add anime and sports cover properties to custom media covers add-on documentation 2026-06-06 22:56:59 +05:30
lscambo13 d337d1c7c0 Fix: Clear logos in the media-bar add-on were overlapping metadata at low resolutions 2026-06-06 21:36:20 +05:30
lscambo13 835d6a0fbd New: Updated Material Symbols to latest version 2026-06-05 22:58:57 +05:30
lscambo13 1fe0bfb13f Fix: Added left padding to disc headings in music lists 2026-06-05 22:57:44 +05:30
lscambo13 3b4f966833 Fix: Multi-selection checkboxes were not covering the cards fully because of minification
dev: updated calc() functions to prevent issues caused by minification
2026-06-05 22:56:27 +05:30
lscambo13 ba0aabd07b dev: use cssnano, postcss, postcss-cli and css-declaration-sorter packages for more control over minification
dev: exclude some files
dev: sort declarations alphabetically during minification
2026-06-05 22:37:30 +05:30
lscambo13 9972862b5e Fix: Added safe insets for #233 2026-06-05 22:27:59 +05:30
lscambo13 6ba7bf37dd dev: updated comments for clarity 2026-06-04 22:55:49 +05:30
lscambo13 b216efa4e4 Fix: Removed hardcoded padding value 2026-06-04 22:00:34 +05:30
lscambo13 5faa8f8d07 New: Disabled enlarged 'continue watching' cards by default; they can be enabled using --resumeCardScale 2026-06-04 21:07:25 +05:30
lscambo13 a6365ea3c7 dev: rearranged some code 2026-06-04 20:54:30 +05:30
lscambo13 115cb68b7a New: the three-dot menu button can now be toggled on or off 2026-06-04 20:50:35 +05:30
lscambo13 a20a4a18c7 Fix: Potential fix for #233 2026-06-04 20:48:47 +05:30
lscambo13 a2de79b1e3 Update tested version of Jellyfin Server to v10.11.10 2026-05-29 07:25:19 +05:30
lscambo13 8ff232ece0 Fix: Simplified the card hover overlay animation 2026-05-25 21:08:28 +05:30
lscambo13 45273ab2cd Fix: Added icon fallback to prevent the flash of invisible text 2026-05-25 21:06:43 +05:30
lscambo13 0f5925c429 New: Updated seek bar thumbs, and fixed their functionality on Firefox 2026-05-24 14:33:57 +05:30
lscambo13 47783d848d Fix: Exclude gap from vertical music lists 2026-05-24 14:26:47 +05:30
lscambo13 2e61005bde Fix: Exclude vertical lists from 4615ef4dcc 2026-05-23 21:25:47 +05:30
lscambo13 0863886a23 dev: updated formatting 2026-05-23 21:09:05 +05:30
lscambo13 d1c4cdf371 Fix: Some details tables were overflowing for some reason on phones 2026-05-23 21:05:41 +05:30
lscambo13 5a4ce02efc Fix: Restored the three-dot button permanently because newer Jellyfin versions disable the right-click context menu 2026-05-23 20:55:30 +05:30
lscambo13 42e962c6a3 Fix: Removed fixed font-size to prevent issues with indicator icons, and restored some compatibility properties 2026-05-23 20:51:56 +05:30
lscambo13andAhmed Hamdy d0da93dd8a New: Replaced music artist names with clear logos #273
- This can be configured using css variables
- Rearranged code for better manageability

Co-authored-by: Ahmed Hamdy <AhmedRadwan4@users.noreply.github.com>
2026-05-23 20:26:47 +05:30
lscambo13 a85a8127c4 Fix: Hover overlay gets stuck on latest Jellyfin versions; this workaround hides it 2026-05-23 20:10:34 +05:30
lscambo13 e6eeba4b54 Fix: Made the new minimal icons optional
This prevents breaking compatibility with some plugins
New: Updated to a newer version of Material Symbols
Fix: Added fallback to the stock icons for edge-cases
2026-05-23 20:05:47 +05:30
lscambo13 d8edde6435 Fix: Update README with Jellyfin Media Player information
Clarify the status of Jellyfin Media Player and recommend Jellyfin Desktop for better compatibility.
2026-05-19 20:39:03 +05:30
lscambo13 ab93f3b25f Fix: Update instructions for enabling the add-on 2026-05-19 20:18:14 +05:30
lscambo13 5071cc41c0 Fix: Update README for card hover effect and plugin support 2026-05-19 20:16:18 +05:30
tim-vu 8f25126e04 New: Faster page loading with optimized icon bundle (#288)
* Optimize icon bundle

* Move changes to nightly
2026-05-12 15:28:21 +05:30
lscambo13 de10ccd208 Fix: Used a different Anime cover to prevent the moire effect 2026-04-30 20:38:49 +05:30
lscambo13 ab8b652891 Fix: Used a stronger pattern to avoid mismatches in the media covers add-on #280 2026-04-30 20:34:59 +05:30
Buhbbl 08612ac638 New: Added support for Anime & Sports cover art (#281)
* Added Anime Cover Art

* Added Sports Cover Art

* compressed the images for performance & changed the image urls
2026-04-30 07:01:07 +05:30
lscambo13 58f905d127 Fix: Reduced the gap between the cast poster and the title 2026-04-26 15:21:36 +05:30
lscambo13 2ca1553435 New: Added a subtle text-shadow to card titles 2026-04-25 20:45:29 +05:30
lscambo13 4615ef4dcc Fix: Added a workaround to bring back the gap between the last scrollSlider child and the screen on phones 2026-04-25 20:41:49 +05:30
lscambo13 7fee0798ab Fix: Removed temporary workarounds for sizing cards on phones 2026-03-29 19:36:27 +05:30
lscambo13 256ef84e02 New: Added ellipsis to drop-down menus 2026-03-29 19:30:52 +05:30
lscambo13 8f85ca720f Fix: Typo 2026-03-29 19:28:57 +05:30
lscambo13 2180129ba3 New: Updated the media bar add-on for more backdrop visibility on desktops 2026-03-29 19:25:11 +05:30
lscambo13 1bcf1fd374 Fix: Prevented the border style from loading before the slides were ready in the media bar add-on 2026-03-27 20:23:06 +05:30
lscambo13 6ea5d12f7c New: Reordered the play button in the media bar add-on 2026-03-27 20:20:49 +05:30
lscambo13 4ca034b146 Fix: Tweaked the width of 'My Media (Small)' buttons 2026-03-27 16:45:04 +05:30
lscambo13 4c3a546a73 dev: reworked how cards are sized on phones
- this optimises the layout with increased card sizes without altering their count
- this allows getting rid of many workarounds for alignment of section headings
- this approach uses css 'gap' like on desktop
- it also makes the layout more predictable/consistent
2026-03-27 16:44:08 +05:30
lscambo13 8f50558039 New: 'Continue Watching' cards are now bigger than other cards
- the scale factor is configurable using '--resumeCardScale'
2026-03-27 16:27:26 +05:30
lscambo13 72289a9091 Fix: Items container in Collections was displayed in the wrong order 2026-03-27 16:20:55 +05:30
lscambo13 582e405207 Fix: Single-column layout wasn't being forced correctly on phones 2026-03-27 16:19:43 +05:30
lscambo13 869168e914 New: Increased margin between the home button and top of the app drawer 2026-03-27 16:18:28 +05:30
lscambo13 58dc3909e6 New: Increased backdrop card sizes on TV and Desktop 2026-03-27 16:09:04 +05:30
lscambo13 a68da7fe93 Fix: Made all indicators consistently small 2026-03-27 16:05:18 +05:30
lscambo13 6c2de4f07a dev: possible fix for unclickable appbar buttons 2026-03-18 22:24:05 +05:30
lscambo13 137808128e New: Updated the styling of 'skip' buttons styling on JF 10.11.6 2026-03-18 22:15:55 +05:30
lscambo13 9ca4f0a869 Fix: Prevented false matches to avoid misalignments resulting from the missing 'title' attribute on some buttons 2026-03-18 22:12:26 +05:30
lscambo13 81a4561279 dev: fixed formatting 2026-03-18 22:09:31 +05:30
lscambo13 bb3a1b10a7 New: Tweaked the size and position of indicators and 'continue watching' progress bars for better alignment on phones 2026-03-18 22:07:37 +05:30
lscambo13 7cac78050a Fix: 'Nothing here' message inside some tabs did not have side margins 2026-03-18 22:05:31 +05:30
lscambo13 60a5b58ebc Fix: Some library pages were not centered or left-aligned correctly 2026-03-18 21:59:57 +05:30
lscambo13 8fac6f51bf Fix: Added consistent gap between icon with text inside some buttons i.e. sort button 2026-03-18 21:56:37 +05:30
lscambo13 0c118996a0 Merge pull request #260 from ACertainCoder/fix/media-bar-plugin-volume-toggle
Fix: Volume toggle position was not aligned to the play/pause button in the media bar addon
2026-03-18 19:22:08 +05:30
ACertainCoder 1dbf20af69 Apply top margin to volume toggle 2026-03-08 16:28:17 +01:00
lscambo13 62231c0267 HOTFIX: ElegantFin v25.12.31 2025-12-31 21:33:17 +05:30
lscambo13 cc822351ea Fix: Some section headings got misaligned, so reverted to the original approach 2025-12-31 21:29:19 +05:30
lscambo13 7e1f0aa554 Update README.md 2025-12-31 21:01:35 +05:30
lscambo13 4fb2520a91 RELEASE: ElegantFin v25.12.31 2025-12-31 20:31:06 +05:30
lscambo13 750e9a2d81 dev: added a donation link 2025-12-31 20:12:47 +05:30
lscambo13 a1eb5af67d dev: Handled some edge-cases for the previous commit (756e4a181b) 2025-12-31 20:05:44 +05:30
lscambo13 756e4a181b Fix: Prevented long section headings from breaking into another line on the homepage on phones 2025-12-30 23:08:46 +05:30
lscambo13 a3e52a43de New: Updated styling for the Media Bar support add-on
Changes:
- redesigned the side indicator dots
- tweaked the layout specifically for phones and TVs
- improved responsiveness on TV layout
- made parental rating font consistent with its siblings
- positioned it correctly for the experimental layout
- positioned the pause button in the top-right corner
- updated colors of dot separators
- tweaked its distance from the header on small screens
2025-12-30 23:05:06 +05:30
lscambo13 8112d4401b Fix: Improved responsiveness of header tabs and page padding
- Prevented header tabs from shifting up too early on TVs
- Updated the page padding-top to adjust in sync with header tabs position
- Made the page top padding aware of the header height to prevent overlaps
2025-12-30 21:38:02 +05:30
lscambo13 c665c54f53 dev: updated the readme.md file 2025-12-29 00:56:39 +05:30
lscambo13 af6d340e8e dev: updated the customisation section 2025-12-29 00:33:31 +05:30
lscambo13 fa0cf75972 dev: possible fix for #196 #192 #163 2025-12-28 22:45:01 +05:30
lscambo13 ec7b63b431 Merge branch 'main' of https://github.com/lscambo13/ElegantFin 2025-12-28 22:21:43 +05:30
lscambo13 0f8474eccd New: Stop hiding the header on scroll on tablets to match the desktop layout behavior 2025-12-28 22:21:21 +05:30
lscambo13 4083a7a0b9 Fix: Header tabs were being cut-off on tablet screens #220 2025-12-28 22:19:00 +05:30
lscambo13 8f27df07bc dev: simplified some selectors 2025-12-28 22:13:59 +05:30
lscambo13 6a11b9cb60 Fix: Header tabs were sightly off-center on phones/tablets due to an unintentional left padding 2025-12-28 22:11:19 +05:30
lscambo13 c972bb0a48 Update header level in README.md
Change header level for the ElegantFin Theme section.
2025-12-24 07:46:06 +05:30
lscambo13 bf4241a700 Fix: Posters were not visible on some older TVs
Thanks to @BullenMoore https://github.com/lscambo13/ElegantFin/issues/182#issuecomment-3678911997
2025-12-21 22:14:22 +05:30
lscambo13 1fe65b63e6 Fix: Reworked Live TV cells to fix issues with cover overlap. focus color and height 2025-12-21 20:50:25 +05:30
lscambo13 872ac32747 Fix: Grid layout was unintentionally being applied on all layouts #217 2025-12-21 20:43:16 +05:30
lscambo13 b218a819da RELEASE: ElegantFin v25.11.25 2025-11-24 22:06:51 +05:30
lscambo13 c4d04e1709 Fix: Optimized performance a bit 2025-11-24 21:04:17 +05:30
lscambo13 c9839f0848 Fix: TYPO!! #205 2025-11-24 19:07:46 +05:30
lscambo13 779b3449c0 dev: Updated the documentation 2025-11-23 23:59:59 +05:30
lscambo13 53b003dd9e Fix: Media Bar contents were overlapping on smaller displays 2025-11-23 21:32:37 +05:30
lscambo13 5c915d6ac1 Fix: Disabled or adjusted some animations for improved performance on low-end TVs 2025-11-23 21:08:13 +05:30
lscambo13 2336be539a Fix: Disabled the new episode grid on older browsers to avoid issues with Music pages 2025-11-23 20:21:37 +05:30
lscambo13 76a5319c97 Fix: Artist page top margin was too low 2025-11-23 20:14:20 +05:30
lscambo13 296263c9d7 dev: Renamed '--backdropPositionY' to a more logical name, '--backdropTrimFromTop' 2025-11-23 20:11:59 +05:30
lscambo13 422a1e185e New: Shift the media page content up when Now Playing bottom bar is visible 2025-11-23 20:01:20 +05:30
lscambo13 7dcd42f992 Fix: Custom Media Cover titles were not visible on TVs 2025-11-23 19:58:58 +05:30
lscambo13 4e53bd27bc Fix: Improved compatibility with older browsers that don't support 'aspect-ratio' 2025-11-15 21:40:21 +05:30
lscambo13 86a1e1c74e Fix: Added responsive Episode card grid to get rid of the media queries 2025-11-15 21:31:16 +05:30
lscambo13 81a118e86e dev: updated documentation 2025-11-15 20:37:23 +05:30
lscambo13 44e95c42cb New: Added custom covers for Mixed Media libraries, Recordings and Recorded Movies
Fix: Added line wrap to prevent long library names from overflowing
dev: Simplified the code
2025-11-15 20:27:46 +05:30
lscambo13 8b1585da89 Fix: Added the missing entries i.e. Playlists, Recorded Movies etc 2025-11-15 20:24:05 +05:30
Mads Kelberg 3d08baecc8 fix: custom background overwrites scaling & position 2025-11-14 11:59:59 +01:00
Mads Kelberg fe651691e3 refactor: use data label instead of static label 2025-11-13 23:23:08 +01:00
Mads Kelberg cf67874221 chore: group css and remove duplicate 2025-11-13 23:18:07 +01:00
Mads Kelberg 676a1be4ae fix: update CSS selectors for CollectionFolder type 2025-11-13 23:13:43 +01:00
lscambo13 9a60e664e5 Fix: Used a higher quality info_outline icon 2025-11-11 23:19:03 +05:30
lscambo13 ab8627eb66 Fix: Thumbnails were slightly off-center in the episode grid 2025-11-11 23:05:24 +05:30
lscambo13 c7abd97dfb New: Redesigned the episode lists to be 'grid' on desktop 2025-11-11 22:51:58 +05:30
lscambo13 23542f197e Fix: Used standard colors in episode lists
dev: simplified some selectors to improve compatibility with HSS plugin
2025-11-11 22:43:26 +05:30
lscambo13 5641b4c7d6 Fix: Continue watching progress bar and the chapter cards were bugged on Firefox 2025-11-11 22:40:26 +05:30
lscambo13 beaf6415d0 New: Made the clear logo position from bottom configurable on desktop using a variable 2025-11-09 22:48:00 +05:30
lscambo13 a7216ebbdb New: Updated the Seasons page
New: Moved content up on some more pages
dev: Live TV icons should be visible now ee5ad227d0
dev: rearranged the code
2025-11-09 22:36:42 +05:30
lscambo13 cf17fb6538 Fix: Removed the workaround to position the card on top of title 2025-11-09 22:24:39 +05:30
lscambo13 30e0ad5488 Fix: Forgot to include a variable
dev: code cleanup
2025-11-09 22:10:44 +05:30
lscambo13 ee5ad227d0 Fix: Playlist square card was not visible
dev: simplified some selectors
2025-11-09 22:07:55 +05:30
lscambo13 b5f5a765ea Fix: Next up section column width kept varying for some reason 2025-11-09 22:03:38 +05:30
lscambo13 864834b5a8 Fix: Reduced the bottom padding from episode title on phones 2025-11-09 22:02:10 +05:30
lscambo13 0243875a8c Fix: Long words did not break in some cases
Fix: Long sentences were overflowing
dev: simplified some selectors
2025-11-09 22:01:22 +05:30
lscambo13 87374d3d3e Fix: Now playing page did not have a background color on desktop 2025-11-09 21:57:38 +05:30
lscambo13 e9bee92007 Fix: Media rating font color and the play button text alignment was incorrect in the Media Bar plugin 2025-11-09 21:56:44 +05:30
lscambo13 10239e818e dev: updated formatting 2025-11-09 21:48:48 +05:30
lscambo13 af01c3636d Fix: Improved support for the Media Bar Plugin 2025-11-09 21:48:13 +05:30
lscambo13 17e2fe6940 dev: added Prettier config 2025-11-04 20:53:10 +05:30
lscambo13 69f4540ec5 Fix: Plot info was not aligned to the bottom on older browsers 2025-11-04 20:10:36 +05:30
lscambo13 8f620b489f Fix: Dark overlay on Continue Watching and Chapter cards did not render correctly on some browsers #130?
dev: improved compatibility with Firefox
2025-11-04 20:09:46 +05:30
lscambo13 556acc22c5 Fix: Main media buttons were overlapping the plot info in episode pages #169 2025-11-04 19:58:26 +05:30
lscambo13 1e0eaae2a0 Fix: Drop-down menu font style was not applying on Firefox #110 2025-11-04 19:56:56 +05:30
lscambo13 82dd0469d5 dev: Allowed hiding the overlay button on mobile #162 2025-11-03 23:05:45 +05:30
bibi0019 36290112c3 Fix: Ensure Skip Intro Button is readable on jellyfin 10.11 (#165) 2025-11-03 22:47:37 +05:30
lscambo13 fa6dde9f1b dev: Allowed text-based titles to be shown using a variable 2025-11-03 22:40:55 +05:30
lscambo13 8575b9b2b4 New: Increased the font size of episode title 2025-11-03 22:34:57 +05:30
lscambo13 bf23c34fbf Fix: EPG rows were displayed incorrectly on Firefox #164 2025-11-03 22:34:16 +05:30
lscambo13 f7aae10db0 New: Avoid adding empty space if both plot and tagline are empty 2025-11-03 22:32:45 +05:30
lscambo13 349a720cd2 Fix: Tweaked paddings around the track selection menus to be more consistent
dev: rearranged code
2025-11-03 22:31:29 +05:30
lscambo13 b9ceded828 Fix: Some scroll buttons were not aligned with their section headings 2025-11-03 22:23:18 +05:30
lscambo13 1647f40140 dev: Allowed clear logos to be hidden using a variable 2025-11-03 22:21:43 +05:30
lscambo13 bfdd8d8576 New: Updated the program list style to match how the songs list in album pages looks 2025-11-03 22:18:37 +05:30
lscambo13 8398ee7058 Fix: Program list was limited to single column 2025-11-03 22:14:11 +05:30
lscambo13 c5dca7ffb3 Fix: Recording button text and icon did not have a gap 2025-11-03 22:11:57 +05:30
lscambo13 be84634dae Fix: Play button was bugged in dialogs i.e. live tv program 2025-11-03 22:10:46 +05:30
lscambo13 733e091072 Fix: Gradient was scaling poorly on long pages with lots of episodes 2025-11-03 22:07:49 +05:30
lscambo13 42bc537897 New: Allow users to hide the original/foreign media title using a variable 2025-10-29 06:59:01 -07:00
lscambo13 48811065aa Fix: Attempting to prevent the title from overlapping the clear logo 2025-10-29 06:53:38 -07:00
lscambo13 33afcd750c Fix: TV Show cards were displayed incorrectly on the home page in Mixed libraries section 2025-10-28 06:25:11 -07:00
lscambo13 d1b4bc1367 dev: updated the bug report template 2025-10-27 11:07:37 -07:00
lscambo13 3b15cabe57 dev: updated the test environment 2025-10-27 10:34:28 -07:00
lscambo13 8c38f33628 dev: Updated the readme.md and bug report template for clarity 2025-10-27 10:20:02 -07:00
lscambo13 6b1c3a67f3 Fix: Removed the excess left padding from collection items so that they align better with the page 2025-10-27 09:00:41 -07:00
lscambo13 1918c9b054 Fix: Collection items were displayed incorrectly on JF 10.11.0 2025-10-27 08:59:26 -07:00
lscambo13 b2d7441551 RELEASE: ElegantFin v25.10.27 2025-10-26 22:46:14 +05:30
lscambo13 8b6f499b91 Fix: Disabled scale on TVs to prevent overlaps and to improve some performance 2025-10-26 21:07:34 +05:30
lscambo13 5209cbb8f1 Fix: Prevented the foreign title from overlapping the clear logo on larger screens 2025-10-26 20:51:56 +05:30
lscambo13 4fee1b3a44 Merge branch 'main' of https://github.com/lscambo13/ElegantFin 2025-10-25 13:16:17 -07:00
lscambo13 44be2db862 Fix: Updated the TV layout to look consistent across different JF versions 2025-10-25 13:15:19 -07:00
lscambo13 855cbfa901 Fix: Improved consistency and reduced side paddings on mobile layout 2025-10-25 13:12:11 -07:00
lscambo13 e674310187 Fix: Thumbnails were not centered anymore on JF 10.11.0
Fix: Rewrote some code to ensure that the secondary pages look consistent on different JF versions
2025-10-25 13:06:26 -07:00
lscambo13 2ea0f55e6c New: Refined the layout of horizontal scrollers
Aligned the horizontal lists with their container heading, and reduced the margin between the list and title for a tighter, more cohesive layout.
2025-10-25 12:58:12 -07:00
lscambo13 a1f2360f34 dev: Updated issue template 2025-10-25 06:51:24 +05:30
lscambo13 5ab39dd7e2 New: Updated README.md for clarity 2025-10-24 09:58:07 -07:00
lscambo13 5350c7836e New: Placed the 'next up' episode and 'all seasons' in one row on JF 10.11.0 on desktop 2025-10-24 09:44:15 -07:00
lscambo13 5988cee24c New: Added initial support for JF Server 10.11.0 2025-10-24 09:39:20 -07:00
lscambo13 eff306a900 dev: updated the bug report template with additional fields
Updated the bug report template to include Jellyfin Server version and refined browser version fields.
2025-10-22 15:39:13 +05:30
lscambo13 1571e301e0 New: Allowed clear logos to be visible on older browsers 2025-09-12 08:08:25 -07:00
lscambo13 ea12292a77 New: Allowed desktop users to configure how much of the backdrop is cropped from the top
Fix: Frosted effect on page backdrops had stopped working on mobile
2025-09-12 07:57:11 -07:00
lscambo13 4a045ef8c9 Fix: Removed the bottom border from the last row in the credits box 2025-09-09 10:31:57 -07:00
lscambo13 8536ee6a90 Fix: Tweaked the app bar frosted effect on mobile and padding on TV 2025-09-09 10:09:09 -07:00
lscambo13 e62de7469c Fix: Posters for recorded live tv programmes were not visible in the media page 2025-09-09 09:14:32 -07:00
lscambo13 5994dde7a1 New: Updated the card placeholder icon color 2025-09-09 09:09:29 -07:00
lscambo13 309abc2dc3 dev: Disabled some trivial fixes for simplicity 2025-08-22 13:19:50 -07:00
lscambo13 72cc664480 New: ElegantFin version number is now also visible in the Settings page for future compatibility and its visibility on TVs
dev: TVs don't have Dashboard settings, so TV users were unable to check the version they were running. Also, in future dashboard theming might not be allowed, so I needed a different place to show the version number for debugging purposes.
2025-08-22 13:04:19 -07:00
lscambo13 10900884e7 Fix: Simplified the way play/resume labels on the play button are rendered to support foreign languages 2025-08-22 12:57:55 -07:00
lscambo13 e47b7813cf Fix: Simplified the way borders are drawn in the media credits table
This eliminates the brief flash of a horizontal line visible when opening a media or cast page on older browsers
Fix: Removed the negative bottom margin I added earlier on plot container to avoid overlaps
2025-08-22 12:52:35 -07:00
lscambo13 07fcd74ccd Fix: Backdrops were too bright/visible on TVs, causing difficulty in text legibility 2025-08-22 12:47:20 -07:00
lscambo13 9d1c26e798 Fix: Cards were misaligned on older browsers
Fix: Some cards had blue focus outline on TVs
2025-08-22 12:44:37 -07:00
lscambo13 9679d8db4d Fix: Prevented the column gap from being applied to the Editor's Choice Plugin 2025-08-19 10:45:45 -07:00
lscambo13 4eb19f2bd3 Fix: Keep the plot expanded on TVs to fix issues with remote navigation 2025-08-19 10:16:59 -07:00
lscambo13 4b8838b1c0 dev: Simplified some selectors 2025-08-19 10:13:21 -07:00
lscambo13 818f755610 New: Updated the README.md with preview videos and images in the customisation section 2025-08-14 12:18:27 -07:00
lscambo13 7372edd10f Fix: Tweaked the Media Bar top position in relation to the app bar height 2025-08-14 11:50:07 -07:00
lscambo13 24afe0f45c dev: Reworked the app bar code to make it more manageable 2025-08-14 10:48:12 -07:00
lscambo13 fb57bffd2f Fix: Positioned the audio and subtitle selection menu closer to the play button on TVs for easier navigation with remote
Fix: Reduced the top padding on pages on TVs
2025-08-14 10:31:36 -07:00
lscambo13 dd4e2b392b Fix: App bar tabs were stick in the expanded state on TVs
Fix: Workaround to prevent these tabs from overlapping buttons on TVs
2025-08-14 10:21:06 -07:00
lscambo13 d5bf3ed7ad Fix: Increased the card sizes on TVs 2025-08-14 10:16:41 -07:00
lscambo13 348495cffb dev: updated the testing environment 2025-08-11 12:23:43 -07:00
lscambo13 025dbd7c1d Fix: Prevented the Custom CSS Box from becoming infinitely long and shifting its position randomly upon interaction 2025-08-11 12:23:03 -07:00
lscambo13 00f14e00dd New: Allow users to easily switch between two App Bar styles using a single var 2025-08-11 12:19:55 -07:00
lscambo13 f9bef351d9 Fix: Fixed the skip intro button alignment according to Jellyfin version 10.10.7 2025-08-08 07:08:45 -07:00
33 changed files with 20499 additions and 1094 deletions

No files matched your search

+21 -10
View File
@@ -7,6 +7,11 @@ assignees: ''
--- ---
**Checklist**
- [ ] I have read the README.md
- [ ] I have searched through the other open and closed issues using the GitHub search bar
- [ ] I have made sure that my issue is not a duplicate
**Describe the bug** **Describe the bug**
A clear and concise description of what the bug is. A clear and concise description of what the bug is.
@@ -17,20 +22,26 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem. If applicable, add screenshots to help explain your problem.
**ElegantFin:** **ElegantFin:**
- Version [e.g. 24.12.11] - Version [e.g. 24.12.01]
**Desktop (please complete the following information):** **Jellyfin Server:**
- OS: [e.g. iOS] - Version [e.g. 10.10.3]
- Browser [e.g. chrome, safari]
- Version [e.g. 22] **Desktop:**
- OS: [e.g. Windows]
- Browser: [e.g. chrome, safari]
- Browser Version: [e.g. 22]
- Screen Resolution [e.g. 1920x1080] - Screen Resolution [e.g. 1920x1080]
**Smartphone or TV (please complete the following information):** **Smartphone or TV:**
- Device: [e.g. iPhone6] - Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1] - OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari] - Browser: [e.g. stock browser, safari]
- Version [e.g. 22] - Browser Version: [e.g. 22]
- Jellyfin App Version:
**Additional context** **Are you using any plugins or extra CSS configuration**
Add any other context about the problem here. - Add any third-party plugins or CSS configuration you use.
- [e.g. Media Bar, Custom Tabs etc]
- [e.g. other custom css modifications]
+7
View File
@@ -1,2 +1,9 @@
/tmp.txt /tmp.txt
/commits.csv /commits.csv
/node_modules
/Theme/mod.css
/Theme/ElegantFin-theme-nightly-min.css
/Theme/assets/add-ons/custom-media-covers-nightly-min.css
/Theme/assets/add-ons/media-bar-plugin-support-nightly-min.css
/Theme/assets/add-ons/seamless-fork-compatibility-nightly.css
/Theme/assets/add-ons/seamless-fork-compatibility-nightly-min.css
+139 -49
View File
@@ -1,15 +1,32 @@
<!-- Banner Image --> <!-- Banner Image -->
<img src="https://github.com/lscambo13/ElegantFin/blob/main/Theme/assets/img/banner.png?raw=true" alt="ElegantFin Theme for Jellyfin - Banner"> <img src="https://github.com/lscambo13/ElegantFin/blob/main/Theme/assets/img/banner.png?raw=true" alt="ElegantFin Theme for Jellyfin - Banner">
# ⭐ ElegantFin Theme <div align="center">
This is a Jellyfin theme inspired from Jellyseerr to improve the overall look and experience with various fixes to the UI/UX. It gives Jellyfin a fresh, modern look, and it aims to work on mobile, desktop, and TV, with just one import. <a href="https://www.jsdelivr.com/package/gh/lscambo13/ElegantFin">
<img
src="https://img.shields.io/jsdelivr/gh/hm/lscambo13/ElegantFin?style=flat&logo=jsdelivr&logoColor=%23f65e34&label=jsDelivr%20Hits&labelColor=white&color=%23f65e34"
alt="jsDelivr Requests"
/>
</a>
<br>
<a href="https://github.com/lscambo13/ElegantFin/stargazers">
<img
src="https://img.shields.io/github/stars/lscambo13/ElegantFin?style=flat&logo=github&logoColor=%231f2328&label=GitHub%20Stars&labelColor=white&color=%231f2328"
alt="GitHub Repo stars"
/>
</a>
</div>
## ⭐ ElegantFin Theme
This is a Jellyfin theme inspired from Jellyseerr to improve the overall look and experience with various fixes to the UI/UX. It gives Jellyfin a fresh, modern look, and it aims to work on mobile, desktop, and TV, with just one import.
#### **Author:** [lscambo13](https://github.com/lscambo13) #### **Author:** [lscambo13](https://github.com/lscambo13)
<hr> <hr>
### ✨ Key Features ### ✨ Key Features
- modern layouts and color tones - modern layouts and color tones
- new and improved animations on most elements - new and improved animations on most elements
- rounded corners and even spacing everywhere - rounded corners and even spacing everywhere
@@ -22,13 +39,14 @@ This is a Jellyfin theme inspired from Jellyseerr to improve the overall look an
<hr> <hr>
### 🖼️ Theme Showcase ### 🖼️ Theme Showcase
Captured on ElegantFin v25.08.02 Captured on ElegantFin v25.08.02
<details> <details>
<summary> 💻 <i>Desktop and </i>📱 <i>Mobile Screenshots</i></summary> <summary> 💻 <i>Desktop and </i>📱 <i>Mobile Screenshots</i></summary>
| Desktop | Mobile | | Desktop | Mobile |
| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/21.%20Login%20Page.webp?raw=true"><br><strong>Login Page</strong></div> | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/mobile/21.%20Login%20Page.webp?raw=true"></div> | | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/21.%20Login%20Page.webp?raw=true"><br><strong>Login Page</strong></div> | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/mobile/21.%20Login%20Page.webp?raw=true"></div> |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/1.%20Homepage.webp?raw=true"><br><strong>Homepage</strong></div> | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/mobile/1.%20Homepage.webp?raw=true"></div> | | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/1.%20Homepage.webp?raw=true"><br><strong>Homepage</strong></div> | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/mobile/1.%20Homepage.webp?raw=true"></div> |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/2.%20Movies%20Library.webp?raw=true"><br><strong>Movies Library</strong></div> | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/mobile/2.%20Movies%20Library.webp?raw=true"></div> | | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/2.%20Movies%20Library.webp?raw=true"><br><strong>Movies Library</strong></div> | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/mobile/2.%20Movies%20Library.webp?raw=true"></div> |
@@ -56,7 +74,7 @@ Captured on ElegantFin v25.08.02
<summary> 📺 <i>TV Screenshots</i></summary> <summary> 📺 <i>TV Screenshots</i></summary>
| TV View | | TV View |
| ------------------------------------------------------------------------------------------------------------- | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/tv/21.%20Login%20Page.webp?raw=true"><br><strong>Login Page</strong></div> | | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/tv/21.%20Login%20Page.webp?raw=true"><br><strong>Login Page</strong></div> |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/tv/1.%20Homepage.webp?raw=true"><br><strong>Homepage</strong></div> | | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/tv/1.%20Homepage.webp?raw=true"><br><strong>Homepage</strong></div> |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/tv/2.%20Movies%20Library.webp?raw=true"><br><strong>Movies Library</strong></div> | | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/tv/2.%20Movies%20Library.webp?raw=true"><br><strong>Movies Library</strong></div> |
@@ -77,12 +95,8 @@ Captured on ElegantFin v25.08.02
</details> </details>
https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390 https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
<hr> <hr>
### 👇 How to install/setup this theme? ### 👇 How to install/setup this theme?
@@ -95,11 +109,11 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
<summary><i>Detailed steps for server-side implementation</i></summary> <summary><i>Detailed steps for server-side implementation</i></summary>
1. Open Dashboard from Administration tab in Settings. 1. Open Dashboard from Administration tab in Settings.
2. Select General tab from the side bar. 2. From the side bar, select the Branding tab if you are on Jellyfin 10.11.X or the General tab on older version.
3. Scroll down to find Custom CSS code box under Branding section. 3. Scroll down to find Custom CSS code box.
4. Paste the custom css in Custom CSS code box. 4. Paste the custom css in Custom CSS code box.
5. Click save 5. Click save
</details> </details>
<details> <details>
<summary><i>Detailed steps for client-side implementation</i></summary> <summary><i>Detailed steps for client-side implementation</i></summary>
@@ -108,8 +122,7 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
2. Scroll down to find Custom CSS code box. 2. Scroll down to find Custom CSS code box.
3. Paste the custom css in Custom CSS code box. 3. Paste the custom css in Custom CSS code box.
4. Click save. 4. Click save.
</details> </details>
<hr> <hr>
@@ -118,7 +131,8 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
<details> <details>
<summary><i>1. Custom media covers for user media libraries</i></summary> <summary><i>1. Custom media covers for user media libraries</i></summary>
- [Previews](https://github.com/lscambo13/ElegantFin/blob/main/custom-media-covers.md#%EF%B8%8F-presets-modify-these-styles-according-to-your-own-liking) <img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/05eb7cb6-3ac9-444b-8988-9776e0815664" />
- Read more about this experimental add-on [here](https://github.com/lscambo13/ElegantFin/blob/main/custom-media-covers.md) - Read more about this experimental add-on [here](https://github.com/lscambo13/ElegantFin/blob/main/custom-media-covers.md)
</details> </details>
@@ -126,22 +140,28 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
<details> <details>
<summary><i>2. Custom background image for the login page</i></summary> <summary><i>2. Custom background image for the login page</i></summary>
- [Preview](https://user-images.githubusercontent.com/16425113/129554147-6ac7ba51-43e7-4c8e-ba77-e646a3ef6b12.jpg) <img width="auto" height="350" alt="image" src="https://github.com/user-attachments/assets/70834545-d1cd-4496-975a-4310030dedd9" />
- To enable the background wallpaper on the login screen, first tick the 'Enable the splash screen' option in your Jellyfin Dashboard below the Custom CSS Box. <img width="auto" height="350" alt="image" src="https://github.com/user-attachments/assets/c3cf2d96-0db0-4acb-bc61-7b08d5445452" />
- Note: this customisation is not needed on Jellyfin 10.11.X anymore
- On older Jellyfin versions, to enable the background wallpaper on the login screen, first tick the 'Enable the splash screen' option in your Jellyfin Dashboard below the Custom CSS Box.
- Second, copy and paste the following code at the end in Custom CSS box but don't save yet. - Second, copy and paste the following code at the end in Custom CSS box but don't save yet.
``` ```
:root{ :root{
--loginPageBgUrl: url("<YOUR-JELLYFIN-SERVER-ADDRESS>/Branding/Splashscreen?format=webp&foregroundLayer=1&quality=33&width=3840&height=2160&blur=2"); --loginPageBgUrl: url("<YOUR-JELLYFIN-SERVER-ADDRESS>/Branding/Splashscreen?format=webp&foregroundLayer=1&quality=33&width=3840&height=2160&blur=2");
} }
``` ```
- Third, replace `<YOUR-JELLYFIN-SERVER-ADDRESS>` with your Jellyfin server address, for example, `http://192.168.0.1:8097`. - Third, replace `<YOUR-JELLYFIN-SERVER-ADDRESS>` with your Jellyfin server address, for example, `http://192.168.0.1:8096`.
- Don't forget the correct http or https in your domain. - Don't forget the correct http or https in your domain.
- You can also modify the parameters, for example blur size or the resolution, according to your liking. - You can also modify the parameters, for example blur size or the resolution, according to your liking.
- Once done, save and refresh your apps and webpages. - Once done, save and refresh your apps and webpages.
</details> </details>
<details> <details>
<summary><i>3. Enable extra overlay buttons on cards on desktop</i></summary> <summary><i>3. Enable or disable extra overlay buttons on cards on desktop</i></summary>
<img width="400" height="auto" alt="image" src="https://github.com/user-attachments/assets/cb8479c2-c577-4d54-a567-697f54291a3b" />
- To enable 'Mark Played' and 'Add to Favorites' buttons that show up at the bottom right corner of cards while hovering, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage. - To enable 'Mark Played' and 'Add to Favorites' buttons that show up at the bottom right corner of cards while hovering, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
``` ```
@@ -149,12 +169,15 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
--extraCardButtonsVisibility: block; --extraCardButtonsVisibility: block;
} }
``` ```
- To hide them again, simply remove this code block or replace `block` with `none`. - To hide the three-dot button that shows up next to these buttons, also include `--menuButtonVisibility: none;` in `:root{}`
</details> - To undo these changes, simply remove this code block or switch between `block` and `none`.
</details>
<details> <details>
<summary><i>4. Place the overlay play button at the center of cards on desktop</i></summary> <summary><i>4. Place the overlay play button at the center of cards on desktop</i></summary>
<img width="400" height="auto" alt="image" src="https://github.com/user-attachments/assets/ebde9db6-cd2f-47b5-bdb9-cee1e9852e2e" />
- To bring the mini play button to the center of cards, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage. - To bring the mini play button to the center of cards, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
``` ```
:root{ :root{
@@ -162,79 +185,144 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
} }
``` ```
- To undo this change, simply remove this code block or replace `50%` with `2.8em`. - To undo this change, simply remove this code block or replace `50%` with `2.8em`.
</details> </details>
<details> <details>
<summary><i>5. Disable the card hover effect on desktop</i></summary> <summary><i>5. Disable the card shinning effect on hover on desktop</i></summary>
https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
- To disable the shine on cards that shows when hovering over them on desktop, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
- To disable the reflection on cards that shows when hovering over them on desktop, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
``` ```
:root{ :root{
--cardHoverEffect: none; --cardHoverEffect: none;
} }
``` ```
- To undo this change, simply remove this code block or replace `none` with `""`. - To undo this change, simply remove this code block or replace `none` with `""`.
</details> </details>
<details> <details>
<summary><i>6. Enable labels below library cards</i></summary> <summary><i>6. Enable labels below library cards</i></summary>
<img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/5999a5de-5134-4b02-94aa-6306768a251c" />
- To enable text labels under the media library cards, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage. - To enable text labels under the media library cards, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
``` ```
:root{ :root{
--libraryLabelVisibility: block; --libraryLabelVisibility: block;
} }
``` ```
- To undo this change, simply remove this code block or replace `block` with `none`. - To undo this change, simply remove this code block or replace `block` with `none`.
</details> </details>
<details> <details>
<summary><i>7. Enable experimental support for the Media Bar plugin</i></summary> <summary><i>7. Enable alternative style for the Media Bar plugin</i></summary>
<img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/3e88e270-40f9-48ba-8173-f65b94344f8d" />
- ElegantFin does not support any plugins by default, so to to add external support for [this plugin](https://github.com/IAmParadox27/jellyfin-plugin-media-bar), copy and paste the following code right after the main import in Custom CSS box, click save and finally refresh your app/webpage.
- ElegantFin does not support any plugins by default, so to to add external support for [this plugin](https://github.com/IAmParadox27/jellyfin-plugin-media-bar), copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
``` ```
@import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/media-bar-plugin-support-latest-min.css"); @import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/media-bar-plugin-support-latest-min.css");
``` ```
- To undo this change, simply remove this code block. - To undo this change, simply remove this code block.
</details> </details>
<details>
<summary><i>8. Switch between different app bar styles</i></summary>
https://github.com/user-attachments/assets/b5868cd2-8df9-490d-a2b6-4386c6ddcd56
- You can switch between these using `--appBarHeight`.
- Use 5em to enable the fading app bar (seamless) (default);
- Or, use 4.6em to get the solid app bar (cleaner with border)
```
:root{
/* example */
--appBarHeight: 4.6em;
}
```
- To undo this change, simply remove this code block.
</details>
<details>
<summary><i>9. Change to alternative color themes</i></summary>
<img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/0cab75aa-8fcd-4174-b0db-cc533b724bca" />
- Check out the [the theme Playground page](https://github.com/lscambo13/ElegantFin/discussions/221) for different color themes.
- You can also experiment and share your own take there if you wish.
</details>
<details>
<summary><i>10. Increase the size of Continue Watching cards so that they stand out</i></summary>
<img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/2222d5b1-00d8-4859-90fb-eeb14d488bbd" />
- You can adjust their scaling `--resumeCardScale`.
- Use any values over 1.0 to make them bigger.
```
:root{
--resumeCardScale: 1.25;
}
```
- To undo this change, simply remove this code block or set the value back to `1`.
</details>
<hr> <hr>
### 🆗 Tested on ### 🆗 Tested on
- Jellyfin Server v10.10.6
- Jellyfin Android App v2.6.2 - Jellyfin Server v10.11.10
- Microsoft Edge (Chromium)
- Jellyfin Android App v2.6.3
<hr> <hr>
### 🛠️ Troubleshooting ### 🛠️ Troubleshooting
<details>
<summary>1️⃣ - <i>How do I check if I am using the latest version of ElegantFin?</i></summary>
- To make sure that you are using the latest version of ElegantFin, check the version number at the bottom in the Dashboard screen. <details>
- It should be something like ElegantFin v25.07.XX <summary>1️⃣ - <i>How do I check which version of ElegantFin I am using?</i></summary>
- Check the version number at the bottom in the Settings screen.
- It should be something like `ElegantFin v26.YY.ZZ`.
<img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/c697f508-16db-4b1a-bfac-123decd943fa" />
</details> </details>
<details> <details>
<summary>2️⃣ - <i>I see that a newer version is available, but I have not received it yet. Why?</i></summary> <summary>2️⃣ - <i>I see that a newer version is available, but I have not received it yet. Why?</i></summary>
- If Dashboard footer shows an old version, it means that your app is still using an old cache. - If the Settings footer shows an old version, it means that you are still using an old cache.
- Once that cache is updated, the new version will be loaded. - Once that cache is updated, the new version will be loaded automatically.
- To get the latest version, you will need to clear cache. There are multiple ways to do it. - There are multiple ways to clear the cache depending on your OS, smartphone or TV. Look online if you don't know.
- On web version, force a hard refresh of the page using CTRL + F5. - On the web version, you can force a hard refresh of the page using CTRL + F5.
- On apps, try signing out and back in again. OR in case of Jellyfin Media Player on windows, you might need to delete the cache folder. That should definitely pull the latest version. - On apps, try signing out and back in again. OR in case of Jellyfin Media Player on windows, you might need to delete the cache folder.
</details> </details>
<details> <details>
<summary>3️⃣ - <i>Why do I notice visual bugs and inconsistencies on Jellyfin Media Player?</i></summary> <summary>3️⃣ - <i>Why do I notice visual bugs and inconsistencies on Jellyfin Media Player?</i></summary>
- As of version 1.12.0, JMP is based on Qt 5.x which uses a very outdated web engine, so it does not support many new CSS features. Once a new version based on Qt 6.x is released, most issues should automatically be resolved. Until then, JMP is unsupported and I recommend using the web app instead. - JMP is based on Qt 5.x which uses a very outdated web engine. It does not support many new CSS features, so it is unsupported.
</details> - [Jellyfin Desktop](https://github.com/jellyfin/jellyfin-desktop) is the new official client moving forward. It seems to be in testing right now. Use it for better compatibility or use the web app instead.
</details>
<details> <details>
<summary>4️⃣ - <i>Does it work on the AndroidTV version of the Jellyfin app?</i></summary> <summary>4️⃣ - <i>Does it work on the AndroidTV version of the Jellyfin app?</i></summary>
- As of version 0.18.11, the official Jellyfin app on the AndroidTVs does not support css themes, but the Android mobile phone app supports them. The WebOS version of the app seems to be based on the mobile phone version, so it supports the theme just fine. - As of version 0.18.11, the official Jellyfin app on the AndroidTVs does not support css themes, but the Android mobile phone app supports them. The WebOS version of the app seems to be based on the mobile phone version, so it supports the theme just fine.
</details> </details>
<details> <details>
<summary>5️⃣ - <i>All the icons on my LG TV seem to be broken. How to fix them?</i></summary> <summary>5️⃣ - <i>All the icons on my LG TV seem to be broken. How to fix them?</i></summary>
@@ -242,13 +330,12 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
- It seems that modern Material Icons which this theme uses are [not compatible on some WebOS TVs](https://github.com/lscambo13/ElegantFin/issues/39). There is a [huge similar thread](https://www.reddit.com/r/youtubetv/comments/e27go3/chinese_symbols_instead_of_icons_on_lg_tv/) about this. - It seems that modern Material Icons which this theme uses are [not compatible on some WebOS TVs](https://github.com/lscambo13/ElegantFin/issues/39). There is a [huge similar thread](https://www.reddit.com/r/youtubetv/comments/e27go3/chinese_symbols_instead_of_icons_on_lg_tv/) about this.
- This bug can be fixed by using the older icons, so I have implemented the following workaround to bring back older, supported icons. - This bug can be fixed by using the older icons, so I have implemented the following workaround to bring back older, supported icons.
- Simply add the following code at the end in Custom CSS box and save, then refresh your apps and webpages: - Simply add the following code at the end in Custom CSS box and save, then refresh your apps and webpages:
``` ```
:root{ :root{
--iconPack: 'Material Icons'; --iconPack: 'Material Icons';
} }
``` ```
</details> </details>
<details> <details>
<summary>6️⃣ - <i>How do I report bugs/issues?</i></summary> <summary>6️⃣ - <i>How do I report bugs/issues?</i></summary>
@@ -256,13 +343,12 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
- First check [here](https://github.com/lscambo13/ElegantFin/issues?q=) whether a similar issue has been reported already. If it exists, upvote and comment there to let me know. - First check [here](https://github.com/lscambo13/ElegantFin/issues?q=) whether a similar issue has been reported already. If it exists, upvote and comment there to let me know.
- Alternatively, create a new issue [here](https://github.com/lscambo13/ElegantFin/issues/new/choose). - Alternatively, create a new issue [here](https://github.com/lscambo13/ElegantFin/issues/new/choose).
</details> </details>
<details> <details>
<summary>7️⃣ - <i>When can I expect another update?</i></summary> <summary>7️⃣ - <i>When can I expect another update?</i></summary>
- 🤷 - 🤷
</details> </details>
<hr> <hr>
@@ -270,8 +356,12 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
Please read the [Contributor Guidelines](./CONTRIBUTING.md) before opening pull requests. Please read the [Contributor Guidelines](./CONTRIBUTING.md) before opening pull requests.
This is a hobby project. If it helped you, your support really means a lot.
[![Buy me a coffee](https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20coffee&emoji=☕&slug=lscambo13&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff)](https://www.buymeacoffee.com/lscambo13)
<hr>
### 🙏 Feedback Appreciated ### 🙏 Feedback Appreciated
Please use the right template when creating an [issue](https://github.com/lscambo13/ElegantFin/issues/new/choose) to [report bugs](https://github.com/lscambo13/ElegantFin/issues/new?template=bug_report.md) or [provide suggestions](https://github.com/lscambo13/ElegantFin/issues/new?template=feature_request.md). Please use the right template when creating an [issue](https://github.com/lscambo13/ElegantFin/issues/new/choose) to [report bugs](https://github.com/lscambo13/ElegantFin/issues/new?template=bug_report.md) or [provide suggestions](https://github.com/lscambo13/ElegantFin/issues/new?template=feature_request.md).
@@ -1,2 +1 @@
/* ElegantFin Theme v25.08.08 for Jellyfin by lscambo13 */ /*! ElegantFin Theme v26.06.06 for Jellyfin by lscambo13 */@import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");:root{--activeColor:#775bf4;--activeColorAlpha:rgba(119,91,244,.9);--appBarHeight:5em;--artistClearLogoVisibility:block;--artistPageBackground:unset;--artistTitleVisibility:none;--backdropTrimFromTop:10%;--backgroundAlphaOverlay:linear-gradient(180deg,var(--darkerGradientPointAlpha) 80%,transparent);--backgroundGradient:linear-gradient(0deg,var(--darkerGradientPoint) 35%,var(--lighterGradientPoint));--blurDefault:blur(5px);--blurLarge:blur(10px);--blurLargest:blur(20px);--blurSmallest:blur(2px);--borderColor:#47505c;--borderWidth:0.06em;--borderWidthDouble:0.12em;--bottomOSDGradient:linear-gradient(0deg,rgba(0,0,0,.8),45%,transparent);--btnDeleteBorderColor:#d95454;--btnDeleteColor:#a91d1d;--btnMiniPlayBorderColor:#32a769;--btnMiniPlayColor:#299a5d;--btnSubmitBorderColor:#756fe2;--btnSubmitColor:#3d36b2;--cardBackgroundGradient:linear-gradient(0deg,var(--darkerGradientPoint),25%,var(--lighterGradientPoint));--cardFooterGradient:linear-gradient(0deg,rgba(0,0,0,.9),40%,transparent);--cardHoverEffect:"";--checkboxCheckedBgColor:#4f46e5;--clearLogoVisibility:block;--darkerBorderColor:#31373f;--darkerGradientPoint:#111827;--darkerGradientPointAlpha:rgba(17,24,39,.85);--defaultBorder:var(--borderWidth) solid var(--borderColor);--defaultLighterBorder:var(--borderWidth) solid var(--lighterBorderColor);--dimTextColor:#9ca3af;--drawerColor:rgba(30,40,54,.9);--elegantFinFooterText:"ElegantFin v26.06.06";--extraCardButtonsVisibility:none;--gradientPointAlpha:rgba(29,38,53,.3);--headerBackground:var(--headerColorGradient);--headerBlurLayerVisibility:"";--headerBlurMask:linear-gradient(180deg,#fff 50%,85%,transparent);--headerColor:rgba(30,40,54,.8);--headerColorGradient:linear-gradient(180deg,rgba(30,40,54,.95) 30%,55%,transparent 90%);--headerColorGradientAlt:linear-gradient(180deg,#1e2836,70%,transparent);--highlightOutlineColor:#2563eb;--hoverGradientH:linear-gradient(90deg,transparent,hsla(0,0%,100%,.35) 45%,hsla(0,0%,100%,.35) 55%,transparent);--hoverGradientV:linear-gradient(0deg,transparent,hsla(0,0%,100%,.35) 45%,hsla(0,0%,100%,.35) 55%,transparent);--iconPack:"Material Symbols Rounded";--itemBackdropMask:linear-gradient(180deg,rgba(0,0,0,.8),75%,transparent);--itemColumnGap:1em;--itemOriginalTitleVisibility:block;--itemTitleVisibility:none;--largeRadius:1em;--largerRadius:1.25em;--libraryLabelVisibility:none;--lighterBorderColor:hsla(0,0%,100%,.2);--lighterGradientPoint:#1d2635;--lighterGradientPointAlpha:rgba(29,38,53,.85);--loginPageBgUrl:url();--loginPageText:"Sign in to continue";--menuButtonVisibility:block;--minEpisodeCardWidth:26em;--miniOverlayButtonVisibility:block;--osdSeekBarBufferedColorAlpha:hsla(0,0%,50%,.5);--osdSeekBarPlayedColor:var(--textColor);--osdSeekBarThumbColor:#fff;--overlayPlayButtonPosition:2.8em;--resumeCardScale:1;--selectorBackgroundColor:#374151;--selectorBackgroundColorAlpha:rgba(55,65,81,.5);--shadow:0.1em 0.1em 0.15em rgba(0,0,0,.3);--sidePadding:3.3%;--smallerRadius:0.375em;--smallRadius:0.5em;--tableBodyColor:#1f2937;--textColor:#d1d5db;--topOSDGradient:linear-gradient(180deg,rgba(0,0,0,.8),45%,transparent);--uiAccentColor:#756fe2;color-scheme:dark}html{font-family:Inter,sans-serif;font-optical-sizing:auto;font-style:normal;font-weight:425;-webkit-tap-highlight-color:transparent!important}body{--clearLogoBottomSpace:11em;--primaryItemPageNegativeSpace:14vh;--secondaryItemPageNegativeSpace:60vh}select{text-overflow:ellipsis}.layout-desktop>body:has(>audio[src]){--primaryItemPageNegativeSpace:calc(14vh + 5em);--secondaryItemPageNegativeSpace:calc(60vh + 5em)}.layout-mobile{--blurLargest:blur(12px);--headerBlurMask:linear-gradient(180deg,#fff 60%,90%,transparent);--headerColorGradient:var(--headerColorGradientAlt);--itemColumnGap:0.5em}.layout-mobile>body{--secondaryItemPageNegativeSpace:45vh}@font-face{font-family:Material Symbols Rounded Minimal;font-style:normal;font-weight:100 700;src:url(https://fonts.gstatic.com/l/font?kit=sykg-zNym6YjUruM-QrEh7-nyTnjDwKNJ_190FjzarESMdAUY9qjb3u1M7e05tMSFFiwiIx7ihGnzWmz-lkbsBJUso54WUKiEWtV5-yu0mchXaMnO1vqpcxiqEd46a1XUtwWncyNNmxYr8hocRsPBG56BqeEkny0qMU_aSz_M2MYR8p9qc8uUfT0rnccAg__qWWJGuzJMRCBsajdQcef&skey=70ddea8fe54d532e&v=v346) format("woff2")}@font-face{font-family:Material Symbols Rounded;font-style:normal;font-weight:100 700;src:url(https://fonts.gstatic.com/s/materialsymbolsrounded/v346/sykg-zNym6YjUruM-QrEh7-nyTnjDwKNJ_190Fjzag.woff2) format("woff2")}.material-icons{direction:ltr;display:inline-block;font-family:var(--iconPack),Material Icons!important;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-style:normal;font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 48;font-weight:400;letter-spacing:normal;line-height:1;-moz-osx-font-smoothing:grayscale;text-rendering:geometricPrecision;text-transform:none;vertical-aliLine truncated
@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap');:root{--elegantFinFooterText:"ElegantFin v25.08.08";color-scheme:dark;--darkerGradientPoint:#111827;--darkerGradientPointAlpha:rgba(17,24,39,.85);--lighterGradientPoint:#1d2635;--lighterGradientPointAlpha:rgba(29,38,53,.85);--headerColor:rgba(30,40,54,.8);--drawerColor:rgba(30,40,54,.9);--borderColor:hsl(214,13%,32%);--darkerBorderColor:hsl(214,13%,22%);--lighterBorderColor:hsla(0,0%,100%,.2);--selectorBackgroundColor:rgb(55,65,81);--selectorBackgroundColorAlpha:rgba(55,65,81,.5);--activeColorAlpha:rgba(119,91,244,.9);--activeColor:rgb(119,91,244);--osdSeekBarPlayedColor:var(--textColor);--osdSeekBarBufferedColorAlpha:rgba(128,128,128,.5);--osdSeekBarThumbColor:white;--tableBodyColor:rgb(31 41 55 / 1);--uiAccentColor:rgb(117 111 226);--btnMiniPlayColor:rgb(41 154 93);--btnMiniPlayBorderColor:rgb(50,167,105);--btnDeleteColor:rgb(169,29,29);--btnDeleteBorderColor:rgb(217,84,84);--btnSubmitColor:rgb(61,54,178);--btnSubmitBorderColor:rgb(117 111 226);--checkboxCheckedBgColor:rgb(79,70,229);--highlightOutlineColor:rgb(37,99,235);--defaultBorder:var(--borderWidth) solid var(--borderColor);--defaultLighterBorder:var(--borderWidth) solid var(--lighterBorderColor);--textColor:rgb(209,213,219);--dimTextColor:rgb(156,163,175);--backgroundGradient:linear-gradient(0deg,var(--darkerGradientPoint) 35%,var(--lighterGradientPoint));--cardBackgroundGradient:linear-gradient(0deg,var(--darkerGradientPoint),25%,var(--lighterGradientPoint));--headerColorGradient:linear-gradient(180deg,rgba(30,40,54,.95) 30%,55%,transparent 90%);--headerColorGradientAlt:linear-gradient(180deg,rgba(30,40,54,.95),70%,transparent);--headerBlurMask:linear-gradient(180deg,white 50%,85%,transparent);--cardFooterGradient:linear-gradient(0deg,rgb(0 0 0 / 90%),40%,transparent);--topOSDGradient:linear-gradient(180deg,hsla(0,0%,0%,.8),45%,hsla(0,0%,0%,0));--bottomOSDGradient:linear-gradient(0deg,hsla(0,0%,0%,.8),45%,hsla(0,0%,0%,0));--hoverGradientV:linear-gradient(0deg,transparent,rgb(255 255 255 / 100%) 45%,rgb(255 255 255 / 100%) 55%,transparent);--hoverGradientH:linear-gradient(90deg,transparent,rgb(255 255 255 / 100%) 45%,rgb(255 255 255 / 100%) 55%,transparent);--itemBackdropMask:linear-gradient(180deg,rgba(0,0,0,.8),75%,transparent);--largerRadius:1.25em;--largeRadius:1em;--smallRadius:.5em;--smallerRadius:.375em;--borderWidth:.06em;--borderWidthDouble:.12em;--sidePadding:3.3%;--itemColumnGap:1em;--primaryItemPageNegativeSpace:15vh;--secondaryItemPageNegativeSpace:35vh;--blurSmallest:blur(2px);--blurDefault:blur(5px);--blurLarge:blur(10px);--blurLargest:blur(20px);--shadow:.1em .1em .15em hsla(0,0%,0%,.3);--headerBlurLayerVisibility:"";--headerBackground:var(--headerColorGradient);--loginPageBgUrl:url("");--loginPageText:"Sign in to continue";--overlayPlayButtonPosition:2.8em;--iconPack:'Material Icons Round',Material Icons;--extraCardButtonsVisibility:none;--libraryLabelVisibility:none;--cardHoverEffect:""}html{font-family:"Inter",serif;font-optical-sizing:auto;font-weight:425;font-style:normal;-webkit-tap-highlight-color:transparent!important}.layout-mobile{--itemColumnGap:0;--sidePadding:5%}@font-face{font-family:'Material Icons Round';font-style:normal;font-weight:100 700;font-display:swap;src:url(https://fonts.gstatic.com/s/materialsymbolsrounded/v267/sykg-zNym6YjUruM-QrEh7-nyTnjDwKNJ_190Fjzag.woff2) format('woff2')}.material-icons{font-family:var(--iconPack)!important;font-weight:normal;font-style:normal;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;line-height:1;vertical-align:middle;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';font-variation-settings:'FILL' 1,'wght' 400,'GRAD' 0,'opsz' 48}.material-icons.info_outline:before{font-family:Material Icons}.dashboardFooter{font-family:"Noto Sans",serif;transition:transform 50ms}.dashboardFooter::after{content:var(--elegantFinFooterText);font-size:.8em;color:#4e4e60}::selection{background:var(--activeColorAlpha)}.cardImageIcon{color:var(--borderColor)}.card{padding:.375em;transition:width .5s}.card:focus .cardBox:not(.visualCardBox) .cardScalable{border-color:white!important}.mdl-radio__focus-circle,.mdl-radio.show-focus .mdl-radio__button:focus+.mdl-radio__circles .mdl-radio__outer-circle,.mdl-radio.show-focus .mdl-radio__button:focus+.mdl-radio__circles .mdl-radio__inner-circle{background:var(--uiAccentColor);color:var(--uiAccentColor)}.emby-button.show-focus:focus,.paper-icon-button-light.show-focus:focus,.emby-tabs .emby-button.show-focus:focus{background-color:var(--highlightOutlineColor)!important;color:#fff!important}.emby-tabs .emby-button.show-focus:focus{outline:none!important}.card.show-animation:focus>.cardBox{-webkit-transform:scale(1.125);transform:scale(1.125)}[dir=ltr] .itemsContainer>.card>.cLine truncated
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+1 -2
View File
@@ -1,2 +1 @@
/* Add-on: Custom media covers v25.08.08 for the ElegantFin Theme for Jellyfin by lscambo13 */ /*! Add-on: Custom Media Covers v26.06.06 for the ElegantFin Theme for Jellyfin by lscambo13 */:root{--colorOverlayAnimeCover:#bdcb63;--colorOverlayBooksCover:#a64446;--colorOverlayBoxsetsCover:#dbb435;--colorOverlayFoldersCover:#ad3c71;--colorOverlayHomevideosCover:#275ab9;--colorOverlayLivetvCover:#11629f;--colorOverlayMixedCover:#c23a3a;--colorOverlayMoviesCover:#c16768;--colorOverlayMusicCover:#0b5d48;--colorOverlayPlaylistsCover:#763dd8;--colorOverlayRecordedmoviesCover:#343434;--colorOverlayRecordedtvCover:#78641c;--colorOverlaySportsCover:#e97e3c;--colorOverlayTvshowsCover:#8c952b;--urlAnimeCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/anime.webp);--urlBooksCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/books.webp);--urlBoxsetsCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/boxsets.webp);--urlFoldersCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/folders.webp);--urlHomevideosCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/homevideos.webp);--urlLivetvCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/livetv.webp);--urlMixedCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/mixed.webp);--urlMoviesCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/movies.webp);--urlMusicCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/music.webp);--urlPlaylistsCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/playlists.webp);--urlRecordedmoviesCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedmovies.webp);--urlRecordedtvCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedtv.webp);--urlSportsCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/sports.webp);--urlTvshowsCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp)}[data-type=CollectionFolder] .cardContent,[data-type=CollectionFolder] .defaultCardBackground,[data-type=UserView] .cardContent,[data-type=UserView] .defaultCardBackground{background-blend-mode:multiply;background-position:50%!important;background-size:cover!important;filter:contrast(.85)}.layout-tv [data-type=CollectionFolder]:before,.layout-tv [data-type=UserView]:before,[data-type=CollectionFolder] .cardContent:before,[data-type=UserView] .cardContent:before{color:#fff;content:attr(aria-label);font-family:Noto Sans;font-size:clamp(1em,max(2.5vh,2vw),2em);font-weight:800;position:absolute;text-align:center;white-space:normal;width:94%}.layout-tv [data-type=CollectionFolder]:before,.layout-tv [data-type=UserView]:before{align-content:center;bottom:0;display:grid;top:0;z-index:1}[data-type=CollectionFolder] .cardImageIcon:not(.quiz):before,[data-type=UserView] .cardImageIcon:not(.quiz):before{display:none}[data-collectiontype=movies] .cardContent{background-color:var(--colorOverlayMoviesCover)!important;background-image:var(--urlMoviesCover)!important}[data-collectiontype=tvshows] .cardContent{background-color:var(--colorOverlayTvshowsCover)!important;background-image:var(--urlTvshowsCover)!important}[data-collectiontype=livetv] .cardContent{background-color:var(--colorOverlayLivetvCover)!important;background-image:var(--urlLivetvCover)!important}[data-collectiontype=music] .cardContent{background-color:var(--colorOverlayMusicCover)!important;background-image:var(--urlMusicCover)!important}[data-collectiontype=homevideos] .cardContent{background-color:var(--colorOverlayHomevideosCover)!important;background-image:var(--urlHomevideosCover)!important}[data-collectiontype=books] .cardContent{background-color:var(--colorOverlayBooksCover)!important;background-image:var(--urlBooksCover)!important}[data-collectiontype=boxsets] .cardContent{background-color:var(--colorOverlayBoxsetsCover)!important;background-image:var(--urlBoxsetsCover)!important}[data-collectiontype=folders] .cardContent{background-color:var(--colorOverlayFoldersCover)!important;background-image:var(--urlFoldersCover)!important}[data-collectiontype=playlists] .cardContent{background-color:var(--colorOverlayPlaylistsCover)!important;background-image:var(--urlPlaylistsCover)!important}[data-type=CollectionFolder][data-prefix=MIX] .cardContent{background-color:var(--colorOverlayMixedCover)!important;background-image:var(--urlMixedCover)!important}[dLine truncated
:root{--colorOverlayMoviesCover:rgb(193,103,104);--colorOverlayTvshowsCover:rgb(140,149,43);--colorOverlayLivetvCover:rgb(17,98,159);--colorOverlayPlaylistsCover:rgb(118,61,216);--colorOverlayBoxsetsCover:rgb(219,180,53);--colorOverlayMusicCover:rgb(11,93,72);--colorOverlayHomevideosCover:rgb(39,90,185);--colorOverlayBooksCover:rgb(166,68,70);--colorOverlayFoldersCover:rgb(173,60,113);--urlMoviesCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/movies.webp);--urlTvshowsCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp);--urlLivetvCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/livetv.webp);--urlPlaylistsCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/playlists.webp);--urlBoxsetsCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/boxsets.webp);--urlMusicCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/music.webp);--urlHomevideosCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/homevideos.webp);--urlBooksCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/books.webp);--urlFoldersCover:url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/folders.webp)}.card-withuserdata[data-isfolder="true"] .cardImageContainer.defaultCardBackground{filter:contrast(.85);background-size:cover!important;background-position:50%!important;background-blend-mode:multiply}.card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"],[data-type="Series"],[data-type="Folder"],[data-type="Season"],[data-type="Playlist"]) .cardImageContainer.cardContent::before{position:absolute;font-size:clamp(1em,max(2.5vh,2vw),2.5em);margin-bottom:.175em;font-weight:800;color:white;font-family:'Noto Sans';text-align:center}.card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"],[data-type="Series"],[data-type="Folder"]) .cardImageIcon.material-icons:not(.quiz)::before{display:none}div[data-collectiontype="movies"] .cardImageContainer.cardContent{background:var(--colorOverlayMoviesCover)!important;background-image:var(--urlMoviesCover)!important}div[data-collectiontype="tvshows"] .cardImageContainer.cardContent{background:var(--colorOverlayTvshowsCover)!important;background-image:var(--urlTvshowsCover)!important}div[data-collectiontype="livetv"] .cardImageContainer.cardContent{background:var(--colorOverlayLivetvCover)!important;background-image:var(--urlLivetvCover)!important}div[data-collectiontype="music"] .cardImageContainer.cardContent{background:var(--colorOverlayMusicCover)!important;background-image:var(--urlMusicCover)!important}div[data-collectiontype="homevideos"] .cardImageContainer.cardContent{background:var(--colorOverlayHomevideosCover)!important;background-image:var(--urlHomevideosCover)!important}div[data-collectiontype="books"] .cardImageContainer.cardContent{background:var(--colorOverlayBooksCover)!important;background-image:var(--urlBooksCover)!important}div[data-collectiontype="boxsets"] .cardImageContainer.cardContent{background:var(--colorOverlayBoxsetsCover)!important;background-image:var(--urlBoxsetsCover)!important}div[data-collectiontype="folders"] .cardImageContainer.cardContent{background:var(--colorOverlayFoldersCover)!important;background-image:var(--urlFoldersCover)!important}div[data-collectiontype="playlists"] .cardImageContainer.cardContent{background:var(--colorOverlayPlaylistsCover)!important;background-image:var(--urlPlaylistsCover)!important}.card-withuserdata[data-isfolder="true"] .cardImageContainer.cardContent{filter:contrast(.85);background-size:cover!important;background-position:50%!important;background-blend-mode:multiply}div[data-collectiontype="movies"] .cardImageContainer.cardContent::before{content:"Movies"}div[data-collectiontype="tvshows"] .cardImageContainer.cardContent::before{content:"TV Shows"}div[data-collectiontype="livetv"] .cardImageContainer.cardContent::before{content:"Live TV"}div[data-collectiontype="music"] .cardImageContainer.cardContent::before{content:"Music"}div[data-collectiontype="homevideos"] .cardImageContainer.cardContent::before{content:"Home Videos"}div[data-collectiontype="books"] .cardImageContainer.cardContent::before{content:"Books"}div[data-collectiontype="boxsets"] .cardImageContainer.cardContent::before{content:"Collections"}div[data-collectiontype="folders"] .cardImageContainer.cardContent::before{content:"Folders"}div[data-collectiontype="playlists"] .cardImageContainer.cardContent::before{content:"Playlists"}.card-withuserdata[data-isfolder="true"] .cardImageContainer.cardContent{filteLine truncated
@@ -1,4 +1,4 @@
/* Add-on: Custom media covers nightly for the ElegantFin Theme for Jellyfin by lscambo13 */ /*! Add-on: Custom Media Covers Nightly for the ElegantFin Theme for Jellyfin by lscambo13 */
:root { :root {
/* my media library default covers customizations */ /* my media library default covers customizations */
@@ -11,6 +11,11 @@
--colorOverlayHomevideosCover: rgb(39, 90, 185); --colorOverlayHomevideosCover: rgb(39, 90, 185);
--colorOverlayBooksCover: rgb(166, 68, 70); --colorOverlayBooksCover: rgb(166, 68, 70);
--colorOverlayFoldersCover: rgb(173, 60, 113); --colorOverlayFoldersCover: rgb(173, 60, 113);
--colorOverlayMixedCover: rgb(194, 58, 58);
--colorOverlayRecordedmoviesCover: rgb(52, 52, 52);
--colorOverlayRecordedtvCover: rgb(120, 100, 28);
--colorOverlayAnimeCover: rgb(189, 203, 99);
--colorOverlaySportsCover: rgb(233, 126, 60);
--urlMoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/movies.webp); --urlMoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/movies.webp);
--urlTvshowsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp); --urlTvshowsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp);
--urlLivetvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/livetv.webp); --urlLivetvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/livetv.webp);
@@ -20,169 +25,125 @@
--urlHomevideosCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/homevideos.webp); --urlHomevideosCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/homevideos.webp);
--urlBooksCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/books.webp); --urlBooksCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/books.webp);
--urlFoldersCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/folders.webp); --urlFoldersCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/folders.webp);
--urlMixedCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/mixed.webp);
--urlRecordedmoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedmovies.webp);
--urlRecordedtvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedtv.webp);
--urlAnimeCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/anime.webp);
--urlSportsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/sports.webp);
} }
.card-withuserdata[data-isfolder="true"] .cardImageContainer.defaultCardBackground { [data-type="CollectionFolder"] .defaultCardBackground,
[data-type="UserView"] .defaultCardBackground,
[data-type="CollectionFolder"] .cardContent,
[data-type="UserView"] .cardContent {
filter: contrast(0.85); filter: contrast(0.85);
background-size: cover !important; background-size: cover !important;
background-position: 50% !important; background-position: 50% !important;
background-blend-mode: multiply; background-blend-mode: multiply;
} }
.card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"], [data-type="Series"], [data-type="Folder"], [data-type="Season"], [data-type="Playlist"]) .cardImageContainer.cardContent::before { [data-type="CollectionFolder"] .cardContent::before,
[data-type="UserView"] .cardContent::before {
content: attr(aria-label);
position: absolute; position: absolute;
font-size: clamp(1em, max(2.5vh, 2vw), 2.5em); font-size: clamp(1em, max(2.5vh, 2vw), 2em);
margin-bottom: .175em;
font-weight: 800; font-weight: 800;
color: white; color: white;
font-family: 'Noto Sans'; font-family: "Noto Sans";
text-align: center; text-align: center;
width: 94%;
white-space: normal;
} }
.card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"], [data-type="Series"], [data-type="Folder"]) .cardImageIcon.material-icons:not(.quiz)::before { .layout-tv [data-type="CollectionFolder"]::before,
.layout-tv [data-type="UserView"]::before {
content: attr(aria-label);
position: absolute;
display: grid;
align-content: center;
top: 0;
bottom: 0;
font-size: clamp(1em, max(2.5vh, 2vw), 2em);
font-weight: 800;
color: white;
font-family: "Noto Sans";
text-align: center;
width: 94%;
white-space: normal;
z-index: 1;
}
[data-type="CollectionFolder"] .cardImageIcon:not(.quiz)::before,
[data-type="UserView"] .cardImageIcon:not(.quiz)::before {
display: none; display: none;
} }
/* These show up when no image is set */ [data-collectiontype="movies"] .cardContent {
background-color: var(--colorOverlayMoviesCover) !important;
/* div[data-collectiontype="movies"] .cardImageContainer.defaultCardBackground {
background: var(--colorOverlayMoviesCover) !important;
background-image: var(--urlMoviesCover) !important; background-image: var(--urlMoviesCover) !important;
} }
div[data-collectiontype="tvshows"] .cardImageContainer.defaultCardBackground { [data-collectiontype="tvshows"] .cardContent {
background: var(--colorOverlayTvshowsCover) !important; background-color: var(--colorOverlayTvshowsCover) !important;
background-image: var(--urlTvshowsCover) !important; background-image: var(--urlTvshowsCover) !important;
} }
div[data-collectiontype="livetv"] .cardImageContainer.defaultCardBackground { [data-collectiontype="livetv"] .cardContent {
background: var(--colorOverlayLivetvCover) !important; background-color: var(--colorOverlayLivetvCover) !important;
background-image: var(--urlLivetvCover) !important; background-image: var(--urlLivetvCover) !important;
} }
div[data-collectiontype="music"] .cardImageContainer.defaultCardBackground { [data-collectiontype="music"] .cardContent {
background: var(--colorOverlayMusicCover) !important; background-color: var(--colorOverlayMusicCover) !important;
background-image: var(--urlMusicCover) !important; background-image: var(--urlMusicCover) !important;
} }
div[data-collectiontype="homevideos"] .cardImageContainer.defaultCardBackground { [data-collectiontype="homevideos"] .cardContent {
background: var(--colorOverlayHomevideosCover) !important; background-color: var(--colorOverlayHomevideosCover) !important;
background-image: var(--urlHomevideosCover) !important; background-image: var(--urlHomevideosCover) !important;
} }
div[data-collectiontype="books"] .cardImageContainer.defaultCardBackground { [data-collectiontype="books"] .cardContent {
background: var(--colorOverlayBooksCover) !important; background-color: var(--colorOverlayBooksCover) !important;
background-image: var(--urlBooksCover) !important; background-image: var(--urlBooksCover) !important;
} }
div[data-collectiontype="boxsets"] .cardImageContainer.defaultCardBackground { [data-collectiontype="boxsets"] .cardContent {
background: var(--colorOverlayBoxsetsCover) !important; background-color: var(--colorOverlayBoxsetsCover) !important;
background-image: var(--urlBoxsetsCover) !important; background-image: var(--urlBoxsetsCover) !important;
} }
div[data-collectiontype="folders"] .cardImageContainer.defaultCardBackground { [data-collectiontype="folders"] .cardContent {
background: var(--colorOverlayFoldersCover) !important; background-color: var(--colorOverlayFoldersCover) !important;
background-image: var(--urlFoldersCover) !important; background-image: var(--urlFoldersCover) !important;
} }
div[data-collectiontype="playlists"] .cardImageContainer.defaultCardBackground { [data-collectiontype="playlists"] .cardContent {
background: var(--colorOverlayPlaylistsCover) !important; background-color: var(--colorOverlayPlaylistsCover) !important;
background-image: var(--urlPlaylistsCover) !important;
} */
/* These are the front facing images */
div[data-collectiontype="movies"] .cardImageContainer.cardContent {
background: var(--colorOverlayMoviesCover) !important;
background-image: var(--urlMoviesCover) !important;
}
div[data-collectiontype="tvshows"] .cardImageContainer.cardContent {
background: var(--colorOverlayTvshowsCover) !important;
background-image: var(--urlTvshowsCover) !important;
}
div[data-collectiontype="livetv"] .cardImageContainer.cardContent {
background: var(--colorOverlayLivetvCover) !important;
background-image: var(--urlLivetvCover) !important;
}
div[data-collectiontype="music"] .cardImageContainer.cardContent {
background: var(--colorOverlayMusicCover) !important;
background-image: var(--urlMusicCover) !important;
}
div[data-collectiontype="homevideos"] .cardImageContainer.cardContent {
background: var(--colorOverlayHomevideosCover) !important;
background-image: var(--urlHomevideosCover) !important;
}
div[data-collectiontype="books"] .cardImageContainer.cardContent {
background: var(--colorOverlayBooksCover) !important;
background-image: var(--urlBooksCover) !important;
}
div[data-collectiontype="boxsets"] .cardImageContainer.cardContent {
background: var(--colorOverlayBoxsetsCover) !important;
background-image: var(--urlBoxsetsCover) !important;
}
div[data-collectiontype="folders"] .cardImageContainer.cardContent {
background: var(--colorOverlayFoldersCover) !important;
background-image: var(--urlFoldersCover) !important;
}
div[data-collectiontype="playlists"] .cardImageContainer.cardContent {
background: var(--colorOverlayPlaylistsCover) !important;
background-image: var(--urlPlaylistsCover) !important; background-image: var(--urlPlaylistsCover) !important;
} }
.card-withuserdata[data-isfolder="true"] .cardImageContainer.cardContent { [data-type="CollectionFolder"][data-prefix="MIX"] .cardContent {
filter: contrast(0.85); background-color: var(--colorOverlayMixedCover) !important;
background-size: cover !important; background-image: var(--urlMixedCover) !important;
background-position: 50% !important;
background-blend-mode: multiply;
} }
div[data-collectiontype="movies"] .cardImageContainer.cardContent::before { [data-collectiontype="movies"][data-prefix="REC"] .cardContent {
content: "Movies"; background-color: var(--colorOverlayRecordedmoviesCover) !important;
background-image: var(--urlRecordedmoviesCover) !important;
} }
div[data-collectiontype="tvshows"] .cardImageContainer.cardContent::before { [data-type="CollectionFolder"][data-prefix="REC"] .cardContent {
content: "TV Shows"; background-color: var(--colorOverlayRecordedtvCover) !important;
background-image: var(--urlRecordedtvCover) !important;
} }
div[data-collectiontype="livetv"] .cardImageContainer.cardContent::before { [data-type="CollectionFolder"][data-prefix="ANI"] .cardContent {
content: "Live TV"; background-color: var(--colorOverlayAnimeCover) !important;
background-image: var(--urlAnimeCover) !important;
} }
div[data-collectiontype="music"] .cardImageContainer.cardContent::before { [data-type="CollectionFolder"][data-prefix="SPO"] .cardContent {
content: "Music"; background-color: var(--colorOverlaySportsCover) !important;
} background-image: var(--urlSportsCover) !important;
div[data-collectiontype="homevideos"] .cardImageContainer.cardContent::before {
content: "Home Videos";
}
div[data-collectiontype="books"] .cardImageContainer.cardContent::before {
content: "Books";
}
div[data-collectiontype="boxsets"] .cardImageContainer.cardContent::before {
content: "Collections";
}
div[data-collectiontype="folders"] .cardImageContainer.cardContent::before {
content: "Folders";
}
div[data-collectiontype="playlists"] .cardImageContainer.cardContent::before {
content: "Playlists";
}
.card-withuserdata[data-isfolder="true"] .cardImageContainer.cardContent {
filter: contrast(0.85);
background-size: cover !important;
background-position: 50% !important;
background-blend-mode: multiply;
} }
@@ -0,0 +1,135 @@
/* Add-on: Custom media covers v25.11.25 for the ElegantFin Theme for Jellyfin by lscambo13 */
:root {
/* my media library default covers customizations */
--colorOverlayMoviesCover: rgb(193, 103, 104);
--colorOverlayTvshowsCover: rgb(140, 149, 43);
--colorOverlayLivetvCover: rgb(17, 98, 159);
--colorOverlayPlaylistsCover: rgb(118, 61, 216);
--colorOverlayBoxsetsCover: rgb(219, 180, 53);
--colorOverlayMusicCover: rgb(11, 93, 72);
--colorOverlayHomevideosCover: rgb(39, 90, 185);
--colorOverlayBooksCover: rgb(166, 68, 70);
--colorOverlayFoldersCover: rgb(173, 60, 113);
--colorOverlayMixedCover: rgb(194, 58, 58);
--colorOverlayRecordedmoviesCover: rgb(52, 52, 52);
--colorOverlayRecordedtvCover: rgb(120, 100, 28);
--urlMoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/movies.webp);
--urlTvshowsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp);
--urlLivetvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/livetv.webp);
--urlPlaylistsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/playlists.webp);
--urlBoxsetsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/boxsets.webp);
--urlMusicCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/music.webp);
--urlHomevideosCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/homevideos.webp);
--urlBooksCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/books.webp);
--urlFoldersCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/folders.webp);
--urlMixedCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/mixed.webp);
--urlRecordedmoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedmovies.webp);
--urlRecordedtvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedtv.webp);
}
[data-type="CollectionFolder"] .defaultCardBackground,
[data-type="UserView"] .defaultCardBackground,
[data-type="CollectionFolder"] .cardContent,
[data-type="UserView"] .cardContent {
filter: contrast(0.85);
background-size: cover !important;
background-position: 50% !important;
background-blend-mode: multiply;
}
[data-type="CollectionFolder"] .cardContent::before,
[data-type="UserView"] .cardContent::before {
content: attr(aria-label);
position: absolute;
font-size: clamp(1em, max(2.5vh, 2vw), 2em);
font-weight: 800;
color: white;
font-family: "Noto Sans";
text-align: center;
width: 94%;
white-space: normal;
}
.layout-tv [data-type="CollectionFolder"]::before,
.layout-tv [data-type="UserView"]::before {
content: attr(aria-label);
position: absolute;
display: grid;
align-content: center;
top: 0;
bottom: 0;
font-size: clamp(1em, max(2.5vh, 2vw), 2em);
font-weight: 800;
color: white;
font-family: "Noto Sans";
text-align: center;
width: 94%;
white-space: normal;
z-index: 1;
}
[data-type="CollectionFolder"] .cardImageIcon:not(.quiz)::before,
[data-type="UserView"] .cardImageIcon:not(.quiz)::before {
display: none;
}
[data-collectiontype="movies"] .cardContent {
background-color: var(--colorOverlayMoviesCover) !important;
background-image: var(--urlMoviesCover) !important;
}
[data-collectiontype="tvshows"] .cardContent {
background-color: var(--colorOverlayTvshowsCover) !important;
background-image: var(--urlTvshowsCover) !important;
}
[data-collectiontype="livetv"] .cardContent {
background-color: var(--colorOverlayLivetvCover) !important;
background-image: var(--urlLivetvCover) !important;
}
[data-collectiontype="music"] .cardContent {
background-color: var(--colorOverlayMusicCover) !important;
background-image: var(--urlMusicCover) !important;
}
[data-collectiontype="homevideos"] .cardContent {
background-color: var(--colorOverlayHomevideosCover) !important;
background-image: var(--urlHomevideosCover) !important;
}
[data-collectiontype="books"] .cardContent {
background-color: var(--colorOverlayBooksCover) !important;
background-image: var(--urlBooksCover) !important;
}
[data-collectiontype="boxsets"] .cardContent {
background-color: var(--colorOverlayBoxsetsCover) !important;
background-image: var(--urlBoxsetsCover) !important;
}
[data-collectiontype="folders"] .cardContent {
background-color: var(--colorOverlayFoldersCover) !important;
background-image: var(--urlFoldersCover) !important;
}
[data-collectiontype="playlists"] .cardContent {
background-color: var(--colorOverlayPlaylistsCover) !important;
background-image: var(--urlPlaylistsCover) !important;
}
[data-prefix="MIX"] .cardContent {
background-color: var(--colorOverlayMixedCover) !important;
background-image: var(--urlMixedCover) !important;
}
[data-collectiontype="movies"][data-prefix="REC"] .cardContent {
background-color: var(--colorOverlayRecordedmoviesCover) !important;
background-image: var(--urlRecordedmoviesCover) !important;
}
[data-prefix="REC"] .cardContent {
background-color: var(--colorOverlayRecordedtvCover) !important;
background-image: var(--urlRecordedtvCover) !important;
}
@@ -0,0 +1,149 @@
/*! Add-on: Custom Media Covers v26.06.06 for the ElegantFin Theme for Jellyfin by lscambo13 */
:root {
/* my media library default covers customizations */
--colorOverlayMoviesCover: rgb(193, 103, 104);
--colorOverlayTvshowsCover: rgb(140, 149, 43);
--colorOverlayLivetvCover: rgb(17, 98, 159);
--colorOverlayPlaylistsCover: rgb(118, 61, 216);
--colorOverlayBoxsetsCover: rgb(219, 180, 53);
--colorOverlayMusicCover: rgb(11, 93, 72);
--colorOverlayHomevideosCover: rgb(39, 90, 185);
--colorOverlayBooksCover: rgb(166, 68, 70);
--colorOverlayFoldersCover: rgb(173, 60, 113);
--colorOverlayMixedCover: rgb(194, 58, 58);
--colorOverlayRecordedmoviesCover: rgb(52, 52, 52);
--colorOverlayRecordedtvCover: rgb(120, 100, 28);
--colorOverlayAnimeCover: rgb(189, 203, 99);
--colorOverlaySportsCover: rgb(233, 126, 60);
--urlMoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/movies.webp);
--urlTvshowsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp);
--urlLivetvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/livetv.webp);
--urlPlaylistsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/playlists.webp);
--urlBoxsetsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/boxsets.webp);
--urlMusicCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/music.webp);
--urlHomevideosCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/homevideos.webp);
--urlBooksCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/books.webp);
--urlFoldersCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/folders.webp);
--urlMixedCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/mixed.webp);
--urlRecordedmoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedmovies.webp);
--urlRecordedtvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedtv.webp);
--urlAnimeCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/anime.webp);
--urlSportsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/sports.webp);
}
[data-type="CollectionFolder"] .defaultCardBackground,
[data-type="UserView"] .defaultCardBackground,
[data-type="CollectionFolder"] .cardContent,
[data-type="UserView"] .cardContent {
filter: contrast(0.85);
background-size: cover !important;
background-position: 50% !important;
background-blend-mode: multiply;
}
[data-type="CollectionFolder"] .cardContent::before,
[data-type="UserView"] .cardContent::before {
content: attr(aria-label);
position: absolute;
font-size: clamp(1em, max(2.5vh, 2vw), 2em);
font-weight: 800;
color: white;
font-family: "Noto Sans";
text-align: center;
width: 94%;
white-space: normal;
}
.layout-tv [data-type="CollectionFolder"]::before,
.layout-tv [data-type="UserView"]::before {
content: attr(aria-label);
position: absolute;
display: grid;
align-content: center;
top: 0;
bottom: 0;
font-size: clamp(1em, max(2.5vh, 2vw), 2em);
font-weight: 800;
color: white;
font-family: "Noto Sans";
text-align: center;
width: 94%;
white-space: normal;
z-index: 1;
}
[data-type="CollectionFolder"] .cardImageIcon:not(.quiz)::before,
[data-type="UserView"] .cardImageIcon:not(.quiz)::before {
display: none;
}
[data-collectiontype="movies"] .cardContent {
background-color: var(--colorOverlayMoviesCover) !important;
background-image: var(--urlMoviesCover) !important;
}
[data-collectiontype="tvshows"] .cardContent {
background-color: var(--colorOverlayTvshowsCover) !important;
background-image: var(--urlTvshowsCover) !important;
}
[data-collectiontype="livetv"] .cardContent {
background-color: var(--colorOverlayLivetvCover) !important;
background-image: var(--urlLivetvCover) !important;
}
[data-collectiontype="music"] .cardContent {
background-color: var(--colorOverlayMusicCover) !important;
background-image: var(--urlMusicCover) !important;
}
[data-collectiontype="homevideos"] .cardContent {
background-color: var(--colorOverlayHomevideosCover) !important;
background-image: var(--urlHomevideosCover) !important;
}
[data-collectiontype="books"] .cardContent {
background-color: var(--colorOverlayBooksCover) !important;
background-image: var(--urlBooksCover) !important;
}
[data-collectiontype="boxsets"] .cardContent {
background-color: var(--colorOverlayBoxsetsCover) !important;
background-image: var(--urlBoxsetsCover) !important;
}
[data-collectiontype="folders"] .cardContent {
background-color: var(--colorOverlayFoldersCover) !important;
background-image: var(--urlFoldersCover) !important;
}
[data-collectiontype="playlists"] .cardContent {
background-color: var(--colorOverlayPlaylistsCover) !important;
background-image: var(--urlPlaylistsCover) !important;
}
[data-type="CollectionFolder"][data-prefix="MIX"] .cardContent {
background-color: var(--colorOverlayMixedCover) !important;
background-image: var(--urlMixedCover) !important;
}
[data-collectiontype="movies"][data-prefix="REC"] .cardContent {
background-color: var(--colorOverlayRecordedmoviesCover) !important;
background-image: var(--urlRecordedmoviesCover) !important;
}
[data-type="CollectionFolder"][data-prefix="REC"] .cardContent {
background-color: var(--colorOverlayRecordedtvCover) !important;
background-image: var(--urlRecordedtvCover) !important;
}
[data-type="CollectionFolder"][data-prefix="ANI"] .cardContent {
background-color: var(--colorOverlayAnimeCover) !important;
background-image: var(--urlAnimeCover) !important;
}
[data-type="CollectionFolder"][data-prefix="SPO"] .cardContent {
background-color: var(--colorOverlaySportsCover) !important;
background-image: var(--urlSportsCover) !important;
}
@@ -1,2 +1 @@
/* Add-on: Media Bar plugin support v25.08.08 for the ElegantFin Theme for Jellyfin by lscambo13 */ /*! Add-on: Media Bar Plugin Support v26.06.06 for the ElegantFin Theme for Jellyfin by lscambo13 */.detail-button:before,.favorite-button.favorited:before,.favorite-button:before,.play-button:before{font-weight:400}.play-button{font-family:Inter;font-size:1em;font-weight:500;order:1}.detail-button,.favorite-button{order:2}.backdrop,.backdrop-container,.backdrop-overlay{background-color:transparent;mask-image:linear-gradient(180deg,rgba(0,0,0,.85),70%,transparent);-webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.85),70%,transparent)}.backdrop{transform-origin:center left}.rating-value{flex-wrap:wrap;justify-content:center}.age-rating{color:unset;font-family:Archivo Narrow,sans-serif;font-size:.8em}#slides-container{height:62%;left:var(--sidePadding);overflow:visible;position:absolute;top:calc(var(--appBarHeight)*2 + 1.25em);user-select:none;width:calc(100vw - var(--sidePadding)*2)}.slide{border:var(--defaultBorder);border-radius:var(--largerRadius);overflow:hidden;transition:border 0s}.logo-container{top:10vh}.backdrop,.backdrop-container,.backdrop-overlay{mask-image:none;-webkit-mask-image:none}.backdrop-overlay{background:linear-gradient(0deg,rgba(0,0,0,.85),40%,transparent)}.pause-button,.volume-toggle{top:1em!important}.separator-icon{color:var(--dimTextColor);font-size:5px}.dot{background-color:var(--textColor)!important;border-radius:.25em;height:.375em;opacity:.5;transition:width .5s;width:.375em}.dot.active{transform:none;width:2em}@media only screen and (orientation:landscape){.button-container,.dots-container,.genre,.info-container,.plot-container{top:unset}.button-container{bottom:3em}.dots-container{bottom:4.5em}.plot-container{bottom:7em;height:4em}.genre{bottom:12em}.info-container{bottom:14em}.logo-container{align-items:flex-end;max-width:35vw;top:3%}.gradient-overlay{background:linear-gradient(37deg,rgba(0,0,0,.2) 32%,rgb(29 29 29/7%) 47%,rgba(29,29,29,0));mask:none;-webkit-mask:none}}@media only screen and (max-width:767px) and (orientation:portrait){.button-container{bottom:3em}.genre,.tomato-rating{display:none}.dots-container{bottom:6em}.info-container{bottom:5em}.logo-container{top:calc(100% - 15em)}.backdrop{transform-origin:center}.left-arrow,.right-arrow{display:none!important}.play-button{order:2}}@media (min-width:75em){#slides-container{top:calc(var(--appBarHeight) + 1.25em)}.layout-tv #slides-container{top:calc(var(--appBarHeight)*2 + 1.25em)}}@media (min-width:100em){.layout-tv #slides-container{top:calc(var(--appBarHeight) + 1.25em)}}@media only screen and (max-height:767px) and (orientation:landscape){#slides-container{height:57%}.logo-container{top:3%}}
.button-container{align-items:center}.favorite-button{background:none;color:var(--textColor)}.detail-button:hover,.favorite-button:hover{background:var(--dimTextColor);color:black}.play-button::before,.detail-button::before,.favorite-button::before,.favorite-button.favorited::before{font-weight:400}.play-button{font-family:'Inter';font-size:1em;font-weight:500}.backdrop,.backdrop-container,.backdrop-overlay{mask-image:linear-gradient(180deg,rgba(0,0,0,.85),70%,rgba(0,0,0,0));-webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.85),70%,rgba(0,0,0,0));background-color:transparent}.backdrop{transform-origin:center left}.rating-value{flex-wrap:wrap;justify-content:center}.age-rating{font-size:.8em}#slides-container{width:calc(100vw - (2 * var(--sidePadding)));height:60%;top:8em;border:var(--defaultBorder);border-radius:var(--largerRadius);transition:all .125s,border 0s;user-select:none}.layout-tv #slides-container{top:0}.layout-mobile #slides-container{top:10em}.logo-container{top:10vh}.backdrop,.backdrop-container,.backdrop-overlay{mask-image:none;-webkit-mask-image:none}.backdrop-overlay{background:linear-gradient(0deg,rgba(0,0,0,.85),40%,transparent)}@media only screen and (max-width:767px) and (orientation:portrait){.button-container{top:calc(50% + 20vh);transform:translateX(-50%) scale(.8)}.info-container{}.tomato-rating{display:none}.dots-container{top:calc(50% + 19vh)}.backdrop{transform-origin:center}}
@@ -1,20 +1,5 @@
/* Add-on: Media Bar plugin support nightly for the ElegantFin Theme for Jellyfin by lscambo13 */ /*! Add-on: Media Bar Plugin Support Nightly for the ElegantFin Theme for Jellyfin by lscambo13 */
/* this styles the media bar plugin - start */ /* this styles the media bar plugin - start */
.button-container {
align-items: center;
}
.favorite-button {
background: none;
color: var(--textColor);
}
.detail-button:hover,
.favorite-button:hover {
background: var(--dimTextColor);
color: black;
}
.play-button::before, .play-button::before,
.detail-button::before, .detail-button::before,
.favorite-button::before, .favorite-button::before,
@@ -23,24 +8,29 @@
} }
.play-button { .play-button {
font-family: 'Inter'; font-family: "Inter";
font-size: 1em; font-size: 1em;
font-weight: 500; font-weight: 500;
order: 1;
} }
.backdrop, .detail-button,
.favorite-button {
order: 2;
}
.backdrop:not(.tmla-mask),
.backdrop-container, .backdrop-container,
.backdrop-overlay { .backdrop-overlay {
mask-image: linear-gradient(180deg, rgba(0, 0, 0, .85), 70%, rgba(0, 0, 0, 0)); mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
-webkit-mask-image: linear-gradient(180deg, rgba(0, 0, 0, .85), 70%, rgba(0, 0, 0, 0)); -webkit-mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
background-color: transparent; background-color: transparent;
} }
.backdrop { .backdrop:not(.tmla-mask) {
transform-origin: center left; transform-origin: center left;
} }
/* this is my own take */
.rating-value { .rating-value {
flex-wrap: wrap; flex-wrap: wrap;
justify-content: center; justify-content: center;
@@ -48,31 +38,32 @@
.age-rating { .age-rating {
font-size: 0.8em; font-size: 0.8em;
font-family: "Archivo Narrow", sans-serif;
color: unset;
} }
#slides-container { #slides-container {
width: calc(100vw - (2 * var(--sidePadding))); width: calc(100vw - (2 * var(--sidePadding)));
height: 60%; height: 62%;
top: 8em; top: calc(var(--appBarHeight) * 2 + 1.25em);
user-select: none;
position: absolute;
left: var(--sidePadding);
overflow: visible;
}
.slide {
border: var(--defaultBorder); border: var(--defaultBorder);
border-radius: var(--largerRadius); border-radius: var(--largerRadius);
transition: all .125s, border 0s; overflow: hidden;
user-select: none; transition: border 0s;
}
.layout-tv #slides-container {
top: 0em;
}
.layout-mobile #slides-container {
top: 10em;
} }
.logo-container { .logo-container {
top: 10vh; top: 10vh;
} }
.backdrop, .backdrop:not(.tmla-mask),
.backdrop-container, .backdrop-container,
.backdrop-overlay { .backdrop-overlay {
mask-image: none; mask-image: none;
@@ -80,30 +71,136 @@
} }
.backdrop-overlay { .backdrop-overlay {
background: linear-gradient(0deg, rgba(0, 0, 0, .85), 40%, transparent); background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), 40%, transparent);
}
.pause-button,
.volume-toggle {
top: 1em !important;
}
.separator-icon {
font-size: 5px;
color: var(--dimTextColor);
}
.dot {
border-radius: 0.25em;
width: 0.375em;
height: 0.375em;
transition: width 0.5s;
opacity: 0.5;
background-color: var(--textColor) !important;
}
.dot.active {
width: 2em;
transform: none;
}
@media only screen and (orientation: landscape) {
.button-container,
.dots-container,
.plot-container,
.genre,
.info-container {
top: unset;
}
.button-container {
bottom: 3em;
}
.dots-container {
bottom: 4.5em;
}
.plot-container {
height: 4em;
bottom: 7em;
}
.genre {
bottom: 12em;
}
.info-container {
bottom: 14em;
}
.logo-container {
top: 3%;
align-items: flex-end;
max-width: 35vw;
}
.gradient-overlay {
mask: none;
-webkit-mask: none;
background: linear-gradient(37deg, rgb(0 0 0 / 20%) 32%, rgb(29 29 29 / 7%) 47%, rgb(29 29 29 / 0%) 100%);
}
} }
@media only screen and (max-width: 767px) and (orientation: portrait) { @media only screen and (max-width: 767px) and (orientation: portrait) {
.button-container { .button-container {
top: calc(50% + 20vh); bottom: 3em;
transform: translateX(-50%) scale(0.8);
} }
.info-container { .tomato-rating,
/* top: calc(50% + 6vh); */ .genre {
}
.tomato-rating {
display: none; display: none;
} }
.dots-container { .dots-container {
top: calc(50% + 19vh); bottom: 6em;
} }
.backdrop { .info-container {
bottom: 5em;
}
.logo-container {
top: calc(100% - 15em);
}
.backdrop:not(.tmla-mask) {
transform-origin: center; transform-origin: center;
} }
.left-arrow,
.right-arrow {
display: none !important;
}
.play-button {
order: 2;
}
}
@media (min-width: 75em) {
#slides-container {
top: calc(var(--appBarHeight) + 1.25em);
}
.layout-tv #slides-container {
top: calc(var(--appBarHeight) * 2 + 1.25em);
}
}
@media (min-width: 100em) {
.layout-tv #slides-container {
top: calc(var(--appBarHeight) + 1.25em);
}
}
@media only screen and (max-height: 767px) and (orientation: landscape) {
#slides-container {
height: 57%;
}
.logo-container {
top: 3%;
}
} }
/* this styles the media bar plugin - end */ /* this styles the media bar plugin - end */
@@ -0,0 +1,103 @@
/* Add-on: Media Bar plugin support v25.11.25 for the ElegantFin Theme for Jellyfin by lscambo13 */
/* this styles the media bar plugin - start */
.play-button::before,
.detail-button::before,
.favorite-button::before,
.favorite-button.favorited::before {
font-weight: 400;
}
.play-button {
font-family: "Inter";
font-size: 1em;
font-weight: 500;
}
.backdrop,
.backdrop-container,
.backdrop-overlay {
mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
-webkit-mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
background-color: transparent;
}
.backdrop {
transform-origin: center left;
}
.rating-value {
flex-wrap: wrap;
justify-content: center;
}
.age-rating {
font-size: 0.8em;
}
#slides-container {
width: calc(100vw - (2 * var(--sidePadding)));
height: 62%;
top: var(--appBarHeight);
border: var(--defaultBorder);
border-radius: var(--largerRadius);
transition: all 0.125s, border 0s;
user-select: none;
}
.logo-container {
top: 10vh;
}
.backdrop,
.backdrop-container,
.backdrop-overlay {
mask-image: none;
-webkit-mask-image: none;
}
.backdrop-overlay {
background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), 40%, transparent);
}
@media only screen and (max-width: 767px) and (orientation: portrait) {
.button-container {
top: calc(50% + 20vh);
transform: translateX(-50%) scale(0.8);
}
.tomato-rating {
display: none;
}
.dots-container {
top: calc(50% + 19vh);
}
.backdrop {
transform-origin: center;
}
}
@media (min-width: 75em) {
#slides-container {
top: calc(0.5 * var(--appBarHeight));
}
}
@media only screen and (max-height: 767px) and (orientation: landscape) {
#slides-container {
height: 57%;
}
.logo-container {
top: 3%;
}
}
@media only screen and (max-width: 767px) and (orientation: portrait) {
.logo-container {
top: 50%;
}
}
/* this styles the media bar plugin - end */
@@ -0,0 +1,147 @@
/* Add-on: Media Bar plugin support 25.12.31 for the ElegantFin Theme for Jellyfin by lscambo13 */
/* this styles the media bar plugin - start */
.play-button::before,
.detail-button::before,
.favorite-button::before,
.favorite-button.favorited::before {
font-weight: 400;
}
.play-button {
font-family: "Inter";
font-size: 1em;
font-weight: 500;
}
.backdrop,
.backdrop-container,
.backdrop-overlay {
mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
-webkit-mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
background-color: transparent;
}
.backdrop {
transform-origin: center left;
}
.rating-value {
flex-wrap: wrap;
justify-content: center;
}
.age-rating {
font-size: 0.8em;
font-family: "Archivo Narrow", sans-serif;
color: unset;
}
#slides-container {
width: calc(100vw - (2 * var(--sidePadding)));
height: 62%;
top: calc(var(--appBarHeight) * 2 + 1.25em);
border: var(--defaultBorder);
border-radius: var(--largerRadius);
transition: all 0.125s, border 0s;
user-select: none;
position: absolute;
left: var(--sidePadding);
}
.logo-container {
top: 10vh;
}
.backdrop,
.backdrop-container,
.backdrop-overlay {
mask-image: none;
-webkit-mask-image: none;
}
.backdrop-overlay {
background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), 40%, transparent);
}
.pause-button {
top: 1em !important;
}
.separator-icon {
font-size: 5px;
color: var(--dimTextColor);
}
.dot {
border-radius: 0.25em;
width: 0.375em;
height: 0.375em;
transition: width 0.5s;
opacity: 0.5;
background-color: var(--textColor) !important;
}
.dot.active {
width: 2em;
transform: none;
}
@media only screen and (max-width: 767px) and (orientation: portrait) {
.button-container {
bottom: 3em;
}
.tomato-rating,
.genre {
display: none;
}
.dots-container {
bottom: 6em;
}
.info-container {
bottom: 5em;
}
.logo-container {
top: calc(100% - 15em);
}
.backdrop {
transform-origin: center;
}
.left-arrow,
.right-arrow {
display: none !important;
}
}
@media (min-width: 75em) {
#slides-container {
top: calc(var(--appBarHeight) + 1.25em);
}
.layout-tv #slides-container {
top: calc(var(--appBarHeight) * 2 + 1.25em);
}
}
@media (min-width: 100em) {
.layout-tv #slides-container {
top: calc(var(--appBarHeight) + 1.25em);
}
}
@media only screen and (max-height: 767px) and (orientation: landscape) {
#slides-container {
height: 57%;
}
.logo-container {
top: 3%;
}
}
/* this styles the media bar plugin - end */
@@ -0,0 +1,206 @@
/*! Add-on: Media Bar Plugin Support v26.06.06 for the ElegantFin Theme for Jellyfin by lscambo13 */
/* this styles the media bar plugin - start */
.play-button::before,
.detail-button::before,
.favorite-button::before,
.favorite-button.favorited::before {
font-weight: 400;
}
.play-button {
font-family: "Inter";
font-size: 1em;
font-weight: 500;
order: 1;
}
.detail-button,
.favorite-button {
order: 2;
}
.backdrop,
.backdrop-container,
.backdrop-overlay {
mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
-webkit-mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
background-color: transparent;
}
.backdrop {
transform-origin: center left;
}
.rating-value {
flex-wrap: wrap;
justify-content: center;
}
.age-rating {
font-size: 0.8em;
font-family: "Archivo Narrow", sans-serif;
color: unset;
}
#slides-container {
width: calc(100vw - (2 * var(--sidePadding)));
height: 62%;
top: calc(var(--appBarHeight) * 2 + 1.25em);
user-select: none;
position: absolute;
left: var(--sidePadding);
overflow: visible;
}
.slide {
border: var(--defaultBorder);
border-radius: var(--largerRadius);
overflow: hidden;
transition: border 0s;
}
.logo-container {
top: 10vh;
}
.backdrop,
.backdrop-container,
.backdrop-overlay {
mask-image: none;
-webkit-mask-image: none;
}
.backdrop-overlay {
background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), 40%, transparent);
}
.pause-button,
.volume-toggle {
top: 1em !important;
}
.separator-icon {
font-size: 5px;
color: var(--dimTextColor);
}
.dot {
border-radius: 0.25em;
width: 0.375em;
height: 0.375em;
transition: width 0.5s;
opacity: 0.5;
background-color: var(--textColor) !important;
}
.dot.active {
width: 2em;
transform: none;
}
@media only screen and (orientation: landscape) {
.button-container,
.dots-container,
.plot-container,
.genre,
.info-container {
top: unset;
}
.button-container {
bottom: 3em;
}
.dots-container {
bottom: 4.5em;
}
.plot-container {
height: 4em;
bottom: 7em;
}
.genre {
bottom: 12em;
}
.info-container {
bottom: 14em;
}
.logo-container {
top: 3%;
align-items: flex-end;
max-width: 35vw;
}
.gradient-overlay {
mask: none;
-webkit-mask: none;
background: linear-gradient(37deg, rgb(0 0 0 / 20%) 32%, rgb(29 29 29 / 7%) 47%, rgb(29 29 29 / 0%) 100%);
}
}
@media only screen and (max-width: 767px) and (orientation: portrait) {
.button-container {
bottom: 3em;
}
.tomato-rating,
.genre {
display: none;
}
.dots-container {
bottom: 6em;
}
.info-container {
bottom: 5em;
}
.logo-container {
top: calc(100% - 15em);
}
.backdrop {
transform-origin: center;
}
.left-arrow,
.right-arrow {
display: none !important;
}
.play-button {
order: 2;
}
}
@media (min-width: 75em) {
#slides-container {
top: calc(var(--appBarHeight) + 1.25em);
}
.layout-tv #slides-container {
top: calc(var(--appBarHeight) * 2 + 1.25em);
}
}
@media (min-width: 100em) {
.layout-tv #slides-container {
top: calc(var(--appBarHeight) + 1.25em);
}
}
@media only screen and (max-height: 767px) and (orientation: landscape) {
#slides-container {
height: 57%;
}
.logo-container {
top: 3%;
}
}
/* this styles the media bar plugin - end */
Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

+47 -10
View File
@@ -1,4 +1,5 @@
# 🧩 Add-on: Custom media covers for ElegantFin # 🧩 Add-on: Custom Media Covers for ElegantFin
This is a Jellyfin add-on that allows you to customise My Media cover arts. This is an experimental feature, so limited support will be provided. This is a Jellyfin add-on that allows you to customise My Media cover arts. This is an experimental feature, so limited support will be provided.
#### **Author:** [lscambo13](https://github.com/lscambo13) #### **Author:** [lscambo13](https://github.com/lscambo13)
@@ -50,6 +51,11 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--colorOverlayHomevideosCover: transparent; --colorOverlayHomevideosCover: transparent;
--colorOverlayBooksCover: transparent; --colorOverlayBooksCover: transparent;
--colorOverlayFoldersCover: transparent; --colorOverlayFoldersCover: transparent;
--colorOverlayMixedCover: transparent;
--colorOverlayRecordedmoviesCover: transparent;
--colorOverlayRecordedtvCover: transparent;
--colorOverlayAnimeCover: transparent;
--colorOverlaySportsCover: transparent;
--urlMoviesCover: transparent; --urlMoviesCover: transparent;
--urlTvshowsCover: transparent; --urlTvshowsCover: transparent;
--urlLivetvCover: transparent; --urlLivetvCover: transparent;
@@ -59,6 +65,11 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--urlHomevideosCover: transparent; --urlHomevideosCover: transparent;
--urlBooksCover: transparent; --urlBooksCover: transparent;
--urlFoldersCover: transparent; --urlFoldersCover: transparent;
--urlMixedCover: transparent;
--urlRecordedmoviesCover: transparent;
--urlRecordedtvCover: transparent;
--urlAnimeCover: transparent;
--urlSportsCover: transparent;
} }
``` ```
@@ -79,6 +90,11 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--colorOverlayHomevideosCover: transparent; --colorOverlayHomevideosCover: transparent;
--colorOverlayBooksCover: transparent; --colorOverlayBooksCover: transparent;
--colorOverlayFoldersCover: transparent; --colorOverlayFoldersCover: transparent;
--colorOverlayMixedCover: transparent;
--colorOverlayRecordedmoviesCover: transparent;
--colorOverlayRecordedtvCover: transparent;
--colorOverlayAnimeCover: transparent;
--colorOverlaySportsCover: transparent;
--urlMoviesCover: var(--cardBackgroundGradient); --urlMoviesCover: var(--cardBackgroundGradient);
--urlTvshowsCover: var(--cardBackgroundGradient); --urlTvshowsCover: var(--cardBackgroundGradient);
--urlLivetvCover: var(--cardBackgroundGradient); --urlLivetvCover: var(--cardBackgroundGradient);
@@ -88,6 +104,11 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--urlHomevideosCover: var(--cardBackgroundGradient); --urlHomevideosCover: var(--cardBackgroundGradient);
--urlBooksCover: var(--cardBackgroundGradient); --urlBooksCover: var(--cardBackgroundGradient);
--urlFoldersCover: var(--cardBackgroundGradient); --urlFoldersCover: var(--cardBackgroundGradient);
--urlMixedCover: var(--cardBackgroundGradient);
--urlRecordedmoviesCover: var(--cardBackgroundGradient);
--urlRecordedtvCover: var(--cardBackgroundGradient);
--urlAnimeCover: var(--cardBackgroundGradient);
--urlSportsCover: var(--cardBackgroundGradient);
} }
``` ```
@@ -98,7 +119,6 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
![image](https://github.com/user-attachments/assets/6975a5ef-4824-4807-9afa-434fc3ebaf6f) ![image](https://github.com/user-attachments/assets/6975a5ef-4824-4807-9afa-434fc3ebaf6f)
``` ```
@import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css"); @import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css");
@@ -112,6 +132,11 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--colorOverlayHomevideosCover: rgb(39, 90, 185); --colorOverlayHomevideosCover: rgb(39, 90, 185);
--colorOverlayBooksCover: rgb(166, 68, 70); --colorOverlayBooksCover: rgb(166, 68, 70);
--colorOverlayFoldersCover: rgb(173, 60, 113); --colorOverlayFoldersCover: rgb(173, 60, 113);
--colorOverlayMixedCover: rgb(194, 58, 58);
--colorOverlayRecordedmoviesCover: rgb(52, 52, 52);
--colorOverlayRecordedtvCover: rgb(120, 100, 28);
--colorOverlayAnimeCover: rgb(189, 203, 99);
--colorOverlaySportsCover: rgb(233, 126, 60);
--urlMoviesCover: linear-gradient(0deg, #313131, #585858 25%); --urlMoviesCover: linear-gradient(0deg, #313131, #585858 25%);
--urlTvshowsCover: linear-gradient(0deg, #313131, #585858 25%); --urlTvshowsCover: linear-gradient(0deg, #313131, #585858 25%);
--urlLivetvCover: linear-gradient(0deg, #313131, #585858 25%); --urlLivetvCover: linear-gradient(0deg, #313131, #585858 25%);
@@ -121,6 +146,11 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--urlHomevideosCover: linear-gradient(0deg, #313131, #585858 25%); --urlHomevideosCover: linear-gradient(0deg, #313131, #585858 25%);
--urlBooksCover: linear-gradient(0deg, #313131, #585858 25%); --urlBooksCover: linear-gradient(0deg, #313131, #585858 25%);
--urlFoldersCover: linear-gradient(0deg, #313131, #585858 25%); --urlFoldersCover: linear-gradient(0deg, #313131, #585858 25%);
--urlMixedCover: linear-gradient(0deg, #313131, #585858 25%);
--urlRecordedmoviesCover: linear-gradient(0deg, #313131, #585858 25%);
--urlRecordedtvCover: linear-gradient(0deg, #313131, #585858 25%);
--urlAnimeCover: linear-gradient(0deg, #313131, #585858 25%);
--urlSportsCover: linear-gradient(0deg, #313131, #585858 25%);
} }
``` ```
@@ -130,7 +160,7 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
### 👇 How to enable this add-on? ### 👇 How to enable this add-on?
- Paste the following at the end in Custom CSS code box: - Paste the following right after the main ElegantFin import in the Custom CSS code box:
``` ```
@import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css"); @import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css");
@@ -142,8 +172,6 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
- Remember, you do not need to configure anything if you're happy with the default set of images. - Remember, you do not need to configure anything if you're happy with the default set of images.
<details> <details>
<summary><i>Click here to reveal.</i></summary> <summary><i>Click here to reveal.</i></summary>
@@ -168,6 +196,11 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--colorOverlayHomevideosCover: rgb(); --colorOverlayHomevideosCover: rgb();
--colorOverlayBooksCover: rgb(); --colorOverlayBooksCover: rgb();
--colorOverlayFoldersCover: rgb(); --colorOverlayFoldersCover: rgb();
--colorOverlayMixedCover: rgb();
--colorOverlayRecordedmoviesCover: rgb();
--colorOverlayRecordedtvCover: rgb();
--colorOverlayAnimeCover: rgb();
--colorOverlaySportsCover: rgb();
<!-- cover images; input the url pointing to an image. --> <!-- cover images; input the url pointing to an image. -->
@@ -179,8 +212,14 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--urlHomevideosCover: url(); --urlHomevideosCover: url();
--urlBooksCover: url(); --urlBooksCover: url();
--urlFoldersCover: url(); --urlFoldersCover: url();
--urlMixedCover: url();
--urlRecordedmoviesCover: url();
--urlRecordedtvCover: url();
--urlAnimeCover: url();
--urlSportsCover: url();
} }
``` ```
</details> </details>
@@ -191,11 +230,12 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
Suppose you want to modify the Live TV cover art. You'll have to modify the variables named `--colorOverlayLivetvCover` and `--urlLivetvCover`, so that your final configuration will look something like this: Suppose you want to modify the Live TV cover art. You'll have to modify the variables named `--colorOverlayLivetvCover` and `--urlLivetvCover`, so that your final configuration will look something like this:
``` ```
@import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css"); @import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css");
:root{ :root{
--colorOverlayLivetvCover: rgb(39, 68, 185); --colorOverlayLivetvCover: rgb(39, 68, 185);
--urlLivetvCover: url(https://artworks.thetvdb.com/banners/fanart/original/71663-33.jpg); --urlLivetvCover: url(https://artworks.thetvdb.com/banners/fanart/original/71663-33.jpg);
} }
``` ```
@@ -221,6 +261,3 @@ Suppose you want to modify the Live TV cover art. You'll have to modify the vari
4. Click save. 4. Click save.
</details> </details>
<hr>
+1716
View File
File diff suppressed because it is too large. Load diff
+18
View File
@@ -0,0 +1,18 @@
{
"devDependencies": {
"css-declaration-sorter": "^7.4.0",
"cssnano": "^8.0.1",
"postcss": "^8.5.15",
"postcss-cli": "^11.0.1"
},
"scripts": {
"build:theme": "postcss ./Theme/ElegantFin-theme-nightly.css -o ./Theme/ElegantFin-jellyfin-theme-build-latest-minified.css",
"build:covers-addon": "postcss ./Theme/assets/add-ons/custom-media-covers-nightly.css -o ./Theme/assets/add-ons/custom-media-covers-latest-min.css",
"build:mediabar-addon": "postcss ./Theme/assets/add-ons/media-bar-plugin-support-nightly.css -o ./Theme/assets/add-ons/media-bar-plugin-support-latest-min.css",
"build:release": "npm run build:theme && npm run build:covers-addon && npm run build:mediabar-addon",
"watch:theme": "postcss ./Theme/ElegantFin-theme-nightly.css -o ./Theme/ElegantFin-theme-nightly-min.css --watch --verbose",
"watch:covers-addon": "postcss ./Theme/assets/add-ons/custom-media-covers-nightly.css -o ./Theme/assets/add-ons/custom-media-covers-nightly-min.css --watch --verbose",
"watch:mediabar-addon": "postcss ./Theme/assets/add-ons/media-bar-plugin-support-nightly.css -o ./Theme/assets/add-ons/media-bar-plugin-support-nightly-min.css --watch --verbose",
"watch:fixes-addon": "postcss ./Theme/assets/add-ons/seamless-fork-compatibility-nightly.css -o ./Theme/assets/add-ons/seamless-fork-compatibility-nightly-min.css --watch --verbose"
}
}
+13
View File
@@ -0,0 +1,13 @@
const cssDeclarationSorter = require('css-declaration-sorter');
const cssnano = require('cssnano');
module.exports = {
plugins: [
cssDeclarationSorter({
keepOverrides: true,
}),
cssnano({
preset: 'default',
}),
],
};
+10 -1
View File
@@ -4,5 +4,14 @@
"path": "." "path": "."
} }
], ],
"settings": {} "settings": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"prettier.useTabs": false,
"prettier.printWidth": 120,
"cSpell.words": [
"Jellyfin",
"Jellyseerr"
],
}
} }