GIF89a;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<title>TV GARDEN โ Free TV, News & Live Streaming</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;400;500;600;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
<style>
/* [ALL YOUR EXISTING CSS STYLES HERE - keeping them the same] */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, sans-serif;
background: #0a0c15;
color: #eef2ff;
line-height: 1.4;
scroll-behavior: smooth;
}
.container {
max-width: 1280px;
margin: 0 auto;
padding: 0 32px;
}
.hero {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 48px;
padding: 80px 0 64px 0;
}
.hero-content {
flex: 1.2;
min-width: 280px;
}
.hero-visual {
flex: 0.9;
min-width: 280px;
display: flex;
justify-content: center;
position: relative;
}
.badge {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(34, 197, 94, 0.18);
backdrop-filter: blur(4px);
padding: 6px 18px 6px 14px;
border-radius: 100px;
font-size: 0.85rem;
font-weight: 600;
color: #4ade80;
margin-bottom: 24px;
border: 1px solid rgba(74, 222, 128, 0.3);
}
h1 {
font-size: clamp(2.5rem, 6vw, 4.2rem);
font-weight: 800;
letter-spacing: -0.02em;
background: linear-gradient(135deg, #ffffff 0%, #86efac 80%);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
margin-bottom: 20px;
line-height: 1.2;
}
.hero-description {
font-size: 1.2rem;
color: #b9c7d9;
margin-bottom: 32px;
max-width: 540px;
line-height: 1.5;
}
.store-buttons {
display: flex;
flex-wrap: wrap;
gap: 18px;
margin-bottom: 32px;
}
.btn-store {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 10px;
background: #1e1f2c;
padding: 14px 36px;
border-radius: 60px;
text-decoration: none;
color: white;
transition: all 0.25s ease;
box-shadow: 0 6px 14px rgba(0, 0, 0, 0.3);
border: 1px solid rgba(255, 255, 255, 0.08);
font-weight: 700;
font-size: 1rem;
letter-spacing: 0.5px;
cursor: pointer;
background: #10b981;
}
.btn-store:hover {
transform: translateY(-3px);
background: #059669;
box-shadow: 0 20px 25px -8px rgba(0, 0, 0, 0.5);
border-color: rgba(74, 222, 128, 0.6);
}
.btn-store:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none;
}
.free-badge {
background: #10b981;
color: white;
font-size: 0.7rem;
font-weight: bold;
padding: 4px 12px;
border-radius: 30px;
display: inline-block;
margin-left: 12px;
vertical-align: middle;
}
.rating {
display: flex;
align-items: center;
gap: 16px;
flex-wrap: wrap;
font-size: 0.9rem;
color: #b9c7d9;
}
.stars {
color: #fbbf24;
letter-spacing: 2px;
}
.phone-mock {
position: relative;
max-width: 300px;
width: 100%;
margin: 0 auto;
}
.mock-frame {
background: #0f111a;
border-radius: 48px;
padding: 12px 8px;
box-shadow: 0 30px 45px -15px rgba(0, 0, 0, 0.6), 0 0 0 6px #2d2f42, 0 0 0 12px #1e1f2c;
}
.mock-frame img {
width: 100%;
border-radius: 36px;
display: block;
aspect-ratio: 9 / 19;
}
.features {
padding: 80px 0;
}
.section-title {
text-align: center;
font-size: 2rem;
font-weight: 700;
margin-bottom: 56px;
background: linear-gradient(120deg, #ffffff, #86efac);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 32px;
}
.feature-card {
background: rgba(18, 22, 35, 0.8);
backdrop-filter: blur(8px);
border-radius: 2rem;
padding: 32px 24px;
transition: all 0.25s ease;
border: 1px solid rgba(255, 255, 255, 0.05);
text-align: center;
}
.feature-card:hover {
transform: translateY(-6px);
background: #1f2335;
border-color: rgba(74, 222, 128, 0.4);
}
.feature-icon {
background: linear-gradient(145deg, #2d2f42, #1a1c2a);
width: 70px;
height: 70px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 28px;
margin: 0 auto 24px;
font-size: 2rem;
color: #4ade80;
}
.stats-section {
background: linear-gradient(135deg, #13172b, #0b0e1a);
border-radius: 3rem;
padding: 56px 40px;
margin: 32px 0 64px;
border: 1px solid rgba(255, 255, 255, 0.05);
}
.stats-grid {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 32px;
text-align: center;
}
.stat-number {
font-size: 2.8rem;
font-weight: 800;
background: linear-gradient(145deg, #ffffff, #86efac);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
}
.cta-download {
text-align: center;
background: #111522;
border-radius: 2.5rem;
padding: 56px 32px;
margin: 20px 0 80px;
border: 1px solid rgba(255, 255, 255, 0.06);
}
.live-badge {
background: #ef4444;
color: white;
font-size: 0.7rem;
font-weight: bold;
padding: 4px 10px;
border-radius: 40px;
display: inline-flex;
align-items: center;
gap: 6px;
}
footer {
text-align: center;
padding: 32px 0 48px;
border-top: 1px solid rgba(255, 255, 255, 0.05);
font-size: 0.85rem;
color: #8a99b0;
}
@media (max-width: 850px) {
.hero {
flex-direction: column-reverse;
text-align: center;
padding: 40px 0 32px;
}
.hero-content {
text-align: center;
}
.hero-description {
margin-left: auto;
margin-right: auto;
}
.store-buttons {
justify-content: center;
}
.rating {
justify-content: center;
}
.container {
padding: 0 24px;
}
}
.fade-up {
opacity: 0;
transform: translateY(20px);
animation: fadeUp 0.7s ease forwards;
}
@keyframes fadeUp {
to {
opacity: 1;
transform: translateY(0);
}
}
.delay-100 { animation-delay: 0.1s; }
.toast {
position: fixed;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
background: #10b981;
color: white;
padding: 12px 24px;
border-radius: 50px;
font-size: 0.9rem;
font-weight: 500;
z-index: 1000;
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.3);
animation: slideUp 0.3s ease;
}
@keyframes slideUp {
from {
opacity: 0;
transform: translateX(-50%) translateY(20px);
}
to {
opacity: 1;
transform: translateX(-50%) translateY(0);
}
}
.file-info {
background: rgba(16, 185, 129, 0.1);
border-radius: 12px;
padding: 12px 20px;
margin-top: 16px;
font-size: 0.85rem;
display: inline-flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
justify-content: center;
}
.refresh-btn {
background: rgba(16, 185, 129, 0.2);
border: 1px solid rgba(74, 222, 128, 0.3);
padding: 6px 12px;
border-radius: 20px;
font-size: 0.7rem;
cursor: pointer;
transition: all 0.2s;
}
.refresh-btn:hover {
background: rgba(16, 185, 129, 0.4);
}
.loading-spinner {
display: inline-block;
width: 16px;
height: 16px;
border: 2px solid rgba(255,255,255,0.3);
border-radius: 50%;
border-top-color: white;
animation: spin 0.6s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
</style>
</head>
<body>
<div class="container">
<div class="hero">
<div class="hero-content fade-up">
<div class="badge">
<i class="fas fa-seedling"></i>
<span>LIVE TV ยท 24/7 NEWS ยท SPORTS & SHOWS</span>
</div>
<h1>TV GARDEN: <br>Watch Free TV, News & More <span class="free-badge">100% FREE</span></h1>
<p class="hero-description">
Stream live sports, breaking news, hit series, and exclusive originals โ all in one blooming entertainment app. No subscription, no credit card.
</p>
<div class="store-buttons">
<a href="javascript:void(0);" class="btn-store" id="directDownloadBtn">
<i class="fas fa-download"></i>
<span id="btnText">Download APK Now</span>
</a>
</div>
<div class="rating">
<div class="stars">
<i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i>
</div>
<span><strong>4.9</strong> (127k+ ratings)</span>
<span><i class="fas fa-download"></i> 5.8M+ downloads</span>
<span class="live-badge"><i class="fas fa-circle" style="font-size: 0.5rem;"></i> LIVE: Wimbledon Finals</span>
</div>
<div style="margin-top: 16px; font-size: 0.8rem;">
<span style="color:#8a99b0;">๐ฑ Android APK | </span>
<span style="color:#4ade80;">โ Safe & Secure</span>
<span style="color:#8a99b0;"> | </span>
<span style="color:#4ade80;" id="versionText">โ Version: Checking...</span>
<span style="margin-left: 10px;" id="fileDate"></span>
</div>
</div>
<div class="hero-visual fade-up delay-100">
<div class="phone-mock">
<div class="mock-frame">
<img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 800'%3E%3Crect width='400' height='800' fill='%23000000'/%3E%3Crect y='0' width='400' height='110' fill='%231a2e1f'/%3E%3Ctext x='30' y='55' fill='%2386efac' font-size='20' font-weight='bold'%3ETV GARDEN%3C/text%3E%3Crect x='300' y='40' width='50' height='25' rx='12' fill='%23ef4444'/%3E%3Ctext x='312' y='57' fill='white' font-size='10' font-weight='bold'%3ELIVE%3C/text%3E%3Crect x='20' y='135' width='360' height='190' rx='24' fill='%2311121f'/%3E%3Crect x='30' y='150' width='340' height='110' rx='16' fill='%23262646'/%3E%3Ctext x='60' y='185' fill='white' font-size='22' font-weight='bold'%3E๐ฅ BREAKING NEWS%3C/text%3E%3Ctext x='60' y='215' fill='%234ade80' font-size='14' font-weight='bold'%3EGlobal Climate Summit 2025%3C/text%3E%3Ctext x='60' y='240' fill='%23cbd5e1' font-size='12'%3EExclusive live coverage from Geneva%3C/text%3E%3Crect x='30' y='275' width='90' height='28' rx='14' fill='%2310b981'/%3E%3Ctext x='45' y='294' fill='white' font-size='12' font-weight='bold'%3EWatch Now%3C/text%3E%3Crect x='20' y='345' width='360' height='130' rx='20' fill='%2311121f'/%3E%3Crect x='35' y='360' width='90' height='90' rx='14' fill='%233b82f6'/%3E%3Ctext x='55' y='410' fill='white' font-size='32'%3E๐พ%3C/text%3E%3Ctext x='145' y='385' fill='white' font-size='16' font-weight='bold'%3EWimbledon 2025%3C/text%3E%3Ctext x='145' y='410' fill='%2394a3b8' font-size='13'%3EFinal: Alcaraz vs Djokovic%3C/text%3E%3Ctext x='145' y='432' fill='%23fbbf24' font-size='12'%3Eโญ 156k watching live%3C/text%3E%3Crect x='20' y='495' width='360' height='130' rx='20' fill='%2311121f'/%3E%3Crect x='35' y='510' width='90' height='90' rx='14' fill='%238b5cf6'/%3E%3Ctext x='55' y='560' fill='white' font-size='32'%3E๐บ%3C/text%3E%3Ctext x='145' y='535' fill='white' font-size='16' font-weight='bold'%3EThe Last of Us S2%3C/text%3E%3Ctext x='145' y='560' fill='%2394a3b8' font-size='13'%3ENew episode ยท Drama Thriller%3C/text%3E%3Crect x='145' y='580' width='80' height='24' rx='12' fill='%2310b981'/%3E%3Ctext x='155' y='597' fill='white' font-size='11' font-weight='bold'%3ENow Streaming%3C/text%3E%3C/svg%3E"
alt="TV GARDEN app interface">
</div>
</div>
</div>
</div>
<div class="features">
<h2 class="section-title fade-up">Everything grows in TV GARDEN โ 100% free</h2>
<div class="features-grid">
<div class="feature-card fade-up">
<div class="feature-icon"><i class="fas fa-tv"></i></div>
<h3>Live TV & Channels</h3>
<p>200+ live channels: news, sports, entertainment, and local broadcasts.</p>
</div>
<div class="feature-card fade-up">
<div class="feature-icon"><i class="fas fa-newspaper"></i></div>
<h3>24/7 News Hub</h3>
<p>Real-time updates from CNN, BBC, Fox, and personalized news briefings.</p>
</div>
<div class="feature-card fade-up">
<div class="feature-icon"><i class="fas fa-futbol"></i></div>
<h3>Live Sports</h3>
<p>Football, tennis, basketball โ stream live matches for free.</p>
</div>
<div class="feature-card fade-up">
<div class="feature-icon"><i class="fas fa-film"></i></div>
<h3>Shows & Movies</h3>
<p>Thousands of on-demand titles and trending series โ zero cost.</p>
</div>
</div>
</div>
<div class="stats-section fade-up">
<div class="stats-grid">
<div class="stat-item"><div class="stat-number">200+</div><div class="stat-label">Live Channels</div></div>
<div class="stat-item"><div class="stat-number">5.8M+</div><div class="stat-label">Active Users</div></div>
<div class="stat-item"><div class="stat-number">150+</div><div class="stat-label">Countries</div></div>
<div class="stat-item"><div class="stat-number">#1</div><div class="stat-label">Free Streaming App</div></div>
</div>
</div>
<div class="cta-download fade-up">
<h2>Start streaming instantly</h2>
<p>Join millions of viewers watching live news, blockbuster movies, and exclusive series โ all 100% free.</p>
<a href="javascript:void(0);" class="btn-store" id="ctaDownloadBtn" style="margin: 0 auto; display: inline-flex;">
<i class="fas fa-download"></i>
<span>Download TV GARDEN APK</span>
</a>
<div style="margin-top: 24px;">
<span style="background: #1e1f2c; padding: 8px 16px; border-radius: 30px; font-size: 0.75rem;">
<i class="fas fa-shield-alt"></i> Verified APK ยท <span id="fileSize">Loading...</span> ยท Android 6.0+
</span>
</div>
</div>
<!-- Permanent Download Section -->
<div style="text-align: center; margin: 40px 0 60px; padding: 30px; background: rgba(16, 185, 129, 0.08); border-radius: 2rem; border: 1px solid rgba(74, 222, 128, 0.2);">
<i class="fas fa-link" style="font-size: 2rem; color: #4ade80; margin-bottom: 16px; display: block;"></i>
<h3 style="margin-bottom: 12px;">Permanent Download Link</h3>
<p style="color: #b9c7d9; margin-bottom: 16px; word-break: break-all;">
<code style="background: #1e1f2c; padding: 8px 16px; border-radius: 12px; font-size: 0.85rem;" id="downloadLinkCode">
Loading...
</code>
</p>
<button id="copyLinkBtn" style="background: #10b981; border: none; padding: 10px 24px; border-radius: 40px; color: white; font-weight: 600; cursor: pointer; margin-top: 8px;">
<i class="fas fa-copy"></i> Copy Link
</button>
<button id="refreshBtn" style="background: #1e1f2c; border: 1px solid #4ade80; padding: 10px 24px; border-radius: 40px; color: white; font-weight: 600; cursor: pointer; margin-top: 8px; margin-left: 10px;">
<i class="fas fa-sync-alt"></i> Check for Updates
</button>
<p style="font-size: 0.7rem; color: #8a99b0; margin-top: 16px;">
Direct APK download ยท Always up to date
</p>
</div>
</div>
<footer>
<div class="container">
<p>ยฉ 2025 TV GARDEN โ Free streaming for everyone. | <a href="#" style="color:#4ade80; text-decoration: none;">Privacy</a> | <a href="#" style="color:#4ade80; text-decoration: none;">Terms</a> | <a href="#" style="color:#4ade80; text-decoration: none;">Contact</a></p>
<p style="margin-top: 12px; font-size: 0.75rem;">TV GARDEN is 100% free. No subscriptions, no in-app purchases required. <span id="versionFooter">Version: Checking...</span></p>
</div>
</footer>
<script>
// ============================================
// DYNAMIC DOWNLOAD WITH FORCE REFRESH
// ============================================
const API_URL = 'download.php';
let currentFileInfo = null;
// Function to fetch file info with cache busting
async function fetchFileInfo(forceRefresh = false) {
const refreshParam = forceRefresh ? '&refresh=1' : '';
const cacheBuster = '&_t=' + Date.now();
try {
const response = await fetch(`${API_URL}?action=info${refreshParam}${cacheBuster}`, {
cache: 'no-store',
headers: {
'Cache-Control': 'no-cache',
'Pragma': 'no-cache'
}
});
const data = await response.json();
if (data.success) {
currentFileInfo = data;
// Update UI with file info
document.getElementById('versionText').innerHTML = `โ Version: ${data.version || 'Latest'}`;
document.getElementById('versionFooter').innerHTML = `Version: ${data.version || 'Latest'}`;
document.getElementById('fileSize').innerHTML = data.file_size || '~28MB';
document.getElementById('downloadLinkCode').innerHTML = data.download_url;
if (data.modified) {
document.getElementById('fileDate').innerHTML = `๐
${data.modified}`;
}
// Enable download buttons
const allButtons = document.querySelectorAll('.btn-store');
allButtons.forEach(btn => {
btn.style.opacity = '1';
btn.style.cursor = 'pointer';
btn.disabled = false;
});
// Show success message
if (forceRefresh) {
showToast(`โ
Updated! Now serving: ${data.filename}`, 'success');
}
return true;
} else {
throw new Error(data.message || 'No file found');
}
} catch (error) {
console.error('Error fetching file info:', error);
document.getElementById('versionText').innerHTML = 'โ ๏ธ No APK found';
document.getElementById('versionFooter').innerHTML = 'Upload APK to /run/ folder';
document.getElementById('fileSize').innerHTML = 'Upload file';
document.getElementById('downloadLinkCode').innerHTML = 'Upload APK to /run/ folder';
if (forceRefresh) {
showToast('โ No APK file found in /run/ folder', 'error');
}
return false;
}
}
// Function to start download - ALWAYS gets latest
async function startDownload() {
if (!currentFileInfo) {
showToast('โณ Loading file info...', 'info');
await fetchFileInfo(true);
if (!currentFileInfo) {
showToast('โ No file available for download', 'error');
return;
}
}
try {
showToast('๐ฆ Starting download...', 'info');
// Use direct URL with cache busting for the file
const downloadUrl = currentFileInfo.download_url;
const cacheBustedUrl = downloadUrl.includes('?')
? downloadUrl + '&_dl=' + Date.now()
: downloadUrl + '?_dl=' + Date.now();
// Create hidden anchor and trigger download
const a = document.createElement('a');
a.href = cacheBustedUrl;
a.download = currentFileInfo.filename;
a.style.display = 'none';
document.body.appendChild(a);
a.click();
setTimeout(() => {
document.body.removeChild(a);
}, 100);
trackDownload('success');
showToast(`โ
Downloading ${currentFileInfo.filename}`, 'success');
} catch (error) {
console.error('Download error:', error);
// Fallback: open in new window
window.open(currentFileInfo.download_url + '?t=' + Date.now(), '_blank');
showToast('โฌ๏ธ Download opened in new tab', 'warning');
}
}
// Track download analytics
function trackDownload(source) {
console.log(`Download initiated - Source: ${source} - File: ${currentFileInfo?.filename || 'unknown'}`);
if (typeof gtag !== 'undefined') {
gtag('event', 'download', {
'event_category': 'engagement',
'event_label': source,
'value': 1
});
}
}
// Copy link functionality
function setupCopyButton() {
const copyBtn = document.getElementById('copyLinkBtn');
if (copyBtn) {
copyBtn.addEventListener('click', async () => {
const url = currentFileInfo?.download_url || '';
if (url) {
try {
await navigator.clipboard.writeText(url);
showToast('โ
Download link copied to clipboard!', 'success');
} catch (err) {
alert('Manual copy: ' + url);
}
} else {
showToast('โ ๏ธ No file available', 'warning');
}
});
}
// Setup refresh button
const refreshBtn = document.getElementById('refreshBtn');
if (refreshBtn) {
refreshBtn.addEventListener('click', async () => {
refreshBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Checking...';
refreshBtn.disabled = true;
await fetchFileInfo(true);
refreshBtn.innerHTML = '<i class="fas fa-sync-alt"></i> Check for Updates';
refreshBtn.disabled = false;
});
}
}
// Toast notification
function showToast(message, type = 'success') {
const existingToast = document.querySelector('.toast');
if (existingToast) existingToast.remove();
const toast = document.createElement('div');
toast.className = 'toast';
const icon = type === 'success' ? 'โ
' : (type === 'error' ? 'โ' : 'โน๏ธ');
toast.innerHTML = `${icon} ${message}`;
if (type === 'error') toast.style.background = '#ef4444';
if (type === 'warning') toast.style.background = '#f59e0b';
document.body.appendChild(toast);
setTimeout(() => {
toast.remove();
}, 4000);
}
// Initialize on page load
document.addEventListener('DOMContentLoaded', async () => {
// Disable buttons initially
const allButtons = document.querySelectorAll('.btn-store');
allButtons.forEach(btn => {
btn.style.opacity = '0.6';
btn.style.cursor = 'wait';
});
// Setup download handlers
document.getElementById('directDownloadBtn').onclick = startDownload;
document.getElementById('ctaDownloadBtn').onclick = startDownload;
// Fetch file info
await fetchFileInfo(false);
setupCopyButton();
// Show welcome message
setTimeout(() => {
if (currentFileInfo) {
showToast(`๐บ Ready to download ${currentFileInfo.filename}`, 'success');
} else {
showToast('๐ Upload APK to /run/ folder on server', 'warning');
}
}, 1500);
});
</script>
</body>
</html>