html, body {
margin: 0; padding: 0;
min-height: 100%;
background: #0e0e0e;
color: #e0e0e0;
font-family: "Fira Code", monospace;
overflow-x: hidden;
overflow-y: auto;
}
#lang-switch {
position: fixed;
top: 1rem;
right: 1rem;
background: rgba(26,26,26,0.8);
border: none;
color: #ccc;
padding: 0.5rem;
cursor: pointer;
border-radius: 6px;
z-index: 20;
}
canvas#bg {
position: fixed; top: 0; left: 0;
width: 100%; height: 100%; z-index: 0;
}
.banner {
position: relative;
margin: 0 auto;
left: 0; right: 0;
background: rgba(26,26,26,0.8);
border-radius: 0 0 12px 12px;
padding: 1rem;
text-align: center;
z-index: 10;
max-width: 1000px;
}
.banner p {
margin: 0.25rem 0;
font-size: 0.8em;
color: #ccc;
}
.hero-content {
position: relative;
z-index: 2;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
width: 100%;
max-width: 1000px;
padding: 0 1rem 4rem 1rem;
box-sizing: border-box;
margin: -4rem auto 0 auto;
}
.button {
margin-top: 2.5rem;
background: transparent;
color: #00ff90;
border: 2px solid #00ff90;
padding: 0.75rem 1.5rem;
font-weight: bold;
cursor: pointer;
border-radius: 8px;
z-index: 2;
transition: all 0.3s ease;
}
.button:hover {
background: #00ff90;
color: #000;
transform: scale(1.05);
box-shadow: 0 0 10px #00ff90aa;
}
.prompt {
font-size: 1.2em; color: #00ff90;
margin: 1rem 0;
}
.desktop-sim {
margin: 2rem auto 0 auto;
width: 100%;
max-width: 960px;
height: 540px;
background: #000 url('kali-linux-wallpaper-v5.png') center center no-repeat;
background-size: contain;
border: 2px solid #333;
border-radius: 12px;
position: relative;
overflow: hidden;
box-shadow: 0 10px 30px rgba(0,0,0,0.8);
display: flex;
flex-direction: column;
}
/* =========================
Overlay de “Recovering Session…”
========================= */
#load-overlay {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
background: rgba(0,0,0,1);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: #00ff90;
font-family: "Fira Code", monospace;
font-size: 1.2em;
z-index: 20;
}
/* =========================
Overlay de “Logging in…” (login-overlay)
========================= */
#login-overlay {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
backdrop-filter: blur(6px);
background: rgba(0, 0, 0, 0.4);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: #00ff90;
font-family: "Fira Code", monospace;
font-size: 1.2em;
z-index: 20;
}
/* Clases para spinner */
@keyframes spin {
to { transform: rotate(360deg); }
}
.spinner {
width: 40px;
height: 40px;
border: 4px solid rgba(0, 255, 144, 0.3);
border-top-color: #00ff90;
border-radius: 50%;
animation: spin 1s linear infinite;
}
.taskbar {
background: #1a1a1a;
height: 32px;
line-height: 32px;
color: #ccc;
font-size: 0.85em;
padding: 0 1rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.taskbar img {
width: 14px;
height: 14px;
object-fit: contain;
}
.icons-area {
position: absolute;
bottom: 1rem;
width: 100%;
display: flex;
justify-content: center;
gap: 2rem;
}
.app-icon {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
width: 64px;
padding: 0.5rem;
border-radius: 12px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
transition: transform 0.15s ease;
overflow: hidden;
}
.app-icon:hover {
transform: translateY(-2px);
}
.app-icon img {
width: 48px;
height: 48px;
border-radius: 8px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
}
.app-icon::before {
content: "";
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
border-radius: 12px;
background:
linear-gradient(
145deg,
rgba(255, 255, 255, 0.06) 0%,
rgba(255, 255, 255, 0.02) 50%,
rgba(255, 255, 255, 0.06) 100%
);
opacity: 0;
pointer-events: none;
transition: opacity 0.2s ease;
}
.app-icon:hover::before {
opacity: 1;
}
.app-label {
margin-top: 0.25rem;
font-size: 0.7em;
color: #ccc;
text-align: center;
}
.window {
background: rgba(28,28,28,0.7);
border-radius: 16px;
position: absolute;
display: none;
flex-direction: column;
box-shadow: 0 8px 24px rgba(0,0,0,0.8);
z-index: 5;
overflow: hidden;
}
.terminal-window,
.nmap-window,
.social-window {
width: 80%;
max-width: 520px;
height: 260px;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
box-sizing: border-box;
font-size: 0.85em;
padding: 0;
}
.terminal-header {
display: flex;
align-items: center;
padding: 0.5rem;
background: #2a2a2a;
border-top-left-radius: 16px;
border-top-right-radius: 16px;
justify-content: flex-start;
gap: 0.5rem;
cursor: move;
position: relative;
}
.terminal-header .circle {
width: 12px; height: 12px;
border-radius: 50%;
cursor: pointer !important;
transition: filter 0.2s ease, box-shadow 0.2s ease;
}
.terminal-header .circle:hover {
filter: brightness(1.3);
box-shadow: 0 0 5px rgba(255, 255, 255, 0.8);
}
.circle.red { background: #ff5f56; }
.circle.yellow { background: #ffbd2e; }
.circle.green { background: #27c93f; }
.terminal-header .label {
position: absolute;
left: 50%; transform: translateX(-50%);
color: #eee; font-size: 0.9em;
}
#terminal-line {
display: flex;
align-items: baseline;
}
#terminal-line .prompt-prefix {
color: #00ff90;
user-select: none;
}
.window-content {
padding: 0.5rem 1rem;
font-size: 0.85em;
white-space: pre-wrap;
word-break: break-word;
overflow-wrap: break-word;
text-align: left;
flex: 1;
color: #00ff90;
line-height: 1.2;
overflow: auto;
scrollbar-width: none;
-ms-overflow-style: none;
}
.window-content pre {
white-space: pre-wrap;
word-break: break-word;
overflow-wrap: break-word;
}
.window-content::-webkit-scrollbar {
display: none;
}
#shutdown-text {
scrollbar-width: none;
-ms-overflow-style: none;
}
#shutdown-text::-webkit-scrollbar {
display: none;
}
.cmd {
display: inline-block;
vertical-align: baseline;
outline: none;
white-space: pre-wrap;
word-break: break-word;
overflow-wrap: break-word;
line-height: 1.2em;
position: relative;
caret-color: transparent;
max-width: 100%;
}
.cmd.active::after {
content: '';
display: inline-block;
width: 4px;
height: 1.2em;
background: #00ff90;
margin-left: 2px;
animation: blink 1s step-end infinite;
vertical-align: bottom;
}
@keyframes blink {
50% { opacity: 0; }
}
.section {
display: none;
background: rgba(26, 26, 26, 0.97);
padding: 4rem 2rem;
max-width: 800px;
margin: 5rem auto 0;
border-radius: 12px 12px 0 0;
position: relative;
z-index: 3;
color: #ccc;
}
.section::before {
content: "";
position: absolute;
inset: 0;
background: #1a1a1a;
z-index: -1;
border-radius: 12px 12px 0 0;
}
.title { font-size: 2rem; margin-bottom: 1rem; color: #00ff90; }
a { color: #00ff90; text-decoration: underline; }
strong { color: #00ff90; }
.contact-card {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 2rem;
padding-top: 2rem;
border-top: 1px solid #333;
}
.profile-photo {
width: 120px;
height: 120px;
border-radius: 50%;
object-fit: cover;
border: 3px solid #00ff90;
box-shadow: 0 0 10px rgba(0, 255, 144, 0.6);
margin-bottom: 1rem;
}
.contact-links {
display: flex;
flex-direction: column;
align-items: center;
}
.contact-links a {
margin: 0.25rem 0;
font-size: 0.9em;
color: #00ff90;
text-decoration: none;
}
.contact-links a:hover {
text-decoration: underline;
}
@media (max-width: 768px) {
.desktop-sim { height: 420px; }
.terminal-window,
.nmap-window,
.social-window { width: 90vw; height: 300px; }
.hero-content { padding: 0 1rem 3rem 1rem; margin-top: -4rem; }
.section { padding: 2rem 1rem; margin: 3rem auto 0; }
.banner { padding: 0.75rem 1rem; font-size: 0.9em; }
.button { padding: 0.6rem 1.2rem; font-size: 0.9em; }
.prompt { font-size: 1em; }
.app-icon { width: 48px; }
.app-icon img { width: 40px; height: 40px; }
.app-label { font-size: 0.6em; }
.window-content { font-size: 0.75em; }
.profile-photo { width: 100px; height: 100px; }
}
body {
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
}
img {
pointer-events: none;
}