Wiki update

This commit is contained in:
Fabien POLLY
2026-01-24 17:18:37 +01:00
parent e7168f6d1d
commit fc2a3f6972
31 changed files with 4135 additions and 279 deletions

View File

@@ -1,251 +0,0 @@
name: Central Wiki Sync Logic
on:
workflow_call:
inputs:
source_repo:
required: false
type: string
default: "infinition/AcidWiki"
permissions:
contents: write
pages: write
id-token: write
jobs:
core-sync:
runs-on: ubuntu-latest
steps:
- name: Checkout Caller Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Ensure Wiki Directory Exists
run: mkdir -p wiki/docs wiki/themes wiki/assets .well-known
# 1. Onboarding Automatique
- name: Create Default Config if Missing
run: |
if [ ! -f "acidwiki.json" ]; then
echo "⚠️ acidwiki.json not found. Creating default configuration..."
cat <<EOF > acidwiki.json
{
"debug": false,
"social": {
"discord": null,
"reddit": null
},
"buymeacoffee": "https://buymeacoffee.com/infinition"
}
EOF
else
echo "✅ acidwiki.json found. Keeping existing configuration."
fi
- name: Sync Core Files from Source
env:
SOURCE_REPO: ${{ inputs.source_repo }}
run: |
# A. CLONE DU MASTER
echo "⬇️ Cloning engine from $SOURCE_REPO..."
git clone --depth 1 --branch main https://github.com/$SOURCE_REPO.git temp_source
# B. PROTECTION DES ASSETS LOCAUX
# 1. Protection du Logo
if [ -f "wiki/assets/logo.png" ]; then
echo "🛡️ Custom logo detected. Protecting local version..."
rm -f temp_source/wiki/assets/logo.png
fi
# 2. Protection des Thèmes
if [ -d "wiki/themes" ]; then
for local_theme in wiki/themes/*.css; do
if [ -f "$local_theme" ]; then
theme_name=$(basename "$local_theme")
if [ -f "temp_source/wiki/themes/$theme_name" ]; then
echo "🛡️ Custom theme detected ($theme_name). Keeping local version."
rm "temp_source/wiki/themes/$theme_name"
fi
fi
done
fi
# 3. Protection Security (Racine & .well-known)
if [ -f "security.txt" ]; then
echo "🛡️ Custom security.txt detected (root). Keeping local version."
rm -f temp_source/security.txt
fi
if [ -f ".well-known/security.txt" ]; then
echo "🛡️ Custom .well-known/security.txt detected. Keeping local version."
rm -f temp_source/.well-known/security.txt
fi
# C. COPIE DES FICHIERS (CHEMINS CORRIGÉS)
# Moteur & Système (Tout est à la racine de la source)
cp -fv temp_source/index.html .
cp -fv temp_source/manifest.json .
cp -fv temp_source/sw.js .
cp -fv temp_source/robots.txt . || true
cp -fv temp_source/.nojekyll . || true
# Fichiers Security (S'ils n'ont pas été supprimés par la protection)
if [ -f "temp_source/security.txt" ]; then cp -fv temp_source/security.txt .; fi
# Copie récursive de .well-known s'il existe dans la source
if [ -d "temp_source/.well-known" ]; then
# On copie le contenu sans écraser ce qui est protégé
cp -rn temp_source/.well-known/* .well-known/ || true
fi
# Config Template
cp -rv temp_source/wiki/config.js wiki/
# Thèmes (Safe Copy - vérifie s'il reste des fichiers)
if [ -d "temp_source/wiki/themes" ] && [ "$(ls -A temp_source/wiki/themes)" ]; then
echo "📦 Copying new themes..."
cp -r temp_source/wiki/themes/* wiki/themes/
else
echo "✅ No new themes to copy."
fi
# Assets (Safe Copy - vérifie s'il reste des fichiers)
if [ -d "temp_source/wiki/assets" ] && [ "$(ls -A temp_source/wiki/assets)" ]; then
echo "📦 Copying new assets..."
cp -r temp_source/wiki/assets/* wiki/assets/
else
echo "✅ No new assets to copy."
fi
# Nettoyage
rm -rf temp_source
- name: Dynamic Config Injection
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO_FULL: ${{ github.repository }}
run: |
CONFIG_FILE="wiki/config.js"
JSON_FILE="acidwiki.json"
MANIFEST_FILE="manifest.json"
# --- 1. DÉTECTION ---
REPO_NAME=$(echo "$REPO_FULL" | awk -F '/' '{print $2}')
YEAR=$(date +'%Y')
TAG_REL=$(gh api repos/$REPO_FULL/releases/latest --jq .tag_name 2>/dev/null || echo "")
TAG_LIST=$(gh api repos/$REPO_FULL/tags --jq '.[0].name' 2>/dev/null || echo "")
LATEST_TAG=""
if [[ -n "$TAG_REL" && "$TAG_REL" != *\{* ]]; then
LATEST_TAG="$TAG_REL"
elif [[ -n "$TAG_LIST" && "$TAG_LIST" != *\{* ]]; then
LATEST_TAG="$TAG_LIST"
fi
echo "Repo: $REPO_NAME | Version finale: '$LATEST_TAG'"
# --- 2. LECTURE JSON ---
DISCORD=""
REDDIT=""
COFFEE="https://buymeacoffee.com/infinition"
DEBUG_MODE="false"
if [ -f "$JSON_FILE" ]; then
echo "Loading acidwiki.json..."
DISCORD=$(jq -r '.social.discord // empty' $JSON_FILE)
REDDIT=$(jq -r '.social.reddit // empty' $JSON_FILE)
JSON_COFFEE=$(jq -r '.buymeacoffee // empty' $JSON_FILE)
if [ -n "$JSON_COFFEE" ]; then COFFEE=$JSON_COFFEE; fi
DEBUG_VAL=$(jq -r '.debug' $JSON_FILE)
if [ "$DEBUG_VAL" == "true" ]; then DEBUG_MODE="true"; fi
fi
# --- 3. INJECTION CONFIG JS ---
# Identité
sed -i "s|projectName: \".*\"|projectName: \"${REPO_NAME^^}\"|g" $CONFIG_FILE
sed -i "s|projectSubtitle: \".*\"|projectSubtitle: \"${REPO_NAME^^} WIKI\"|g" $CONFIG_FILE
sed -i "s|description: \".*\"|description: \"Official Documentation and Wiki for ${REPO_NAME}\"|g" $CONFIG_FILE
sed -i "s|repo: \".*\"|repo: \"$REPO_FULL\"|g" $CONFIG_FILE
# Footer & Logo
sed -i "s|footerText: \".*\"|footerText: \"© $YEAR ${REPO_NAME^^} WIKI - All rights reserved\"|g" $CONFIG_FILE
sed -i "s|logoPath: \".*\"|logoPath: \"wiki/assets/logo.png\"|g" $CONFIG_FILE
sed -i "s|manifestPath: \".*\"|manifestPath: \"manifest.json\"|g" $CONFIG_FILE
sed -i "s|debug: false|debug: $DEBUG_MODE|g" $CONFIG_FILE
# Github & Social
sed -i "s|github: \".*\"|github: \"https://github.com/$REPO_FULL\"|g" $CONFIG_FILE
sed -i "s|githubLabel: \".*\"|githubLabel: \"${REPO_NAME^^}\"|g" $CONFIG_FILE
sed -i "s|buyMeACoffee: \".*\"|buyMeACoffee: \"$COFFEE\"|g" $CONFIG_FILE
if [ -n "$DISCORD" ]; then sed -i "s|discord: .*|discord: \"$DISCORD\",|g" $CONFIG_FILE
else sed -i "s|discord: .*|discord: null,|g" $CONFIG_FILE; fi
if [ -n "$REDDIT" ]; then sed -i "s|reddit: .*|reddit: \"$REDDIT\",|g" $CONFIG_FILE
else sed -i "s|reddit: .*|reddit: null,|g" $CONFIG_FILE; fi
# Menus & Versioning
sed -i "s|top: \[.*|top: [],|g" $CONFIG_FILE
sed -i "s|bottom: \[.*|bottom: []|g" $CONFIG_FILE
sed -i "s|type: \"github\"|type: \"local\"|g" $CONFIG_FILE
if [ -n "$LATEST_TAG" ]; then
sed -i "s|manualVersion: \".*\"|manualVersion: \"$LATEST_TAG\"|g" $CONFIG_FILE
else
sed -i "s|manualVersion: \".*\"|manualVersion: \"\"|g" $CONFIG_FILE
fi
sed -i "s|manualDate: \".*\"|manualDate: \"$(date +'%Y-%m-%d')\"|g" $CONFIG_FILE
# --- 4. INJECTION MANIFEST PWA ---
echo "Injecting Manifest Data..."
if [ -f "$MANIFEST_FILE" ]; then
jq --arg name "${REPO_NAME^^} WIKI" \
--arg short "$REPO_NAME" \
--arg desc "Official Documentation and Wiki for $REPO_NAME" \
--arg icon "wiki/assets/logo.png" \
'.name = $name | .short_name = $short | .description = $desc | .icons[].src = $icon | .shortcuts[].icons[].src = $icon' \
$MANIFEST_FILE > manifest.tmp && mv manifest.tmp $MANIFEST_FILE
fi
# --- 5. INJECTION SECURITY.TXT (DYNAMIQUE) ---
# Calcule la date d'expiration (+1 an)
EXP_DATE=$(date -d "+1 year" -u +"%Y-%m-%dT%H:%M:%S.000Z")
update_security_file() {
local file=$1
if [ -f "$file" ]; then
echo "Updating $file..."
# Remplace l'ancien repo (source) par le nouveau (ex: infinition/AcidWiki -> infinition/Bjorn)
sed -i "s|infinition/AcidWiki|$REPO_FULL|g" "$file"
# Met à jour la date d'expiration
sed -i "s|Expires: .*|Expires: $EXP_DATE|g" "$file"
fi
}
update_security_file "security.txt"
update_security_file ".well-known/security.txt"
- name: Commit and Push Changes
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
# Ajout de tous les fichiers (Système, Contenu, Sécurité)
git add index.html wiki/ acidwiki.json manifest.json sw.js robots.txt .nojekyll security.txt .well-known/
git diff --quiet && git diff --staged --quiet || (git commit -m "chore: update wiki config [skip ci]" && git push)
- name: Auto-Configure GitHub Pages
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }}
run: |
gh api "repos/$REPO/pages" -X POST -F "source[branch]=main" -F "source[path]=/" --silent || true
OWNER="${REPO%%/*}"
REPO_NAME="${REPO#*/}"
gh api "repos/$REPO" -X PATCH -F "homepage=https://$OWNER.github.io/$REPO_NAME/" --silent || true

