diff --git a/client/public/assets/img/favicon.ico b/client/public/assets/img/favicon.ico new file mode 100644 index 0000000..77b502d Binary files /dev/null and b/client/public/assets/img/favicon.ico differ diff --git a/client/public/assets/img/powered-by.svg b/client/public/assets/img/powered-by.svg new file mode 100644 index 0000000..b07558e --- /dev/null +++ b/client/public/assets/img/powered-by.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/components/SiteFooter.jsx b/client/src/components/SiteFooter.jsx index 526fd8e..a6f7c98 100644 --- a/client/src/components/SiteFooter.jsx +++ b/client/src/components/SiteFooter.jsx @@ -5,31 +5,37 @@ export default function SiteFooter() { const { contactEmail, siteTitle } = useSite() return ( ) diff --git a/client/src/styles/theme.css b/client/src/styles/theme.css index eae23ab..0683b98 100644 --- a/client/src/styles/theme.css +++ b/client/src/styles/theme.css @@ -1009,6 +1009,47 @@ button[disabled] { border-color: #8a4b47; } +/* Site footer: powered-by badge left-justified, info centered. */ +.site-footer-inner { + position: relative; + display: flex; + align-items: center; + justify-content: center; + gap: 16px; + max-width: 1100px; + margin: 0 auto; +} +.site-footer-badge { + height: 56px; + width: auto; + flex: 0 0 auto; + opacity: 0.85; +} +.site-footer-info { + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; + text-align: center; +} +/* Pin the badge to the left while the info column stays visually centered. */ +@media (min-width: 641px) { + .site-footer-badge { + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + } +} +@media (max-width: 640px) { + .site-footer-inner { + flex-direction: column; + } + .site-footer-badge { + height: 44px; + } +} + /* Draft-preview banner on the public renderer. */ .page-preview-banner { border: 1px solid var(--accent); diff --git a/server/src/config/brand.js b/server/src/config/brand.js index 9ee7a28..9b3a0c8 100644 --- a/server/src/config/brand.js +++ b/server/src/config/brand.js @@ -32,7 +32,7 @@ const brand = { accent: process.env.BRAND_ACCENT_COLOR || '#7f99bd', logo: process.env.BRAND_LOGO || '', // empty → no logo image rendered hero: process.env.BRAND_HERO || '/assets/img/hero-moon.png', - favicon: process.env.BRAND_FAVICON || '', // empty → no favicon link injected + favicon: process.env.BRAND_FAVICON || '/assets/img/favicon.ico', // Runic Gateway default emblem } // Discord embeds want an int (0xRRGGBB). Parse the accent hex once; fall back to