diff --git a/src/app/admin/theme/page.tsx b/src/app/admin/theme/page.tsx index 4d9f73b0..b83a398a 100644 --- a/src/app/admin/theme/page.tsx +++ b/src/app/admin/theme/page.tsx @@ -87,6 +87,12 @@ const COLOR_FIELDS: { def: "#eeb425", desc: "Borders, dividers, outlines", }, + { + key: "panel_border_color", + label: "Panel border", + def: "#e9b124", + desc: "Border color of home page panels and cards", + }, { key: "color_success", label: "Success", diff --git a/src/components/home/user-view.tsx b/src/components/home/user-view.tsx index 4d7a5413..28e88c5b 100644 --- a/src/components/home/user-view.tsx +++ b/src/components/home/user-view.tsx @@ -9,12 +9,14 @@ interface UserViewProps { userId: number; username: string; look: string; + motto?: string | null; } export default async function UserView({ userId, username, look, + motto, }: UserViewProps) { const t = await getTranslations("pages.home"); const hotelName = (await siteSettings.get("hotel_name", "Atom")) ?? "Atom"; @@ -53,7 +55,7 @@ export default async function UserView({ return (
-
+
-
- - {username} - -
+
+
+ +
+ {username} +
+ +
+ + {username} + +

+ {motto || "Welcome back!"} +

+
+
+
{t("onlineFriends")}
diff --git a/src/components/theme-vars.tsx b/src/components/theme-vars.tsx index 92f31915..696c7588 100644 --- a/src/components/theme-vars.tsx +++ b/src/components/theme-vars.tsx @@ -36,6 +36,7 @@ export async function ThemeVars() { linkColor, linkHover, borderColor, + panelBorderColor, gradientFrom, gradientTo, borderRadius, @@ -75,6 +76,7 @@ export async function ThemeVars() { g("link_color", "#eeb425"), g("link_hover_color", "#cf9d15"), g("border_color", "#eeb425"), + g("panel_border_color", "#e9b124"), g("gradient_from", "#f59e0b"), g("gradient_to", "#10b981"), g("border_radius", "12"), @@ -122,6 +124,7 @@ export async function ThemeVars() { link_color: safe(linkColor, "#eeb425"), link_hover_color: safe(linkHover, "#cf9d15"), border_color: safe(borderColor, "#eeb425"), + panel_border_color: safe(panelBorderColor, "#e9b124"), gradient_from: safe(gradientFrom, "#f59e0b"), gradient_to: safe(gradientTo, "#10b981"), } satisfies ThemePalette; diff --git a/src/lib/theme-css.ts b/src/lib/theme-css.ts index 32a730c6..03a255b8 100644 --- a/src/lib/theme-css.ts +++ b/src/lib/theme-css.ts @@ -31,6 +31,7 @@ const CSS_VARIABLES: Record = { link_color: "link-color", link_hover_color: "link-hover-color", border_color: "border-color", + panel_border_color: "panel-border-color", gradient_from: "gradient-from", gradient_to: "gradient-to", }; diff --git a/src/lib/theme-presets.ts b/src/lib/theme-presets.ts index 4bc316c8..a163e850 100644 --- a/src/lib/theme-presets.ts +++ b/src/lib/theme-presets.ts @@ -73,6 +73,7 @@ export const THEME_COLOR_KEYS = [ "link_color", "link_hover_color", "border_color", + "panel_border_color", "gradient_from", "gradient_to", ] as const; @@ -364,6 +365,7 @@ const LIGHT_BASE: ThemePalette = { link_color: "#b77900", link_hover_color: "#8a5b00", border_color: "#eeb425", + panel_border_color: "#e9b124", gradient_from: "#f59e0b", gradient_to: "#10b981", }; @@ -397,6 +399,8 @@ function brandValues(source: Partial): Partial { color_info: source.color_info, button_primary_color: source.button_primary_color ?? source.color_primary, border_color: source.border_color ?? source.color_primary, + panel_border_color: + source.panel_border_color ?? source.border_color ?? source.color_primary, gradient_from: source.color_primary, gradient_to: source.color_accent, button_outline_color: source.border_color ?? source.color_primary, @@ -412,6 +416,8 @@ function completePalette( values.button_secondary_color ?? merged.color_accent; merged.button_outline_color = values.button_outline_color ?? merged.border_color; + merged.panel_border_color = + values.panel_border_color ?? merged.border_color; merged.gradient_from = values.gradient_from ?? merged.color_primary; merged.gradient_to = values.gradient_to ?? merged.color_accent; return merged;