View File

@@ -1,28 +0,0 @@
name: Wiki Sync
on:
# 1. Déclenchement manuel quand tu pushes sur ce repo
push:
branches: [ main ]
paths:
- 'wiki/**'
- 'acidwiki.json'
- '.github/workflows/wiki-sync.yml'
# 2. Bouton manuel dans l'interface Actions
workflow_dispatch:
# 3. AUTOMATIQUE : Tous les jours à 4h00 du matin (UTC)
schedule:
- cron: '0 4 * * *'
permissions:
contents: write
pages: write
id-token: write
jobs:
deploy-wiki:
# Appelle le script stocké sur AcidWiki
# "@main" signifie qu'il prendra TOUJOURS la dernière version du workflow maître
uses: infinition/AcidWiki/.github/workflows/reusable-wiki-sync.yml@main

33
.gitignore vendored Normal file
View File

@@ -0,0 +1,33 @@
# OS files
.DS_Store
Thumbs.db
desktop.ini
# IDE files
.vscode/
.idea/
*.swp
*.swo
# Node.js
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.npm/
# Project specific
.gemini/
.env
.env.local
.env.*.local
dist/
build/
# Wiki Content (Keep empty for template)
wiki/docs/*
!wiki/docs/.gitkeep
# Wiki Content (Keep empty for template)
wiki/docs/*
!wiki/docs/.gitkeep

0
.nojekyll Normal file
View File

4
.well-known/security.txt Normal file
View File

@@ -0,0 +1,4 @@
Contact: https://github.com/infinition/Bjorn/issues
Expires: 2027-01-24T15:36:48.000Z
Preferred-Languages: en, fr
Policy: https://github.com/infinition/Bjorn/blob/wiki/SECURITY.md

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Infinition
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

8
acidwiki.json Normal file
View File

@@ -0,0 +1,8 @@
{
"social": {
"discord": "https://discord.gg/B3ZH9taVfT",
"reddit": "https://www.reddit.com/r/Bjorn_CyberViking/",
"github": "https://github.com/infinition/Bjorn",
"buyMeACoffee": "https://buymeacoffee.com/infinition"
}
}

2961
index.html Normal file

File diff suppressed because it is too large Load Diff

35
manifest.json Normal file
View File

@@ -0,0 +1,35 @@
{
"name": "Bjorn WIKI",
"short_name": "Bjorn",
"description": "Official Documentation and Wiki for Bjorn",
"start_url": "./index.html",
"display": "standalone",
"background_color": "#0B0C0E",
"theme_color": "#22c55e",
"orientation": "any",
"icons": [
{
"src": "wiki/assets/logo.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any maskable"
},
{
"src": "wiki/assets/logo.png",
"sizes": "512x512",
"type": "image/png"
}
],
"shortcuts": [
{
"name": "Search Wiki",
"url": "./index.html?search=true",
"icons": [
{
"src": "wiki/assets/logo.png",
"sizes": "192x192"
}
]
}
]
}

5
robots.txt Normal file
View File

@@ -0,0 +1,5 @@
User-agent: *
Allow: /
# Sitemaps (Optionnel, à mettre à jour avec votre URL réelle)
Sitemap: https://infinition.github.io/Bjorn/sitemap.xml

4
security.txt Normal file
View File

@@ -0,0 +1,4 @@
Contact: https://github.com/infinition/Bjorn/issues
Expires: 2027-01-24T15:36:48.000Z
Preferred-Languages: en, fr
Policy: https://github.com/infinition/Bjorn/blob/wiki/SECURITY.md

69
sw.js Normal file
View File

@@ -0,0 +1,69 @@
const CACHE_NAME = 'bjorn-wiki-v2';
const STATIC_ASSETS = [
'./',
'./index.html',
'./config.js',
'./manifest.json',
'./assets/bjorn.png',
'https://cdn.tailwindcss.com',
'https://unpkg.com/lucide@latest',
'https://cdn.jsdelivr.net/npm/marked/marked.min.js',
'https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.0.6/purify.min.js',
'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css',
'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js',
'https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=Inter:wght@400;500;600&display=swap'
];
// Install Event - Cache Static Assets
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(CACHE_NAME).then((cache) => {
console.log('[SW] Caching static assets');
return cache.addAll(STATIC_ASSETS);
})
);
self.skipWaiting();
});
// Activate Event - Clean up old caches
self.addEventListener('activate', (event) => {
event.waitUntil(
caches.keys().then((cacheNames) => {
return Promise.all(
cacheNames.map((cacheName) => {
if (cacheName !== CACHE_NAME) {
console.log('[SW] Deleting old cache:', cacheName);
return caches.delete(cacheName);
}
})
);
})
);
self.clients.claim();
});
// Fetch Event - Stale-While-Revalidate Strategy
self.addEventListener('fetch', (event) => {
// Skip non-GET requests
if (event.request.method !== 'GET') return;
// Strategy: Stale-While-Revalidate for most assets
event.respondWith(
caches.open(CACHE_NAME).then((cache) => {
return cache.match(event.request).then((response) => {
const fetchPromise = fetch(event.request).then((networkResponse) => {
// Cache the new response
if (networkResponse.ok) {
cache.put(event.request, networkResponse.clone());
}
return networkResponse;
}).catch(() => {
// If network fails, we already returned the cached response if it exists
});
return response || fetchPromise;
});
})
);
});

BIN
wiki/assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

110
wiki/config.js Normal file
View File

@@ -0,0 +1,110 @@
/**
* AcidWiki Configuration (Master Template)
* Ce fichier est écrasé dynamiquement par le workflow GitHub Actions.
* Ne modifiez pas les valeurs ici pour un projet spécifique, utilisez acidwiki.json.
*/
const CONFIG = {
// Project Information (Sera remplacé par le nom du Repo)
projectName: "ACIDWIKI",
projectSubtitle: "ACIDWIKI WIKI",
description: "Official Documentation and Wiki for AcidWiki",
// Versioning Settings
versioning: {
type: "local",
manualVersion: "",
manualDate: "2026-01-24"
},
// GitHub Repository
repo: "infinition/AcidWiki",
branch: "main",
// Theme Settings
themes: [
{ id: "dark", name: "Dark Mode", file: "wiki/themes/dark.css", isDark: true },
{ id: "dim", name: "Dim Mode", file: "wiki/themes/light.css", isDark: true },
{ id: "electric-blue", name: "Electric Blue", file: "wiki/themes/electric-blue.css", isDark: true },
{ id: "cyberpunk", name: "Cyberpunk", file: "wiki/themes/cyberpunk.css", isDark: true },
{ id: "forest", name: "Forest", file: "wiki/themes/forest.css", isDark: true },
{ id: "monochrome", name: "Monochrome", file: "wiki/themes/monochrome.css", isDark: true },
{ id: "retro-hackers", name: "Retro Hackers", file: "wiki/themes/retro-hackers.css", isDark: true },
{ id: "retro-hackers-w", name: "Retro Hackers White", file: "wiki/themes/retro-hackers-w.css", isDark: false },
{ id: "retro-acid-burn", name: "Retro Acid Burn", file: "wiki/themes/retro-acid-burn.css", isDark: true },
{ id: "paper", name: "Paper", file: "wiki/themes/paper.css", isDark: false },
{ id: "solarized-light", name: "Solarized Light", file: "wiki/themes/solarized-light.css", isDark: false },
{ id: "nord-light", name: "Nord Light", file: "wiki/themes/nord-light.css", isDark: false },
{ id: "paper-sepia", name: "Sepia Paper", file: "wiki/themes/paper-sepia.css", isDark: false },
{ id: "paper-cool", name: "Cool Paper", file: "wiki/themes/paper-cool.css", isDark: false },
{ id: "retro-irc", name: "Retro IRC", file: "wiki/themes/retro-irc.css", isDark: false },
{ id: "nature", name: "Nature", file: "wiki/themes/nature.css", isDark: false },
{ id: "glassmorphism", name: "Glassmorphism", file: "wiki/themes/glassmorphism.css", isDark: true }
],
defaultTheme: "dark",
// Feature Toggles
features: {
showChangelog: true,
showSearch: true,
showSocialBadges: true,
showThemeToggle: true,
pageTransitions: true,
autoCollapseSidebar: false,
stickyBreadcrumbs: true,
showRootReadme: true,
debug: true
},
// Custom Navigation Links (Vides par défaut)
links: {
top: [],
bottom: []
},
// Footer
footerText: "© 2026 ACIDWIKI WIKI - All rights reserved",
// UI Strings
ui: {
joinUsTitle: ":: JOIN US ::",
onThisPageTitle: "On this page",
changelogTitle: "Changelog",
rootReadmeTitle: "Project Home",
searchPlaceholder: "Search (Ctrl+K)...",
lastUpdatedText: "Updated",
readingTimePrefix: "~",
readingTimeSuffix: "min read",
noResultsText: "No results found.",
noSectionsText: "No sections",
fetchingReleasesText: "Fetching GitHub releases...",
checkingVersionText: "checking...",
initializingText: "Initializing...",
themeChangedText: "Theme changed to: ",
menuText: "Menu",
onThisPageMobile: "On this page"
},
// Logo Settings
logoPath: "wiki/assets/logo.png",
logoPlaceholder: "https://placehold.co/40x40/111214/22c55e?text=A",
// PWA & SEO Settings
themeColor: "#0B0C0E",
accentColor: "#22c55e",
manifestPath: "manifest.json",
// Social Links
social: {
discord: null,
reddit: null,
github: "https://github.com/infinition/AcidWiki", // Virgule respectée par le script
buyMeACoffee: "https://buymeacoffee.com/infinition"
},
// Badge Labels
badges: {
discordLabel: "COMMUNITY",
redditLabel: "REDDIT",
githubLabel: "ACIDWIKI"
}
};

