add formatting
This commit is contained in:
+570
-455
File diff suppressed because it is too large
Load Diff
+79
-79
@@ -78,7 +78,7 @@ function createServerRack() {
|
||||
|
||||
const isSwitch = i > 0 && (i % 7 === 0 || i % 11 === 0);
|
||||
|
||||
if (isSwitch) {
|
||||
if (isSwitch) {
|
||||
const switchFace = document.createElement('div');
|
||||
switchFace.className = 'eth-switch-face';
|
||||
|
||||
@@ -273,99 +273,99 @@ function createServerRack() {
|
||||
content.innerHTML = '';
|
||||
}
|
||||
|
||||
if (cmdText === 'exit') {
|
||||
if (!isRoot) {
|
||||
const newAchievements = checkAchievements(cmdText, false);
|
||||
if (newAchievements.length > 0) {
|
||||
revealAchievements();
|
||||
newAchievements.forEach(a => showToast(a));
|
||||
}
|
||||
if (cmdText === 'exit') {
|
||||
if (!isRoot) {
|
||||
const newAchievements = checkAchievements(cmdText, false);
|
||||
if (newAchievements.length > 0) {
|
||||
revealAchievements();
|
||||
newAchievements.forEach(a => showToast(a));
|
||||
}
|
||||
|
||||
isLoginScreen = true;
|
||||
document.body.innerHTML = '';
|
||||
document.body.style.background = '#000';
|
||||
document.body.style.color = '#fff';
|
||||
document.body.style.fontFamily = 'monospace';
|
||||
document.body.style.padding = '20px';
|
||||
document.body.style.minHeight = '100vh';
|
||||
document.body.style.margin = '0';
|
||||
document.body.style.lineHeight = '1.6';
|
||||
isLoginScreen = true;
|
||||
document.body.innerHTML = '';
|
||||
document.body.style.background = '#000';
|
||||
document.body.style.color = '#fff';
|
||||
document.body.style.fontFamily = 'monospace';
|
||||
document.body.style.padding = '20px';
|
||||
document.body.style.minHeight = '100vh';
|
||||
document.body.style.margin = '0';
|
||||
document.body.style.lineHeight = '1.6';
|
||||
|
||||
const loginContainer = document.createElement('div');
|
||||
loginContainer.style.marginBottom = '10px';
|
||||
loginContainer.textContent = 'homelab tty1';
|
||||
document.body.appendChild(loginContainer);
|
||||
const loginContainer = document.createElement('div');
|
||||
loginContainer.style.marginBottom = '10px';
|
||||
loginContainer.textContent = 'homelab tty1';
|
||||
document.body.appendChild(loginContainer);
|
||||
|
||||
const loginInput = document.createElement('input');
|
||||
loginInput.type = 'text';
|
||||
loginInput.style.background = 'transparent';
|
||||
loginInput.style.border = 'none';
|
||||
loginInput.style.outline = 'none';
|
||||
loginInput.style.color = '#fff';
|
||||
loginInput.style.fontFamily = 'monospace';
|
||||
loginInput.style.fontSize = '14px';
|
||||
loginInput.style.width = '300px';
|
||||
loginInput.style.caretColor = '#fff';
|
||||
loginInput.autofocus = true;
|
||||
const loginInput = document.createElement('input');
|
||||
loginInput.type = 'text';
|
||||
loginInput.style.background = 'transparent';
|
||||
loginInput.style.border = 'none';
|
||||
loginInput.style.outline = 'none';
|
||||
loginInput.style.color = '#fff';
|
||||
loginInput.style.fontFamily = 'monospace';
|
||||
loginInput.style.fontSize = '14px';
|
||||
loginInput.style.width = '300px';
|
||||
loginInput.style.caretColor = '#fff';
|
||||
loginInput.autofocus = true;
|
||||
|
||||
const loginLine = document.createElement('div');
|
||||
loginLine.style.marginBottom = '20px';
|
||||
loginLine.appendChild(document.createTextNode('homelab login: '));
|
||||
loginLine.appendChild(loginInput);
|
||||
const loginLine = document.createElement('div');
|
||||
loginLine.style.marginBottom = '20px';
|
||||
loginLine.appendChild(document.createTextNode('homelab login: '));
|
||||
loginLine.appendChild(loginInput);
|
||||
|
||||
document.body.appendChild(loginLine);
|
||||
document.body.appendChild(loginLine);
|
||||
|
||||
loginInput.focus();
|
||||
loginInput.focus();
|
||||
|
||||
const handleLogin = (e) => {
|
||||
if (e.key === 'Enter') {
|
||||
const deniedLine = document.createElement('div');
|
||||
deniedLine.textContent = 'Access denied';
|
||||
deniedLine.style.marginTop = '10px';
|
||||
document.body.appendChild(deniedLine);
|
||||
const handleLogin = (e) => {
|
||||
if (e.key === 'Enter') {
|
||||
const deniedLine = document.createElement('div');
|
||||
deniedLine.textContent = 'Access denied';
|
||||
deniedLine.style.marginTop = '10px';
|
||||
document.body.appendChild(deniedLine);
|
||||
|
||||
const newLoginLine = document.createElement('div');
|
||||
newLoginLine.style.marginTop = '10px';
|
||||
const newInput = document.createElement('input');
|
||||
newInput.type = 'text';
|
||||
newInput.style.background = 'transparent';
|
||||
newInput.style.border = 'none';
|
||||
newInput.style.outline = 'none';
|
||||
newInput.style.color = '#fff';
|
||||
newInput.style.fontFamily = 'monospace';
|
||||
newInput.style.fontSize = '14px';
|
||||
newInput.style.width = '300px';
|
||||
newInput.style.caretColor = '#fff';
|
||||
newInput.autofocus = true;
|
||||
newLoginLine.appendChild(document.createTextNode('homelab login: '));
|
||||
newLoginLine.appendChild(newInput);
|
||||
const newLoginLine = document.createElement('div');
|
||||
newLoginLine.style.marginTop = '10px';
|
||||
const newInput = document.createElement('input');
|
||||
newInput.type = 'text';
|
||||
newInput.style.background = 'transparent';
|
||||
newInput.style.border = 'none';
|
||||
newInput.style.outline = 'none';
|
||||
newInput.style.color = '#fff';
|
||||
newInput.style.fontFamily = 'monospace';
|
||||
newInput.style.fontSize = '14px';
|
||||
newInput.style.width = '300px';
|
||||
newInput.style.caretColor = '#fff';
|
||||
newInput.autofocus = true;
|
||||
newLoginLine.appendChild(document.createTextNode('homelab login: '));
|
||||
newLoginLine.appendChild(newInput);
|
||||
|
||||
document.body.appendChild(newLoginLine);
|
||||
document.body.appendChild(newLoginLine);
|
||||
|
||||
loginInput.remove();
|
||||
newInput.focus();
|
||||
loginInput.remove();
|
||||
newInput.focus();
|
||||
|
||||
newInput.addEventListener('keydown', handleLogin);
|
||||
}
|
||||
};
|
||||
newInput.addEventListener('keydown', handleLogin);
|
||||
}
|
||||
};
|
||||
|
||||
loginInput.addEventListener('keydown', handleLogin);
|
||||
loginInput.addEventListener('keydown', handleLogin);
|
||||
|
||||
return;
|
||||
} else {
|
||||
isRoot = false;
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
isRoot = false;
|
||||
}
|
||||
|
||||
const newLine = document.createElement('div');
|
||||
newLine.innerHTML = '<span class="terminal-prompt">$</span> ';
|
||||
content.appendChild(newLine);
|
||||
const newCursor = document.createElement('span');
|
||||
newCursor.className = 'terminal-cursor';
|
||||
newLine.appendChild(newCursor);
|
||||
content.scrollTop = content.scrollHeight;
|
||||
const newLine = document.createElement('div');
|
||||
newLine.innerHTML = '<span class="terminal-prompt">$</span> ';
|
||||
content.appendChild(newLine);
|
||||
const newCursor = document.createElement('span');
|
||||
newCursor.className = 'terminal-cursor';
|
||||
newLine.appendChild(newCursor);
|
||||
content.scrollTop = content.scrollHeight;
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (cmdText === 'rm -rf /') {
|
||||
if (!isRoot) {
|
||||
|
||||
+139
-45
@@ -1,4 +1,6 @@
|
||||
*, *::before, *::after {
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
@@ -225,13 +227,11 @@ body {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: repeating-linear-gradient(
|
||||
0deg,
|
||||
transparent,
|
||||
transparent 2px,
|
||||
rgba(0, 0, 0, 0.15) 2px,
|
||||
rgba(0, 0, 0, 0.15) 4px
|
||||
);
|
||||
background: repeating-linear-gradient(0deg,
|
||||
transparent,
|
||||
transparent 2px,
|
||||
rgba(0, 0, 0, 0.15) 2px,
|
||||
rgba(0, 0, 0, 0.15) 4px);
|
||||
z-index: 1;
|
||||
pointer-events: none;
|
||||
}
|
||||
@@ -270,8 +270,15 @@ body {
|
||||
}
|
||||
|
||||
@keyframes cursorBlink {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0; }
|
||||
|
||||
0%,
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.eth-brand {
|
||||
@@ -506,8 +513,13 @@ body {
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
.fan-slow {
|
||||
@@ -572,25 +584,59 @@ body {
|
||||
}
|
||||
|
||||
@keyframes blink1 {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.2; }
|
||||
|
||||
0%,
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 0.2;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes blink2 {
|
||||
0%, 100% { opacity: 0.3; }
|
||||
50% { opacity: 1; }
|
||||
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes blink3 {
|
||||
0%, 100% { opacity: 1; }
|
||||
30% { opacity: 0.1; }
|
||||
60% { opacity: 0.8; }
|
||||
|
||||
0%,
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
30% {
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
60% {
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes blink4 {
|
||||
0%, 100% { opacity: 0.5; }
|
||||
25% { opacity: 1; }
|
||||
75% { opacity: 0.2; }
|
||||
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
25% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
75% {
|
||||
opacity: 0.2;
|
||||
}
|
||||
}
|
||||
|
||||
.rack-mount {
|
||||
@@ -649,13 +695,11 @@ body {
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: repeating-linear-gradient(
|
||||
180deg,
|
||||
transparent,
|
||||
transparent 20px,
|
||||
rgba(0, 0, 0, 0.3) 20px,
|
||||
rgba(0, 0, 0, 0.3) 21px
|
||||
);
|
||||
background: repeating-linear-gradient(180deg,
|
||||
transparent,
|
||||
transparent 20px,
|
||||
rgba(0, 0, 0, 0.3) 20px,
|
||||
rgba(0, 0, 0, 0.3) 21px);
|
||||
}
|
||||
|
||||
.rack-label {
|
||||
@@ -808,8 +852,15 @@ nav .nav-inner {
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.4; }
|
||||
|
||||
0%,
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
@@ -1234,12 +1285,30 @@ section {
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.code-keyword { color: #c084fc; }
|
||||
.code-function { color: #60a5fa; }
|
||||
.code-string { color: #34d399; }
|
||||
.code-comment { color: #52525b; font-style: italic; }
|
||||
.code-variable { color: #f472b6; }
|
||||
.code-operator { color: #fbbf24; }
|
||||
.code-keyword {
|
||||
color: #c084fc;
|
||||
}
|
||||
|
||||
.code-function {
|
||||
color: #60a5fa;
|
||||
}
|
||||
|
||||
.code-string {
|
||||
color: #34d399;
|
||||
}
|
||||
|
||||
.code-comment {
|
||||
color: #52525b;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.code-variable {
|
||||
color: #f472b6;
|
||||
}
|
||||
|
||||
.code-operator {
|
||||
color: #fbbf24;
|
||||
}
|
||||
|
||||
.project-info {
|
||||
padding: 1.5rem;
|
||||
@@ -1625,6 +1694,7 @@ footer p {
|
||||
opacity: 0;
|
||||
transform: translateX(100px) scale(0.9);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateX(0) scale(1);
|
||||
@@ -1636,6 +1706,7 @@ footer p {
|
||||
opacity: 1;
|
||||
transform: translateX(0) scale(1);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: translateX(100px) scale(0.9);
|
||||
@@ -1679,14 +1750,37 @@ footer p {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.nav-links.active li:nth-child(1) { transition-delay: 0.05s; }
|
||||
.nav-links.active li:nth-child(2) { transition-delay: 0.1s; }
|
||||
.nav-links.active li:nth-child(3) { transition-delay: 0.15s; }
|
||||
.nav-links.active li:nth-child(4) { transition-delay: 0.2s; }
|
||||
.nav-links.active li:nth-child(5) { transition-delay: 0.25s; }
|
||||
.nav-links.active li:nth-child(6) { transition-delay: 0.3s; }
|
||||
.nav-links.active li:nth-child(7) { transition-delay: 0.35s; }
|
||||
.nav-links.active li:nth-child(8) { transition-delay: 0.4s; }
|
||||
.nav-links.active li:nth-child(1) {
|
||||
transition-delay: 0.05s;
|
||||
}
|
||||
|
||||
.nav-links.active li:nth-child(2) {
|
||||
transition-delay: 0.1s;
|
||||
}
|
||||
|
||||
.nav-links.active li:nth-child(3) {
|
||||
transition-delay: 0.15s;
|
||||
}
|
||||
|
||||
.nav-links.active li:nth-child(4) {
|
||||
transition-delay: 0.2s;
|
||||
}
|
||||
|
||||
.nav-links.active li:nth-child(5) {
|
||||
transition-delay: 0.25s;
|
||||
}
|
||||
|
||||
.nav-links.active li:nth-child(6) {
|
||||
transition-delay: 0.3s;
|
||||
}
|
||||
|
||||
.nav-links.active li:nth-child(7) {
|
||||
transition-delay: 0.35s;
|
||||
}
|
||||
|
||||
.nav-links.active li:nth-child(8) {
|
||||
transition-delay: 0.4s;
|
||||
}
|
||||
|
||||
.hamburger {
|
||||
display: flex;
|
||||
|
||||
Reference in New Issue
Block a user