Buttondown is fairly opinionated about the best reading experience being friendly and minimal.
You can customize the design and functionality of your newsletter archives in Buttondown's archive settings.
Archive settings
Announcement bar
Display a customizable message at the top of your archive pages. You can configure:
- Visibility: Choose who sees the announcement (everyone, free subscribers only, logged out visitors only, or paid subscribers only)
- Message: The text to display, with support for Markdown links
- Background color: Customize the bar's background color, or leave empty to use your newsletter's tint color
Dark mode
Enable dark mode support so your archives automatically match your reader's system preference for light or dark mode.
Header and footer
Customize the header and footer sections of your archive pages using Buttondown's rich text editor. You can add text, links, subscribe buttons, subscribe forms, and other elements.
Navigation links
Add custom links to your archive's navigation bar. This is useful for linking to external pages like your main website, social media profiles, or other resources.
Search
Allow subscribers to search through your archive to find specific content.
Web analytics
Track page views on your archive to understand how readers engage with your content.
Themes
Buttondown comes with several built-in themes you can choose from. Each has its own dedicated page with a live preview, its configurable settings, and a changelog:
- Arbus — an Instagram-inspired grid theme for image-heavy newsletters.
- Classic — a traditional, clean list layout for text-focused newsletters.
- Lovelace — a brutalist, nearly no-CSS theme that embraces browser defaults.
- Modern — a contemporary, card-based layout for visual newsletters.
You can view all available themes and their source code in the buttondown/themes repository.
Custom CSS
You can use custom CSS to fully customize the styling of your newsletter archives.
Unlike email CSS, archive CSS runs in a normal modern browser, so you can use the full modern feature set — CSS grid, custom properties, :has(), color-mix(), and so on. (The "write CSS like it's 2005" caveat on the email design page applies to emails only.)
Design tokens
The Modern theme is built almost entirely on CSS custom properties (design tokens). Overriding a token is the cleanest, most upgrade-safe way to restyle your archive: change it once on :root and it cascades everywhere the theme uses it. Reach for these before overriding individual classes.
| Token | Controls | Default |
|---|---|---|
--color-action | Accent color: links, buttons, the announcement bar, hover tints | Your newsletter's tint color |
--color-background | Page background | Near-white (dark in dark mode) |
--color-background-card | Card and blockquote fills | Light gray |
--color-background-offset | Borders, dividers, and hover backgrounds | Gray |
--color-foreground | Body text | Dark gray |
--color-foreground-offset | Muted text such as post metadata | Medium gray |
--color-foreground-offset-2 | Most-muted text: descriptions, footer | Lighter gray |
--font-brand | Headings, UI, the newsletter name | Hex Franklin, Inter, system sans-serif |
--font-prose | Body copy | Source Serif 4, serif |
--font-mono | Code | IBM Plex Mono |
--width-content | Maximum reading width | 600px |
--space | Base spacing unit (most margins/padding derive from it) | 20px |
--text-header-alignment | Alignment of the subject and date headers | center |
--newsletter-icon-size | Size of the newsletter icon | 100px |
--email-image-display | Whether post thumbnails appear in the archive index | none |
--corner-shape | Corner style for inputs and buttons | round |
For example, to brand your entire archive with a single color:
Dark mode and tokens
If you've enabled dark mode, Buttondown overrides the color tokens under a :root.supports-dark-mode selector when the reader prefers a dark theme. A hard-coded hex value (e.g. background: #fff) won't adapt, but a token override on plain :root applies to both modes. To set a different value per mode:
Available CSS classes
Email content classes
| Class | Description |
|---|---|
subject | The subject line of the email |
description | The description/subtitle of the email |
email-body | The main content area of the email |
email-detail__header | Container for email header information |
email-detail-date | The publish date of the email |
newsletter | Container for newsletter information |
newsletter-icon | The newsletter icon/image |
newsletter-name | The newsletter name |
Archive index classes
These style the list of posts on your archive's home page (the landing page at your archive's root URL).
| Class | Description |
|---|---|
email-list | The list of posts on the archive home page |
email-list-header | The heading above the post list |
email | A single post entry in the list |
email-link | The clickable wrapper around a post entry (carries a negative margin so its hover state bleeds past the text) |
email-header | The title-and-metadata block of a post entry (the Modern theme reverses these with flex-direction: column-reverse) |
email-title | A post's title in the list |
email-metadata | A post's date and metadata in the list |
email-image | A post's thumbnail in the list — hidden by default; show it by setting --email-image-display: block |
Announcement bar classes
| Class | Description |
|---|---|
announcement-bar | The announcement bar container |
Navigation classes
| Class | Description |
|---|---|
header-navigation | Main navigation container |
header-navigation-link | Individual navigation links |
header-navigation-link--subscribe | Subscribe link in navigation |
header-brand | Newsletter brand/logo link |
header-brand-name | Newsletter name in header |
Button classes
There are two families of buttons, and it's a common mistake to target the wrong one. The call-to-action buttons that appear inside your posts and pages use the buttondown-button family. The buttons inside the subscribe and payment forms use the archive__button family.
| Class | Description |
|---|---|
buttondown-button | The primary call-to-action button in a post or page body |
subscribe_button | The subscribe button |
buttondown-custom-button | A custom button you add to your content |
archive__button | Button within the subscribe and payment forms |
archive__button--upgrade | Upgrade variant, within the payment form |
archive__button--subscribe | Subscribe variant, within the payment form |
Buttons carry !important on their background, border, and text color in the base stylesheet, so a plain override may appear to do nothing. If your change isn't taking effect, add !important (e.g. background-color: #5b3df5 !important;) — or, better, set the --color-action token, which the buttons read from.
Social sharing classes
| Class | Description |
|---|---|
archive__social-share-link | Individual social share link |
archive__social-share-link-container | Container for social share links |
Related emails classes
| Class | Description |
|---|---|
related-emails-widget | Container for related emails widget |
related-emails-header | Header section of related emails |
related-emails-title | Title of related emails section |
related-email | Individual related email item |
related-email-link | Link to related email |
related-email-title | Title of related email |
related-email-date | Date of related email |
related-email-description | Description of related email |
related-email-image | Image for related email |
Comment classes
| Class | Description |
|---|---|
comment | Individual comment |
comment--author | Comment from the newsletter author |
comment__header | Comment header section |
comment__author | Comment author information |
comment__avatar | Comment author avatar |
comment-input | Comment input form |
comment-input__fields | Form fields container |
comment-input__input | Input field in comment form |
comment-input__textarea | Textarea in comment form |
comment-input__actions | Action buttons container |
comment-input__back-link | Back link from comment detail page |
Payment form classes
| Class | Description |
|---|---|
archive__payment-form | Payment form container |
archive__email-input-container | Container for email input fields |
archive__email-label | Label for email input |
archive__email-input | Email input field |
archive__gift-toggle | Gift subscription toggle |
archive__gift-checkbox | Gift subscription checkbox |
Modal classes
| Class | Description |
|---|---|
archive__modal-overlay | Modal overlay/backdrop |
archive__modal-container | Modal container |
archive__modal-header | Modal header section |
archive__modal-title | Modal title |
archive__modal-close | Close button for modal |
archive__modal-content | Modal content area |
archive__modal-actions | Modal action buttons container |
archive__success-button | Success modal button |
archive__success-button--primary | Primary success button |
archive__success-button--secondary | Secondary success button |
archive__success-icon | Success icon |
archive__success-message | Success message text |
Other classes
| Class | Description |
|---|---|
app-container | Main application container |
attachment | Email attachment container |
attachment-link | Link to download attachment |
card | Generic card container |
card--takeover | Full-width takeover card |
footer | Footer section |
Data attributes
Some of the theme's most useful styling is already built in and toggled by data attributes rather than classes. Rather than reinventing these, you can switch them on (or restyle them) directly.
| Selector | Description |
|---|---|
[data-blockquote-style="card"] | Blockquotes render as a filled card (the default) |
[data-blockquote-style="bar"] | Blockquotes render with a left accent bar and no fill |
[data-blockquote-style="editorial"] | Blockquotes render large and italic with no border |
figure[data-full-width="true"] | Images that break out of the reading column to span the full viewport width |
.buttondown-button[data-align] | Button alignment; data-align="left" or data-align="right" (defaults to centered) |