35
wiki/themes/cyberpunk.css Normal file
View File

@@ -0,0 +1,35 @@
:root {
--bg-body: #0D0221;
--bg-sidebar: #190033;
--border-color: #FF007F;
--text-main: #E0E0E0;
--text-heading: #00FFFF;
--accent-green: #FF007F;
--accent-dim: rgba(255, 0, 127, 0.1);
--code-bg: #1A0033;
}
/* Override scrollbar and other elements to use neon pink */
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, #FF007F, var(--border-color)) !important;
}
.text-hack-green {
color: #FF007F !important;
}
.bg-hack-greenDim {
background-color: rgba(255, 0, 127, 0.1) !important;
}
.border-hack-green {
border-color: #FF007F !important;
}
.markdown-body a {
color: #00FFFF !important;
}
.markdown-body a:hover {
border-bottom-color: #00FFFF !important;
}

15
wiki/themes/dark.css Normal file
View File

@@ -0,0 +1,15 @@
:root {
--bg-body: #0B0C0E;
--bg-sidebar: #111214;
--border-color: #2A2E35;
--text-main: #A0AAB8;
--text-heading: #E2E8F0;
--accent-green: #22c55e;
--accent-dim: rgba(34, 197, 94, 0.1);
--code-bg: #1e1e1e;
}
/* Compatibility with tailwind colors if needed */
.dark {
--accent-green: #22c55e;
}

