<!doctype html><html class="preload" dir="ltr"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><link rel="manifest" href="manifest.json"><meta name="format-detection" content="telephone=no"><meta name="msapplication-tap-highlight" content="no"><meta http-equiv="X-UA-Compatibility" content="IE=Edge"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="mobile-web-app-capable" content="yes"><meta name="application-name" content="Jellyfin"><meta name="robots" content="noindex, nofollow, noarchive"><meta name="referrer" content="no-referrer"><meta id="themeColor" name="theme-color" content="#202020"><link rel="apple-touch-icon" sizes="180x180" href="touchicon.f5bbb798cb2c65908633.png"><link rel="shortcut icon" href="favicon.bc8d51405ec040305a87.ico"><meta name="msapplication-TileImage" content="touchicon144.39209dd2362c0db7c673.png"><meta name="msapplication-TileColor" content="#333333"><title>Jellyfin</title><style>.backgroundContainer-transparent:not(.withBackdrop),.transparentDocument{background:0 0!important;background-color:transparent!important}.layout-tv .mouseIdle,.layout-tv .mouseIdle a,.layout-tv .mouseIdle button,.layout-tv .mouseIdle input,.layout-tv .mouseIdle label,.layout-tv .mouseIdle select,.layout-tv .mouseIdle textarea,.screensaver-noScroll.mouseIdle,.screensaver-noScroll.mouseIdle a,.screensaver-noScroll.mouseIdle button,.screensaver-noScroll.mouseIdle input,.screensaver-noScroll.mouseIdle label,.screensaver-noScroll.mouseIdle select,.screensaver-noScroll.mouseIdle textarea,.transparentDocument .mouseIdle,.transparentDocument .mouseIdle a,.transparentDocument .mouseIdle button,.transparentDocument .mouseIdle input,.transparentDocument .mouseIdle label,.transparentDocument .mouseIdle select,.transparentDocument .mouseIdle textarea{cursor:none!important}.preload{background-color:#101010}.hide,.layout-desktop .hide-desktop,.layout-mobile .hide-mobile,.layout-tv .hide-tv,.mouseIdle .hide-mouse-idle,.mouseIdle-tv .hide-mouse-idle-tv{display:none!important}.mainDrawerHandle{position:fixed;top:0;bottom:0;z-index:1;width:.8em;padding-left:env(safe-area-inset-left);caret-color:transparent}[dir=ltr] .mainDrawerHandle{left:0}[dir=rtl] .mainDrawerHandle{left:0}</style><script defer="defer" src="runtime.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.%40jellyfin.sdk.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.%40mui.material.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.%40mui.system.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.%40mui.utils.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.%40mui.icons-material.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.%40tanstack.query-core.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.date-fns.esm.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.lodash-es.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.react-transition-group.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.core-js.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.%40popperjs.core.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.axios.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.react-dom.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.jquery.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.webcomponents.js.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.resize-observer-polyfill.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.regenerator-runtime.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.jellyfin-apiclient.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.intersection-observer.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.history.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.dompurify.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.react-router.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.react-router-dom.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.%40remix-run.router.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="node_modules.abortcontroller-polyfill.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="46967.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="main.jellyfin.bundle.js?4c3e5ec610f9c71cad1c"></script><script defer="defer" src="serviceworker.js?4c3e5ec610f9c71cad1c"></script><link href="46967.03edf3bb7ee048ee10be.css?4c3e5ec610f9c71cad1c" rel="stylesheet"><link href="main.jellyfin.f725276386e5b19afe0c.css?4c3e5ec610f9c71cad1c" rel="stylesheet"><link rel="stylesheet" href="/HomeScreen/home-screen-sections.css?v=2.5.10.0&c=0" /></head><body dir="ltr"><div id="reactRoot"><div class="splashLogo"></div></div><script plugin="InPlayerEpisodePreview" version="1.6.1.2" src="/InPlayerPreview/ClientScript"></script><!-- BEGIN JavaScript Injector Plugin -->
        <!-- Injected using file-transformation -->
        <script defer src="../JavaScriptInjector/public.js?v=639165653565717621"></script>
        
        <script>
            (function() {
                'use strict';
                const fetchPrivateScripts = () => {
                    // Check if the API client is fully initialized and a user is logged in.
                    if (window.ApiClient && typeof window.ApiClient.getCurrentUserId === 'function' && window.ApiClient.getCurrentUserId() && window.ApiClient.serverInfo) {
                        // Once authenticated, stop checking.
                        clearInterval(authInterval);
                        // Use the built-in ApiClient.fetch to make an authenticated request for the private scripts.
                        ApiClient.fetch({
                            url: ApiClient.getUrl('JavaScriptInjector/private.js?v=639165653565717621'),
                            type: 'GET',
                            dataType: 'text'
                        }).then(scriptText => {
                            if (scriptText && scriptText.trim().length > 0) {
                                const scriptElement = document.createElement('script');
                                scriptElement.textContent = scriptText;
                                document.head.appendChild(scriptElement);
                                console.log('JavaScript Injector: Private scripts loaded successfully.');
                            }
                        }).catch(err => {
                            console.error('JavaScript Injector: Failed to load private scripts.', err);
                        });
                    }
                };
                // Set an interval to check for authentication status every 300 milliseconds.
                const authInterval = setInterval(fetchPrivateScripts, 300);
            })();
        </script>
        <!-- END JavaScript Injector Plugin --><script plugin="Jellyfin Enhanced" version="11.11.0.0-639153525260000000" dev="false" src="../JellyfinEnhanced/script?v=11.11.0.0-639153525260000000" defer></script>
<script type="text/javascript" plugin="Jellyfin.Plugin.HomeScreenSections" src="/HomeScreen/home-screen-sections.js?v=2.5.10.0&c=0" defer></script></body></html>