echo6-docs/assets/echo6-custom.css
Matt Johnson e9231ac24a Migration: consolidate Echo6 docs to cortex with full infrastructure cleanup sync
- Documents recent infrastructure cleanup (8 CTs destroyed, 35 DNS records removed, Headscale cleanup)
- Adds 24 new runbooks covering Authentik, PeerTube, Meshtastic, RECON, Proxmox, Mailcow, Internet Archive, GPU routing
- Adds project documentation for headscale, vaultwarden, peertube, matrix, mmud, advbbs, arr stack
- Updates services.md, environment.md, caddy.md, authentik.md to match live infrastructure
- Removes 4 deprecated runbook duplicates (canonical versions live in projects/)
- Adds .gitignore for binary archives and editor temp files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 06:02:16 +00:00

696 lines
18 KiB
CSS

/* ═══════════════════════════════════════════════════════════════════
echo6 // searxng custom theme
═══════════════════════════════════════════════════════════════════
colors: cyan #28C0E8 / yellow #F0D848 (extracted from logo)
font: JetBrains Mono
aesthetic: cyberpunk — dark, sharp, clean, minimal glow
═══════════════════════════════════════════════════════════════════ */
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;600;700&display=swap');
/* ─── css variables ─── */
:root {
/* echo6 brand */
--e6-cyan: #28C0E8;
--e6-cyan-light: #5DD4F5;
--e6-cyan-dim: rgba(40, 192, 232, 0.12);
--e6-yellow: #F0D848;
--e6-yellow-light: #F5E470;
--e6-yellow-dim: rgba(240, 216, 72, 0.1);
/* backgrounds */
--e6-bg: #0a0e17;
--e6-bg-card: #111827;
--e6-bg-hover: #1a2332;
--e6-bg-footer: #060a10;
/* borders */
--e6-border: #1e3a5f;
/* text */
--e6-text: #e0e6ed;
--e6-text-muted: #7a8ca0;
/* buttons */
--e6-btn-bg: #1a2332;
--e6-btn-hover: #243447;
}
/* ═══════════════════════════════════════════
1. global — font, background, text
═══════════════════════════════════════════ */
* {
font-family: 'JetBrains Mono', monospace !important;
}
html, body {
background-color: var(--e6-bg) !important;
color: var(--e6-text) !important;
margin: 0;
padding: 0;
}
/* ═══════════════════════════════════════════
2. homepage — viewport lock, centering
═══════════════════════════════════════════
homepage only — no scroll, logo centered
at ~35-40% from top like google.com.
CC: replace selectors if actual DOM differs.
═══════════════════════════════════════════ */
/* lock homepage to viewport — no scrollbar */
html:has(body.index),
body.index {
height: 100vh !important;
overflow: hidden !important;
margin: 0 !important;
padding: 0 !important;
}
/* center the main content area */
body.index main,
body.index #main_index,
body.index .search-margin {
display: flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: center !important;
height: calc(100vh - 80px) !important;
min-height: unset !important;
padding-bottom: 10vh !important;
margin: 0 !important;
overflow: hidden !important;
}
/* ═══════════════════════════════════════════
3. hide default searxng branding
═══════════════════════════════════════════
kill the giant "SearXNG" text behind the
logo. only the echo6 logo should show.
CC: inspect DOM and add the real selector
if these don't catch it.
═══════════════════════════════════════════ */
.searxng-wordmark,
#main-logo span,
.index h1,
h1.title,
.search-margin h1,
#main_index h1,
.index .title,
.title_h1 {
display: none !important;
visibility: hidden !important;
font-size: 0 !important;
color: transparent !important;
height: 0 !important;
overflow: hidden !important;
margin: 0 !important;
padding: 0 !important;
}
/* ═══════════════════════════════════════════
4. logo
═══════════════════════════════════════════ */
.logo img,
.search-margin img,
#main-logo img,
img[src*="searxng"] {
max-width: 270px;
height: auto;
display: block;
margin: 0 auto;
}
/* ═══════════════════════════════════════════
5. search bar — pill shape, subtle focus
═══════════════════════════════════════════ */
#search_form .search_box,
.search_box,
#q {
background-color: var(--e6-bg-card) !important;
border: 1px solid var(--e6-border) !important;
border-radius: 24px !important;
color: var(--e6-text) !important;
font-size: 16px !important;
}
/* focused state — subtle cyan border, barely-there shadow */
#search_form .search_box:focus-within,
.search_box:focus-within {
border-color: var(--e6-cyan) !important;
box-shadow: 0 0 6px var(--e6-cyan-dim) !important;
}
#search_form input[type="text"],
#search_form input[type="search"],
#q {
font-family: 'JetBrains Mono', monospace !important;
font-size: 16px !important;
color: var(--e6-text) !important;
background: transparent !important;
}
/* placeholder text */
#q::placeholder,
input[type="search"]::placeholder {
color: var(--e6-text-muted) !important;
opacity: 0.7;
}
/* search bar container width */
#search_form,
.search_box {
max-width: 584px !important;
margin-left: auto !important;
margin-right: auto !important;
}
/* ═══════════════════════════════════════════
6. search buttons
═══════════════════════════════════════════ */
#search_form button,
#search_form input[type="submit"],
.search_filters button,
.search_submit,
.search_box button {
background-color: var(--e6-btn-bg) !important;
border: 1px solid var(--e6-border) !important;
border-radius: 4px !important;
color: var(--e6-text) !important;
font-family: 'JetBrains Mono', monospace !important;
font-size: 14px !important;
cursor: pointer;
text-transform: lowercase;
}
#search_form button:hover,
#search_form input[type="submit"]:hover,
.search_submit:hover,
.search_box button:hover {
background-color: var(--e6-btn-hover) !important;
border-color: var(--e6-cyan) !important;
color: var(--e6-text) !important;
}
/* ═══════════════════════════════════════════
7. top navigation bar
═══════════════════════════════════════════
injected via template override.
styles the .//photos .//mail links, waffle
menu button, and login avatar.
═══════════════════════════════════════════ */
.echo6-nav {
display: flex;
justify-content: flex-end;
align-items: center;
padding: 10px 18px;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
background-color: transparent;
gap: 20px;
}
/* .//photos and .//mail links */
.echo6-nav a.echo6-nav-link {
color: var(--e6-cyan) !important;
text-decoration: none;
font-size: 13px;
font-weight: 500;
letter-spacing: 0.03em;
text-transform: lowercase;
transition: color 0.15s ease;
}
.echo6-nav a.echo6-nav-link:hover {
color: var(--e6-cyan-light) !important;
}
/* waffle menu (⠿) button */
.echo6-waffle-btn {
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 50%;
border: none;
background: transparent;
color: var(--e6-text-muted);
font-size: 20px;
cursor: pointer;
transition: background-color 0.15s ease;
}
.echo6-waffle-btn:hover {
background-color: var(--e6-bg-hover);
}
/* login avatar button */
.echo6-login-btn {
display: flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border-radius: 50%;
border: 1px solid var(--e6-border);
background: transparent;
color: var(--e6-text-muted);
cursor: pointer;
transition: border-color 0.15s ease;
text-decoration: none;
}
.echo6-login-btn:hover {
border-color: var(--e6-cyan);
}
.echo6-login-btn svg {
width: 18px;
height: 18px;
fill: var(--e6-text-muted);
}
/* ═══════════════════════════════════════════
8. waffle menu dropdown
═══════════════════════════════════════════ */
.echo6-waffle-menu {
display: none;
position: fixed;
top: 52px;
right: 70px;
z-index: 2000;
background-color: var(--e6-bg-card);
border: 1px solid var(--e6-border);
border-radius: 12px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
padding: 16px;
min-width: 280px;
animation: echo6FadeIn 0.15s ease;
}
.echo6-waffle-menu.active {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.echo6-waffle-menu a {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 12px 8px;
border-radius: 8px;
text-decoration: none;
color: var(--e6-text);
font-size: 11px;
font-weight: 400;
text-transform: lowercase;
transition: background-color 0.15s ease;
gap: 6px;
}
.echo6-waffle-menu a:hover {
background-color: var(--e6-bg-hover);
}
.echo6-waffle-menu a img {
width: 36px;
height: 36px;
border-radius: 6px;
object-fit: contain;
}
/* emoji fallback icons in waffle menu */
.echo6-waffle-menu a .echo6-icon {
font-size: 28px;
line-height: 1;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
}
@keyframes echo6FadeIn {
from { opacity: 0; transform: translateY(-4px); }
to { opacity: 1; transform: translateY(0); }
}
/* waffle menu overlay — click to close */
.echo6-waffle-overlay {
display: none;
position: fixed;
inset: 0;
z-index: 1999;
}
.echo6-waffle-overlay.active {
display: block;
}
/* ═══════════════════════════════════════════
9. footer
═══════════════════════════════════════════ */
footer,
.footer,
#footer,
.searxng-footer {
background-color: var(--e6-bg-footer) !important;
border-top: 1px solid var(--e6-border) !important;
text-align: center;
padding: 12px 0 !important;
}
footer *,
.footer *,
#footer *,
.searxng-footer * {
font-size: 12px !important;
text-transform: lowercase;
color: var(--e6-text-muted) !important;
}
footer a,
.footer a,
#footer a,
.searxng-footer a {
color: var(--e6-text-muted) !important;
text-decoration: none;
transition: color 0.15s ease;
}
footer a:hover,
.footer a:hover,
#footer a:hover,
.searxng-footer a:hover {
color: var(--e6-cyan) !important;
}
/* ═══════════════════════════════════════════
10. search results page
═══════════════════════════════════════════
results pages must scroll normally.
dark theme applied to result elements.
═══════════════════════════════════════════ */
/* allow scrolling on non-homepage */
html:not(:has(body.index)),
body:not(.index) {
height: auto !important;
overflow: auto !important;
}
/* result links */
.result a,
.result-default a h3,
.result-title a {
color: var(--e6-cyan) !important;
}
.result a:hover,
.result-default a:hover h3,
.result-title a:hover {
color: var(--e6-cyan-light) !important;
}
.result a:visited,
.result-default a:visited h3 {
color: #8BA8C4 !important;
}
/* result URLs */
.result .url_wrapper,
.result .url,
.result-url {
color: var(--e6-text-muted) !important;
font-size: 13px !important;
}
/* result descriptions */
.result .content,
.result-content,
.result p {
color: var(--e6-text) !important;
}
/* result cards/containers */
.result,
.result-default {
background-color: transparent !important;
border-bottom: 1px solid var(--e6-border) !important;
padding: 14px 0 !important;
}
/* search categories/tabs bar */
.search_categories,
#categories,
.category {
background-color: var(--e6-bg) !important;
border-bottom: 1px solid var(--e6-border) !important;
}
.search_categories label,
.category a,
.category button {
color: var(--e6-text-muted) !important;
font-size: 13px !important;
text-transform: lowercase;
}
.search_categories label:hover,
.category a:hover,
.category button:hover {
color: var(--e6-text) !important;
}
/* active category tab */
.search_categories label.active,
.category.active a,
.category.active button,
.search_categories input:checked + label {
color: var(--e6-cyan) !important;
border-bottom: 2px solid var(--e6-cyan) !important;
}
/* sidebar / infobox */
.infobox,
#sidebar {
background-color: var(--e6-bg-card) !important;
border: 1px solid var(--e6-border) !important;
border-radius: 8px !important;
}
/* pagination */
.pagination button,
.pagination a,
#pagination button {
background-color: var(--e6-btn-bg) !important;
border: 1px solid var(--e6-border) !important;
color: var(--e6-text) !important;
border-radius: 4px !important;
}
.pagination button:hover,
.pagination a:hover,
#pagination button:hover {
border-color: var(--e6-cyan) !important;
color: var(--e6-cyan) !important;
}
/* engine stats / result info */
.result_header,
.result-engines,
.engines {
color: var(--e6-text-muted) !important;
font-size: 11px !important;
}
/* ═══════════════════════════════════════════
11. preferences page
═══════════════════════════════════════════ */
/* preferences containers */
.preferences,
.preferences fieldset,
.preferences form {
background-color: var(--e6-bg) !important;
color: var(--e6-text) !important;
}
.preferences fieldset {
border: 1px solid var(--e6-border) !important;
border-radius: 8px !important;
margin-bottom: 12px !important;
}
.preferences legend {
color: var(--e6-cyan) !important;
font-weight: 600;
}
/* select dropdowns and inputs in preferences */
.preferences select,
.preferences input[type="text"],
.preferences input[type="number"],
.preferences textarea {
background-color: var(--e6-bg-card) !important;
border: 1px solid var(--e6-border) !important;
color: var(--e6-text) !important;
border-radius: 4px !important;
font-family: 'JetBrains Mono', monospace !important;
}
.preferences select:focus,
.preferences input:focus,
.preferences textarea:focus {
border-color: var(--e6-cyan) !important;
box-shadow: 0 0 6px var(--e6-cyan-dim) !important;
}
/* preferences save button */
.preferences input[type="submit"],
.preferences button[type="submit"] {
background-color: var(--e6-cyan) !important;
border: none !important;
color: var(--e6-bg) !important;
font-weight: 600;
border-radius: 4px !important;
cursor: pointer;
padding: 8px 24px !important;
}
.preferences input[type="submit"]:hover,
.preferences button[type="submit"]:hover {
background-color: var(--e6-cyan-light) !important;
}
/* engine toggle checkboxes */
.preferences input[type="checkbox"]:checked {
accent-color: var(--e6-cyan) !important;
}
/* preferences tab navigation */
.preferences .tabs a,
.preferences .nav a {
color: var(--e6-text-muted) !important;
}
.preferences .tabs a:hover,
.preferences .nav a:hover {
color: var(--e6-text) !important;
}
.preferences .tabs a.active,
.preferences .nav a.active {
color: var(--e6-cyan) !important;
border-bottom: 2px solid var(--e6-cyan) !important;
}
/* ═══════════════════════════════════════════
12. scrollbar styling
═══════════════════════════════════════════ */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--e6-bg);
}
::-webkit-scrollbar-thumb {
background: var(--e6-border);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #2a4a6f;
}
/* ═══════════════════════════════════════════
13. selection highlight
═══════════════════════════════════════════ */
::selection {
background-color: rgba(40, 192, 232, 0.25);
color: var(--e6-text);
}
/* ═══════════════════════════════════════════
14. responsive
═══════════════════════════════════════════ */
@media (max-width: 768px) {
.echo6-nav {
padding: 8px 12px;
gap: 12px;
}
.echo6-nav a.echo6-nav-link {
font-size: 12px;
}
.echo6-waffle-menu {
right: 12px;
left: 12px;
min-width: unset;
}
.echo6-waffle-menu.active {
grid-template-columns: repeat(3, 1fr);
}
#search_form,
.search_box {
max-width: 100% !important;
margin-left: 12px !important;
margin-right: 12px !important;
}
.logo img,
img[src*="searxng"] {
max-width: 200px;
}
}
@media (max-width: 480px) {
.echo6-waffle-menu.active {
grid-template-columns: repeat(2, 1fr);
}
.echo6-nav a.echo6-nav-link {
font-size: 11px;
}
}
/* ═══════════════════════════════════════════
end // echo6-custom.css
═══════════════════════════════════════════ */