Files
Website/accountforger-video.html
2025-08-17 14:15:33 +02:00

873 Zeilen
30 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AccountForger</title>
<link rel="stylesheet" href="styles-intelsight.css">
<link rel="stylesheet" href="css/fonts.css">
<style>
:root {
--vh: 1vh;
}
body {
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 100%);
min-height: 100vh;
min-height: calc(var(--vh, 1vh) * 100);
overflow-x: hidden;
}
.video-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 100vh;
min-height: calc(var(--vh, 1vh) * 100);
padding: 2rem;
position: relative;
}
.back-button {
position: absolute;
top: 2rem;
left: 2rem;
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.75rem 1.5rem;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 8px;
color: #fff;
text-decoration: none;
font-family: 'Inter', sans-serif;
font-weight: 500;
font-size: 0.95rem;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
}
.back-button:hover {
background: rgba(255, 255, 255, 0.15);
transform: translateX(-5px);
}
.video-header {
text-align: center;
margin-bottom: 2rem;
animation: fadeInUp 0.8s ease;
}
.video-header h1 {
font-family: 'Bebas Neue', sans-serif;
font-size: 3rem;
color: #fff;
margin-bottom: 0.5rem;
letter-spacing: 2px;
}
.video-header p {
color: rgba(255, 255, 255, 0.7);
font-size: 1.1rem;
font-family: 'Inter', sans-serif;
font-weight: 400;
}
.video-wrapper {
position: relative;
width: 100%;
max-width: 1200px;
background: #000;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
animation: fadeInUp 1s ease 0.2s both;
}
.video-protection {
position: relative;
width: 100%;
padding-bottom: 56.25%; /* 16:9 Aspect Ratio */
height: 0;
background: #000;
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
.video-protection video {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: contain;
pointer-events: auto;
background-color: #000;
}
/* Overlay to prevent right-click */
.video-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10;
background: transparent;
pointer-events: none;
}
/* Custom controls */
.custom-controls {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: linear-gradient(to top, rgba(0,0,0,0.9), transparent);
padding: 1.5rem;
display: flex;
align-items: center;
gap: 1rem;
z-index: 20;
opacity: 0;
transition: opacity 0.3s ease;
}
.video-wrapper:hover .custom-controls,
.video-wrapper.controls-visible .custom-controls {
opacity: 1;
}
/* Fullscreen specific styles - Direct video element */
video:fullscreen {
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100vw !important;
height: 100vh !important;
object-fit: contain !important;
background-color: #000 !important;
z-index: 999999 !important;
}
video:-webkit-full-screen {
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100vw !important;
height: 100vh !important;
object-fit: contain !important;
background-color: #000 !important;
z-index: 999999 !important;
}
video:-moz-full-screen {
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100vw !important;
height: 100vh !important;
object-fit: contain !important;
background-color: #000 !important;
z-index: 999999 !important;
}
video:-ms-fullscreen {
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100vw !important;
height: 100vh !important;
object-fit: contain !important;
background-color: #000 !important;
z-index: 999999 !important;
}
/* Fallback: Wrapper fullscreen styles */
.video-wrapper:fullscreen,
.video-wrapper:-webkit-full-screen,
.video-wrapper:-moz-full-screen,
.video-wrapper:-ms-fullscreen {
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100vw !important;
height: 100vh !important;
background-color: #000 !important;
border-radius: 0 !important;
}
.video-wrapper:fullscreen .video-protection,
.video-wrapper:-webkit-full-screen .video-protection,
.video-wrapper:-moz-full-screen .video-protection,
.video-wrapper:-ms-fullscreen .video-protection {
width: 100vw !important;
height: 100vh !important;
padding: 0 !important;
background-color: #000 !important;
}
.video-wrapper:fullscreen video,
.video-wrapper:-webkit-full-screen video,
.video-wrapper:-moz-full-screen video,
.video-wrapper:-ms-fullscreen video {
width: 100vw !important;
height: 100vh !important;
object-fit: contain !important;
background-color: #000 !important;
}
.video-wrapper:fullscreen .custom-controls,
.video-wrapper:-webkit-full-screen .custom-controls,
.video-wrapper:-moz-full-screen .custom-controls,
.video-wrapper:-ms-fullscreen .custom-controls {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: 2rem;
background: linear-gradient(to top, rgba(0,0,0,0.95), transparent);
z-index: 100;
}
.video-wrapper:fullscreen .video-overlay,
.video-wrapper:-webkit-full-screen .video-overlay,
.video-wrapper:-moz-full-screen .video-overlay,
.video-wrapper:-ms-fullscreen .video-overlay {
display: none !important;
}
.play-button, .fullscreen-button, .volume-button {
background: rgba(255, 255, 255, 0.2);
border: none;
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s ease;
}
.play-button:hover, .fullscreen-button:hover, .volume-button:hover {
background: rgba(255, 255, 255, 0.3);
transform: scale(1.1);
}
.play-button svg, .fullscreen-button svg, .volume-button svg {
width: 16px;
height: 16px;
fill: #fff;
}
.volume-control {
display: flex;
align-items: center;
gap: 0.5rem;
}
.volume-slider {
width: 80px;
height: 4px;
background: rgba(255, 255, 255, 0.2);
border-radius: 2px;
cursor: pointer;
position: relative;
opacity: 0;
transition: opacity 0.3s ease;
}
.volume-control:hover .volume-slider {
opacity: 1;
}
.volume-fill {
height: 100%;
background: #00d4ff;
border-radius: 2px;
width: 100%;
}
.progress-bar {
flex: 1;
height: 4px;
background: rgba(255, 255, 255, 0.2);
border-radius: 2px;
position: relative;
cursor: pointer;
}
.progress-fill {
height: 100%;
background: #00d4ff;
border-radius: 2px;
width: 0%;
transition: width 0.1s linear;
}
.time-display {
color: #fff;
font-size: 0.9rem;
font-family: 'Inter', sans-serif;
min-width: 100px;
text-align: right;
}
/* Security notice */
.security-notice {
margin-top: 2rem;
padding: 1rem;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
text-align: center;
color: rgba(255, 255, 255, 0.7);
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 0.9rem;
animation: fadeInUp 1.2s ease 0.4s both;
}
.security-notice svg {
width: 20px;
height: 20px;
vertical-align: middle;
margin-right: 0.5rem;
fill: #00d4ff;
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Mobile responsive */
@media (max-width: 768px) {
.video-container {
padding: 1rem;
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
}
.video-header {
margin-bottom: 1rem;
margin-top: 3rem;
}
.video-header h1 {
font-size: 1.75rem;
letter-spacing: 1px;
}
.video-header p {
font-size: 0.9rem;
}
.back-button {
top: 1rem;
left: 1rem;
padding: 0.5rem 1rem;
font-size: 0.85rem;
}
.video-wrapper {
max-width: 100%;
margin: 0 auto;
border-radius: 8px;
}
.video-protection {
padding-bottom: 56.25%; /* 16:9 aspect ratio */
}
.custom-controls {
padding: 0.75rem;
gap: 0.5rem;
flex-wrap: wrap;
}
.play-button, .fullscreen-button, .volume-button {
width: 36px;
height: 36px;
}
.play-button svg, .fullscreen-button svg, .volume-button svg {
width: 14px;
height: 14px;
}
.progress-bar {
width: 100%;
order: -1;
flex-basis: 100%;
margin-bottom: 0.5rem;
height: 6px;
}
.time-display {
font-size: 0.8rem;
min-width: 80px;
}
.volume-control {
display: flex;
align-items: center;
gap: 0.25rem;
}
.volume-slider {
width: 60px;
height: 6px;
}
.security-notice {
margin-top: 1rem;
padding: 0.75rem;
font-size: 0.8rem;
}
.security-notice svg {
width: 16px;
height: 16px;
}
}
/* Extra small devices (phones in portrait) */
@media (max-width: 480px) {
.video-header h1 {
font-size: 1.5rem;
}
.video-header p {
font-size: 0.85rem;
}
.back-button {
padding: 0.4rem 0.8rem;
font-size: 0.8rem;
}
.back-button svg {
width: 16px;
height: 16px;
}
.custom-controls {
padding: 0.5rem;
}
.play-button, .fullscreen-button, .volume-button {
width: 32px;
height: 32px;
}
.time-display {
font-size: 0.75rem;
min-width: 70px;
}
.volume-slider {
width: 50px;
}
}
/* Landscape mode on mobile */
@media (max-width: 768px) and (orientation: landscape) {
.video-container {
padding: 0.5rem;
}
.video-header {
margin-bottom: 0.5rem;
margin-top: 2rem;
}
.video-header h1 {
font-size: 1.5rem;
}
.video-header p {
display: none;
}
.video-wrapper {
max-height: 80vh;
}
.security-notice {
display: none;
}
.back-button {
top: 0.5rem;
left: 0.5rem;
padding: 0.3rem 0.6rem;
font-size: 0.75rem;
}
}
</style>
</head>
<body>
<div class="video-container">
<a href="index.html" class="back-button">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19 12H5M5 12L12 19M5 12L12 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
Zurück zur Hauptseite
</a>
<div class="video-header">
<h1>AccountForger</h1>
<p>Exklusiver Zugang für autorisierte Behörden</p>
</div>
<div class="video-wrapper">
<div class="video-protection">
<video id="protectedVideo" controlsList="nodownload" disablePictureInPicture playsinline>
<source src="assets/videos/AFv6.mp4" type="video/mp4">
Ihr Browser unterstützt das Video-Tag nicht.
</video>
<div class="video-overlay"></div>
<div class="custom-controls">
<button class="play-button" id="playBtn">
<svg viewBox="0 0 24 24">
<polygon points="5,3 19,12 5,21" />
</svg>
</button>
<div class="progress-bar" id="progressBar">
<div class="progress-fill" id="progressFill"></div>
</div>
<div class="time-display" id="timeDisplay">0:00 / 0:00</div>
<div class="volume-control">
<button class="volume-button" id="volumeBtn">
<svg viewBox="0 0 24 24">
<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/>
</svg>
</button>
<div class="volume-slider" id="volumeSlider">
<div class="volume-fill" id="volumeFill"></div>
</div>
</div>
<button class="fullscreen-button" id="fullscreenBtn">
<svg viewBox="0 0 24 24">
<path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/>
</svg>
</button>
</div>
</div>
</div>
<div class="security-notice">
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2L2 7V11C2 16.5 6.5 20.5 12 22C17.5 20.5 22 16.5 22 11V7L12 2Z" stroke="currentColor" stroke-width="2"/>
<path d="M9 12L11 14L15 10" stroke="currentColor" stroke-width="2"/>
</svg>
Dieses Video ist geschützt und nur für autorisierte Nutzer zugänglich.
</div>
</div>
<script>
// Check authentication
if (!sessionStorage.getItem('accountForgerAuth')) {
window.location.href = 'index.html';
}
// Video player functionality
const video = document.getElementById('protectedVideo');
const videoWrapper = document.querySelector('.video-wrapper');
const playBtn = document.getElementById('playBtn');
const progressBar = document.getElementById('progressBar');
const progressFill = document.getElementById('progressFill');
const timeDisplay = document.getElementById('timeDisplay');
const fullscreenBtn = document.getElementById('fullscreenBtn');
const volumeBtn = document.getElementById('volumeBtn');
const volumeSlider = document.getElementById('volumeSlider');
const volumeFill = document.getElementById('volumeFill');
// Disable right-click on video
document.addEventListener('contextmenu', function(e) {
if (e.target.tagName === 'VIDEO') {
e.preventDefault();
return false;
}
});
// Prevent video download
video.addEventListener('contextmenu', function(e) {
e.preventDefault();
return false;
});
// Play/Pause functionality
playBtn.addEventListener('click', function() {
if (video.paused) {
video.play();
playBtn.innerHTML = '<svg viewBox="0 0 24 24"><rect x="6" y="4" width="4" height="16" /><rect x="14" y="4" width="4" height="16" /></svg>';
} else {
video.pause();
playBtn.innerHTML = '<svg viewBox="0 0 24 24"><polygon points="5,3 19,12 5,21" /></svg>';
}
});
// Update progress bar
video.addEventListener('timeupdate', function() {
const progress = (video.currentTime / video.duration) * 100;
progressFill.style.width = progress + '%';
const currentMinutes = Math.floor(video.currentTime / 60);
const currentSeconds = Math.floor(video.currentTime % 60).toString().padStart(2, '0');
const durationMinutes = Math.floor(video.duration / 60);
const durationSeconds = Math.floor(video.duration % 60).toString().padStart(2, '0');
timeDisplay.textContent = `${currentMinutes}:${currentSeconds} / ${durationMinutes}:${durationSeconds}`;
});
// Seek functionality
progressBar.addEventListener('click', function(e) {
const rect = progressBar.getBoundingClientRect();
const pos = (e.clientX - rect.left) / rect.width;
video.currentTime = pos * video.duration;
});
// Video ended
video.addEventListener('ended', function() {
playBtn.innerHTML = '<svg viewBox="0 0 24 24"><polygon points="5,3 19,12 5,21" /></svg>';
});
// Fullscreen functionality - Simplified approach
fullscreenBtn.addEventListener('click', function() {
if (!document.fullscreenElement) {
// Use native video fullscreen if available
if (video.requestFullscreen) {
video.requestFullscreen();
} else if (video.webkitRequestFullscreen) {
// Safari/iOS
video.webkitRequestFullscreen();
} else if (video.webkitEnterFullscreen) {
// iOS Safari specific
video.webkitEnterFullscreen();
} else if (video.mozRequestFullScreen) {
video.mozRequestFullScreen();
} else if (video.msRequestFullscreen) {
video.msRequestFullscreen();
} else {
// Fallback to wrapper fullscreen
if (videoWrapper.requestFullscreen) {
videoWrapper.requestFullscreen();
} else if (videoWrapper.webkitRequestFullscreen) {
videoWrapper.webkitRequestFullscreen();
} else if (videoWrapper.mozRequestFullScreen) {
videoWrapper.mozRequestFullScreen();
} else if (videoWrapper.msRequestFullscreen) {
videoWrapper.msRequestFullscreen();
}
}
fullscreenBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/></svg>';
} else {
// Exit fullscreen
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
fullscreenBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>';
}
});
// Fullscreen change event
document.addEventListener('fullscreenchange', updateFullscreenButton);
document.addEventListener('webkitfullscreenchange', updateFullscreenButton);
document.addEventListener('mozfullscreenchange', updateFullscreenButton);
document.addEventListener('MSFullscreenChange', updateFullscreenButton);
function updateFullscreenButton() {
if (document.fullscreenElement ||
document.webkitFullscreenElement ||
document.mozFullScreenElement ||
document.msFullscreenElement) {
fullscreenBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/></svg>';
} else {
fullscreenBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>';
}
}
// Volume control
volumeBtn.addEventListener('click', function() {
if (video.muted) {
video.muted = false;
video.volume = 1;
volumeFill.style.width = '100%';
volumeBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/></svg>';
} else {
video.muted = true;
volumeFill.style.width = '0%';
volumeBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"/></svg>';
}
});
volumeSlider.addEventListener('click', function(e) {
const rect = volumeSlider.getBoundingClientRect();
const pos = (e.clientX - rect.left) / rect.width;
video.volume = pos;
video.muted = false;
volumeFill.style.width = (pos * 100) + '%';
updateVolumeButton();
});
function updateVolumeButton() {
if (video.muted || video.volume === 0) {
volumeBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"/></svg>';
} else if (video.volume < 0.5) {
volumeBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M7 9v6h4l5 5V4L11 9H7z"/></svg>';
} else {
volumeBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/></svg>';
}
}
video.addEventListener('volumechange', function() {
volumeFill.style.width = (video.volume * 100) + '%';
updateVolumeButton();
});
// Keyboard shortcuts
document.addEventListener('keydown', function(e) {
if (e.code === 'Space') {
e.preventDefault();
playBtn.click();
} else if (e.code === 'ArrowLeft') {
video.currentTime -= 10;
} else if (e.code === 'ArrowRight') {
video.currentTime += 10;
} else if (e.code === 'ArrowUp') {
e.preventDefault();
video.volume = Math.min(1, video.volume + 0.1);
} else if (e.code === 'ArrowDown') {
e.preventDefault();
video.volume = Math.max(0, video.volume - 0.1);
} else if (e.code === 'KeyF') {
fullscreenBtn.click();
} else if (e.code === 'KeyM') {
volumeBtn.click();
} else if (e.code === 'Escape') {
if (document.fullscreenElement ||
document.webkitFullscreenElement ||
document.mozFullScreenElement ||
document.msFullscreenElement) {
fullscreenBtn.click();
}
}
});
// Show controls on mouse move
let hideControlsTimeout;
videoWrapper.addEventListener('mousemove', function() {
videoWrapper.classList.add('controls-visible');
clearTimeout(hideControlsTimeout);
hideControlsTimeout = setTimeout(() => {
if (!video.paused) {
videoWrapper.classList.remove('controls-visible');
}
}, 3000);
});
// Double-click for fullscreen
video.addEventListener('dblclick', function() {
fullscreenBtn.click();
});
// Touch support for mobile
let touchStartX = 0;
let touchStartY = 0;
let touchStartTime = 0;
video.addEventListener('touchstart', function(e) {
touchStartX = e.touches[0].clientX;
touchStartY = e.touches[0].clientY;
touchStartTime = Date.now();
}, { passive: true });
video.addEventListener('touchend', function(e) {
const touchEndTime = Date.now();
const touchDuration = touchEndTime - touchStartTime;
// Single tap to show/hide controls
if (touchDuration < 300) {
videoWrapper.classList.toggle('controls-visible');
}
}, { passive: true });
// Double tap for fullscreen on mobile
let lastTap = 0;
video.addEventListener('touchend', function(e) {
const currentTime = new Date().getTime();
const tapLength = currentTime - lastTap;
if (tapLength < 500 && tapLength > 0) {
fullscreenBtn.click();
}
lastTap = currentTime;
});
// Swipe gestures for seeking
let touchStartVideoTime = 0;
video.addEventListener('touchstart', function(e) {
touchStartVideoTime = video.currentTime;
touchStartX = e.touches[0].clientX;
}, { passive: true });
video.addEventListener('touchmove', function(e) {
if (touchStartX !== null) {
const touchCurrentX = e.touches[0].clientX;
const deltaX = touchCurrentX - touchStartX;
const seekAmount = (deltaX / window.innerWidth) * 30; // Max 30 seconds seek
const newTime = touchStartVideoTime + seekAmount;
video.currentTime = Math.max(0, Math.min(video.duration, newTime));
}
}, { passive: true });
// Mobile viewport height fix
function setMobileViewportHeight() {
const vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
}
setMobileViewportHeight();
window.addEventListener('resize', setMobileViewportHeight);
window.addEventListener('orientationchange', setMobileViewportHeight);
// Prevent text selection
document.body.style.userSelect = 'none';
document.body.style.webkitUserSelect = 'none';
document.body.style.mozUserSelect = 'none';
document.body.style.msUserSelect = 'none';
// Additional protection against developer tools
document.addEventListener('keydown', function(e) {
// Prevent F12, Ctrl+Shift+I, Ctrl+Shift+J, Ctrl+U
if (e.keyCode === 123 ||
(e.ctrlKey && e.shiftKey && (e.keyCode === 73 || e.keyCode === 74)) ||
(e.ctrlKey && e.keyCode === 85)) {
e.preventDefault();
return false;
}
});
</script>
</body>
</html>