Files
gitlab-instance-0a899031_cn…/config/digital/visual-theme.config.ts
root a1daa040ef s
2026-06-07 18:06:52 +08:00

87 lines
2.8 KiB
TypeScript

export const DIGITAL_VISUAL_THEME_IDS = ["theme1", "theme2"] as const;
export type DigitalVisualThemeId = (typeof DIGITAL_VISUAL_THEME_IDS)[number];
export interface DigitalVisualThemeConfig {
id: DigitalVisualThemeId;
className: string;
name: string;
description: string;
cssVars: Record<`--dn-${string}`, string>;
}
function isDigitalVisualThemeId(value: string): value is DigitalVisualThemeId {
return DIGITAL_VISUAL_THEME_IDS.includes(value as DigitalVisualThemeId);
}
const requestedDigitalVisualTheme =
process.env.NEXT_PUBLIC_DIGITAL_VISUAL_THEME || "";
export const CURRENT_DIGITAL_VISUAL_THEME: DigitalVisualThemeId =
isDigitalVisualThemeId(requestedDigitalVisualTheme)
? requestedDigitalVisualTheme
: "theme2";
export const DIGITAL_VISUAL_THEME_CONFIGS: Record<
DigitalVisualThemeId,
DigitalVisualThemeConfig
> = {
theme1: {
id: "theme1",
className: "digital-theme-theme1",
name: "Original",
description: "保留原始数字游民站点视觉样式。",
cssVars: {
"--dn-bg": "#ffffff",
"--dn-bg-soft": "#f8fafc",
"--dn-surface": "#ffffff",
"--dn-surface-raised": "#ffffff",
"--dn-text": "#0f172a",
"--dn-text-muted": "#64748b",
"--dn-border": "#e2e8f0",
"--dn-primary": "#0ea5e9",
"--dn-primary-strong": "#0284c7",
"--dn-accent": "#f59e0b",
"--dn-cta": "#0ea5e9",
"--dn-cta-strong": "#0284c7",
"--dn-radius": "1rem",
"--dn-radius-sm": "0.5rem",
"--dn-shadow": "0 2px 8px rgba(15, 23, 42, 0.06)",
"--dn-shadow-hover": "0 12px 40px rgba(15, 23, 42, 0.1)",
"--dn-font-display": "var(--font-geist-sans)",
"--dn-font-body": "var(--font-geist-sans)",
},
},
theme2: {
id: "theme2",
className: "digital-theme-theme2",
name: "NomadCNA Home",
description:
"沿用 Nomadro 首页的品牌视觉:暖色 CTA、轻卡片、白灰背景与社区感信息层级。",
cssVars: {
"--dn-bg": "#fafafa",
"--dn-bg-soft": "#f5f6f7",
"--dn-surface": "#ffffff",
"--dn-surface-raised": "#ffffff",
"--dn-text": "#111827",
"--dn-text-muted": "#6b7280",
"--dn-border": "#f3f4f6",
"--dn-primary": "#ff4d4f",
"--dn-primary-strong": "#ff3333",
"--dn-accent": "#ff7a45",
"--dn-cta": "#ff4d4f",
"--dn-cta-strong": "#ff7a45",
"--dn-radius": "1rem",
"--dn-radius-sm": "0.5rem",
"--dn-shadow": "0 2px 8px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 0, 0, 0.03)",
"--dn-shadow-hover": "0 8px 24px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.04)",
"--dn-font-display": "var(--font-geist-sans)",
"--dn-font-body": "var(--font-geist-sans)",
},
},
};
export function getDigitalVisualThemeConfig(): DigitalVisualThemeConfig {
return DIGITAL_VISUAL_THEME_CONFIGS[CURRENT_DIGITAL_VISUAL_THEME];
}