mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-10-30 16:47:01 +09:00
Themes are data, not code — so the backend is a simple validated-JSON store, no zips/checksums/permissions. - Theme model + migration 078_themes - theme_tokens.py: server-side mirror of the token whitelist + validators (the gate: a malicious/malformed theme never reaches the DB) - theme_service: bundled-seed loading, import/list/delete, panel default, pre-auth public/active - /api/v1/themes: /installed, /import (admin), DELETE (admin), /default get+set (admin), unauthenticated /public/active for login/setup, plus /registry + /registry/<slug>/install - theme_registry_service: offline-tolerant registry fetch (TTL + last-good + bundled fallback), mirrors the extension registry pattern - bundled seed themes synced to app/data/themes + themes_index.json - 18 proving tests (server-side validation sanitizes url()/;/} smuggling, admin gate, panel-default → public/active, offline fallback, install flow) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
77 lines
2.3 KiB
JSON
77 lines
2.3 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"slug": "high-contrast",
|
|
"name": "High Contrast",
|
|
"author": "serverkit",
|
|
"version": "1.0.0",
|
|
"description": "A maximum-contrast theme tuned for accessibility, in dark and light.",
|
|
"base": "dark",
|
|
"builtin": true,
|
|
"tokens": {
|
|
"dark": {
|
|
"--bg-body": "#000000",
|
|
"--bg-sidebar": "#000000",
|
|
"--surface": "#0a0a0a",
|
|
"--surface-2": "#141414",
|
|
"--surface-3": "#1f1f1f",
|
|
"--surface-hover": "#1a1a1a",
|
|
"--border": "#ffffff",
|
|
"--border-soft": "#808080",
|
|
"--border-strong": "#ffffff",
|
|
"--text": "#ffffff",
|
|
"--text-dim": "#e0e0e0",
|
|
"--text-faint": "#b0b0b0",
|
|
"--text-ghost": "#808080",
|
|
"--green": "#00ff66",
|
|
"--green-bg": "rgba(0,255,102,0.18)",
|
|
"--amber": "#ffcc00",
|
|
"--amber-bg": "rgba(255,204,0,0.18)",
|
|
"--red": "#ff3333",
|
|
"--red-bg": "rgba(255,51,51,0.18)",
|
|
"--cyan": "#00ffff",
|
|
"--cyan-bg": "rgba(0,255,255,0.18)",
|
|
"--violet": "#cc66ff",
|
|
"--violet-bg": "rgba(204,102,255,0.18)",
|
|
"--scrollbar-track": "#000000",
|
|
"--scrollbar-thumb": "#808080",
|
|
"--scrollbar-thumb-hover": "#ffffff",
|
|
"--bg-code": "#000000",
|
|
"--text-code": "#ffffff",
|
|
"--grid-color": "rgba(255,255,255,0.06)"
|
|
},
|
|
"light": {
|
|
"--bg-body": "#ffffff",
|
|
"--bg-sidebar": "#ffffff",
|
|
"--surface": "#ffffff",
|
|
"--surface-2": "#f2f2f2",
|
|
"--surface-3": "#e6e6e6",
|
|
"--surface-hover": "#ededed",
|
|
"--border": "#000000",
|
|
"--border-soft": "#444444",
|
|
"--border-strong": "#000000",
|
|
"--text": "#000000",
|
|
"--text-dim": "#1a1a1a",
|
|
"--text-faint": "#333333",
|
|
"--text-ghost": "#555555",
|
|
"--green": "#007a1f",
|
|
"--green-bg": "rgba(0,122,31,0.14)",
|
|
"--amber": "#8a5a00",
|
|
"--amber-bg": "rgba(138,90,0,0.14)",
|
|
"--red": "#cc0000",
|
|
"--red-bg": "rgba(204,0,0,0.14)",
|
|
"--cyan": "#005f73",
|
|
"--cyan-bg": "rgba(0,95,115,0.14)",
|
|
"--violet": "#6a1b9a",
|
|
"--violet-bg": "rgba(106,27,154,0.14)",
|
|
"--scrollbar-track": "#ffffff",
|
|
"--scrollbar-thumb": "#444444",
|
|
"--scrollbar-thumb-hover": "#000000",
|
|
"--bg-code": "#f2f2f2",
|
|
"--text-code": "#000000",
|
|
"--grid-color": "rgba(0,0,0,0.08)"
|
|
}
|
|
},
|
|
"accent": "#00d0ff",
|
|
"preview": ["#000000", "#0a0a0a", "#00d0ff", "#ffffff"]
|
|
}
|