mirror of
https://github.com/BigBodyCobain/Shadowbroker.git
synced 2026-06-04 13:28:13 +02:00
668ce16dc7
Gate messages now propagate via the Infonet hashchain as encrypted blobs — every node syncs them through normal chain sync while only Gate members with MLS keys can decrypt. Added mesh reputation system, peer push workers, voluntary Wormhole opt-in for node participation, fork recovery, killwormhole scripts, obfuscated terminology, and hardened the self-updater to protect encryption keys and chain state during updates. New features: Shodan search, train tracking, Sentinel Hub imagery, 8 new intelligence layers, CCTV expansion to 11,000+ cameras across 6 countries, Mesh Terminal CLI, prediction markets, desktop-shell scaffold, and comprehensive mesh test suite (215 frontend + backend tests passing). Community contributors: @wa1id, @AlborzNazari, @adust09, @Xpirix, @imqdcr, @csysp, @suranyami, @chr0n1x, @johan-martensson, @singularfailure, @smithbh, @OrfeoTerkuci, @deuza, @tm-const, @Elhard1, @ttulttul
460 lines
12 KiB
CSS
460 lines
12 KiB
CSS
@import 'tailwindcss';
|
|
|
|
:root {
|
|
--background: #000000;
|
|
--foreground: #ededed;
|
|
--bg-primary: #000000;
|
|
--bg-secondary: rgb(5, 5, 8);
|
|
--bg-tertiary: rgb(12, 12, 16);
|
|
--bg-panel: rgba(0, 0, 0, 0.85);
|
|
--border-primary: rgba(8, 145, 178, 0.18);
|
|
--border-secondary: rgba(8, 145, 178, 0.30);
|
|
--border-glow: rgba(6, 182, 212, 0.12);
|
|
--text-primary: rgb(243, 244, 246);
|
|
--text-secondary: rgb(34, 211, 238);
|
|
--text-muted: rgb(8, 145, 178);
|
|
--text-heading: rgb(236, 254, 255);
|
|
--hover-accent: rgba(8, 51, 68, 0.2);
|
|
--scrollbar-thumb: rgba(255, 255, 255, 0.12);
|
|
--scrollbar-thumb-hover: rgba(255, 255, 255, 0.25);
|
|
--font-geist-sans:
|
|
ui-sans-serif, system-ui, -apple-system, 'Segoe UI', 'Helvetica Neue', Arial, 'Noto Sans',
|
|
sans-serif;
|
|
--font-roboto-mono:
|
|
ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',
|
|
monospace;
|
|
}
|
|
|
|
/* Light theme: only the map basemap changes — UI stays dark */
|
|
[data-theme='light'] {
|
|
--background: #000000;
|
|
--foreground: #ededed;
|
|
--bg-primary: #000000;
|
|
--bg-secondary: rgb(5, 5, 8);
|
|
--bg-tertiary: rgb(12, 12, 16);
|
|
--bg-panel: rgba(0, 0, 0, 0.85);
|
|
--border-primary: rgba(8, 145, 178, 0.18);
|
|
--border-secondary: rgba(8, 145, 178, 0.30);
|
|
--border-glow: rgba(6, 182, 212, 0.12);
|
|
--text-primary: rgb(243, 244, 246);
|
|
--text-secondary: rgb(34, 211, 238);
|
|
--text-muted: rgb(8, 145, 178);
|
|
--text-heading: rgb(236, 254, 255);
|
|
--hover-accent: rgba(8, 51, 68, 0.2);
|
|
--scrollbar-thumb: rgba(255, 255, 255, 0.12);
|
|
--scrollbar-thumb-hover: rgba(255, 255, 255, 0.25);
|
|
}
|
|
|
|
@theme inline {
|
|
--color-background: var(--background);
|
|
--color-foreground: var(--foreground);
|
|
--font-sans: var(--font-geist-sans);
|
|
--font-mono: var(--font-roboto-mono);
|
|
}
|
|
|
|
body {
|
|
background: var(--background);
|
|
color: var(--foreground);
|
|
font-family: var(--font-roboto-mono), 'Roboto Mono', monospace;
|
|
}
|
|
|
|
/* Global interactive cursor hints */
|
|
button:not(:disabled),
|
|
[role='button']:not([aria-disabled='true']),
|
|
a[href],
|
|
summary,
|
|
label[for],
|
|
input[type='button']:not(:disabled),
|
|
input[type='submit']:not(:disabled),
|
|
input[type='reset']:not(:disabled) {
|
|
cursor: pointer;
|
|
}
|
|
|
|
button:disabled,
|
|
[role='button'][aria-disabled='true'],
|
|
input:disabled,
|
|
select:disabled,
|
|
textarea:disabled {
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
/* Styled thin scrollbar for dark HUD UI */
|
|
.styled-scrollbar::-webkit-scrollbar {
|
|
width: 5px;
|
|
}
|
|
|
|
.styled-scrollbar::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
.styled-scrollbar::-webkit-scrollbar-thumb {
|
|
background: var(--scrollbar-thumb);
|
|
border-radius: 10px;
|
|
}
|
|
|
|
.styled-scrollbar::-webkit-scrollbar-thumb:hover {
|
|
background: var(--scrollbar-thumb-hover);
|
|
}
|
|
|
|
.styled-scrollbar {
|
|
scrollbar-width: thin;
|
|
scrollbar-color: var(--scrollbar-thumb) transparent;
|
|
}
|
|
|
|
/* DOS block cursor blink */
|
|
@keyframes blink {
|
|
0%,
|
|
100% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
/* ── TERMINAL UTILITY CLASSES ── */
|
|
|
|
/* Subtle text glow for cyan headings */
|
|
.text-glow {
|
|
text-shadow: 0 0 8px rgba(34, 211, 238, 0.3);
|
|
}
|
|
|
|
/* Terminal input — prompt style */
|
|
.terminal-input {
|
|
border-radius: 0;
|
|
border: 1px solid rgba(8, 145, 178, 0.25);
|
|
background: rgba(0, 0, 0, 0.4);
|
|
}
|
|
.terminal-input:focus {
|
|
border-color: rgba(34, 211, 238, 0.5);
|
|
box-shadow: 0 0 6px rgba(34, 211, 238, 0.15);
|
|
outline: none;
|
|
}
|
|
|
|
/* Map popup shared utilities */
|
|
.map-popup {
|
|
background: rgba(10, 14, 26, 0.95);
|
|
border-radius: 2px;
|
|
border: 1px solid rgba(8, 145, 178, 0.25);
|
|
padding: 10px 14px;
|
|
color: #e0e6f0;
|
|
font-family:
|
|
var(--font-roboto-mono), 'Roboto Mono', monospace, 'Microsoft YaHei', 'PingFang SC',
|
|
'Noto Sans SC', 'Noto Sans JP', 'Noto Sans KR', sans-serif;
|
|
font-size: 11px;
|
|
min-width: 220px;
|
|
max-width: 320px;
|
|
}
|
|
|
|
.map-popup-title {
|
|
font-weight: 700;
|
|
font-size: 13px;
|
|
margin-bottom: 6px;
|
|
letter-spacing: 1px;
|
|
}
|
|
|
|
.map-popup-row {
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.map-popup-subtitle {
|
|
font-size: 9px;
|
|
margin-bottom: 6px;
|
|
letter-spacing: 1.5px;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
/* MapLibre Popup Overrides */
|
|
.maplibregl-popup-content {
|
|
background: transparent !important;
|
|
border: none !important;
|
|
box-shadow: none !important;
|
|
padding: 0 !important;
|
|
}
|
|
|
|
.maplibregl-popup-tip {
|
|
display: none !important;
|
|
}
|
|
|
|
/* ── MATRIX HUD COLOR THEME ── */
|
|
/* Remaps cyan accents → green within .hud-zone containers only */
|
|
[data-hud='matrix'] .hud-zone {
|
|
--text-secondary: #4ade80;
|
|
--text-muted: #16a34a;
|
|
--text-heading: #bbf7d0;
|
|
--hover-accent: rgba(5, 46, 22, 0.2);
|
|
--scrollbar-thumb: rgba(255, 255, 255, 0.12);
|
|
--scrollbar-thumb-hover: rgba(255, 255, 255, 0.25);
|
|
--border-primary: rgba(22, 163, 74, 0.18);
|
|
--border-secondary: rgba(22, 163, 74, 0.30);
|
|
--border-glow: rgba(34, 197, 94, 0.12);
|
|
}
|
|
[data-hud='matrix'] .hud-zone .text-glow {
|
|
text-shadow: 0 0 8px rgba(74, 222, 128, 0.3);
|
|
}
|
|
|
|
/* --- Text color overrides --- */
|
|
[data-hud='matrix'] .hud-zone .text-cyan-300 {
|
|
color: #86efac !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .text-cyan-400 {
|
|
color: #4ade80 !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .text-cyan-500 {
|
|
color: #22c55e !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .text-cyan-600 {
|
|
color: #16a34a !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .text-cyan-700 {
|
|
color: #15803d !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .text-cyan-500\/50 {
|
|
color: rgba(34, 197, 94, 0.5) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .text-cyan-500\/70 {
|
|
color: rgba(34, 197, 94, 0.7) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .text-cyan-500\/80 {
|
|
color: rgba(34, 197, 94, 0.8) !important;
|
|
}
|
|
|
|
/* --- Background color overrides --- */
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-400 {
|
|
background-color: #4ade80 !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-300 {
|
|
background-color: #86efac !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-500 {
|
|
background-color: #22c55e !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-500\/10 {
|
|
background-color: rgba(34, 197, 94, 0.1) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-500\/20 {
|
|
background-color: rgba(34, 197, 94, 0.2) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-500\/30 {
|
|
background-color: rgba(34, 197, 94, 0.3) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-900\/30 {
|
|
background-color: rgba(20, 83, 45, 0.3) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-900\/50 {
|
|
background-color: rgba(20, 83, 45, 0.5) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-900\/60 {
|
|
background-color: rgba(20, 83, 45, 0.6) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-950\/10 {
|
|
background-color: rgba(5, 46, 22, 0.1) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-950\/30 {
|
|
background-color: rgba(5, 46, 22, 0.3) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .bg-cyan-950\/40 {
|
|
background-color: rgba(5, 46, 22, 0.4) !important;
|
|
}
|
|
|
|
/* --- Border color overrides --- */
|
|
[data-hud='matrix'] .hud-zone .border-cyan-400 {
|
|
border-color: #4ade80 !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-500 {
|
|
border-color: #22c55e !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-700 {
|
|
border-color: #15803d !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-800 {
|
|
border-color: #166534 !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-900 {
|
|
border-color: #14532d !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-500\/10 {
|
|
border-color: rgba(34, 197, 94, 0.1) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-500\/20 {
|
|
border-color: rgba(34, 197, 94, 0.2) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-500\/30 {
|
|
border-color: rgba(34, 197, 94, 0.3) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-500\/40 {
|
|
border-color: rgba(34, 197, 94, 0.4) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-500\/50 {
|
|
border-color: rgba(34, 197, 94, 0.5) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-800\/40 {
|
|
border-color: rgba(22, 101, 52, 0.4) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-800\/50 {
|
|
border-color: rgba(22, 101, 52, 0.5) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-800\/60 {
|
|
border-color: rgba(22, 101, 52, 0.6) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-cyan-900\/50 {
|
|
border-color: rgba(20, 83, 45, 0.5) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-b-cyan-900 {
|
|
border-bottom-color: #14532d !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .border-l-cyan-500 {
|
|
border-left-color: #22c55e !important;
|
|
}
|
|
|
|
/* --- Hover text --- */
|
|
[data-hud='matrix'] .hud-zone .hover\:text-cyan-300:hover {
|
|
color: #86efac !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .hover\:text-cyan-400:hover {
|
|
color: #4ade80 !important;
|
|
}
|
|
|
|
/* --- Hover background --- */
|
|
[data-hud='matrix'] .hud-zone .hover\:bg-cyan-300:hover {
|
|
background-color: #86efac !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .hover\:bg-cyan-500\/20:hover {
|
|
background-color: rgba(34, 197, 94, 0.2) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .hover\:bg-cyan-900\/50:hover {
|
|
background-color: rgba(20, 83, 45, 0.5) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .hover\:bg-cyan-950\/30:hover {
|
|
background-color: rgba(5, 46, 22, 0.3) !important;
|
|
}
|
|
|
|
/* --- Hover border --- */
|
|
[data-hud='matrix'] .hud-zone .hover\:border-cyan-300:hover {
|
|
border-color: #86efac !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .hover\:border-cyan-500:hover {
|
|
border-color: #22c55e !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .hover\:border-cyan-500\/40:hover {
|
|
border-color: rgba(34, 197, 94, 0.4) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .hover\:border-cyan-500\/50:hover {
|
|
border-color: rgba(34, 197, 94, 0.5) !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .hover\:border-cyan-600:hover {
|
|
border-color: #16a34a !important;
|
|
}
|
|
[data-hud='matrix'] .hud-zone .hover\:border-cyan-800:hover {
|
|
border-color: #166534 !important;
|
|
}
|
|
|
|
/* --- Accent (range inputs) --- */
|
|
[data-hud='matrix'] .hud-zone .accent-cyan-500 {
|
|
accent-color: #22c55e !important;
|
|
}
|
|
|
|
/* Focus mode: dim the map canvas (tiles + drawn layers) when a popup is active.
|
|
Inside MapLibre's DOM, .maplibregl-canvas-container is a SIBLING of .maplibregl-popup,
|
|
so this filter dims the map without affecting the popup at all. */
|
|
.map-focus-active .maplibregl-canvas-container {
|
|
filter: brightness(0.3);
|
|
transition: filter 0.3s ease;
|
|
}
|
|
|
|
/* Keep popups fully bright and interactive above the dimmed canvas */
|
|
.map-focus-active .maplibregl-popup {
|
|
z-index: 10 !important;
|
|
}
|
|
|
|
/* ── INFONET CRT TERMINAL EFFECTS ── */
|
|
|
|
.infonet-font {
|
|
font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
|
|
}
|
|
|
|
/* CRT scanline overlay — scoped to .crt containers only */
|
|
.crt {
|
|
position: relative;
|
|
animation: crt-flicker 0.15s infinite;
|
|
text-shadow: 0 0 2px rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
.crt::before {
|
|
content: ' ';
|
|
display: block;
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
bottom: 0;
|
|
right: 0;
|
|
background:
|
|
linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.25) 50%),
|
|
linear-gradient(
|
|
90deg,
|
|
rgba(255, 0, 0, 0.06),
|
|
rgba(0, 255, 0, 0.02),
|
|
rgba(0, 0, 255, 0.06)
|
|
);
|
|
z-index: 2;
|
|
background-size: 100% 2px, 3px 100%;
|
|
pointer-events: none;
|
|
}
|
|
|
|
@keyframes crt-flicker {
|
|
0% {
|
|
opacity: 0.95;
|
|
}
|
|
5% {
|
|
opacity: 0.85;
|
|
}
|
|
10% {
|
|
opacity: 0.95;
|
|
}
|
|
15% {
|
|
opacity: 1;
|
|
}
|
|
100% {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.crt {
|
|
animation: none;
|
|
}
|
|
.crt::before {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
/* Ticker animation for InfoNet */
|
|
@keyframes infonet-ticker {
|
|
0% {
|
|
transform: translateX(100%);
|
|
}
|
|
100% {
|
|
transform: translateX(-100%);
|
|
}
|
|
}
|
|
|
|
.animate-ticker {
|
|
display: inline-block;
|
|
white-space: nowrap;
|
|
animation: infonet-ticker 90s linear infinite;
|
|
}
|
|
|
|
/* Scoped scrollbar for CRT terminal */
|
|
.crt ::-webkit-scrollbar {
|
|
width: 8px;
|
|
}
|
|
.crt ::-webkit-scrollbar-track {
|
|
background: #0a0a0a;
|
|
}
|
|
.crt ::-webkit-scrollbar-thumb {
|
|
background: #4b5563;
|
|
}
|
|
.crt ::-webkit-scrollbar-thumb:hover {
|
|
background: #9ca3af;
|
|
}
|