Spaces:
Running
Running
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>OilRig Crew :: Terminal</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=Source+Code+Pro:wght@400;700&display=swap'); | |
:root { | |
--base03: #002b36; | |
--base02: #073642; | |
--base01: #586e75; | |
--base00: #657b83; | |
--base0: #839496; | |
--base1: #93a1a1; | |
--base2: #eee8d5; | |
--base3: #fdf6e3; | |
--yellow: #b58900; | |
--orange: #cb4b16; | |
--red: #dc322f; | |
--magenta: #d33682; | |
--violet: #6c71c4; | |
--blue: #268bd2; | |
--cyan: #2aa198; | |
--green: #859900; | |
} | |
body { | |
font-family: 'Source Code Pro', monospace; | |
background-color: var(--base03); | |
color: var(--base0); | |
overflow-x: hidden; | |
height: 100vh; | |
margin: 0; | |
padding: 0; | |
user-select: none; | |
} | |
.terminal { | |
background-color: var(--base02); | |
border: 1px solid var(--base01); | |
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); | |
border-radius: 5px; | |
height: 70vh; | |
min-height: 500px; | |
width: 80vw; | |
min-width: 800px; | |
margin: 0; | |
padding: 20px; | |
position: absolute; | |
overflow: hidden; | |
resize: both; | |
cursor: move; | |
} | |
.terminal-header { | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
margin-bottom: 15px; | |
border-bottom: 1px solid var(--base01); | |
padding-bottom: 10px; | |
cursor: move; | |
} | |
.terminal-title { | |
color: var(--cyan); | |
font-weight: bold; | |
font-size: 1.1rem; | |
} | |
.terminal-controls span { | |
display: inline-block; | |
width: 12px; | |
height: 12px; | |
border-radius: 50%; | |
margin-left: 5px; | |
cursor: pointer; | |
} | |
.control-close { background-color: var(--red); } | |
.control-minimize { background-color: var(--yellow); } | |
.control-maximize { background-color: var(--green); } | |
.prompt { | |
color: var(--green); | |
margin-right: 10px; | |
} | |
.cursor { | |
display: inline-block; | |
width: 10px; | |
height: 20px; | |
background-color: var(--base0); | |
animation: blink 1s infinite; | |
vertical-align: middle; | |
} | |
@keyframes blink { | |
0%, 100% { opacity: 1; } | |
50% { opacity: 0; } | |
} | |
.command { | |
color: var(--blue); | |
} | |
.output { | |
margin: 10px 0; | |
line-height: 1.5; | |
white-space: pre-wrap; | |
} | |
.ascii-art { | |
color: var(--cyan); | |
line-height: 1.2; | |
font-size: 0.6rem; | |
margin: 15px 0; | |
} | |
.link { | |
color: var(--blue); | |
text-decoration: underline; | |
cursor: pointer; | |
} | |
.link:hover { | |
color: var(--cyan); | |
} | |
.glitch { | |
position: relative; | |
} | |
.glitch::before, .glitch::after { | |
content: attr(data-text); | |
position: absolute; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
} | |
.glitch::before { | |
left: 2px; | |
text-shadow: -2px 0 var(--magenta); | |
clip: rect(24px, 550px, 90px, 0); | |
animation: glitch-anim-1 2s infinite linear alternate-reverse; | |
} | |
.glitch::after { | |
left: -2px; | |
text-shadow: -2px 0 var(--cyan); | |
clip: rect(85px, 550px, 140px, 0); | |
animation: glitch-anim-2 2s infinite linear alternate-reverse; | |
} | |
@keyframes glitch-anim-1 { | |
0% { clip: rect(32px, 9999px, 76px, 0); } | |
20% { clip: rect(108px, 9999px, 23px, 0); } | |
40% { clip: rect(91px, 9999px, 29px, 0); } | |
60% { clip: rect(98px, 9999px, 52px, 0); } | |
80% { clip: rect(60px, 9999px, 74px, 0); } | |
100% { clip: rect(38px, 9999px, 60px, 0); } | |
} | |
@keyframes glitch-anim-2 { | |
0% { clip: rect(65px, 9999px, 119px, 0); } | |
20% { clip: rect(25px, 9999px, 145px, 0); } | |
40% { clip: rect(50px, 9999px, 41px, 0); } | |
60% { clip: rect(30px, 9999px, 92px, 0); } | |
80% { clip: rect(82px, 9999px, 73px, 0); } | |
100% { clip: rect(60px, 9999px, 87px, 0); } | |
} | |
.scanlines { | |
position: absolute; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
background: linear-gradient( | |
to bottom, | |
rgba(0, 0, 0, 0.1) 0%, | |
rgba(0, 0, 0, 0.1) 50%, | |
transparent 50% | |
); | |
background-size: 100% 3px; | |
pointer-events: none; | |
z-index: 10; | |
} | |
.typing { | |
border-right: 2px solid var(--green); | |
animation: blink-caret 0.75s step-end infinite; | |
} | |
@keyframes blink-caret { | |
from, to { border-color: transparent; } | |
50% { border-color: var(--green); } | |
} | |
.resize-handle { | |
position: absolute; | |
right: 0; | |
bottom: 0; | |
width: 20px; | |
height: 20px; | |
background: var(--base01); | |
cursor: nwse-resize; | |
z-index: 20; | |
} | |
#background-grid { | |
position: fixed; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
background-image: | |
linear-gradient(var(--base01) 1px, transparent 1px), | |
linear-gradient(90deg, var(--base01) 1px, transparent 1px); | |
background-size: 40px 40px; | |
z-index: -1; | |
opacity: 0.2; | |
} | |
#watermark { | |
position: fixed; | |
bottom: 10px; | |
right: 10px; | |
color: var(--base01); | |
font-size: 0.8rem; | |
z-index: -1; | |
} | |
</style> | |
</head> | |
<body> | |
<div id="background-grid"></div> | |
<div id="watermark">OILRIG TERMINAL v2.4.1</div> | |
<div class="terminal" id="terminal-window"> | |
<div class="scanlines"></div> | |
<div class="terminal-header" id="terminal-header"> | |
<div class="terminal-title">OilRig Crew Terminal v2.4.1</div> | |
<div class="terminal-controls"> | |
<span class="control-close" id="control-close"></span> | |
<span class="control-minimize" id="control-minimize"></span> | |
<span class="control-maximize" id="control-maximize"></span> | |
</div> | |
</div> | |
<div class="ascii-art"> | |
<pre> | |
___ _ _ _ ____ ___ _____ | |
/ _ \ | | | || | | _ \ / _ \ |_ _| | |
| | | || | | || | | |_) | | | | | | | |
| | | || | | || |___ | _ <| |_| | | | | |
\___/ |_| |_||_____||_| \_\\___/ |_| | |
</pre> | |
</div> | |
<div class="output"> | |
<span class="text-yellow-400">SYSTEM INITIALIZED</span> - Solaris OS v4.2.1<br> | |
<span class="text-green-400">SECURE CONNECTION ESTABLISHED</span> - AES-256 Encrypted<br> | |
<span class="text-blue-400">REMOTE ACCESS GRANTED</span> - Welcome back, Operator<br><br> | |
<span class="text-cyan-400">OilRig Crew Manifest v2.0</span><br> | |
------------------------------<br> | |
<span class="text-green-400">> </span>Deep Sea Operations<br> | |
<span class="text-green-400">> </span>Offshore Drilling<br> | |
<span class="text-green-400">> </span>Subsurface Exploration<br> | |
<span class="text-green-400">> </span>Resource Extraction<br> | |
<span class="text-green-400">> </span>Black Site Maintenance<br><br> | |
<span class="text-red-400">WARNING:</span> Unauthorized access will be met with immediate countermeasures.<br> | |
All activities are logged and monitored by <span class="glitch" data-text="OVERWATCH">OVERWATCH</span>.<br><br> | |
Type <span class="command">help</span> for available commands. | |
</div> | |
<div class="input-line flex items-center"> | |
<span class="prompt">[root@oilrig ~]#</span> | |
<input type="text" id="command-input" class="bg-transparent border-none outline-none flex-grow text-green-400" autofocus> | |
<span class="cursor"></span> | |
</div> | |
<div id="output-container" class="overflow-y-auto max-h-[40vh]"></div> | |
<div class="resize-handle" id="resize-handle"></div> | |
</div> | |
<script> | |
document.addEventListener('DOMContentLoaded', function() { | |
const terminal = document.getElementById('terminal-window'); | |
const terminalHeader = document.getElementById('terminal-header'); | |
const commandInput = document.getElementById('command-input'); | |
const outputContainer = document.getElementById('output-container'); | |
const closeBtn = document.getElementById('control-close'); | |
const minimizeBtn = document.getElementById('control-minimize'); | |
const maximizeBtn = document.getElementById('control-maximize'); | |
const resizeHandle = document.getElementById('resize-handle'); | |
// Make terminal draggable | |
let isDragging = false; | |
let offsetX, offsetY; | |
terminalHeader.addEventListener('mousedown', function(e) { | |
if (e.target === terminalHeader || e.target.classList.contains('terminal-title')) { | |
isDragging = true; | |
offsetX = e.clientX - terminal.getBoundingClientRect().left; | |
offsetY = e.clientY - terminal.getBoundingClientRect().top; | |
terminal.style.cursor = 'grabbing'; | |
} | |
}); | |
document.addEventListener('mousemove', function(e) { | |
if (!isDragging) return; | |
const x = e.clientX - offsetX; | |
const y = e.clientY - offsetY; | |
// Keep terminal within viewport | |
const maxX = window.innerWidth - terminal.offsetWidth; | |
const maxY = window.innerHeight - terminal.offsetHeight; | |
terminal.style.left = Math.min(Math.max(0, x), maxX) + 'px'; | |
terminal.style.top = Math.min(Math.max(0, y), maxY) + 'px'; | |
}); | |
document.addEventListener('mouseup', function() { | |
isDragging = false; | |
terminal.style.cursor = 'move'; | |
}); | |
// Make terminal resizable | |
let isResizing = false; | |
resizeHandle.addEventListener('mousedown', function(e) { | |
isResizing = true; | |
e.preventDefault(); | |
}); | |
document.addEventListener('mousemove', function(e) { | |
if (!isResizing) return; | |
const width = e.clientX - terminal.getBoundingClientRect().left; | |
const height = e.clientY - terminal.getBoundingClientRect().top; | |
terminal.style.width = Math.max(600, width) + 'px'; | |
terminal.style.height = Math.max(400, height) + 'px'; | |
// Adjust output container height | |
outputContainer.style.maxHeight = (parseInt(terminal.style.height) - 300) + 'px'; | |
}); | |
document.addEventListener('mouseup', function() { | |
isResizing = false; | |
}); | |
// Terminal controls | |
closeBtn.addEventListener('click', function() { | |
terminal.style.transform = 'scale(0.8)'; | |
terminal.style.opacity = '0'; | |
setTimeout(() => { | |
terminal.style.display = 'none'; | |
document.body.style.backgroundColor = 'var(--base03)'; | |
document.body.innerHTML = '<div class="text-center text-red-400 text-2xl mt-20">TERMINAL DISCONNECTED</div>'; | |
}, 300); | |
}); | |
minimizeBtn.addEventListener('click', function() { | |
terminal.style.transform = 'scale(0.9)'; | |
terminal.style.opacity = '0.5'; | |
setTimeout(() => { | |
terminal.style.display = 'none'; | |
setTimeout(() => { | |
terminal.style.display = 'block'; | |
terminal.style.transform = 'scale(1)'; | |
terminal.style.opacity = '1'; | |
}, 1000); | |
}, 300); | |
}); | |
maximizeBtn.addEventListener('click', function() { | |
if (terminal.style.width === '90vw' && terminal.style.height === '90vh') { | |
terminal.style.width = '80vw'; | |
terminal.style.height = '70vh'; | |
terminal.style.left = '10vw'; | |
terminal.style.top = '15vh'; | |
} else { | |
terminal.style.width = '90vw'; | |
terminal.style.height = '90vh'; | |
terminal.style.left = '5vw'; | |
terminal.style.top = '5vh'; | |
} | |
outputContainer.style.maxHeight = (parseInt(terminal.style.height) - 300) + 'px'; | |
}); | |
// Position terminal initially | |
terminal.style.left = '10vw'; | |
terminal.style.top = '15vh'; | |
// Command processing | |
const commands = { | |
'help': 'Available commands: about, crew, projects, contact, clear, status, map, login, panic', | |
'about': 'OilRig Crew - Specialized in deep sea operations and resource extraction. Established 2008.', | |
'crew': 'Crew Members:\n- CAPTAIN: ββββββββ\n- ENGINEER: βββββ\n- GEOLOGIST: βββββββ\n- DIVER: ββββββββ\n- SYSTEMS: ββββββββ\n\n[ACCESS RESTRICTED]', | |
'projects': 'Active Projects:\n1. Project DEEPWELL (Status: Operational)\n2. Project BLACKTIDE (Status: Classified)\n3. Project SUNKEN (Status: In Development)\n\nType "projects [id]" for details', | |
'contact': 'Secure comms only. Use encrypted channels.\nFrequency: 147.870MHz\nEncryption Key: ORC-ββββ-2023', | |
'clear': function() { outputContainer.innerHTML = ''; }, | |
'projects 1': 'Project DEEPWELL:\nLocation: ββββββββββββ\nDepth: 2,450m\nPurpose: Resource extraction\nStatus: Operational\n\n[FURTHER DETAILS CLASSIFIED]', | |
'projects 2': 'Project BLACKTIDE:\n[ACCESS DENIED]\nClearance level required: ORANGE-5', | |
'projects 3': 'Project SUNKEN:\nExperimental deep-sea habitat\nPhase: Testing\nETA: Q4 2023\n\n[LOGS CORRUPTED]', | |
'login': 'Already authenticated via secure channel.\nUser: OPERATOR\nAccess Level: 3\nPermissions: Read/Write', | |
'status': 'System Status:\n- Power: 98%\n- Pressure: Stable\n- Comms: Encrypted\n- Security: Active\n\nAll systems nominal.', | |
'map': 'Generating location map...\n\nββββββββββββββββββββ\nββββ YOU ARE HERE ββββ\nββββββββββββββββββββ\n\nCoordinates encrypted.', | |
'panic': function() { | |
outputContainer.innerHTML += '<div class="output text-red-400">EMERGENCY PROTOCOL INITIATED</div>'; | |
outputContainer.innerHTML += '<div class="output text-red-400">PURGING DATA...</div>'; | |
setTimeout(() => { | |
outputContainer.innerHTML += '<div class="output text-red-400">TERMINAL LOCKED</div>'; | |
commandInput.disabled = true; | |
document.body.classList.add('bg-red-900'); | |
setTimeout(() => { | |
outputContainer.innerHTML += '<div class="output text-yellow-400">SYSTEM REBOOTING...</div>'; | |
setTimeout(() => { | |
location.reload(); | |
}, 2000); | |
}, 2000); | |
}, 1500); | |
}, | |
'echo': function(args) { | |
return args.join(' '); | |
}, | |
'date': function() { | |
return new Date().toLocaleString(); | |
}, | |
'whoami': 'operator', | |
'uname': 'Solaris 4.2.1', | |
'ls': 'bin/ etc/ home/ logs/ projects/ secure/ tmp/', | |
'cd': 'Directory change not permitted in secure terminal.', | |
'sudo': 'Access denied. Insufficient privileges.', | |
'exit': 'Terminal session cannot be closed from within. Use physical disconnect.' | |
}; | |
commandInput.addEventListener('keypress', function(e) { | |
if (e.key === 'Enter') { | |
const input = commandInput.value.trim(); | |
commandInput.value = ''; | |
// Display the command | |
outputContainer.innerHTML += ` | |
<div class="input-line flex items-center"> | |
<span class="prompt">[root@oilrig ~]#</span> | |
<span class="command">${input}</span> | |
</div> | |
`; | |
// Process the command | |
const parts = input.split(' '); | |
const cmd = parts[0].toLowerCase(); | |
const args = parts.slice(1); | |
let response = 'Command not recognized. Type "help" for available commands.'; | |
if (commands.hasOwnProperty(cmd)) { | |
if (typeof commands[cmd] === 'function') { | |
response = commands[cmd](args); | |
} else { | |
response = commands[cmd]; | |
} | |
} | |
// Special Easter eggs | |
if (cmd === 'hello') { | |
response = '01001000 01100101 01101100 01101100 01101111 00100000 01110111 01101111 01110010 01101100 01100100'; | |
} | |
if (cmd === 'matrix') { | |
response = 'Wake up, Operator...'; | |
document.body.classList.add('bg-green-900'); | |
setTimeout(() => { | |
document.body.classList.remove('bg-green-900'); | |
}, 1000); | |
} | |
if (cmd === 'reboot') { | |
response = 'Initiating system reboot sequence...'; | |
setTimeout(() => { | |
location.reload(); | |
}, 2000); | |
} | |
// Display the response | |
outputContainer.innerHTML += `<div class="output">${response.replace(/\n/g, '<br>')}</div>`; | |
// Scroll to bottom | |
outputContainer.scrollTop = outputContainer.scrollHeight; | |
} | |
}); | |
// Initial animation | |
setTimeout(() => { | |
outputContainer.innerHTML += ` | |
<div class="output"> | |
<span class="text-cyan-400">System Diagnostics:</span><br> | |
<span class="text-green-400">></span> Memory: 78% available<br> | |
<span class="text-green-400">></span> Storage: 42% utilized<br> | |
<span class="text-green-400">></span> Network: 5 active connections<br> | |
<span class="text-green-400">></span> Security: Firewall active<br> | |
<span class="text-green-400">></span> Sensors: All nominal<br><br> | |
<span class="text-yellow-400">Last system update: 24 hours ago</span><br> | |
<span class="text-blue-400">Next maintenance window: 48 hours</span> | |
</div> | |
`; | |
outputContainer.scrollTop = outputContainer.scrollHeight; | |
}, 1000); | |
// Focus input when clicking anywhere in terminal | |
terminal.addEventListener('click', function() { | |
commandInput.focus(); | |
}); | |
}); | |
</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=gladiopeace/my-generic-space" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
</html> |