View File

@@ -0,0 +1,28 @@
:root {
--bg-body: #050A15;
--bg-sidebar: #0A1225;
--border-color: #1E2D4A;
--text-main: #94A3B8;
--text-heading: #F8FAFC;
--accent-green: #38BDF8;
/* Electric Blue */
--accent-dim: rgba(56, 189, 248, 0.1);
--code-bg: #0F172A;
}
/* Override scrollbar and other elements to use blue */
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, #38BDF8, var(--border-color)) !important;
}
.text-hack-green {
color: #38BDF8 !important;
}
.bg-hack-greenDim {
background-color: rgba(56, 189, 248, 0.1) !important;
}
.border-hack-green {
border-color: #38BDF8 !important;
}

27
wiki/themes/forest.css Normal file
View File

@@ -0,0 +1,27 @@
:root {
--bg-body: #1B261B;
--bg-sidebar: #243024;
--border-color: #3E523E;
--text-main: #D1D5D1;
--text-heading: #A7C957;
--accent-green: #6A994E;
--accent-dim: rgba(106, 153, 78, 0.1);
--code-bg: #2D3A2D;
}
/* Override scrollbar and other elements */
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, #6A994E, var(--border-color)) !important;
}
.text-hack-green {
color: #6A994E !important;
}
.bg-hack-greenDim {
background-color: rgba(106, 153, 78, 0.1) !important;
}
.border-hack-green {
border-color: #6A994E !important;
}

