Your status page supports dark mode. Use the .dark selector to target dark mode, for example .dark body { background: #0d1117; }.
Explore documentation
Customize status page with CSS and JavaScript
You can add custom CSS and JavaScript to your status page to match your brand, add tracking scripts, or customize texts.
Prerequisites
- Custom CSS requires a paid plan with the Custom CSS & JavaScript feature enabled.
- Custom JavaScript requires a paid plan and a custom domain configured on your status page.
Settings location
Go to Better Stack → Status pages → select your status page → Settings → scroll to Custom CSS and Custom JavaScript.
Page background
The simplest way to start customizing is changing the background color:
Navigation bar
The nav bar is translucent by default — it uses a semi-transparent white background with a backdrop blur. Here are some ways to adjust it.
If you'd like to change the nav background tint to match a colored page background, update the backdrop, the link hover states, and the subscribe button together:
Subscribe button
If you'd like to change the subscribe button shape or color, you can target it independently. These small tweaks work on their own without changing the rest of the nav:
Sections
Each service group is wrapped in a .section element. You can adjust its background, spacing, or remove the default top border that separates sections:
Uptime history bars
If you'd like to change the size of the history bars, adjust the height and border-radius on the .tick class:
Theme examples
These combine the techniques above into cohesive themes. Pick one and paste it into Custom CSS.
Selector reference
Here are the most commonly targeted elements organized by area.
Custom fonts
Import a font from Google Fonts and apply it to the page:
Section expand and collapse
Override the default collapse behavior so all sections start expanded or stay permanently collapsed.
Hide elements
Use display: none to remove any element from view:
External tracking scripts
Google Analytics has a dedicated field — you do not need custom JavaScript for it. Go to Status page → Advanced settings → Analytics and paste your tag ID into the Google tag ID field.
For other analytics providers, use the Custom JavaScript field. Paste the full <script> tag:
Custom JavaScript only runs on status pages with a custom domain configured. It will not run on the default *.betterstack.com subdomain.
Subscribe component picker
When a visitor clicks Get updates, the subscribe popup opens with a general email field. If you'd like the "Notify me about specific components" checkbox to be pre-selected so the component list is visible right away, add this to Custom JavaScript:
Intro card
You can inject a description card that appears between the status heading and your service sections. This is useful for telling visitors what the page monitors, how to get help, or where to subscribe.
The example uses both Custom CSS for the card styling and Custom JavaScript to inject it into the page. It also includes a MutationObserver so the card persists through auto-refreshes.
Paste this into Custom CSS:
Paste this into Custom JavaScript:
Replace "Acme Corp", the title text, and the support link with your own company details.
Live chat widget
If you'd like to embed a support chat on your status page, paste the provider's snippet into Custom JavaScript. Here are examples for common providers:
Replace YOUR_APP_ID or YOUR_WEBSITE_ID with the value from your chat provider's dashboard.
Status indicator colors
If you'd like to change the colors used for operational, degraded, downtime, or maintenance states, override the status page color variables in Custom CSS:
These classes apply to uptime history bars, status icons, and status badges throughout the page. The hover variants follow automatically since they use opacity.
To change the text color of status labels like "Operational" or "Degraded", target the corresponding text classes:
Auto-refreshing content
The status page refreshes dynamic sections every 30 seconds. Any DOM changes made by your JavaScript will be overwritten after each refresh.
To make changes persist, use a MutationObserver that re-applies modifications whenever the content updates:
CSS changes are not affected by auto-refresh. Only use a MutationObserver if you are modifying the page with JavaScript.
API access
You can set custom_css and custom_javascript through the Status Page API:
Before using custom CSS
Many common customizations are available in the status page settings without writing any code:
- Branding — upload separate light and dark mode logos, a custom favicon, and set a company URL for the logo link.
- White-labeling — remove the "Powered by Better Stack" footer.
- Navigation links — replace the default "Status", "Maintenance", and "Previous incidents" tabs with up to 4 custom links.
- Translations — adjust any text on the page, including headings, status labels, and timestamp formats.
- History length — show 7, 14, 30, 90, 180, or 365 days of uptime history.
- Minimum incident length — filter out short incidents from the history bars.
- Header layout — choose between vertical and horizontal layouts.
- Theme — choose light, dark, or system (follows the visitor's OS preference).
- Password protection and IP allowlisting — restrict access to the page.
- Hide from search engines — prevent indexing.
- Announcements — display a banner with optional subscriber notifications.
Tips
- Use browser developer tools (right-click → Inspect) to find selectors and test changes in the Styles panel before saving.
- Add
!importantto declarations that do not take effect — the status page uses Tailwind utility classes. - Changes take effect within seconds. No deploy or restart is needed.
- Test on a non-production status page first, and check on mobile — the navigation collapses into a dropdown on smaller screens.
Need help?
Let us know at hello@betterstack.com.