mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-10-30 00:27:11 +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>
83 lines
2.5 KiB
JSON
83 lines
2.5 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"slug": "default",
|
|
"name": "ServerKit",
|
|
"author": "serverkit",
|
|
"version": "1.0.0",
|
|
"description": "The stock ServerKit look — deep slate surfaces with a periwinkle accent.",
|
|
"base": "dark",
|
|
"builtin": true,
|
|
"tokens": {
|
|
"dark": {
|
|
"--bg-body": "#0a0b0e",
|
|
"--bg-sidebar": "#0d0f15",
|
|
"--surface": "#101218",
|
|
"--surface-2": "#161922",
|
|
"--surface-3": "#1c2029",
|
|
"--surface-hover": "#1a1e27",
|
|
"--border": "#23272f",
|
|
"--border-soft": "#191c23",
|
|
"--border-strong": "#2c313b",
|
|
"--text": "#e9ebf0",
|
|
"--text-dim": "#9aa1af",
|
|
"--text-faint": "#646b7a",
|
|
"--text-ghost": "#444b58",
|
|
"--green": "#3ddc97",
|
|
"--green-bg": "rgba(61,220,151,0.12)",
|
|
"--amber": "#f5b945",
|
|
"--amber-bg": "rgba(245,185,69,0.12)",
|
|
"--red": "#fb6f6f",
|
|
"--red-bg": "rgba(251,111,111,0.12)",
|
|
"--cyan": "#49c7f0",
|
|
"--cyan-bg": "rgba(73,199,240,0.12)",
|
|
"--violet": "#b07bf5",
|
|
"--violet-bg": "rgba(176,123,245,0.12)",
|
|
"--radius": "10px",
|
|
"--radius-sm": "7px",
|
|
"--radius-lg": "14px",
|
|
"--scrollbar-track": "#101218",
|
|
"--scrollbar-thumb": "#2a2f3a",
|
|
"--scrollbar-thumb-hover": "#363c49",
|
|
"--bg-code": "#0d1017",
|
|
"--text-code": "#e2e8f0",
|
|
"--grid-color": "rgba(255,255,255,0.02)"
|
|
},
|
|
"light": {
|
|
"--bg-body": "#f6f7fb",
|
|
"--bg-sidebar": "#f1f3f9",
|
|
"--surface": "#ffffff",
|
|
"--surface-2": "#f6f7fb",
|
|
"--surface-3": "#eef1f7",
|
|
"--surface-hover": "#eef1f7",
|
|
"--border": "#e2e6ef",
|
|
"--border-soft": "#eef1f7",
|
|
"--border-strong": "#cdd3e0",
|
|
"--text": "#161a23",
|
|
"--text-dim": "#515a6b",
|
|
"--text-faint": "#79818f",
|
|
"--text-ghost": "#a6adba",
|
|
"--green": "#3ddc97",
|
|
"--green-bg": "rgba(61,220,151,0.12)",
|
|
"--amber": "#f5b945",
|
|
"--amber-bg": "rgba(245,185,69,0.12)",
|
|
"--red": "#fb6f6f",
|
|
"--red-bg": "rgba(251,111,111,0.12)",
|
|
"--cyan": "#49c7f0",
|
|
"--cyan-bg": "rgba(73,199,240,0.12)",
|
|
"--violet": "#b07bf5",
|
|
"--violet-bg": "rgba(176,123,245,0.12)",
|
|
"--radius": "10px",
|
|
"--radius-sm": "7px",
|
|
"--radius-lg": "14px",
|
|
"--scrollbar-track": "#f1f3f9",
|
|
"--scrollbar-thumb": "#cdd3e0",
|
|
"--scrollbar-thumb-hover": "#aab2c2",
|
|
"--bg-code": "#f1f3f9",
|
|
"--text-code": "#334155",
|
|
"--grid-color": "rgba(109,124,255,0.06)"
|
|
}
|
|
},
|
|
"accent": "#6d7cff",
|
|
"preview": ["#0a0b0e", "#101218", "#6d7cff", "#e9ebf0"]
|
|
}
|