View File

@@ -0,0 +1,55 @@
:root {
--bg-body: #0f172a;
--bg-sidebar: rgba(30, 41, 59, 0.7);
--border-color: rgba(255, 255, 255, 0.1);
--text-main: #e2e8f0;
--text-heading: #f8fafc;
--accent-green: #38bdf8;
--accent-dim: rgba(56, 189, 248, 0.1);
--code-bg: rgba(15, 23, 42, 0.8);
}
/* Glassmorphism theme specific overrides */
body {
background: radial-gradient(circle at top left, #1e293b, #0f172a);
background-attachment: fixed;
}
#sidebar,
#mobile-toc-sidebar {
background: rgba(30, 41, 59, 0.6) !important;
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-right: 1px solid rgba(255, 255, 255, 0.1);
}
#markdown-viewer {
background: rgba(30, 41, 59, 0.4);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 16px;
padding: 2rem;
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
}
.nav-link.active {
background: rgba(56, 189, 248, 0.2) !important;
border-left: 4px solid #38bdf8 !important;
color: #38bdf8 !important;
box-shadow: 0 0 15px rgba(56, 189, 248, 0.3);
}
.markdown-body a {
color: #38bdf8;
text-shadow: 0 0 8px rgba(56, 189, 248, 0.5);
}
::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.1) !important;
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.2) !important;
}

32
wiki/themes/light.css Normal file
View File

@@ -0,0 +1,32 @@
:root {
--bg-body: #1E293B;
/* Slate 800 */
--bg-sidebar: #0F172A;
/* Slate 900 */
--border-color: #334155;
/* Slate 700 */
--text-main: #94A3B8;
/* Slate 400 */
--text-heading: #F1F5F9;
/* Slate 100 */
--accent-green: #10B981;
/* Emerald 500 */
--accent-dim: rgba(16, 185, 129, 0.1);
--code-bg: #020617;
/* Slate 950 */
}
/* Compatibility with tailwind colors if needed */
.dark {
--accent-green: #10B981;
}
/* Specific overrides for Dim mode to ensure readability */
.markdown-body blockquote {
background: rgba(16, 185, 129, 0.05) !important;
border-left-color: #10B981 !important;
}
.text-hack-green {
color: #10B981 !important;
}

View File

@@ -0,0 +1,27 @@
:root {
--bg-body: #121212;
--bg-sidebar: #1E1E1E;
--border-color: #333333;
--text-main: #BBBBBB;
--text-heading: #FFFFFF;
--accent-green: #FFFFFF;
--accent-dim: rgba(255, 255, 255, 0.1);
--code-bg: #000000;
}
/* Override scrollbar and other elements */
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, #FFFFFF, var(--border-color)) !important;
}
.text-hack-green {
color: #FFFFFF !important;
}
.bg-hack-greenDim {
background-color: rgba(255, 255, 255, 0.1) !important;
}
.border-hack-green {
border-color: #FFFFFF !important;
}

