mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-09 09:26:14 -08:00
* feat(web-backend): add self-hosted proxy app * feat(web): enable runtime PWA configuration * test(web-e2e): cover self-hosted backend proxy * test(web-e2e): clean self-hosted lint warnings * fix(web-backend): validate proxied provider URLs * fix(web-backend): proxy through registered provider targets * fix(web-backend): document CodeQL SSRF validation boundary * test(web-e2e): mock provider target registration * fix(web): address self-hosted review feedback
79 lines
3.0 KiB
HTML
79 lines
3.0 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title>IPTVnator</title>
|
|
<base href="/" />
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:title" content="IPTVnator" />
|
|
<meta property="og:url" content="https://iptvnator.vercel.app" />
|
|
<meta
|
|
property="og:image"
|
|
content="https://raw.githubusercontent.com/4gray/iptvnator/electron/iptv-dark-theme.png"
|
|
/>
|
|
<meta
|
|
property="og:description"
|
|
content="IPTVnator is a video player application that provides support for the playback of IPTV playlists (m3u, m3u8)"
|
|
/>
|
|
<link rel="manifest" href="manifest.webmanifest" />
|
|
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.png" />
|
|
<link rel="icon" type="image/x-icon" href="assets/icons/favicon.ico" />
|
|
<script src="assets/app-config.js" defer></script>
|
|
<style>
|
|
/* Inline splash — paints immediately while the JS bundle and the
|
|
styles.css (~300KB) are still downloading and Angular is
|
|
bootstrapping. Removed from the DOM by main.ts after
|
|
bootstrapApplication() resolves. No assets, zero extra HTTP. */
|
|
#initial-splash {
|
|
position: fixed;
|
|
inset: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 18px;
|
|
background: #1f1f23;
|
|
color: #f5f5f7;
|
|
font-family:
|
|
-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
|
|
'Helvetica Neue', Arial, sans-serif;
|
|
z-index: 99999;
|
|
}
|
|
#initial-splash .splash-mark {
|
|
font-size: 18px;
|
|
font-weight: 600;
|
|
letter-spacing: 0.04em;
|
|
opacity: 0.85;
|
|
}
|
|
#initial-splash .splash-spinner {
|
|
width: 28px;
|
|
height: 28px;
|
|
border: 3px solid rgba(255, 255, 255, 0.12);
|
|
border-top-color: rgba(255, 255, 255, 0.7);
|
|
border-radius: 50%;
|
|
animation: initial-splash-spin 0.9s linear infinite;
|
|
}
|
|
@keyframes initial-splash-spin {
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
@media (prefers-reduced-motion: reduce) {
|
|
#initial-splash .splash-spinner {
|
|
animation: none;
|
|
opacity: 0.6;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="mat-app-background">
|
|
<div id="initial-splash" role="status" aria-label="Loading IPTVnator">
|
|
<span class="splash-mark">IPTVnator</span>
|
|
<span class="splash-spinner" aria-hidden="true"></span>
|
|
</div>
|
|
<app-root></app-root>
|
|
</body>
|
|
</html>
|