Actions

Work Header

Rating:
Archive Warning:
Fandoms:
Additional Tags:
Language:
English
Series:
Part 1 of CSS stuff
Stats:
Published:
2026-05-03
Completed:
2026-06-10
Words:
1,608
Chapters:
2/2
Comments:
19
Kudos:
33
Bookmarks:
23
Hits:
1,430

Reverie Collection [Site Skins]

Summary:

A multi-theme AO3 skin system built around a sleep and dream aesthetic, each theme bringing its own palette and mood.

  • fully customizable
  • dedicated mobile and tablet skins
  • light and dark modes available

Notes:

Updates

Please note that I may update this collection over time to improve the design or fix bugs. The latest changes will always be listed below:

Latest: July 7, 2026


— July 7, 2026

  • Structural variables (sizes, spacing, layout toggles) have been moved out of the theme files and into main.css, which is now shared by every theme. Only colors, gradients, images, and icon filters remain in the theme file.
  • The Customization section of this tutorial has been reorganized accordingly, with separate "Theme variables & images" and "Structural variables & CSS rules" parts.
  • If you're updating from an older install, you'll need to replace both your Theme skin and your Main skin with the new files (the tablet and mobile skins don't need any changes).


— June 9, 2026

  • Major update: the Reverie Collection has moved to a new repository with a redesigned architecture. Please update your skins accordingly.
  • The original repository remains available to avoid breaking existing installs, but will eventually be deprecated.
  • New themes added: Lucid Dream, Fever Dream, Midnight Blues, and Counting Stars (alongside the original Pale Reverie).


— May 23, 2026

  • New pastel icons instead of filters on default icons


— May 22, 2026

  • Full refactor of the CSS codebase. Variables have been reorganized and expanded: more semantic aliases, cleaner grouping by section, and better coverage of tag types, link states, and UI layers
  • Added ❀ symbol after friendship/platonic relationship tags (& separator), alongside the existing ❤︎ on romantic tags


— May 16, 2026

  • Add button styles
  • Added semantic CSS variables for button colors
  • Tags are now visually separated by category
  • Minor code cleanup


— May 15, 2026

  • Redesigned footer for a cleaner look
  • Sticky dashboard and search/filter sidebar (stays accessible while scrolling)
  • Added a dedicated Mobile skin (the former Responsive skin is now the Tablet skin).
  • Minor display bug fixes

Major updates will be posted as new chapters as well.
Subscribe to the work if you'd like to be notified.

Chapter 1: Collection

Notes:

(See the end of the chapter for notes.)

Chapter Text

Menu


Previews

These skins reorganize the homepage for logged-in users on desktop. Your 'Marked for Later' list is moved to the top of the right column, while the 'News' are relocated to the left column, underneath your favorite tags (see preview below).

Theme previews

Pale Reverie

Home — Pale Reverie

Lucid Dream

Home — Lucid Dream

Fever Dream

Home — Fever Dream

Midnight Blues

Home — Midnight Blues

Counting Stars

Home — Counting Stars


Installation

You will need to create and link all five skins (theme, main, tablet, mobile, and the final skin) if you use AO3 on mobile or tablet, as the styles are layered and depend on each other.

1. Create the Theme Skin

→ Choose a theme. Each one configures the full design system: colors, layout behavior, images, and responsive overrides.

  1. Pale Reverie → theme-pale-reverie.css
  2. Lucid Dream → theme-lucid-dream.css
  3. Fever Dream → theme-fever-dream.css
  4. Midnight Blues → theme-midnight-blues.css
  5. Counting Stars → theme-counting-stars.css


  • Go to My Dashboard → Skins → Create Site Skin
  • Give it a unique name like Reverie Collection [theme name] - Theme [your username]
  • Paste the contents of your chosen theme file (e.g. theme-pale-reverie.css) into the CSS field
  • Under Advanced, check Parent Only
  • Leave Media as-is (defaults to all)
  • Click Submit

2. Create the Main Skin

→ This skin applies the full stylesheet: layout, components, tags, icons, interactions. Colors and images are defined by the theme skin; this one consumes them.

  • Create a new site skin
  • Give it a unique name like Reverie Collection [theme name] - Main [your username]
  • Paste the contents of main.css into the CSS field
  • Under Advanced, check Parent Only
  • Leave Media as-is (defaults to all)
  • Click Submit

3. Create the Tablet Skin

→ This skin adjusts the layout for tablets.

  • Create a new site skin
  • Give it a unique name like Reverie Collection [theme name] - Tablet [your username]
  • Paste the contents of tablet.css into the CSS field
  • Under Advanced:
    • Check Parent Only
    • Under Choose @media, select only screen and (max-width: 62em)
  • Click Submit

4. Create the Mobile Skin

→ Finally, the one for mobile screens.

  • Create a new site skin
  • Give it a unique name like Reverie Collection [theme name] - Mobile [your username]
  • Paste the contents of mobile.css into the CSS field
  • Under Advanced:
    • Check Parent Only
    • Under Choose @media, select only screen and (max-width: 42em)
  • Click Submit

5. Create and Activate the Final Skin

→ This is the skin you will actually activate. It links the four skins above together.

  • Create a new site skin
  • Give it a unique name like Reverie Collection [theme name] [your username]
  • Paste this placeholder into the CSS field: .reverie-collection { opacity: 1; }
    (AO3 requires at least one valid CSS rule to save a skin.)
  • Under Parent Skins, click Add parent skin and add in this order:
    1. Your Theme skin
    2. Your Main skin
    3. Your Tablet skin
    4. Your Mobile skin
  • Click Submit
  • Click Use
Notes

→ Once you've installed a theme, switching to another one is straightforward: the main, tablet, and mobile skins are reusable across all themes. To switch, you only need to create two new skins: the new theme file, and the final skin that links it together with your existing main, tablet, and mobile skins.

→ Some pages may not render perfectly: sections like gifts or claims are ones I don't use myself, so I haven't been able to test them as a regular user would. Things should be fine, but if you notice anything off, feel free to leave a comment and I'll look into it.


Customization

Reusable values are defined as CSS variables and split across two files, depending on what they control:

  • Theme variables & images: colors, gradients, images, icon filters in the theme skin file (theme-[theme-name].css), the one you picked in step 1. Each theme has its own.
  • Structural variables & CSS rules: sizes, spacing, layout toggles, as well as the CSS rules, in main.css, shared by every theme.

In both files, variables are grouped and commented by purpose via semantic aliases (like --txt-color-link-navbar) so you can adjust things without digging through the entire stylesheet.

Important note

AO3 strips all comments when saving a skin. It is strongly recommended that you:

  • keep a local backup of the original files
  • make edits in your own copy
  • avoid editing directly inside AO3 if you want to preserve the documentation comments


Theme variables & images

→ Everything below is edited in your theme file (theme-[theme-name].css).

If you only want to retheme the skin (Pale Reverie for the following example), start by editing these base palette variables:

	/* -----------------------------------------------------------------
	  2.  PALETTES
	  ↳ Base color scales (do not use directly in css rules)
	---------------------------------------------------------------- */

	/* COLOR PALETTE 1 — Mauve palette (warm rose tones) */
	--color-mauve-light:         #f6e8eb;
	--color-mauve-mid:           #cdb3b3;
	--color-mauve-dark:          #664646;

	/* COLOR PALETTE 2 — Slate palette (cool blue-grey tones) */
	--color-slate-light:         #e3edee;
	--color-slate-mid:           #b3cbcd;
	--color-slate-dark:          #3a5f66;
	
	/* -----------------------------------------------------------------
	  3.  ACCENT COLORS
	  ↳ Highlight / interactive emphasis colors
	---------------------------------------------------------------- */

	--color-rose-brown:          #8f6565;
	--color-dusty-pink:          #cdb2b2;
	--color-purple:              #9d2d69;

Then map them here:

	/* -----------------------------------------------------------------
	  1.  PALETTE MAPPINGS
	---------------------------------------------------------------- */
	
	/* Palette 1 */
	--color-light-primary:              var(--color-mauve-light);
	--color-mid-primary:                var(--color-mauve-mid);
	--color-dark-primary:               var(--color-mauve-dark);
	
	/* Palette 2 */
	--color-light-secondary:            var(--color-slate-light);
	--color-mid-secondary:              var(--color-slate-mid);
	--color-dark-secondary:             var(--color-slate-dark);

	/* Accent colors */
	--color-accent:                     var(--color-rose-brown);
	--color-accent-soft:                var(--color-dusty-pink);
	--color-accent-pop:                 var(--color-purple);

Or skip the palette layer entirely and hardcode your hex values directly in the palette mappings if you prefer. My two-tier structure (raw palette → semantic aliases) was just for clarity, but it's not a requirement. Do whatever feels right and easy.

Deeper customization

Feel free to explore the theme file and tweak it to your liking. It's dense and a little messy (sorry about that), but I've added comments throughout to help you find your way around (english isn't my first language so there may be occasional mistakes, bear with me). If you're lost, you can refer to the table of contents at the beginning of the file.

To change the text color and background of works, for example, update the values of --txt-color-work and --bg-color-work. To change the text color globally, pick --txt-color-body. And so on.

Replacing images

All images can be replaced with your own by updating the URLs in the second part of the theme file. Each image is set via a dedicated class. For instance, the header image is defined in #header::before. All classes that include image references are grouped together in the theme file, so they should be easy to find.

Changing icon colors

Icon colors (such as stat icons or the AO3 logo) are set via CSS filter values (see --filter-stat-icon and similar variables). To generate a filter that matches a specific hex color, use the tool recommended by ZerafinaCSS: css-color-filter-generator. Paste your target color and copy the generated filter string into the corresponding variable.


Structural variables & CSS rules

→ Everything below is edited in main.css, shared by all themes. These variables handle sizing, spacing, and layout behavior rather than colors (look for the VARIABLES (SIZING, SHAPE & SETTINGS) section.

To make the header image bigger, for example, find the --height-header-banner variable. To change the base text size sitewide and inside works, update --txt-size-main and --txt-size-work. And so on.

Some features can also be toggled on or off via variables. For instance, the sticky dashboard menu and search filters can be disabled by switching their position value from sticky to static, and scrollable areas like tag lists or blockquotes can have their max-height adjusted or removed entirely. Each variable has a comment explaining what it does and what values it accepts.

You can also customize elements directly in the CSS. For example, to change the sitename, find:

 /* Customized sitename */
#header h1.heading a::after {
  content: “Archive of Your Own”;
}

Similarly, symbols used in tags or headings are set via a content rule inside their respective classes.


Tablet & Mobile overrides

→ This part concerns tablet.css and mobile.css, the two skins created in step 3 and step 4.

These two files don't declare any new variables of their own. The theme file and main.css already include ready-made tablet/mobile values for some variables, in their RESPONSIVE LAYOUT section (look for variables suffixed -tablet or -mobile, like --height-header-banner-mobile). tablet.css and mobile.css simply reassign the base variable to this dedicated value, within their own :root block, at their respective breakpoint:

--radius-dashboard-menu-links: var(--radius-dashboard-menu-links-tablet);

Beyond variables, these two files also contain their own CSS rules, which override the ones from main.css at their breakpoint. This is how, for instance, the dashboard menu switches from a column to a row layout on smaller screens.

Last note

The whole architecture is heavily variable-driven (variables calling other variables, cascading all the way down) because that's what made the swappable theme system work. If my organisation feels overcomplicated, skip the cascade, drop hex colors wherever you want, reorganize, simplify, make it yours.


Credits

Huge thanks to ZerafinaCSS and BlackBatCat

  • Pastel, muted and dark mode icons by ZerafinaCSS → Replace the AO3 Icons
  • Stats icons & hover text system by ZerafinaCSS → Stats Icons with Hover Text
  • Blurb icon layout + color-coded tags + button styling adapted from ZerafinaCSS → Site Skin Add-Ons
  • Sticky dashboard, sticky search/filter box, and miscellaneous content structure inspired by:
  • Counting Stars theme header: 'Tree silhouetted against a night sky with nebula' by kjpargeter — Designed by Magnific
  • Header banner image (except for Counting Stars), constellation border image and kudos illustration generated with Gemini.
    If you're not comfortable with AI-generated assets, feel free to replace them with your own custom images.

Notes:

You are welcome to use, edit, or build upon this CSS to post your own skin.
All I ask is a link to this work and to the skins credited above. Thank you!