| <!DOCTYPE html> |
| <html lang="fr"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Centre de Contrôle Robotique - Mode Jeu</title> |
| <script src="https://cdn.tailwindcss.com"></script> |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
| <style> |
| @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&family=Roboto:wght@300;400;700&display=swap'); |
| |
| :root { |
| --primary: #3B82F6; |
| --secondary: #10B981; |
| --accent: #F59E0B; |
| --dark: #1F2937; |
| --darker: #111827; |
| --light: #F3F4F6; |
| } |
| |
| body { |
| font-family: 'Roboto', sans-serif; |
| background-color: var(--darker); |
| color: white; |
| overflow-x: hidden; |
| } |
| |
| .tech-font { |
| font-family: 'Orbitron', sans-serif; |
| } |
| |
| .control-panel { |
| background: linear-gradient(135deg, #1E3A8A 0%, #111827 100%); |
| border: 1px solid rgba(59, 130, 246, 0.3); |
| } |
| |
| .robot-active { |
| animation: pulse 2s infinite; |
| } |
| |
| @keyframes pulse { |
| 0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7); } |
| 70% { box-shadow: 0 0 0 10px rgba(16, 185, 129, 0); } |
| 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); } |
| } |
| |
| .game-screen { |
| background: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), |
| url('https://images.unsplash.com/photo-1593508512255-86ab42a8e620?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2078&q=80'); |
| background-size: cover; |
| background-position: center; |
| } |
| |
| .joystick { |
| background: radial-gradient(circle at center, #3B82F6 0%, #1D4ED8 100%); |
| box-shadow: 0 0 20px rgba(59, 130, 246, 0.5); |
| } |
| |
| .binary-bg { |
| position: absolute; |
| top: 0; |
| left: 0; |
| width: 100%; |
| height: 100%; |
| background-image: |
| linear-gradient(rgba(59, 130, 246, 0.05) 1px, transparent 1px), |
| linear-gradient(90deg, rgba(59, 130, 246, 0.05) 1px, transparent 1px); |
| background-size: 20px 20px; |
| z-index: -1; |
| } |
| |
| .robot-eye { |
| animation: eyeBlink 5s infinite; |
| } |
| |
| @keyframes eyeBlink { |
| 0%, 45%, 55%, 100% { transform: scaleY(1); } |
| 50% { transform: scaleY(0.1); } |
| } |
| |
| .game-grid { |
| display: grid; |
| grid-template-columns: repeat(10, 1fr); |
| grid-template-rows: repeat(10, 1fr); |
| gap: 2px; |
| } |
| |
| .game-cell { |
| background-color: rgba(31, 41, 55, 0.7); |
| transition: all 0.2s; |
| } |
| |
| .game-cell.active { |
| background-color: #3B82F6; |
| } |
| |
| .game-cell.robot { |
| background-color: #10B981; |
| } |
| |
| .game-cell.target { |
| background-color: #F59E0B; |
| } |
| |
| .game-cell.obstacle { |
| background-color: #EF4444; |
| } |
| </style> |
| </head> |
| <body> |
| |
| <div class="binary-bg"></div> |
| |
| |
| <div class="min-h-screen flex flex-col"> |
| |
| <header class="bg-gray-900 py-4 px-6 border-b border-gray-800 flex justify-between items-center"> |
| <div class="flex items-center space-x-4"> |
| <div class="w-10 h-10 bg-blue-600 rounded-full flex items-center justify-center"> |
| <i class="fas fa-robot text-white"></i> |
| </div> |
| <h1 class="text-xl font-bold tech-font">CENTRE DE CONTRÔLE <span class="text-blue-400">ROBOTIQUE</span></h1> |
| </div> |
| <div class="flex items-center space-x-4"> |
| <div class="px-4 py-2 rounded-full bg-green-600 text-white flex items-center"> |
| <span class="relative flex h-2 w-2 mr-2"> |
| <span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75"></span> |
| <span class="relative inline-flex rounded-full h-2 w-2 bg-green-500"></span> |
| </span> |
| <span id="system-status">SYSTÈME ACTIF</span> |
| </div> |
| <button id="fullscreen-btn" class="p-2 rounded-full bg-gray-800 hover:bg-gray-700 text-white"> |
| <i class="fas fa-expand"></i> |
| </button> |
| </div> |
| </header> |
| |
| |
| <main class="flex-1 grid grid-cols-1 lg:grid-cols-3 gap-6 p-6"> |
| |
| <div class="control-panel rounded-xl p-6 col-span-1"> |
| <h2 class="text-2xl font-bold mb-6 tech-font flex items-center"> |
| <i class="fas fa-gamepad mr-3 text-blue-400"></i> |
| <span>CONTROLE <span class="text-blue-400">ROBOT</span></span> |
| </h2> |
| |
| |
| <div class="mb-8"> |
| <h3 class="text-lg font-semibold mb-3 flex items-center"> |
| <i class="fas fa-robot mr-2 text-blue-400"></i> |
| Sélection Robot |
| </h3> |
| <div class="grid grid-cols-3 gap-3"> |
| <button class="robot-btn p-3 rounded-lg bg-gray-800 hover:bg-gray-700 flex flex-col items-center" data-robot="1"> |
| <i class="fas fa-robot text-2xl mb-1 text-blue-400"></i> |
| <span class="text-xs">RT-001</span> |
| </button> |
| <button class="robot-btn p-3 rounded-lg bg-gray-800 hover:bg-gray-700 flex flex-col items-center" data-robot="2"> |
| <i class="fas fa-robot text-2xl mb-1 text-green-400"></i> |
| <span class="text-xs">RT-002</span> |
| </button> |
| <button class="robot-btn p-3 rounded-lg bg-gray-800 hover:bg-gray-700 flex flex-col items-center" data-robot="3"> |
| <i class="fas fa-robot text-2xl mb-1 text-yellow-400"></i> |
| <span class="text-xs">RT-003</span> |
| </button> |
| </div> |
| </div> |
| |
| |
| <div class="mb-8"> |
| <h3 class="text-lg font-semibold mb-3 flex items-center"> |
| <i class="fas fa-power-off mr-2 text-red-400"></i> |
| Activation Robot |
| </h3> |
| <div class="bg-gray-800 rounded-lg p-4"> |
| <div class="flex justify-between items-center mb-4"> |
| <span>Statut Robot:</span> |
| <span id="robot-status" class="px-3 py-1 rounded-full bg-gray-700 text-gray-300">INACTIF</span> |
| </div> |
| <button id="activate-btn" class="w-full py-3 rounded-lg bg-blue-600 hover:bg-blue-700 text-white font-bold flex items-center justify-center"> |
| <i class="fas fa-play mr-2"></i> ACTIVER ROBOT |
| </button> |
| </div> |
| </div> |
| |
| |
| <div class="mb-8"> |
| <h3 class="text-lg font-semibold mb-3 flex items-center"> |
| <i class="fas fa-chess-board mr-2 text-purple-400"></i> |
| Mode Jeu |
| </h3> |
| <div class="grid grid-cols-2 gap-3"> |
| <button class="game-mode-btn p-3 rounded-lg bg-gray-800 hover:bg-gray-700 flex flex-col items-center" data-mode="maze"> |
| <i class="fas fa-project-diagram text-2xl mb-1 text-purple-400"></i> |
| <span class="text-xs">Labyrinthe</span> |
| </button> |
| <button class="game-mode-btn p-3 rounded-lg bg-gray-800 hover:bg-gray-700 flex flex-col items-center" data-mode="race"> |
| <i class="fas fa-flag-checkered text-2xl mb-1 text-red-400"></i> |
| <span class="text-xs">Course</span> |
| </button> |
| <button class="game-mode-btn p-3 rounded-lg bg-gray-800 hover:bg-gray-700 flex flex-col items-center" data-mode="collect"> |
| <i class="fas fa-coins text-2xl mb-1 text-yellow-400"></i> |
| <span class="text-xs">Collection</span> |
| </button> |
| <button class="game-mode-btn p-3 rounded-lg bg-gray-800 hover:bg-gray-700 flex flex-col items-center" data-mode="battle"> |
| <i class="fas fa-robot text-2xl mb-1 text-green-400"></i> |
| <span class="text-xs">Combat</span> |
| </button> |
| </div> |
| </div> |
| |
| |
| <div> |
| <h3 class="text-lg font-semibold mb-3 flex items-center"> |
| <i class="fas fa-joystick mr-2 text-yellow-400"></i> |
| Contrôle Manuel |
| </h3> |
| <div class="bg-gray-800 rounded-lg p-6 flex flex-col items-center"> |
| <div class="relative w-40 h-40 mb-4"> |
| <div class="absolute inset-0 flex items-center justify-center"> |
| <div class="joystick w-24 h-24 rounded-full flex items-center justify-center cursor-move" id="joystick"> |
| <i class="fas fa-arrows-alt text-white text-xl"></i> |
| </div> |
| </div> |
| </div> |
| <div class="grid grid-cols-3 gap-2 w-full"> |
| <button class="control-btn p-3 rounded bg-gray-700 hover:bg-gray-600 flex items-center justify-center" data-direction="forward"> |
| <i class="fas fa-arrow-up"></i> |
| </button> |
| <button class="control-btn p-3 rounded bg-gray-700 hover:bg-gray-600 flex items-center justify-center" data-direction="left"> |
| <i class="fas fa-arrow-left"></i> |
| </button> |
| <button class="control-btn p-3 rounded bg-gray-700 hover:bg-gray-600 flex items-center justify-center" data-direction="right"> |
| <i class="fas fa-arrow-right"></i> |
| </button> |
| <button class="control-btn p-3 rounded bg-gray-700 hover:bg-gray-600 flex items-center justify-center" data-direction="backward"> |
| <i class="fas fa-arrow-down"></i> |
| </button> |
| <button class="control-btn p-3 rounded bg-gray-700 hover:bg-gray-600 flex items-center justify-center col-span-3" data-direction="stop"> |
| <i class="fas fa-stop-circle mr-2"></i> STOP |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| |
| <div class="game-screen rounded-xl p-6 col-span-2 relative overflow-hidden"> |
| <div class="absolute inset-0 flex items-center justify-center"> |
| <div class="text-center z-10 w-full max-w-2xl"> |
| <div id="game-start-screen"> |
| <h2 class="text-4xl font-bold mb-6 tech-font">MODE <span class="text-blue-400">JEU ROBOT</span></h2> |
| <p class="text-xl mb-8">Sélectionnez un robot et un mode de jeu pour commencer</p> |
| <div class="flex justify-center"> |
| <div class="w-32 h-32 bg-blue-600 rounded-full flex items-center justify-center mx-auto mb-6 robot-eye"> |
| <i class="fas fa-robot text-5xl text-white"></i> |
| </div> |
| </div> |
| <button id="start-game-btn" class="px-8 py-4 bg-blue-600 rounded-full text-white font-bold hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed" disabled> |
| <i class="fas fa-play mr-2"></i> DÉMARRER LE JEU |
| </button> |
| </div> |
| |
| <div id="game-container" class="hidden"> |
| <div class="flex justify-between items-center mb-4"> |
| <h3 id="game-title" class="text-2xl font-bold tech-font">LABYRINTHE ROBOT</h3> |
| <div class="flex items-center space-x-4"> |
| <div class="px-4 py-2 rounded-full bg-gray-800"> |
| <span id="game-score">Score: 0</span> |
| </div> |
| <div class="px-4 py-2 rounded-full bg-gray-800"> |
| <span id="game-time">Temps: 00:00</span> |
| </div> |
| </div> |
| </div> |
| |
| <div class="game-grid w-full aspect-square max-w-2xl mx-auto bg-gray-900 p-1 rounded-lg" id="game-grid"> |
| |
| </div> |
| |
| <div class="mt-6 flex justify-center space-x-4"> |
| <button id="restart-game-btn" class="px-6 py-3 bg-yellow-600 rounded-lg text-white hover:bg-yellow-700"> |
| <i class="fas fa-redo mr-2"></i> Recommencer |
| </button> |
| <button id="end-game-btn" class="px-6 py-3 bg-red-600 rounded-lg text-white hover:bg-red-700"> |
| <i class="fas fa-stop mr-2"></i> Quitter |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </main> |
| </div> |
|
|
| <script> |
| |
| let systemActive = true; |
| let robotActive = false; |
| let selectedRobot = null; |
| let gameMode = null; |
| let gameRunning = false; |
| let gameInterval; |
| let gameTime = 0; |
| let gameScore = 0; |
| let robotPosition = { x: 0, y: 0 }; |
| let targetPosition = { x: 0, y: 0 }; |
| let obstacles = []; |
| |
| |
| const systemStatusEl = document.getElementById('system-status'); |
| const robotStatusEl = document.getElementById('robot-status'); |
| const activateBtn = document.getElementById('activate-btn'); |
| const startGameBtn = document.getElementById('start-game-btn'); |
| const gameStartScreen = document.getElementById('game-start-screen'); |
| const gameContainer = document.getElementById('game-container'); |
| const gameGrid = document.getElementById('game-grid'); |
| const gameTitleEl = document.getElementById('game-title'); |
| const gameScoreEl = document.getElementById('game-score'); |
| const gameTimeEl = document.getElementById('game-time'); |
| const restartGameBtn = document.getElementById('restart-game-btn'); |
| const endGameBtn = document.getElementById('end-game-btn'); |
| const fullscreenBtn = document.getElementById('fullscreen-btn'); |
| |
| |
| const robotButtons = document.querySelectorAll('.robot-btn'); |
| robotButtons.forEach(btn => { |
| btn.addEventListener('click', () => { |
| robotButtons.forEach(b => b.classList.remove('bg-blue-600', 'text-white')); |
| btn.classList.add('bg-blue-600', 'text-white'); |
| selectedRobot = btn.dataset.robot; |
| updateStartButton(); |
| }); |
| }); |
| |
| |
| const gameModeButtons = document.querySelectorAll('.game-mode-btn'); |
| gameModeButtons.forEach(btn => { |
| btn.addEventListener('click', () => { |
| gameModeButtons.forEach(b => b.classList.remove('bg-blue-600', 'text-white')); |
| btn.classList.add('bg-blue-600', 'text-white'); |
| gameMode = btn.dataset.mode; |
| updateStartButton(); |
| }); |
| }); |
| |
| |
| const controlButtons = document.querySelectorAll('.control-btn'); |
| controlButtons.forEach(btn => { |
| btn.addEventListener('click', () => { |
| if (!robotActive) return; |
| |
| const direction = btn.dataset.direction; |
| moveRobot(direction); |
| }); |
| }); |
| |
| |
| activateBtn.addEventListener('click', () => { |
| if (!selectedRobot) { |
| alert('Veuillez sélectionner un robot'); |
| return; |
| } |
| |
| robotActive = !robotActive; |
| updateRobotStatus(); |
| }); |
| |
| |
| startGameBtn.addEventListener('click', () => { |
| if (!robotActive) { |
| alert('Veuillez activer un robot'); |
| return; |
| } |
| |
| startGame(); |
| }); |
| |
| |
| restartGameBtn.addEventListener('click', () => { |
| startGame(); |
| }); |
| |
| |
| endGameBtn.addEventListener('click', () => { |
| endGame(); |
| }); |
| |
| |
| fullscreenBtn.addEventListener('click', () => { |
| if (!document.fullscreenElement) { |
| document.documentElement.requestFullscreen().catch(err => { |
| console.error(`Error attempting to enable fullscreen: ${err.message}`); |
| }); |
| } else { |
| if (document.exitFullscreen) { |
| document.exitFullscreen(); |
| } |
| } |
| }); |
| |
| |
| document.addEventListener('keydown', (e) => { |
| if (!robotActive || !gameRunning) return; |
| |
| switch(e.key) { |
| case 'ArrowUp': |
| moveRobot('forward'); |
| break; |
| case 'ArrowDown': |
| moveRobot('backward'); |
| break; |
| case 'ArrowLeft': |
| moveRobot('left'); |
| break; |
| case 'ArrowRight': |
| moveRobot('right'); |
| break; |
| case ' ': |
| moveRobot('stop'); |
| break; |
| } |
| }); |
| |
| |
| const joystick = document.getElementById('joystick'); |
| let isDragging = false; |
| |
| joystick.addEventListener('mousedown', () => { |
| isDragging = true; |
| }); |
| |
| document.addEventListener('mousemove', (e) => { |
| if (!isDragging || !robotActive || !gameRunning) return; |
| |
| const rect = joystick.getBoundingClientRect(); |
| const centerX = rect.left + rect.width / 2; |
| const centerY = rect.top + rect.height / 2; |
| |
| const deltaX = e.clientX - centerX; |
| const deltaY = e.clientY - centerY; |
| |
| |
| const angle = Math.atan2(deltaY, deltaX) * 180 / Math.PI; |
| |
| if (Math.abs(deltaX) > 20 || Math.abs(deltaY) > 20) { |
| if (angle >= -45 && angle < 45) { |
| moveRobot('right'); |
| } else if (angle >= 45 && angle < 135) { |
| moveRobot('backward'); |
| } else if (angle >= 135 || angle < -135) { |
| moveRobot('left'); |
| } else if (angle >= -135 && angle < -45) { |
| moveRobot('forward'); |
| } |
| } |
| }); |
| |
| document.addEventListener('mouseup', () => { |
| isDragging = false; |
| if (robotActive && gameRunning) { |
| moveRobot('stop'); |
| } |
| }); |
| |
| |
| function updateStartButton() { |
| startGameBtn.disabled = !(selectedRobot && gameMode); |
| } |
| |
| function updateRobotStatus() { |
| if (robotActive) { |
| robotStatusEl.textContent = 'ACTIF'; |
| robotStatusEl.classList.remove('bg-gray-700', 'text-gray-300'); |
| robotStatusEl.classList.add('bg-green-600', 'text-white'); |
| activateBtn.innerHTML = '<i class="fas fa-stop mr-2"></i> DÉSACTIVER ROBOT'; |
| activateBtn.classList.remove('bg-blue-600'); |
| activateBtn.classList.add('bg-red-600'); |
| |
| |
| robotButtons.forEach(btn => { |
| if (btn.dataset.robot === selectedRobot) { |
| btn.classList.add('robot-active'); |
| } |
| }); |
| } else { |
| robotStatusEl.textContent = 'INACTIF'; |
| robotStatusEl.classList.add('bg-gray-700', 'text-gray-300'); |
| robotStatusEl.classList.remove('bg-green-600', 'text-white'); |
| activateBtn.innerHTML = '<i class="fas fa-play mr-2"></i> ACTIVER ROBOT'; |
| activateBtn.classList.add('bg-blue-600'); |
| activateBtn.classList.remove('bg-red-600'); |
| |
| |
| robotButtons.forEach(btn => { |
| btn.classList.remove('robot-active'); |
| }); |
| |
| |
| if (gameRunning) { |
| endGame(); |
| } |
| } |
| } |
| |
| function startGame() { |
| gameStartScreen.classList.add('hidden'); |
| gameContainer.classList.remove('hidden'); |
| gameRunning = true; |
| gameTime = 0; |
| gameScore = 0; |
| |
| |
| switch(gameMode) { |
| case 'maze': |
| gameTitleEl.textContent = 'LABYRINTHE ROBOT'; |
| break; |
| case 'race': |
| gameTitleEl.textContent = 'COURSE ROBOT'; |
| break; |
| case 'collect': |
| gameTitleEl.textContent = 'COLLECTION ROBOT'; |
| break; |
| case 'battle': |
| gameTitleEl.textContent = 'COMBAT ROBOT'; |
| break; |
| } |
| |
| |
| initializeGameGrid(); |
| |
| |
| gameInterval = setInterval(() => { |
| gameTime++; |
| const minutes = Math.floor(gameTime / 60).toString().padStart(2, '0'); |
| const seconds = (gameTime % 60).toString().padStart(2, '0'); |
| gameTimeEl.textContent = `Temps: ${minutes}:${seconds}`; |
| }, 1000); |
| } |
| |
| function endGame() { |
| clearInterval(gameInterval); |
| gameRunning = false; |
| gameContainer.classList.add('hidden'); |
| gameStartScreen.classList.remove('hidden'); |
| |
| |
| gameGrid.innerHTML = ''; |
| } |
| |
| function initializeGameGrid() { |
| gameGrid.innerHTML = ''; |
| |
| |
| for (let y = 0; y < 10; y++) { |
| for (let x = 0; x < 10; x++) { |
| const cell = document.createElement('div'); |
| cell.className = 'game-cell'; |
| cell.dataset.x = x; |
| cell.dataset.y = y; |
| gameGrid.appendChild(cell); |
| } |
| } |
| |
| |
| robotPosition = { |
| x: Math.floor(Math.random() * 10), |
| y: Math.floor(Math.random() * 10) |
| }; |
| |
| |
| do { |
| targetPosition = { |
| x: Math.floor(Math.random() * 10), |
| y: Math.floor(Math.random() * 10) |
| }; |
| } while (targetPosition.x === robotPosition.x && targetPosition.y === robotPosition.y); |
| |
| |
| obstacles = []; |
| for (let i = 0; i < 20; i++) { |
| let obstacle; |
| do { |
| obstacle = { |
| x: Math.floor(Math.random() * 10), |
| y: Math.floor(Math.random() * 10) |
| }; |
| } while ( |
| (obstacle.x === robotPosition.x && obstacle.y === robotPosition.y) || |
| (obstacle.x === targetPosition.x && obstacle.y === targetPosition.y) || |
| obstacles.some(o => o.x === obstacle.x && o.y === obstacle.y) |
| ); |
| |
| obstacles.push(obstacle); |
| } |
| |
| |
| updateGameGrid(); |
| } |
| |
| function updateGameGrid() { |
| const cells = document.querySelectorAll('.game-cell'); |
| |
| cells.forEach(cell => { |
| cell.className = 'game-cell'; |
| const x = parseInt(cell.dataset.x); |
| const y = parseInt(cell.dataset.y); |
| |
| if (x === robotPosition.x && y === robotPosition.y) { |
| cell.classList.add('robot'); |
| } else if (x === targetPosition.x && y === targetPosition.y) { |
| cell.classList.add('target'); |
| } else if (obstacles.some(o => o.x === x && o.y === y)) { |
| cell.classList.add('obstacle'); |
| } |
| }); |
| } |
| |
| function moveRobot(direction) { |
| if (!gameRunning) return; |
| |
| let newX = robotPosition.x; |
| let newY = robotPosition.y; |
| |
| switch(direction) { |
| case 'forward': |
| newY = Math.max(0, robotPosition.y - 1); |
| break; |
| case 'backward': |
| newY = Math.min(9, robotPosition.y + 1); |
| break; |
| case 'left': |
| newX = Math.max(0, robotPosition.x - 1); |
| break; |
| case 'right': |
| newX = Math.min(9, robotPosition.x + 1); |
| break; |
| case 'stop': |
| |
| break; |
| } |
| |
| |
| const isObstacle = obstacles.some(o => o.x === newX && o.y === newY); |
| |
| if (!isObstacle || direction === 'stop') { |
| robotPosition.x = newX; |
| robotPosition.y = newY; |
| |
| |
| if (robotPosition.x === targetPosition.x && robotPosition.y === targetPosition.y) { |
| gameScore += 10; |
| gameScoreEl.textContent = `Score: ${gameScore}`; |
| |
| |
| do { |
| targetPosition = { |
| x: Math.floor(Math.random() * 10), |
| y: Math.floor(Math.random() * 10) |
| }; |
| } while ( |
| (targetPosition.x === robotPosition.x && targetPosition.y === robotPosition.y) || |
| obstacles.some(o => o.x === targetPosition.x && o.y === targetPosition.y) |
| ); |
| } |
| |
| updateGameGrid(); |
| } |
| } |
| |
| |
| updateRobotStatus(); |
| </script> |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=docto41/ttrun" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
| </html> |