anycoder-afa1331c / index.html
Basha112's picture
Upload folder using huggingface_hub
aaba2fc verified
Raw
History Blame Contribute Delete
40.8 kB
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>بيكسل موشن | محول الصور إلى فيديو</title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;700;900&family=Tajawal:wght@300;400;500;700;800;900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
:root {
--primary: #6366f1;
--secondary: #8b5cf6;
--accent: #06b6d4;
--bg-dark: #0a0a1a;
--bg-card: #13132a;
--surface: #1e1e3f;
--text: #e2e8f0;
--text-muted: #94a3b8;
--border: rgba(255,255,255,0.08);
--success: #10b981;
--error: #ef4444;
--warning: #f59e0b;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Tajawal', sans-serif;
background: var(--bg-dark);
color: var(--text);
min-height: 100vh;
overflow-x: hidden;
direction: rtl;
}
/* Animated background mesh */
.bg-mesh {
position: fixed;
inset: 0;
z-index: 0;
pointer-events: none;
overflow: hidden;
}
.bg-mesh::before {
content: '';
position: absolute;
inset: -50%;
background:
radial-gradient(circle at 20% 80%, rgba(99, 102, 241, 0.12) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(139, 92, 246, 0.1) 0%, transparent 50%),
radial-gradient(circle at 50% 50%, rgba(6, 182, 212, 0.06) 0%, transparent 40%);
animation: meshFloat 20s ease-in-out infinite;
}
@keyframes meshFloat {
0%, 100% { transform: translate(0, 0) scale(1); }
33% { transform: translate(2%, -2%) scale(1.05); }
66% { transform: translate(-1%, 1%) scale(0.98); }
}
/* Noise texture */
.noise {
position: fixed;
inset: 0;
z-index: 0;
pointer-events: none;
opacity: 0.03;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
background-size: 128px;
}
/* Orbitron for English text */
.font-orbitron {
font-family: 'Orbitron', sans-serif;
}
/* Glass card */
.glass {
background: rgba(30, 30, 63, 0.6);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid var(--border);
box-shadow: 0 8px 32px rgba(0,0,0,0.3);
}
.glass-light {
background: rgba(255,255,255,0.04);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid var(--border);
}
/* Glow effects */
.glow-primary {
box-shadow: 0 0 30px rgba(99,102,241,0.3), inset 0 0 20px rgba(99,102,241,0.05);
}
.glow-accent {
box-shadow: 0 0 25px rgba(6,182,212,0.25);
}
/* Animations */
@keyframes slideUp {
from { opacity: 0; transform: translateY(30px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes slideInLeft {
from { opacity: 0; transform: translateX(30px); }
to { opacity: 1; transform: translateX(0); }
}
@keyframes scaleIn {
from { opacity: 0; transform: scale(0.9); }
to { opacity: 1; transform: scale(1); }
}
@keyframes pulse-glow {
0%, 100% { box-shadow: 0 0 20px rgba(99,102,241,0.2); }
50% { box-shadow: 0 0 40px rgba(99,102,241,0.4); }
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-6px); }
}
@keyframes spin-slow {
to { transform: rotate(360deg); }
}
@keyframes progress-pulse {
0%, 100% { opacity: 0.7; }
50% { opacity: 1; }
}
@keyframes scanline {
0% { transform: translateY(-100%); }
100% { transform: translateY(100vh); }
}
.anim-slide-up { animation: slideUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
.anim-slide-left { animation: slideInLeft 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
.anim-scale { animation: scaleIn 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
.anim-float { animation: float 3s ease-in-out infinite; }
.anim-pulse-glow { animation: pulse-glow 3s ease-in-out infinite; }
/* Custom scrollbar */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--surface); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--primary); }
/* Form elements */
input[type="range"] {
-webkit-appearance: none;
appearance: none;
height: 6px;
border-radius: 3px;
background: linear-gradient(to left, var(--primary), var(--secondary));
outline: none;
cursor: pointer;
}
input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 18px;
height: 18px;
border-radius: 50%;
background: var(--text);
border: 3px solid var(--primary);
box-shadow: 0 0 10px rgba(99,102,241,0.5);
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s;
}
input[type="range"]::-webkit-slider-thumb:hover {
transform: scale(1.2);
box-shadow: 0 0 20px rgba(99,102,241,0.7);
}
/* Checkbox/radio */
.radio-card {
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
cursor: pointer;
position: relative;
overflow: hidden;
}
.radio-card::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, var(--primary), var(--secondary));
opacity: 0;
transition: opacity 0.3s;
z-index: 0;
}
.radio-card:hover::before {
opacity: 0.08;
}
.radio-card.active {
border-color: var(--primary);
background: rgba(99,102,241,0.1);
}
.radio-card.active::before {
opacity: 0.12;
}
.radio-card i {
transition: transform 0.3s;
}
.radio-card:hover i {
transform: scale(1.1);
}
/* Upload zone */
.upload-zone {
transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
position: relative;
}
.upload-zone.dragover {
border-color: var(--primary);
background: rgba(99,102,241,0.08);
transform: scale(1.01);
}
.upload-zone::after {
content: '';
position: absolute;
inset: -2px;
border-radius: 1rem;
background: linear-gradient(135deg, var(--primary), var(--secondary), var(--accent));
opacity: 0;
transition: opacity 0.3s;
z-index: -1;
}
.upload-zone:hover::after {
opacity: 0.5;
}
/* Video preview */
.video-wrapper {
position: relative;
overflow: hidden;
}
.video-wrapper::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, var(--primary), transparent);
animation: scanline 3s linear infinite;
pointer-events: none;
z-index: 10;
opacity: 0.3;
}
/* Stagger delays */
.stagger-1 { animation-delay: 0.1s; opacity: 0; }
.stagger-2 { animation-delay: 0.2s; opacity: 0; }
.stagger-3 { animation-delay: 0.3s; opacity: 0; }
.stagger-4 { animation-delay: 0.4s; opacity: 0; }
.stagger-5 { animation-delay: 0.5s; opacity: 0; }
/* Button shine effect */
.btn-shine {
position: relative;
overflow: hidden;
}
.btn-shine::after {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(to right, transparent, rgba(255,255,255,0.15), transparent);
transform: rotate(30deg) translateX(-100%);
transition: transform 0.6s;
}
.btn-shine:hover::after {
transform: rotate(30deg) translateX(100%);
}
/* Tag badge */
.tag-badge {
background: linear-gradient(135deg, rgba(99,102,241,0.2), rgba(139,92,246,0.15));
border: 1px solid rgba(99,102,241,0.25);
padding: 2px 10px;
border-radius: 20px;
font-size: 0.7rem;
font-weight: 700;
color: #a5b4fc;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Particle canvas */
#particleCanvas {
position: fixed;
inset: 0;
z-index: 1;
pointer-events: none;
}
/* Main content */
.main-content {
position: relative;
z-index: 2;
}
/* Hidden */
.hidden-content {
display: none !important;
}
</style>
</head>
<body>
<!-- Background Effects -->
<div class="bg-mesh"></div>
<div class="noise"></div>
<canvas id="particleCanvas"></canvas>
<!-- Header -->
<header class="main-content relative z-10 py-6 px-4 lg:px-8">
<div class="max-w-7xl mx-auto flex items-center justify-between">
<div class="flex items-center gap-3">
<div class="w-11 h-11 rounded-xl bg-gradient-to-br from-violet-500 to-indigo-600 flex items-center justify-center shadow-lg shadow-violet-500/20 anim-float" style="animation-delay: 0s;">
<i class="fas fa-film text-white text-lg"></i>
</div>
<div>
<h1 class="text-xl font-black tracking-tight">
<span class="text-transparent bg-clip-text bg-gradient-to-l from-violet-400 to-cyan-400">بيكسل</span>
<span class="text-white">موشن</span>
</h1>
<p class="text-xs text-slate-400 font-medium">أداة تحويل الصور إلى فيديو</p>
</div>
</div>
<a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="tag-badge cursor-pointer hover:opacity-80 transition-opacity">
Built with anycoder
</a>
</div>
</header>
<!-- Main Content -->
<main class="main-content relative z-10 px-4 lg:px-8 pb-12">
<div class="max-w-7xl mx-auto">
<!-- Hero Section -->
<div class="text-center mb-10 anim-slide-up">
<div class="tag-badge mx-auto mb-4 inline-block">تحويل فوري</div>
<h2 class="text-3xl md:text-5xl font-black mb-4 leading-tight">
حوّل صورك إلى
<span class="text-transparent bg-clip-text bg-gradient-to-l from-violet-400 via-purple-400 to-cyan-400">
مقاطع فيديو مذهلة
</span>
</h2>
<p class="text-slate-400 text-sm md:text-base max-w-xl mx-auto leading-relaxed">
أداة متقدمة لتحويل الصور الثابتة إلى فيديوهات متحركة بمؤثرات احترافية، مع دعم كامل للعربية
</p>
</div>
<!-- App Grid -->
<div class="grid grid-cols-1 lg:grid-cols-12 gap-6">
<!-- Left Panel - Settings -->
<div class="lg:col-span-4 space-y-5">
<!-- Upload Section -->
<div class="glass rounded-2xl p-5 anim-slide-up stagger-1">
<div class="flex items-center gap-2 mb-4">
<div class="w-8 h-8 rounded-lg bg-gradient-to-br from-violet-500/20 to-indigo-500/20 flex items-center justify-center">
<i class="fas fa-cloud-upload-alt text-violet-400 text-sm"></i>
</div>
<h3 class="font-bold text-sm">تحميل الصورة</h3>
</div>
<div class="upload-zone glass-light rounded-xl p-6 text-center border-2 border-dashed cursor-pointer" id="dropZone">
<input type="file" id="imageInput" accept="image/*" class="hidden">
<div id="uploadDefault">
<div class="w-14 h-14 mx-auto mb-3 rounded-xl bg-gradient-to-br from-violet-500/15 to-indigo-500/15 flex items-center justify-center">
<i class="fas fa-image text-violet-400 text-xl"></i>
</div>
<p class="text-slate-300 text-sm font-semibold mb-1">اسحب الصورة هنا أو انقر</p>
<p class="text-slate-500 text-xs">JPG, PNG, WEBP — حتى 10MB</p>
</div>
<div id="uploadPreview" class="hidden-content">
<img id="previewImg" src="" alt="" class="max-h-48 mx-auto rounded-lg shadow-lg">
<p class="text-violet-400 text-xs mt-2 font-medium" id="fileName"></p>
</div>
</div>
</div>
<!-- Animation Settings -->
<div class="glass rounded-2xl p-5 anim-slide-up stagger-2">
<div class="flex items-center gap-2 mb-4">
<div class="w-8 h-8 rounded-lg bg-gradient-to-br from-cyan-500/20 to-blue-500/20 flex items-center justify-center">
<i class="fas fa-magic text-cyan-400 text-sm"></i>
</div>
<h3 class="font-bold text-sm">نوع الحركة</h3>
</div>
<div class="space-y-2">
<div class="radio-card active glass-light rounded-xl p-3 flex items-center gap-3" data-effect="zoomIn">
<div class="w-9 h-9 rounded-lg bg-gradient-to-br from-violet-500/20 to-indigo-500/20 flex items-center justify-center shrink-0">
<i class="fas fa-search-plus text-violet-400 text-sm"></i>
</div>
<div class="flex-1">
<p class="text-sm font-bold">تقريب تدريجي</p>
<p class="text-xs text-slate-500">تكبير الصورة ببطء</p>
</div>
<div class="w-5 h-5 rounded-full border-2 border-violet-500 flex items-center justify-center">
<div class="w-2.5 h-2.5 rounded-full bg-violet-500"></div>
</div>
</div>
<div class="radio-card glass-light rounded-xl p-3 flex items-center gap-3" data-effect="zoomOut">
<div class="w-9 h-9 rounded-lg bg-gradient-to-br from-cyan-500/20 to-blue-500/20 flex items-center justify-center shrink-0">
<i class="fas fa-search-minus text-cyan-400 text-sm"></i>
</div>
<div class="flex-1">
<p class="text-sm font-bold">تبعيد تدريجي</p>
<p class="text-xs text-slate-500">تصغير الصورة ببطء</p>
</div>
<div class="w-5 h-5 rounded-full border-2 border-slate-600 flex items-center justify-center">
<div class="w-2.5 h-2.5 rounded-full bg-transparent"></div>
</div>
</div>
<div class="radio-card glass-light rounded-xl p-3 flex items-center gap-3" data-effect="panLeft">
<div class="w-9 h-9 rounded-lg bg-gradient-to-br from-emerald-500/20 to-teal-500/20 flex items-center justify-center shrink-0">
<i class="fas fa-arrow-left text-emerald-400 text-sm"></i>
</div>
<div class="flex-1">
<p class="text-sm font-bold">انزلاق لليسار</p>
<p class="text-xs text-slate-500">تحريك الصورة لليسار</p>
</div>
<div class="w-5 h-5 rounded-full border-2 border-slate-600 flex items-center justify-center">
<div class="w-2.5 h-2.5 rounded-full bg-transparent"></div>
</div>
</div>
<div class="radio-card glass-light rounded-xl p-3 flex items-center gap-3" data-effect="panRight">
<div class="w-9 h-9 rounded-lg bg-gradient-to-br from-amber-500/20 to-orange-500/20 flex items-center justify-center shrink-0">
<i class="fas fa-arrow-right text-amber-400 text-sm"></i>
</div>
<div class="flex-1">
<p class="text-sm font-bold">انزلاق لليمين</p>
<p class="text-xs text-slate-500">تحريك الصورة لليمين</p>
</div>
<div class="w-5 h-5 rounded-full border-2 border-slate-600 flex items-center justify-center">
<div class="w-2.5 h-2.5 rounded-full bg-transparent"></div>
</div>
</div>
<div class="radio-card glass-light rounded-xl p-3 flex items-center gap-3" data-effect="panUp">
<div class="w-9 h-9 rounded-lg bg-gradient-to-br from-rose-500/20 to-pink-500/20 flex items-center justify-center shrink-0">
<i class="fas fa-arrow-up text-rose-400 text-sm"></i>
</div>
<div class="flex-1">
<p class="text-sm font-bold">انزلاق للأعلى</p>
<p class="text-xs text-slate-500">تحريك الصورة للأعلى</p>
</div>
<div class="w-5 h-5 rounded-full border-2 border-slate-600 flex items-center justify-center">
<div class="w-2.5 h-2.5 rounded-full bg-transparent"></div>
</div>
</div>
<div class="radio-card glass-light rounded-xl p-3 flex items-center gap-3" data-effect="panDown">
<div class="w-9 h-9 rounded-lg bg-gradient-to-br from-sky-500/20 to-blue-500/20 flex items-center justify-center shrink-0">
<i class="fas fa-arrow-down text-sky-400 text-sm"></i>
</div>
<div class="flex-1">
<p class="text-sm font-bold">انزلاق للأسفل</p>
<p class="text-xs text-slate-500">تحريك الصورة للأسفل</p>
</div>
<div class="w-5 h-5 rounded-full border-2 border-slate-600 flex items-center justify-center">
<div class="w-2.5 h-2.5 rounded-full bg-transparent"></div>
</div>
</div>
<div class="radio-card glass-light rounded-xl p-3 flex items-center gap-3" data-effect="rotate">
<div class="w-9 h-9 rounded-lg bg-gradient-to-br from-fuchsia-500/20 to-purple-500/20 flex items-center justify-center shrink-0">
<i class="fas fa-sync text-fuchsia-400 text-sm"></i>
</div>
<div class="flex-1">
<p class="text-sm font-bold">دوران خفيف</p>
<p class="text-xs text-slate-500">دوران الصورة مع تقريب</p>
</div>
<div class="w-5 h-5 rounded-full border-2 border-slate-600 flex items-center justify-center">
<div class="w-2.5 h-2.5 rounded-full bg-transparent"></div>
</div>
</div>
<div class="radio-card glass-light rounded-xl p-3 flex items-center gap-3" data-effect="bounce">
<div class="w-9 h-9 rounded-lg bg-gradient-to-br from-green-500/20 to-emerald-500/20 flex items-center justify-center shrink-0">
<i class="fas fa-compress-arrows-alt text-green-400 text-sm"></i>
</div>
<div class="flex-1">
<p class="text-sm font-bold">نبض ديناميكي</p>
<p class="text-xs text-slate-500">تأثير نبض مع تكبير وتصغير</p>
</div>
<div class="w-5 h-5 rounded-full border-2 border-slate-600 flex items-center justify-center">
<div class="w-2.5 h-2.5 rounded-full bg-transparent"></div>
</div>
</div>
<div class="radio-card glass-light rounded-xl p-3 flex items-center gap-3" data-effect="kenBurns">
<div class="w-9 h-9 rounded-lg bg-gradient-to-br from-indigo-500/20 to-violet-500/20 flex items-center justify-center shrink-0">
<i class="fas fa-film text-indigo-400 text-sm"></i>
</div>
<div class="flex-1">
<p class="text-sm font-bold">كين بيرنز (احترافي)</p>
<p class="text-xs text-slate-500">تكبير + انزلاق ديناميكي</p>
</div>
<div class="w-5 h-5 rounded-full border-2 border-slate-600 flex items-center justify-center">
<div class="w-2.5 h-2.5 rounded-full bg-transparent"></div>
</div>
</div>
</div>
</div>
<!-- Video Settings -->
<div class="glass rounded-2xl p-5 anim-slide-up stagger-3">
<div class="flex items-center gap-2 mb-4">
<div class="w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500/20 to-orange-500/20 flex items-center justify-center">
<i class="fas fa-sliders-h text-amber-400 text-sm"></i>
</div>
<h3 class="font-bold text-sm">إعدادات الفيديو</h3>
</div>
<div class="space-y-4">
<!-- Duration -->
<div>
<div class="flex justify-between mb-2">
<label class="text-xs text-slate-400 font-semibold">مدة الفيديو</label>
<span id="durationValue" class="text-xs text-violet-400 font-bold">5 ثوانٍ</span>
</div>
<input type="range" id="duration" min="1" max="15" value="5" class="w-full" style="direction: ltr;">
<div class="flex justify-between mt-1">
<span class="text-[10px] text-slate-600">1s</span>
<span class="text-[10px] text-slate-600">15s</span>
</div>
</div>
<!-- FPS -->
<div>
<div class="flex justify-between mb-2">
<label class="text-xs text-slate-400 font-semibold">معدل الإطارات (FPS)</label>
<span id="fpsValue" class="text-xs text-cyan-400 font-bold">30 fps</span>
</div>
<input type="range" id="fps" min="15" max="60" value="30" step="5" class="w-full" style="direction: ltr;">
<div class="flex justify-between mt-1">
<span class="text-[10px] text-slate-600">15</span>
<span class="text-[10px] text-slate-600">60</span>
</div>
</div>
<!-- Quality -->
<div>
<div class="flex justify-between mb-2">
<label class="text-xs text-slate-400 font-semibold">جودة الفيديو</label>
<span id="qualityValue" class="text-xs text-emerald-400 font-bold">عالية (1080p)</span>
</div>
<input type="range" id="quality" min="480" max="1080" value="1080" step="120" class="w-full" style="direction: ltr;">
<div class="flex justify-between mt-1">
<span class="text-[10px] text-slate-600">480p</span>
<span class="text-[10px] text-slate-600">1080p</span>
</div>
</div>
</div>
</div>
</div>
<!-- Right Panel - Preview -->
<div class="lg:col-span-8 space-y-5">
<!-- Preview Area -->
<div class="glass rounded-2xl p-5 anim-slide-left stagger-2">
<div class="flex items-center justify-between mb-4">
<div class="flex items-center gap-2">
<div class="w-8 h-8 rounded-lg bg-gradient-to-br from-rose-500/20 to-pink-500/20 flex items-center justify-center">
<i class="fas fa-eye text-rose-400 text-sm"></i>
</div>
<h3 class="font-bold text-sm">معاينة النتيجة</h3>
</div>
<span class="tag-badge" id="effectBadge">تقريب تدريجي</span>
</div>
<div class="video-wrapper rounded-xl overflow-hidden bg-slate-900/60 flex items-center justify-center min-h-[360px] lg:min-h-[420px]" id="previewContainer">
<div id="emptyState" class="text-center p-8">
<div class="w-20 h-20 mx-auto mb-4 rounded-2xl bg-gradient-to-br from-violet-500/10 to-indigo-500/10 border border-violet-500/20 flex items-center justify-center anim-pulse-glow">
<i class="fas fa-film text-3xl text-violet-400/50"></i>
</div>
<p class="text-slate-500 text-sm font-medium">سيتم عرض الفيديو هنا بعد التحميل والمعالجة</p>
<p class="text-slate-600 text-xs mt-1">حمّل صورة ثم انقر على "إنشاء الفيديو"</p>
</div>
<canvas id="previewCanvas" class="hidden-content max-w-full max-h-[420px] rounded-xl shadow-2xl"></canvas>
<!-- Video element for playback -->
<video id="outputVideo" class="hidden-content max-w-full max-h-[420px] rounded-xl shadow-2xl" controls loop></video>
</div>
</div>
<!-- Progress Bar -->
<div id="progressSection" class="glass rounded-2xl p-5 hidden-content">
<div class="flex items-center gap-2 mb-3">
<div class="w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500/20 to-orange-500/20 flex items-center justify-center">
<i class="fas fa-spinner fa-spin text-amber-400 text-sm"></i>
</div>
<div class="flex-1">
<h3 class="font-bold text-sm">جاري المعالجة</h3>
<p class="text-xs text-slate-500" id="progressText">جاري تجهيز الفيديو...</p>
</div>
<span id="progressPercent" class="text-sm font-bold text-violet-400">0%</span>
</div>
<div class="h-2 bg-slate-700/50 rounded-full overflow-hidden">
<div id="progressBar" class="h-full bg-gradient-to-l from-violet-500 to-cyan-500 rounded-full transition-all duration-300" style="width: 0%;"></div>
</div>
<div class="flex justify-between mt-2">
<span class="text-[10px] text-slate-600" id="frameInfo">0 / 0 إطار</span>
<span class="text-[10px] text-slate-600" id="etaInfo">متبقي: --</span>
</div>
</div>
<!-- Action Buttons -->
<div class="flex flex-col sm:flex-row gap-3 anim-slide-left stagger-4">
<button id="generateBtn" class="btn-shine flex-1 bg-gradient-to-l from-violet-600 via-indigo-600 to-cyan-600 hover:from-violet-500 hover:via-indigo-500 hover:to-cyan-500 text-white font-bold py-4 px-6 rounded-xl shadow-lg shadow-violet-500/25 transition-all duration-300 hover:-translate-y-0.5 disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:translate-y-0">
<i class="fas fa-wand-magic-sparkles ml-2"></i>
إنشاء الفيديو
</button>
<button id="downloadBtn" class="flex-1 bg-gradient-to-l from-emerald-600 to-teal-600 hover:from-emerald-500 hover:to-teal-500 text-white font-bold py-4 px-6 rounded-xl shadow-lg shadow-emerald-500/25 transition-all duration-300 hover:-translate-y-0.5 hidden-content disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:translate-y-0">
<i class="fas fa-download ml-2"></i>
تحميل الفيديو
</button>
<button id="resetBtn" class="sm:w-auto w-full px-5 py-4 glass-light text-slate-300 hover:text-white font-bold rounded-xl transition-all duration-300 hover:bg-white/10 border border-slate-700/50">
<i class="fas fa-redo-alt"></i>
</button>
</div>
<!-- Video Info -->
<div id="videoInfo" class="glass rounded-2xl p-4 hidden-content anim-scale">
<div class="flex items-center gap-2 mb-3">
<div class="w-7 h-7 rounded-lg bg-gradient-to-br from-emerald-500/20 to-teal-500/20 flex items-center justify-center">
<i class="fas fa-info-circle text-emerald-400 text-xs"></i>
</div>
<h3 class="font-bold text-xs">معلومات الفيديو</h3>
</div>
<div class="grid grid-cols-2 gap-3 text-xs">
<div class="glass-light rounded-lg p-3">
<p class="text-slate-500 mb-1">الدقة</p>
<p class="text-white font-bold" id="infoResolution">--</p>
</div>
<div class="glass-light rounded-lg p-3">
<p class="text-slate-500 mb-1">مدة الفيديو</p>
<p class="text-white font-bold" id="infoDuration">--</p>
</div>
<div class="glass-light rounded-lg p-3">
<p class="text-slate-500 mb-1">معدل الإطارات</p>
<p class="text-white font-bold" id="infoFps">--</p>
</div>
<div class="glass-light rounded-lg p-3">
<p class="text-slate-500 mb-1">عدد الإطارات</p>
<p class="text-white font-bold" id="infoFrames">--</p>
</div>
</div>
</div>
</div>
</div>
<!-- Features Section -->
<div class="mt-14">
<div class="text-center mb-8">
<div class="tag-badge mb-3 inline-block">لماذا نحن</div>
<h2 class="text-2xl md:text-3xl font-black">
مميزات <span class="text-transparent bg-clip-text bg-gradient-to-l from-violet-400 to-cyan-400">بيكسل موشن</span>
</h2>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
<div class="glass rounded-xl p-5 group hover:border-violet-500/30 transition-all duration-300 hover:-translate-y-1">
<div class="w-11 h-11 rounded-xl bg-gradient-to-br from-violet-500/20 to-indigo-500/20 flex items-center justify-center mb-3 group-hover:shadow-lg group-hover:shadow-violet-500/20 transition-all">
<i class="fas fa-bolt text-violet-400 text-base"></i>
</div>
<h3 class="font-bold text-sm mb-1">معالجة سريعة</h3>
<p class="text-xs text-slate-400 leading-relaxed">تحويل الصور إلى فيديو بسرعة عالية باستخدام تقنيات الويب المتقدمة</p>
</div>
<div class="glass rounded-xl p-5 group hover:border-cyan-500/30 transition-all duration-300 hover:-translate-y-1">
<div class="w-11 h-11 rounded-xl bg-gradient-to-br from-cyan-500/20 to-blue-500/20 flex items-center justify-center mb-3 group-hover:shadow-lg group-hover:shadow-cyan-500/20 transition-all">
<i class="fas fa-sliders-h text-cyan-400 text-base"></i>
</div>
<h3 class="font-bold text-sm mb-1">تحكم كامل</h3>
<p class="text-xs text-slate-400 leading-relaxed">تحكم كامل في الجودة والمدة ومعدل الإطارات ونوع الحركة</p>
</div>
<div class="glass rounded-xl p-5 group hover:border-emerald-500/30 transition-all duration-300 hover:-translate-y-1">
<div class="w-11 h-11 rounded-xl bg-gradient-to-br from-emerald-500/20 to-teal-500/20 flex items-center justify-center mb-3 group-hover:shadow-lg group-hover:shadow-emerald-500/20 transition-all">
<i class="fas fa-shield-alt text-emerald-400 text-base"></i>
</div>
<h3 class="font-bold text-sm mb-1">خصوصية تامة</h3>
<p class="text-xs text-slate-400 leading-relaxed">كل المعالجة تتم على جهازك مباشرة بدون رفع الصور لأي خادم</p>
</div>
<div class="glass rounded-xl p-5 group hover:border-amber-500/30 transition-all duration-300 hover:-translate-y-1">
<div class="w-11 h-11 rounded-xl bg-gradient-to-br from-amber-500/20 to-orange-500/20 flex items-center justify-center mb-3 group-hover:shadow-lg group-hover:shadow-amber-500/20 transition-all">
<i class="fas fa-magic text-amber-400 text-base"></i>
</div>
<h3 class="font-bold text-sm mb-1">مؤثرات متنوعة</h3>
<p class="text-xs text-slate-400 leading-relaxed">أنواع متعددة من الحركات والمؤثرات لإنشاء فيديوهات احترافية</p>
</div>
</div>
</div>
</div>
</main>
<!-- Footer -->
<footer class="main-content relative z-10 py-8 px-4 border-t border-white/5 mt-8">
<div class="max-w-7xl mx-auto text-center">
<div class="flex items-center justify-center gap-2 mb-2">
<i class="fas fa-film text-violet-400"></i>
<span class="font-orbitron text-sm font-bold text-transparent bg-clip-text bg-gradient-to-r from-violet-400 to-cyan-400">PixelMotion</span>
</div>
<p class="text-xs text-slate-500">تم تصميم هذه الأداة لتحويل الصور إلى فيديو مباشرة في المتصفح</p>
</div>
</footer>
<script>
// ============================================
// PARTICLE BACKGROUND
// ============================================
const particleCanvas = document.getElementById('particleCanvas');
const pCtx = particleCanvas.getContext('2d');
let particles = [];
let mouse = { x: -1000, y: -1000 };
function resizeParticles() {
particleCanvas.width = window.innerWidth;
particleCanvas.height = window.innerHeight;
}
resizeParticles();
window.addEventListener('resize', resizeParticles);
class Particle {
constructor() {
this.reset();
}
reset() {
this.x = Math.random() * particleCanvas.width;
this.y = Math.random() * particleCanvas.height;
this.size = Math.random() * 2 + 0.5;
this.speedX = (Math.random() - 0.5) * 0.4;
this.speedY = (Math.random() - 0.5) * 0.4;
this.opacity = Math.random() * 0.5 + 0.1;
this.color = Math.random() > 0.5 ? '99,