52
wiki/themes/nature.css Normal file
View File

@@ -0,0 +1,52 @@
:root {
--bg-body: #f7f3e9;
--bg-sidebar: #e8e1d1;
--border-color: #d1c7b1;
--text-main: #3e442b;
--text-heading: #2d3319;
--accent-green: #606c38;
--accent-dim: rgba(96, 108, 56, 0.1);
--code-bg: #fefae0;
}
/* Nature theme specific overrides */
body {
background-color: var(--bg-body);
color: var(--text-main);
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3 {
color: #283618;
font-weight: 700;
}
.markdown-body a {
color: #bc6c25;
}
.markdown-body a:hover {
border-bottom-color: #dda15e;
}
#sidebar,
#mobile-toc-sidebar {
background-color: #e8e1d1 !important;
border-right: 1px solid #d1c7b1;
}
.nav-link.active {
background-color: rgba(96, 108, 56, 0.15) !important;
border-left-color: #606c38 !important;
color: #283618 !important;
}
::-webkit-scrollbar-thumb {
background: #dda15e !important;
}
.markdown-body blockquote {
background: #fefae0;
border-left-color: #606c38;
}

View File

@@ -0,0 +1,25 @@
:root {
--bg-body: #eceff4;
--bg-sidebar: #e5e9f0;
--border-color: #d8dee9;
--text-main: #4c566a;
--text-heading: #2e3440;
--accent-green: #88c0d0;
--accent-dim: rgba(136, 192, 208, 0.1);
--code-bg: #d8dee9;
}
/* Nord Light specific overrides */
.markdown-body a {
color: #5e81ac;
}
.nav-link.active {
background-color: rgba(136, 192, 208, 0.1) !important;
border-left-color: #88c0d0 !important;
color: #5e81ac !important;
}
::-webkit-scrollbar-thumb {
background: #d8dee9 !important;
}

View File

@@ -0,0 +1,25 @@
:root {
--bg-body: #e8f1f2;
--bg-sidebar: #d1e3e5;
--border-color: #b8d0d2;
--text-main: #2d4a4d;
--text-heading: #1a3033;
--accent-green: #0081a7;
--accent-dim: rgba(0, 129, 167, 0.1);
--code-bg: #d9e8ea;
}
/* Cool Paper specific overrides */
.markdown-body a {
color: #0081a7;
}
.nav-link.active {
background-color: rgba(0, 129, 167, 0.1) !important;
border-left-color: #0081a7 !important;
color: #2d4a4d !important;
}
::-webkit-scrollbar-thumb {
background: #b8d0d2 !important;
}

View File

@@ -0,0 +1,25 @@
:root {
--bg-body: #e3d5b8;
--bg-sidebar: #d4c3a1;
--border-color: #c4b28f;
--text-main: #4a3a2a;
--text-heading: #2d241a;
--accent-green: #8b5e34;
--accent-dim: rgba(139, 94, 52, 0.1);
--code-bg: #dcd0b0;
}
/* Sepia Paper specific overrides */
.markdown-body a {
color: #8b5e34;
}
.nav-link.active {
background-color: rgba(139, 94, 52, 0.1) !important;
border-left-color: #8b5e34 !important;
color: #4a3a2a !important;
}
::-webkit-scrollbar-thumb {
background: #c4b28f !important;
}

54
wiki/themes/paper.css Normal file
View File

@@ -0,0 +1,54 @@
:root {
--bg-body: #fdfcf0;
--bg-sidebar: #f4f1ea;
--border-color: #e6e2d3;
--text-main: #444444;
--text-heading: #222222;
--accent-green: #d4a373;
--accent-dim: rgba(212, 163, 115, 0.1);
--code-bg: #f8f5ed;
}
/* Light theme specific overrides */
body {
background-color: var(--bg-body);
color: var(--text-main);
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3 {
color: var(--text-heading);
}
.markdown-body a {
color: #bc6c25;
}
.markdown-body a:hover {
border-bottom-color: #bc6c25;
}
#sidebar,
#mobile-toc-sidebar {
background-color: var(--bg-sidebar) !important;
border-color: var(--border-color);
}
.nav-link:hover {
background-color: rgba(0, 0, 0, 0.05);
}
.nav-link.active {
background-color: var(--accent-dim) !important;
border-left-color: var(--accent-green) !important;
color: #bc6c25 !important;
}
::-webkit-scrollbar-thumb {
background: var(--border-color) !important;
}
::-webkit-scrollbar-thumb:hover {
background: var(--accent-green) !important;
}

View File

