Files
cam-mitm/site/style.css

731 lines
19 KiB
CSS
Raw Permalink Normal View History

/*
camhak.seteclabs.io extends seteclabs.io/style.css
Aesthetic: phosphor CRT, elevated. Boot sequence, decrypt
reveals, pulsing severity badges, glitch hero, custom cursor.
*/
:root {
--green: #00ff41;
--green-dim: #00cc33;
--green-dark: #009922;
--green-deep: #004d11;
--bg: #050605;
--bg-light: #0c0e0c;
--bg-soft: #08140a;
--border: #00ff4133;
--text: #00ff41;
--text-dim: #00aa2a;
--link: #00ffaa;
--link-hover: #ffffff;
--red: #ff3344;
--red-glow: #ff334466;
--amber: #ffb000;
--info: #5ec8ff;
}
html, body {
background: var(--bg);
cursor: crosshair;
}
/* override the inherited body for sharper black */
body {
background: radial-gradient(ellipse at center, #061008 0%, #020302 70%, #000 100%);
position: relative;
overflow-x: hidden;
}
/* ─── ATMOSPHERICS ──────────────────────────────────────── */
/* fine grain noise */
.grain {
position: fixed;
inset: 0;
pointer-events: none;
z-index: 9998;
opacity: 0.10;
mix-blend-mode: overlay;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.95' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 1 0 0 0 0 0.25 0 0 0 1 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
}
/* corner vignette */
.vignette {
position: fixed;
inset: 0;
pointer-events: none;
z-index: 9997;
background: radial-gradient(ellipse at center, transparent 40%, rgba(0,0,0,0.7) 100%);
}
/* CRT bezel — subtle inset shadow simulating screen curvature */
.bezel {
position: fixed;
inset: 0;
pointer-events: none;
z-index: 9996;
box-shadow:
inset 0 0 120px rgba(0, 30, 0, 0.6),
inset 0 0 60px rgba(0, 255, 65, 0.05);
border-radius: 12px;
}
/* ─── HUD ───────────────────────────────────────────────── */
#hud {
position: fixed;
top: 14px;
right: 18px;
z-index: 100;
font-family: 'Share Tech Mono', monospace;
font-size: 11px;
color: var(--text-dim);
text-align: right;
background: rgba(0, 10, 0, 0.6);
border: 1px solid var(--green-deep);
padding: 8px 12px;
letter-spacing: 1px;
text-shadow: 0 0 6px var(--green-deep);
}
.hud-row {
display: flex;
justify-content: flex-end;
gap: 8px;
margin: 1px 0;
}
.hud-key {
color: var(--text-dim);
opacity: 0.7;
}
.hud-val {
color: var(--green);
}
.hud-blink {
color: var(--green);
animation: hud-pulse 1.4s ease-in-out infinite;
}
@keyframes hud-pulse {
0%, 100% { opacity: 0.3; text-shadow: 0 0 2px var(--green); }
50% { opacity: 1; text-shadow: 0 0 12px var(--green), 0 0 4px var(--green); }
}
/* ─── BOOT TERMINAL ─────────────────────────────────────── */
#boot {
font-family: 'Share Tech Mono', monospace;
font-size: 11px;
color: var(--text-dim);
margin: 30px 0 10px 0;
min-height: 8em;
white-space: pre-wrap;
text-shadow: 0 0 6px var(--green-deep);
letter-spacing: 0.5px;
line-height: 1.5;
}
#boot .ok { color: var(--green); }
#boot .warn { color: var(--amber); }
#boot .err { color: var(--red); }
#boot .cur { animation: cur 0.8s steps(1) infinite; }
@keyframes cur {
50% { opacity: 0; }
}
/* ─── HERO LOGO + GLITCH ───────────────────────────────── */
#ascii-logo {
text-align: center;
margin: 18px 0 6px 0;
font-family: 'Courier New', monospace;
font-size: 11px;
line-height: 1.05;
color: var(--green);
white-space: pre;
text-shadow:
0 0 4px var(--green),
0 0 14px var(--green),
0 0 30px var(--green-deep),
0 0 50px var(--green-deep);
letter-spacing: 1px;
position: relative;
animation: hero-fade-in 1.4s ease-out 0.4s both;
}
@keyframes hero-fade-in {
0% { opacity: 0; filter: blur(8px); transform: translateY(-6px); }
60% { opacity: 1; filter: blur(0); }
100% { opacity: 1; filter: blur(0); transform: translateY(0); }
}
/* RGB-split glitch on hover */
.glitch {
position: relative;
}
.glitch::before, .glitch::after {
content: attr(data-text);
position: absolute;
top: 0; left: 0; right: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
color: var(--green);
pointer-events: none;
opacity: 0;
}
#ascii-logo:hover {
animation: glitch-shake 0.4s linear;
}
@keyframes glitch-shake {
0%, 100% { transform: translate(0,0); }
10% { transform: translate(-2px, 1px); filter: hue-rotate(-15deg); }
20% { transform: translate(2px, -1px); }
30% { transform: translate(-1px, 2px); filter: hue-rotate(15deg); }
40% { transform: translate(1px, -2px); }
50% { transform: translate(-2px, -1px); }
60% { transform: translate(2px, 1px); filter: hue-rotate(-25deg); }
70% { transform: translate(-1px, -2px); }
80% { transform: translate(1px, 2px); }
90% { transform: translate(0,0); filter: hue-rotate(0); }
}
#tagline {
text-align: center;
font-family: 'VT323', monospace;
font-size: 22px;
color: var(--green);
margin: 12px 0 6px 0;
text-shadow: 0 0 18px var(--green), 0 0 4px var(--green);
letter-spacing: 4px;
text-transform: uppercase;
animation: hero-fade-in 1.2s ease-out 0.9s both;
}
.byline {
text-align: center;
color: var(--text-dim);
font-size: 11px;
letter-spacing: 3px;
text-transform: uppercase;
margin-bottom: 12px;
animation: hero-fade-in 1.2s ease-out 1.2s both;
}
/* ─── NAV ───────────────────────────────────────────────── */
nav {
text-align: center;
margin: 18px 0;
padding: 10px 0;
border-top: 1px dashed var(--green-deep);
border-bottom: 1px dashed var(--green-deep);
animation: hero-fade-in 1s ease-out 1.5s both;
}
nav a {
color: var(--link);
text-decoration: none;
margin: 0 10px;
font-size: 12px;
letter-spacing: 2px;
text-transform: uppercase;
position: relative;
transition: color 0.2s, text-shadow 0.2s;
}
nav a:hover {
color: #fff;
text-shadow: 0 0 12px var(--green), 0 0 2px #fff;
}
nav a:hover::before {
content: '> ';
color: var(--green);
}
/* ─── DIVIDERS ──────────────────────────────────────────── */
.divider {
border: none;
border-top: 1px solid var(--green-deep);
margin: 24px 0;
opacity: 0.55;
position: relative;
}
.divider::after {
content: '';
position: absolute;
left: 50%;
top: -3px;
width: 8px;
height: 5px;
background: var(--green);
transform: translateX(-50%);
box-shadow: 0 0 8px var(--green);
}
.divider-heavy {
border: none;
border-top: 2px solid var(--green);
margin: 28px 0;
box-shadow: 0 0 12px var(--green-deep);
}
/* ─── SECTIONS w/ DECRYPT REVEAL ────────────────────────── */
.section {
margin: 30px 0;
padding: 18px 22px;
border-left: 2px solid var(--green-deep);
position: relative;
}
.section::before {
content: '';
position: absolute;
left: -2px; top: 0; bottom: 0;
width: 2px;
background: var(--green);
box-shadow: 0 0 12px var(--green);
transform: scaleY(0);
transform-origin: top;
transition: transform 0.6s ease-out;
}
.section.in-view::before { transform: scaleY(1); }
.section-title {
font-family: 'VT323', monospace;
font-size: 26px;
color: var(--green);
margin-bottom: 18px;
text-shadow: 0 0 14px var(--green-dark), 0 0 4px var(--green);
letter-spacing: 3px;
}
.section-title::before {
content: '> ';
color: var(--text-dim);
}
.section-title .counter {
font-size: 14px;
color: var(--text-dim);
letter-spacing: 2px;
}
/* Reveal animation for sections — one-shot when in-view */
.reveal {
opacity: 0;
transform: translateY(14px);
transition: opacity 0.7s ease-out, transform 0.7s ease-out;
}
.reveal.in-view {
opacity: 1;
transform: translateY(0);
}
/* ─── TEXT BLOCKS ──────────────────────────────────────── */
.text-block {
color: var(--green-dim);
font-size: 14px;
line-height: 1.7;
}
.text-block p { margin-bottom: 14px; }
.text-block .muted { color: var(--text-dim); font-size: 12px; }
.text-block .small { font-size: 11px; }
.hl {
color: var(--green);
text-shadow: 0 0 8px var(--green-dark);
font-weight: bold;
}
code {
font-family: 'Share Tech Mono', monospace;
background: var(--bg-soft);
padding: 1px 6px;
border: 1px solid var(--green-deep);
color: var(--link);
font-size: 12px;
white-space: nowrap;
}
.codeblock {
background: linear-gradient(180deg, #050b06 0%, #030503 100%);
border: 1px solid var(--green-deep);
border-left: 3px solid var(--green);
padding: 16px 20px;
margin: 14px 0;
font-family: 'Share Tech Mono', monospace;
font-size: 12.5px;
color: var(--green-dim);
white-space: pre;
overflow-x: auto;
line-height: 1.6;
box-shadow:
inset 0 0 24px rgba(0, 80, 20, 0.18),
0 0 16px rgba(0, 100, 30, 0.05);
}
.codeblock .k { color: var(--green); text-shadow: 0 0 6px var(--green-dark); }
.codeblock .dim { color: var(--text-dim); }
/* ─── FINDINGS TABLE ───────────────────────────────────── */
table.findings {
width: 100%;
border-collapse: collapse;
margin: 16px 0;
font-size: 13px;
background: rgba(0, 12, 4, 0.4);
border: 1px solid var(--green-deep);
}
table.findings th {
text-align: left;
padding: 9px 12px;
border-bottom: 1px solid var(--green);
color: var(--green);
font-family: 'VT323', monospace;
font-size: 17px;
letter-spacing: 2px;
text-transform: uppercase;
text-shadow: 0 0 8px var(--green-dark);
background: rgba(0, 30, 10, 0.6);
}
table.findings td {
padding: 7px 12px;
border-bottom: 1px dashed var(--green-deep);
color: var(--green-dim);
vertical-align: middle;
}
table.findings tbody tr {
transition: background 0.15s;
}
table.findings tbody tr:hover {
background: rgba(0, 60, 18, 0.35);
}
table.findings tbody tr:hover td { color: var(--green); }
table.findings .col-id { width: 50px; color: var(--text-dim); font-family: 'Share Tech Mono', monospace; }
table.findings .col-sev { width: 90px; }
/* severity badges */
.sev {
display: inline-block;
padding: 2px 8px;
font-family: 'VT323', monospace;
font-size: 13px;
letter-spacing: 1.5px;
border: 1px solid currentColor;
background: rgba(0, 0, 0, 0.4);
}
.sev-crit {
color: var(--red);
text-shadow: 0 0 8px var(--red);
border-color: var(--red);
animation: sev-pulse 1.6s ease-in-out infinite;
}
@keyframes sev-pulse {
0%, 100% { box-shadow: 0 0 0 var(--red-glow), inset 0 0 0 var(--red-glow); }
50% { box-shadow: 0 0 16px var(--red-glow), inset 0 0 8px var(--red-glow); }
}
.sev-high { color: var(--amber); text-shadow: 0 0 6px var(--amber); border-color: var(--amber); }
.sev-med { color: var(--green); text-shadow: 0 0 6px var(--green-dark); }
.sev-info { color: var(--info); text-shadow: 0 0 6px var(--info); border-color: var(--info); }
.cve-tag {
display: inline-block;
font-size: 10px;
font-family: 'Share Tech Mono', monospace;
color: var(--info);
border: 1px solid var(--info);
padding: 1px 5px;
margin-left: 4px;
letter-spacing: 1px;
vertical-align: middle;
}
.redact {
background: var(--red);
color: #000;
padding: 0 6px;
font-weight: bold;
letter-spacing: 1.5px;
font-family: 'Share Tech Mono', monospace;
font-size: 11px;
}
/* ─── CVE CARDS ────────────────────────────────────────── */
.cve-card {
margin: 18px 0;
padding: 16px 20px;
border: 1px solid var(--green-deep);
background: linear-gradient(180deg, rgba(0, 20, 6, 0.6), rgba(0, 8, 2, 0.4));
position: relative;
box-shadow: inset 0 0 30px rgba(0, 60, 18, 0.1);
}
.cve-card::before {
content: '';
position: absolute;
left: 0; top: 0; bottom: 0;
width: 3px;
background: var(--green);
box-shadow: 0 0 14px var(--green);
}
.cve-card header {
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
margin-bottom: 8px;
font-family: 'Share Tech Mono', monospace;
}
.cve-id {
color: var(--link);
font-size: 14px;
font-weight: bold;
letter-spacing: 1px;
text-shadow: 0 0 8px rgba(0, 255, 170, 0.5);
}
.cvss {
color: var(--text-dim);
font-size: 11px;
letter-spacing: 1px;
}
.cve-state {
margin-left: auto;
font-size: 11px;
letter-spacing: 1.5px;
padding: 2px 8px;
border: 1px solid currentColor;
}
.state-vuln {
color: var(--red);
text-shadow: 0 0 8px var(--red-glow);
animation: sev-pulse 1.8s ease-in-out infinite;
}
.state-warn {
color: var(--amber);
text-shadow: 0 0 6px var(--amber);
}
.cve-card h3 {
font-family: 'VT323', monospace;
font-size: 19px;
color: var(--green);
margin: 6px 0 10px 0;
letter-spacing: 1.5px;
text-shadow: 0 0 8px var(--green-dark);
}
.cve-card p {
color: var(--green-dim);
font-size: 13px;
line-height: 1.7;
}
/* ─── TOOLS LIST ───────────────────────────────────────── */
ul.tools, ul.disclosure {
list-style: none;
padding: 0;
margin: 14px 0;
}
ul.tools li, ul.disclosure li {
margin: 7px 0;
padding: 5px 0 5px 22px;
position: relative;
color: var(--green-dim);
border-bottom: 1px dashed var(--green-deep);
transition: background 0.15s, padding-left 0.2s;
}
ul.tools li::before, ul.disclosure li::before {
content: '\BB';
position: absolute;
left: 4px;
top: 5px;
color: var(--link);
text-shadow: 0 0 6px var(--link);
}
ul.tools li:hover, ul.disclosure li:hover {
background: rgba(0, 60, 18, 0.2);
padding-left: 28px;
color: var(--green);
}
ul.tools li strong {
color: var(--link);
font-family: 'Share Tech Mono', monospace;
}
.modulename {
font-family: 'VT323', monospace;
font-size: 18px;
color: var(--link);
letter-spacing: 2px;
margin-top: 14px;
text-shadow: 0 0 10px rgba(0, 255, 170, 0.4);
}
/* ─── REASONS (numbered list with big numerals) ────────── */
ol.reasons {
list-style: none;
padding: 0;
margin: 16px 0;
}
ol.reasons li {
display: flex;
gap: 18px;
margin: 16px 0;
padding: 12px 14px;
border-left: 1px solid var(--green-deep);
background: rgba(0, 12, 4, 0.3);
}
ol.reasons li .num {
font-family: 'VT323', monospace;
font-size: 42px;
color: var(--green);
text-shadow: 0 0 14px var(--green-dark), 0 0 4px var(--green);
flex-shrink: 0;
line-height: 1;
}
ol.reasons li > div {
font-size: 13px;
color: var(--green-dim);
line-height: 1.7;
}
/* ─── QUOTE BLOCK ──────────────────────────────────────── */
.quote-block {
margin: 28px auto;
padding: 26px 28px;
border: 1px solid var(--green-deep);
background:
radial-gradient(ellipse at top, rgba(0, 80, 20, 0.18), transparent 60%),
rgba(0, 8, 2, 0.6);
text-align: center;
position: relative;
max-width: 720px;
}
.quote-block::before { content: '/*'; position: absolute; top: 6px; left: 12px; color: var(--text-dim); font-size: 12px; }
.quote-block::after { content: '*/'; position: absolute; bottom: 6px; right: 12px; color: var(--text-dim); font-size: 12px; }
.quote-text {
font-family: 'Share Tech Mono', monospace;
font-size: 14px;
color: var(--green);
font-style: italic;
line-height: 1.85;
text-shadow: 0 0 6px var(--green-dark);
}
.quote-attr {
margin-top: 12px;
font-size: 11px;
color: var(--text-dim);
letter-spacing: 2px;
text-transform: uppercase;
}
.signoff {
text-align: right;
margin-top: 26px;
font-size: 13px;
color: var(--text-dim);
letter-spacing: 2px;
font-family: 'Share Tech Mono', monospace;
}
.signoff .link { color: var(--link); text-shadow: 0 0 8px rgba(0, 255, 170, 0.4); }
/* ─── SCREENSHOTS ───────────────────────────────────── */
figure.screenshot {
margin: 22px 0;
padding: 14px;
background: linear-gradient(180deg, rgba(0, 20, 6, 0.5), rgba(0, 6, 2, 0.4));
border: 1px solid var(--green-deep);
border-left: 3px solid var(--green);
box-shadow: inset 0 0 30px rgba(0, 60, 18, 0.1);
}
figure.screenshot img {
display: block;
max-width: 100%;
height: auto;
border: 1px solid var(--green-dark);
box-shadow:
0 0 18px rgba(0, 255, 65, 0.12),
0 0 4px rgba(0, 255, 65, 0.25);
margin: 0 auto 12px auto;
/* gentle phosphor glow on hover */
transition: box-shadow 0.3s, filter 0.3s;
}
figure.screenshot img:hover {
box-shadow:
0 0 28px rgba(0, 255, 65, 0.25),
0 0 8px rgba(0, 255, 65, 0.4);
filter: brightness(1.05);
}
figure.screenshot figcaption {
font-family: 'Share Tech Mono', monospace;
font-size: 12px;
color: var(--green-dim);
line-height: 1.7;
padding: 6px 10px 0 10px;
border-top: 1px dashed var(--green-deep);
}
figure.screenshot figcaption strong {
color: var(--link);
text-shadow: 0 0 6px rgba(0, 255, 170, 0.3);
}
figure.screenshot figcaption code {
font-size: 11px;
}
/* ─── PROMPT FOOTER ────────────────────────────────────── */
.prompt {
font-family: 'Share Tech Mono', monospace;
font-size: 13px;
color: var(--green);
margin: 30px 0 6px 0;
padding: 8px 0;
border-top: 1px dashed var(--green-deep);
text-shadow: 0 0 6px var(--green-dark);
}
.prompt-host { color: var(--link); }
.prompt-sep { color: var(--text-dim); }
.prompt-cwd { color: var(--green); }
.prompt-cmd { color: var(--green); }
.prompt-cursor {
display: inline-block;
background: var(--green);
color: var(--bg);
animation: cur 0.8s steps(1) infinite;
width: 9px;
margin-left: 2px;
}
/* ─── FOOTER ────────────────────────────────────────────── */
.footer {
text-align: center;
font-size: 11px;
color: var(--text-dim);
margin: 18px 0 26px 0;
letter-spacing: 2px;
font-family: 'Share Tech Mono', monospace;
}
.footer p { margin: 4px 0; }
.footer a {
color: var(--link);
text-decoration: none;
}
.footer a:hover { color: #fff; text-shadow: 0 0 8px var(--green); }
/* ─── RESPONSIVE ──────────────────────────────────────── */
@media (max-width: 720px) {
#hud { display: none; }
#ascii-logo { font-size: 7px; }
#tagline { font-size: 16px; letter-spacing: 2px; }
.section { padding: 14px; }
.section-title { font-size: 22px; }
ol.reasons li { flex-direction: column; gap: 8px; }
ol.reasons li .num { font-size: 32px; }
}