PLDashboard

Custom CSS Hooks

Stable ids, classes and data-* attributes for customizing the client shell via branding.customCss.

1. How It Works

When branding.customCss is set, its contents are injected as a <style> tag into the client shell (ClientLayout). Target the elements below to override their default styling without editing component code.

Hooks are grouped by navbar-* (header), welcome-* (home page), footer* and shared layout ids.

2. Layout Shell

HookTypeElement
#app-shellidRoot wrapper div (min-h-dvh, flex column)
#main-contentidmain content container

4. Home Page (HomeWelcomeCard)

HookTypeElement
#welcome-cardidDefault welcome card wrapper (Card)
#welcome-logoidCard logo img (only when a logoUrl is set)
#welcome-headingidWelcome heading title (h3 / CardTitle)
#welcome-messageidWelcome message description paragraph (CardContent)
#homepage-custom-htmlidCustom HTML container (only when homepageConfig.welcomeHtml is set)

6. Language Switcher

HookTypeElement
#language-switcheridContainer for the language buttons
[data-lang=“…”]attrEach button (e.g. data-lang="en", data-lang="pl")
.lang-btnclassEach language button base style

Prefer #language-switcher [data-lang]- the buttons are repeatable elements, so they usedata-* attributes instead of unique ids (ids must remain unique in the document).

7. Example

/* Layout */
#app-shell    { min-height: 100dvh; }
#main-content { max-width: 1280px; margin: 0 auto; padding: 40px 24px; }

/* Header */
#header        { height: 72px; box-shadow: 0 8px 24px rgba(0,0,0,.06); }
#navbar-brand  { gap: 12px; }
#navbar-title  { font-size: 1.35rem; letter-spacing: -0.01em; }
#navbar-avatar { border-radius: 9999px; }

/* Home Welcome Card */
#welcome-card    { border-radius: 16px; box-shadow: 0 10px 30px rgba(0,0,0,.08); }
#welcome-heading { font-size: 2.25rem; font-weight: 800; color: var(--foreground); }
#welcome-message { font-size: 1.1rem; line-height: 1.75; }

/* Footer */
#footer      { background: var(--background); padding-top: 32px; }
#footer-text { font-style: normal; font-size: 0.9rem; }

/* Language switcher */
#language-switcher [data-lang="pl"] { text-transform: uppercase; }