shellgod.icu/index1.html

308 lines
7.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>shellgod.icu</title>
<link href="https://cdn.jsdelivr.net/npm/@fontsource/fira-code@5.1.0/400.min.css" rel="stylesheet">
<style>
:root {
--bg: #050c05;
--panel-bg: #0e150c;
--border: #00e639;
--text: #00e639;
--text-dim: #ffffff;
--text-bright: #00ff99;
--gray: #a9d0b4;
--font: 'Fira Code', 'Courier New', monospace;
--glow: 0 0 8px rgba(0, 255, 65, 0.25);
--radius: 10px;
--transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
background: var(--bg);
color: var(--text);
font-family: var(--font);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 24px;
line-height: 1.5;
< !-- text-transform: uppercase;
-->
}
.layout {
width: 100%;
max-width: 680px;
display: flex;
flex-direction: column;
gap: 16px;
}
/* Base Panel Style */
.panel {
background: var(--panel-bg);
border-radius: var(--radius);
border-color: var(--bg);
padding: 20px;
position: relative;
transition: border-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
/* Animation Initial State */
opacity: 0;
transform: translateY(20px);
animation: panelFadeIn 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}
/* Staggered Animation Delays */
.panel:first-child {
animation-delay: 0.1s;
}
.contact-panel {
animation-delay: 0.3s;
}
/* Unified hover effect for both .panel and .contact-panel */
.panel:hover {
border-color: var(--text-bright);
box-shadow: 0 0 12px rgba(0, 230, 57, 0.3);
color: var(--text-bright);
}
.prompt {
font-size: 0.9rem;
margin-bottom: 18px;
color: var(--text);
letter-spacing: 0.5px;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
transition: color 0.3s ease;
}
.cursor {
display: inline-block;
width: 8px;
height: 1em;
background: var(--text);
margin-left: 4px;
animation: blink 1s step-end infinite;
transition: background-color 0.3s ease;
}
.panel:hover .cursor {
background-color: var(--text-bright);
}
@keyframes blink {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
@keyframes panelFadeIn {
to {
opacity: 1;
transform: translateY(0);
}
}
.section-title {
font-size: 0.75rem;
color: var(--text-dim);
margin-bottom: 14px;
padding-left: 2px;
letter-spacing: 2px;
border-left: 0px solid var(--text-dim);
}
.links {
display: grid;
gap: 8px;
}
.link {
display: flex;
align-items: center;
padding: 10px 12px;
background: rgba(0, 255, 65, 0.02);
border: 0px solid rgba(0, 255, 65, 0.08);
border-radius: var(--radius);
color: var(--text);
text-decoration: none;
transition: var(--transition);
position: relative;
overflow: hidden;
}
.link::before {
content: '>';
margin-right: 10px;
color: var(--text-dim);
font-weight: bold;
transition: var(--transition);
}
.link:hover {
background: rgba(0, 255, 65, 0.08);
border-color: var(--text);
transform: translateX(4px);
}
.link:hover::before {
color: var(--text-bright);
}
.link:focus-visible {
outline: 2px solid var(--text-bright);
outline-offset: 2px;
}
.label {
font-weight: 500;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.url {
margin-left: auto;
color: var(--gray);
font-size: 0.75rem;
white-space: nowrap;
padding-left: 8px;
transition: var(--transition);
}
.link:hover .url {
color: var(--text-dim);
}
.contact-panel .prompt {
margin-bottom: 14px;
}
/* Hide URLs specifically in the contacts panel */
.contact-panel .url {
display: none;
}
.footer {
text-align: center;
font-size: 0.7rem;
color: #a9d0b4;
margin-top: 8px;
letter-spacing: 1px;
}
@media (max-width: 600px) {
body {
padding: 16px;
}
.panel {
padding: 16px;
}
.url {
display: none;
}
.prompt {
font-size: 0.85rem;
}
}
</style>
</head>
<body>
<div class="layout">
<!-- Services Panel -->
<div class="panel">
<div class="prompt"> bx ~/scr/welcome.sh<span class="cursor"></span></div>
<div class="links" id="services-container"></div>
</div>
<!-- Contacts Panel -->
<div class="panel contact-panel">
<div class="prompt"> ls ~/contacts </div>
<div class="links" id="contacts-container"></div>
</div>
<div class="footer">
shellgod.icu &bull; <span id="year"></span> &bull; all systems operational
</div>
</div>
<script>
(function () {
document.getElementById('year').textContent = new Date().getFullYear();
const services = [
{label: "lbnt.wiki", url: "https://wiki.lbnt.shellgod.icu"},
{label: "file sharing", url: "https://files.shellgod.icu"},
{label: "git server", url: "https://git.shellgod.icu"},
{label: "search without spying", url: "https://search.shellgod.icu/"},
{label: "draw ur thinking", url: "https://exdw.shellgod.icu/"},
{label: "download videos", url: "https://svvd.shellgod.icu/"}
];
const contacts = [
{label: "text me via simplex", url: "https://smp8.simplex.im/a#fLY8c1DUreljqVyoZ1kFU6CTIEz4FlOClUw6739Kye4"},
{label: "text me via matrix", url: "https://matrix.to/#/@shellgod:shellgod.icu"},
{label: "my matrix channel", url: "https://matrix.to/#/#frikinlarpin:shellgod.icu"},
{label: "register on matrix server", url: "https://app.element.io/#/register"}
];
function createLink(item, index, baseDelay) {
const a = document.createElement('a');
a.href = item.url;
a.target = "_blank";
a.rel = "noopener noreferrer";
a.className = "link fade-in";
a.style.animationDelay = `${baseDelay + (index * 70)}ms`;
a.style.opacity = '0'; // Start hidden for JS animation
a.style.transform = 'translateY(10px)';
a.style.transition = `opacity 0.4s ease ${baseDelay + (index * 70)}ms, transform 0.4s ease ${baseDelay + (index * 70)}ms`;
// Trigger reflow or use timeout to apply transition
setTimeout(() => {
a.style.opacity = '1';
a.style.transform = 'translateY(0)';
}, 50);
const domain = item.url.replace(/^https?:\/\//, '').replace(/\/$/, '');
a.innerHTML = `<span class="label">${item.label}</span><span class="url">${domain}</span>`;
return a;
}
const svcContainer = document.getElementById('services-container');
const contactContainer = document.getElementById('contacts-container');
// Adjust base delays to match panel entrance
services.forEach((s, i) => svcContainer.appendChild(createLink(s, i, 300)));
contacts.forEach((c, i) => contactContainer.appendChild(createLink(c, i, 600)));
})();
</script>
</body>
</html>