@@ -0,0 +1,106 @@
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap');
:root {
--bg-body: #000000;
--bg-sidebar: #050505;
--border-color: #00ff41;
--text-main: #00ff41;
--text-heading: #d4ff00;
--accent-green: #00ff41;
--accent-dim: rgba(0, 255, 65, 0.1);
--code-bg: #0a0a0a;
/* Acid Burn Specific */
--acid-yellow: #d4ff00;
--acid-green: #00ff41;
}
/* --- PHOSPHOR GLOW --- */
body {
font-family: 'JetBrains Mono', monospace !important;
background-color: #000 !important;
color: var(--text-main) !important;
text-shadow: 0 0 5px rgba(0, 255, 65, 0.5);
}
/* --- SCANLINES (Static but intense) --- */
body::after {
content: " ";
display: block;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.25) 50%);
z-index: 9999;
background-size: 100% 4px;
pointer-events: none;
opacity: 0.3;
}
/* --- TYPOGRAPHY --- */
h1,
h2,
h3,
h4,
h5,
h6 {
color: var(--acid-yellow) !important;
text-shadow: 0 0 10px var(--acid-yellow);
text-transform: uppercase;
letter-spacing: 2px;
}
.markdown-body h1 {
border-bottom-color: var(--acid-yellow) !important;
}
.markdown-body strong {
color: #fff !important;
text-shadow: 0 0 8px #fff;
}
.markdown-body a {
color: var(--acid-yellow) !important;
text-decoration: underline;
text-underline-offset: 4px;
}
.markdown-body a:hover {
color: #fff !important;
text-shadow: 0 0 10px var(--acid-yellow);
}
/* --- UI OVERRIDES --- */
#sidebar,
#mobile-toc-sidebar {
background-color: #050505 !important;
border-right: 2px solid var(--accent-green);
}
.nav-link.active {
background-color: rgba(0, 255, 65, 0.2) !important;
border-left: 4px solid var(--accent-green) !important;
color: #fff !important;
}
.nav-link:hover {
color: #fff !important;
background-color: rgba(0, 255, 65, 0.1);
}
::-webkit-scrollbar-thumb {
background: var(--accent-green) !important;
box-shadow: 0 0 10px var(--accent-green);
}
/* --- CODE BLOCKS --- */
.markdown-body pre {
border: 1px solid var(--accent-green) !important;
box-shadow: 0 0 15px rgba(0, 255, 65, 0.2);
}
.markdown-body code {
color: var(--acid-yellow) !important;
}

View File

@@ -0,0 +1,130 @@
@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&family=JetBrains+Mono:wght@400;700&display=swap');
:root {
--bg-body: #050505;
--bg-sidebar: rgba(5, 5, 5, 0.8);
--border-color: #13aff0;
--text-main: #80ff80;
--text-heading: #13aff0;
--accent-green: #0f0;
--accent-dim: rgba(0, 255, 0, 0.1);
--code-bg: #000;
/* Hacker Specific */
--neon-blue: #13aff0;
--neon-orange: #FF6B00;
--neon-purple: #bd00ff;
}
/* --- THE 3D GRID --- */
body::before {
content: "";
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) perspective(600px) rotateX(60deg);
width: 300vw;
height: 300vh;
background-image:
linear-gradient(rgba(0, 243, 255, 0.3) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 243, 255, 0.3) 1px, transparent 1px);
background-size: 60px 60px;
animation: grid-scroll 11s linear infinite;
z-index: -1;
pointer-events: none;
-webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0) 80%);
mask-image: linear-gradient(to top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0) 80%);
}
@keyframes grid-scroll {
0% {
background-position: 0 0;
}
100% {
background-position: 0 60px;
}
}
/* --- SCANLINES --- */
body::after {
content: " ";
display: block;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
background:
linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.1) 50%),
linear-gradient(90deg, rgba(255, 0, 0, 0.02), rgba(0, 255, 0, 0.01), rgba(0, 0, 255, 0.02));
z-index: 9999;
background-size: 100% 3px, 3px 100%;
pointer-events: none;
opacity: 0.4;
}
/* --- TYPOGRAPHY --- */
body {
font-family: 'JetBrains Mono', monospace !important;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: 'Cinzel', serif !important;
text-transform: uppercase;
text-shadow: 0 0 10px var(--neon-blue);
}
.markdown-body h1 {
color: var(--neon-blue) !important;
border-bottom-color: var(--neon-blue) !important;
}
.markdown-body h2 {
color: var(--neon-orange) !important;
text-shadow: 0 0 10px var(--neon-orange);
}
.markdown-body h3 {
color: var(--neon-purple) !important;
text-shadow: 0 0 10px var(--neon-purple);
}
.markdown-body strong {
color: #fff !important;
text-shadow: 0 0 8px rgba(255, 255, 255, 0.8);
}
.markdown-body a {
color: var(--neon-purple) !important;
border-bottom: 1px dashed var(--neon-purple);
}
.markdown-body a:hover {
color: #fff !important;
text-shadow: 0 0 5px var(--neon-purple);
border-bottom-style: solid;
}
/* --- UI OVERRIDES --- */
#sidebar,
#mobile-toc-sidebar {
background-color: var(--bg-sidebar) !important;
backdrop-filter: blur(10px);
}
.nav-link.active {
background-color: rgba(19, 175, 240, 0.2) !important;
border-left-color: var(--neon-blue) !important;
color: var(--neon-blue) !important;
}
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, var(--neon-blue), #000) !important;
border: 1px solid var(--neon-blue);
}

View File

