<!DOCTYPE html>
<html lang="id">
<head><link rel="manifest" href="/manifest.json">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>TV Streaming</title>
    <style>
        * { margin:0; padding:0; box-sizing:border-box; }
        body {
            background:#0a0a0a;
            color:#e0e0e0;
            font-family: -apple-system, 'Segoe UI', sans-serif;
            min-height:100vh;
            display:flex;
            flex-direction:column;
        }
        header {
            padding:10px 14px 8px;
            background:linear-gradient(180deg, #1a1a1a 0%, #0f0f0f 100%);
            border-bottom:1px solid #2a2a2a;
            position:sticky;
            top:0;
            z-index:10;
            flex-shrink:0;
        }
        header h1 {
            font-size:16px;
            font-weight:700;
            display:flex;
            align-items:center;
            gap:6px;
        }
        header h1 span { font-weight:400; font-size:11px; color:#888; }
        .player-container {
            flex:1;
            background:#000;
            position:relative;
            min-height:200px;
            max-height:50vh;
        }
        .player-container iframe {
            width:100%;
            height:100%;
            border:0;
            min-height:200px;
            max-height:50vh;
        }
        .player-loading {
            position:absolute;
            inset:0;
            display:flex;
            align-items:center;
            justify-content:center;
            background:#0a0a0a;
            color:#555;
            font-size:12px;
            pointer-events:none;
            transition:opacity 0.3s;
        }
        .player-loading.hide { opacity:0; }
        .channels {
            display:grid;
            grid-template-columns:repeat(auto-fill, minmax(60px,1fr));
            gap:3px;
            padding:6px 8px 10px;
            background:#111;
            flex-shrink:0;
            max-height:45vh;
            overflow-y:auto;
        }
        .channels button {
            background:#1a1a1a;
            border:1px solid #2a2a2a;
            color:#bbb;
            padding:4px 2px;
            border-radius:4px;
            font-size:9px;
            font-weight:500;
            cursor:pointer;
            transition:all 0.12s;
            text-align:center;
            line-height:1.2;
            word-break:break-word;
            letter-spacing:0.2px;
        }
        .channels button:hover {
            background:#2a2a2a;
            border-color:#444;
            color:#fff;
        }
        .channels button.active {
            background:#1a4a7a;
            border-color:#4a8aff;
            color:#fff;
            box-shadow:0 0 10px rgba(74,138,255,0.15);
        }
        .status-bar {
            padding:4px 10px;
            font-size:9px;
            color:#555;
            background:#0d0d0d;
            border-top:1px solid #1a1a1a;
            text-align:center;
            flex-shrink:0;
        }
        @media (max-width:480px) {
            .channels { grid-template-columns:repeat(auto-fill, minmax(48px,1fr)); gap:2px; padding:4px 4px 8px; }
            .channels button { font-size:8px; padding:3px 1px; }
            header h1 { font-size:14px; }
            .player-container { min-height:150px; max-height:45vh; }
            .player-container iframe { min-height:150px; max-height:45vh; }
        }
    </style>
</head>
<body>

<header>
    <h1> TV Streaming <span>live</span></h1>
</header>

<div class="player-container" id="playerContainer">
    <div class="player-loading" id="playerLoading">Memuat...</div>
    <iframe id="playerFrame" src="" allowfullscreen></iframe>
</div>

<div class="channels" id="channelList"></div>

<div class="status-bar" id="statusBar">Pilih channel</div>

<script>
    const channels = [
        // Nasional (16)
        { name: 'TVRI', url: 'https://www.tvri.go.id/live' },
        { name: 'RCTI', url: 'https://www.rctiplus.com/live/rcti' },
        { name: 'SCTV', url: 'https://www.sctv.co.id/live' },
        { name: 'Indosiar', url: 'https://www.indosiar.com/live' },
        { name: 'MetroTV', url: 'https://www.metrotvnews.com/live' },
        { name: 'KompasTV', url: 'https://www.kompas.tv/live' },
        { name: 'CNN Indo', url: 'https://www.cnnindonesia.com/live' },
        { name: 'Trans7', url: 'https://www.trans7.co.id/live' },
        { name: 'TransTV', url: 'https://www.transtv.co.id/live' },
        { name: 'ANTV', url: 'https://www.antvklik.com/live' },
        { name: 'GTV', url: 'https://www.gtv.id/live' },
        { name: 'RTV', url: 'https://www.rtv.co.id/live' },
        { name: 'iNews', url: 'https://www.inews.id/live' },
        { name: 'TVOne', url: 'https://www.tvone.co.id/live' },
        { name: 'BTV', url: 'https://www.btv.id/live' },
        { name: 'NET.', url: 'https://www.netmedia.co.id/live' },
        // Internasional (5)
        { name: 'BBC World', url: 'https://www.bbc.com/news/live' },
        { name: 'CNN US', url: 'https://www.cnn.com/live' },
        { name: 'Al Jazeera', url: 'https://www.aljazeera.com/live' },
        { name: 'France 24', url: 'https://www.france24.com/live' },
        { name: 'DW', url: 'https://www.dw.com/live' },
        // Olahraga (5)
        { name: 'BeIN Sport', url: 'https://www.beinsports.com/live' },
        { name: 'ESPN', url: 'https://www.espn.com/live' },
        { name: 'Sky Sport', url: 'https://www.skysports.com/live' },
        { name: 'Sport TV', url: 'https://www.sporttv.pt/live' },
        { name: 'Eurosport', url: 'https://www.eurosport.com/live' },
        // Musik (4)
        { name: 'MTV', url: 'https://www.mtv.com/live' },
        { name: 'VH1', url: 'https://www.vh1.com/live' },
        { name: 'Kerrang', url: 'https://www.kerrang.com/live' },
        { name: 'Trace', url: 'https://www.trace.tv/live' },
        // Film (4)
        { name: 'HBO', url: 'https://www.hbo.com/live' },
        { name: 'Showtime', url: 'https://www.showtime.com/live' },
        { name: 'Starz', url: 'https://www.starz.com/live' },
        { name: 'TCM', url: 'https://www.tcm.com/live' },
        // Regional (6)
        { name: 'JTV', url: 'https://www.jakartatv.co.id/live' },
        { name: 'Bali TV', url: 'https://www.balitv.co.id/live' },
        { name: 'Jogja TV', url: 'https://www.jogjatv.co.id/live' },
        { name: 'Bandung TV', url: 'https://www.bandungtv.co.id/live' },
        { name: 'Surabaya TV', url: 'https://www.surabayatv.co.id/live' },
        { name: 'Makassar TV', url: 'https://www.makassartv.co.id/live' },
        // Hiburan Lainnya (6)
        { name: 'MNC TV', url: 'https://www.mnctv.com/live' },
        { name: 'O Channel', url: 'https://www.ochannel.id/live' },
        { name: 'Berita Satu', url: 'https://www.beritasatu.com/live' },
        { name: 'Nusantara TV', url: 'https://www.nusantaratv.id/live' },
        { name: 'DAAI TV', url: 'https://www.daaitv.id/live' },
        { name: 'CNBC Indo', url: 'https://www.cnbcindonesia.com/live' }
    ];

    let currentChannel = null;
    let refreshTimer = null;

    const frame = document.getElementById('playerFrame');
    const loading = document.getElementById('playerLoading');
    const channelList = document.getElementById('channelList');
    const statusBar = document.getElementById('statusBar');

    function setChannel(name, url) {
        currentChannel = name;
        loading.classList.remove('hide');
        statusBar.textContent = 'Menonton: ' + name;

        frame.src = url;

        setTimeout(() => {
            loading.classList.add('hide');
        }, 1000);

        document.querySelectorAll('.channels button').forEach(btn => {
            btn.classList.toggle('active', btn.dataset.name === name);
        });

        if (refreshTimer) clearInterval(refreshTimer);
        refreshTimer = setInterval(() => {
            if (currentChannel) {
                const currentSrc = frame.src;
                frame.src = '';
                setTimeout(() => {
                    frame.src = currentSrc;
                }, 200);
            }
        }, 60000);
    }

    function renderChannels() {
        channelList.innerHTML = '';
        channels.forEach(ch => {
            const btn = document.createElement('button');
            btn.dataset.name = ch.name;
            btn.textContent = ch.name;
            btn.addEventListener('click', () => setChannel(ch.name, ch.url));
            channelList.appendChild(btn);
        });
    }

    renderChannels();

    if (channels.length > 0) {
        const first = channels[0];
        setChannel(first.name, first.url);
    }
</script>

<script>
if ("serviceWorker" in navigator) {
    navigator.serviceWorker.register("/sw.js");
}
</script>
</body>
</html>