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>
This commit is contained in:
parent
89834796ff
commit
e9231ac24a
93 changed files with 51223 additions and 254 deletions
696
assets/echo6-custom.css
Normal file
696
assets/echo6-custom.css
Normal file
|
|
@ -0,0 +1,696 @@
|
|||
/* ═══════════════════════════════════════════════════════════════════
|
||||
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
|
||||
═══════════════════════════════════════════ */
|
||||
Loading…
Add table
Add a link
Reference in a new issue