@@ -0,0 +1,149 @@
@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&family=JetBrains+Mono:wght@400;700&display=swap');
:root {
--bg-body: #050505;
--bg-sidebar: rgba(5, 5, 5, 0.8);
--border-color: #13aff0;
--text-main: #80ff80;
--text-heading: #13aff0;
--accent-green: #0f0;
--accent-dim: rgba(0, 255, 0, 0.1);
--code-bg: #000;
/* Hacker Specific */
--neon-blue: #13aff0;
--neon-orange: #FF6B00;
--neon-purple: #bd00ff;
}
/* --- THE 3D GRID --- */
body::before {
content: "";
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) perspective(600px) rotateX(60deg);
width: 300vw;
height: 300vh;
background-image:
linear-gradient(rgba(0, 243, 255, 0.5) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 243, 255, 0.5) 1px, transparent 1px);
background-size: 60px 60px;
animation: grid-scroll 11s linear infinite;
z-index: -1;
pointer-events: none;
-webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0) 80%);
mask-image: linear-gradient(to top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0) 80%);
}
@keyframes grid-scroll {
0% {
background-position: 0 0;
}
100% {
background-position: 0 60px;
}
}
/* --- TRANSPARENCY OVERRIDES --- */
#scroll-container,
main,
.bg-hack-bg,
.bg-hack-sidebar,
#markdown-viewer {
background-color: transparent !important;
}
/* Sidebar needs some background for readability but should be semi-transparent */
#sidebar,
#mobile-toc-sidebar {
background-color: rgba(5, 5, 5, 0.85) !important;
backdrop-filter: blur(8px);
border-right: 1px solid var(--neon-blue);
}
/* Content area readability - using a very subtle overlay if needed, but keeping it transparent as requested */
#markdown-viewer {
padding: 2rem;
border-radius: 12px;
border: 1px solid rgba(19, 175, 240, 0.1);
}
/* --- SCANLINES --- */
body::after {
content: " ";
display: block;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
background:
linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.15) 50%),
linear-gradient(90deg, rgba(255, 0, 0, 0.03), rgba(0, 255, 0, 0.01), rgba(0, 0, 255, 0.03));
z-index: 9999;
background-size: 100% 3px, 3px 100%;
pointer-events: none;
opacity: 0.6;
}
/* --- TYPOGRAPHY --- */
body {
font-family: 'JetBrains Mono', monospace !important;
background-color: #050505 !important;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: 'Cinzel', serif !important;
text-transform: uppercase;
text-shadow: 0 0 10px var(--neon-blue);
}
.markdown-body h1 {
color: var(--neon-blue) !important;
border-bottom-color: var(--neon-blue) !important;
}
.markdown-body h2 {
color: var(--neon-orange) !important;
text-shadow: 0 0 10px var(--neon-orange);
}
.markdown-body h3 {
color: var(--neon-purple) !important;
text-shadow: 0 0 10px var(--neon-purple);
}
.markdown-body strong {
color: #fff !important;
text-shadow: 0 0 8px rgba(255, 255, 255, 0.8);
}
.markdown-body a {
color: var(--neon-purple) !important;
border-bottom: 1px dashed var(--neon-purple);
}
.markdown-body a:hover {
color: #fff !important;
text-shadow: 0 0 5px var(--neon-purple);
border-bottom-style: solid;
}
/* --- UI OVERRIDES --- */
.nav-link.active {
background-color: rgba(19, 175, 240, 0.2) !important;
border-left-color: var(--neon-blue) !important;
color: var(--neon-blue) !important;
}
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, var(--neon-blue), #000) !important;
border: 1px solid var(--neon-blue);
}

70
wiki/themes/retro-irc.css Normal file
View File

@@ -0,0 +1,70 @@
:root {
--bg-body: #ffffff;
--bg-sidebar: #f0f0f0;
--border-color: #c0c0c0;
--text-main: #000000;
--text-heading: #000080;
--accent-green: #008000;
--accent-dim: rgba(0, 128, 0, 0.1);
--code-bg: #ffffff;
}
/* Retro IRC specific overrides */
body {
font-family: "Fixedsys", "Courier New", monospace !important;
background-color: var(--bg-body);
color: var(--text-main);
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3 {
color: #000080;
font-weight: bold;
border-bottom: 2px solid #000080;
}
.markdown-body a {
color: #0000ff;
text-decoration: underline;
}
.markdown-body a:hover {
color: #ff0000;
}
#sidebar,
#mobile-toc-sidebar {
background-color: #c0c0c0 !important;
border-right: 2px solid #808080;
}
.nav-link {
color: #000 !important;
border: 1px solid transparent;
}
.nav-link:hover {
background-color: #000080 !important;
color: #fff !important;
}
.nav-link.active {
background-color: #000080 !important;
color: #fff !important;
border-left: 4px solid #ff0000 !important;
}
::-webkit-scrollbar-thumb {
background: #808080 !important;
border: 1px solid #ffffff;
}
.markdown-body pre {
border: 1px solid #808080 !important;
background-color: #f0f0f0 !important;
}
.markdown-body code {
color: #800000 !important;
}

View File

@@ -0,0 +1,30 @@
:root {
--bg-body: #fdf6e3;
--bg-sidebar: #eee8d5;
--border-color: #d5c4a1;
--text-main: #657b83;
--text-heading: #073642;
--accent-green: #859900;
--accent-dim: rgba(133, 153, 0, 0.1);
--code-bg: #eee8d5;
}
/* Solarized Light specific overrides */
.markdown-body a {
color: #268bd2;
}
.markdown-body blockquote {
background: #eee8d5;
border-left-color: #859900;
}
.nav-link.active {
background-color: rgba(133, 153, 0, 0.1) !important;
border-left-color: #859900 !important;
color: #859900 !important;
}
::-webkit-scrollbar-thumb {
background: #93a1a1 !important;
}