Table of Contents

Design Elements of My Website

boat floating on water, used in a post about web page design

Like how this site looks? Here are the colors, fonts, and custom CSS behind it, ready to copy into your own WordPress site. Sections are mostly in alphabetical order, and I also keep a few security and SEO tools at the bottom for my own reference. Think of this page as my web page design notebook.

TLDR

  • Buttons: a 150deg blue-purple-pink gradient (#6cd0fa, #9896f0, #ff6ec7) that turns solid pastel purple #ddb8ff with black text on hover, plus the CSS to make it the default. (Buttons)
  • Font: Libre Baskerville, size 14. (Font)
  • Links and lists: link colors (menu hover is blue #134aa5 with an underline), list gradients, and line spacing. (Links, Lists)
  • CSS snippets: hide items on mobile and space headings without spacer blocks. (Mobile, Headings)
  • Tools: contrast checkers, header scanners, and keyword tools. (Security)

Background colors

Light theme white: #ffffff

Dark theme black-grey: #212121

Buttons

Start: blue #6cd0fa
Middle: purple #9896f0
End: pink #ff6ec7
Angle: 150deg (top left to bottom right, a little steeper than diagonal)

Hover: solid pastel purple #ddb8ff with black text (12.4:1 contrast). The pale ombre buttons (#ccebff to #e7ccff) use the same hover. Only the colors change, so round buttons stay round and square ones stay square.

You can set this as a default in custom-CSS like:

/* add ombre background to all buttons unless otherwise styled */
button {
  background: linear-gradient(150deg, rgb(108, 208, 250) 0%, rgb(152, 150, 240) 51%, rgb(255, 110, 199) 100%);
}
Old version: 135deg gradient (until October 2026)

Same colors, at a 135deg (diagonal) angle with the purple stop at 50%. I made it a little steeper in October 2026.

/* add ombre background to all buttons unless otherwise styled */
button {
  background: linear-gradient(135deg, rgb(108, 208, 250) 0%, rgb(152, 150, 240) 50%, rgb(255, 110, 199) 100%);
}

Color resources for web page design

  • Tanaguru contrast finder: “find me the good constrasts, for web accessibility, between to given two colors”
  • Colors.lol color palettes
  • WebGradients: 180 linear gradients. CSS3 cross-browser code and a .PNG of each gradient.
  • WebAIM contrast checker: checks two colors against the WCAG AA and AAA ratios. It’s how I caught the old green hover.

Device-specific changes

Remove item on mobile

/* remove image on mobile */ 
@media only screen and (max-width : 800px) {
	.remove-mobile {
		display: none; 
	}
}

Font

Text: Libre Baskerville, size 14
Links: Libre Baskerville, size 14, semi-bold

🌸👋🏻 Enjoying this post? Get the next issue of [ret]2read. Once a month, I’ll email you whatever’s on my mind, usually Apple security research, offensive security, open source software freedom, and operating system internals.

Resting: blue #0081cc

Menu hover (light mode): blue #134aa5 with an underline

Menu hover (dark mode): light blue #6cd0fa on #212121

The underline matters: my custom CSS removes link underlines everywhere (see Remove underline), so color alone would be the only hover cue. Adding it back on hover helps people who can’t see the color change.

Example: www.oliviagallucci.com

My theme’s design plugin sets its own hover color, so these rules start with html:root body. That makes them more specific than the plugin’s rules, so they win without editing the plugin.

/* menu links: blue + underline on hover and keyboard focus */
html:root body header .wp-block-navigation-item__content:is(:hover, :focus-visible) {
  color: #134aa5 !important;
  text-decoration: underline !important;
  text-underline-offset: 3px;
}

/* menu links in dark mode */
html:root body.dark header .wp-block-navigation-item__content:is(:hover, :focus-visible) {
  color: #6cd0fa !important;
}

/* buttons on either ombre (bright or pale): solid pastel purple, black text.
 * Only colors change, so round buttons stay round and square ones stay square.
 * The gradient class list is repeated on purpose: it raises specificity so this
 * rule beats other hover rules for buttons. */
html:root body :is(.wp-block-button__link, .wp-block-search__button):is(.has-custom-color-1-gradient-background, .has-custom-color-2-gradient-background):is(.has-custom-color-1-gradient-background, .has-custom-color-2-gradient-background):is(:hover, :focus-visible) {
  background: #ddb8ff !important;
  color: #000 !important;
}
Old version: green hover (until October 2026)

Hover: green #32b883

I replaced the green because it failed WCAG contrast. On the buttons it was nearly invisible against the pink end of the gradient, and on white it was well under the 4.5:1 minimum for text.

.olivia-blue-link a {
  color: #0081cc !important;
  font-weight: bold;
}
.olivia-blue-link a:hover {
  color: #32b883 !important;
  font-weight: bold;
}

Remove underline

/* Remove link underline */
a {
	text-decoration: none !important;
}

Lists

Ombre

I often use ombre background on lists.

Start: blue #ccebff
End: purple #e7ccff
Ombre type: linear

Start: light blue #e7f0fd
End: blue #accbee

Start: light green #D4FC79
End: darker green #00D184E6
Note: I removed this color scheme from my blog 8 August 2022.

Want your company or product in front of [ret]2read readers?
One sponsor per issue â†’

Spacing

Old news

I used to use this in the “Additional CSS class(es)” field for every list because I did not know you could apply changes to every block in theme’s custom CSS. I do not recommend this.

.olivia-spacing {
 line-height: 1.8;
}

This applies the spacing to every list on my website unless I specified otherwise in the custom CSS of the individual block:

/* change the amount of vertical space between each line.
 * this is what you would change if you wanted your text to 
 * appear double spaced for MLA formatting */
ol, ul {
	line-height: 1.8em;
}

Usability in web page design

Headers

When I changed WordPress themes, I had to fix the spacing above every header (H2 through H5). I did it on every blog post to get the look I wanted.

Then I realized custom CSS could add that spacing to the top of headers for me. It standardizes the headers on every blog post at once.

/*Add spacing of 25px on top of headings in single posts */

.single-post h2:not(.wp-block-post-title) {
  padding-top: 25px;
}

.single-post h3, .single-post h4 {
	padding-top: 25px;
	margin-bottom: -10px !important;
}

This solution also meant that I would never need to add a spacer block when dealing with headers. Unfortunately, I had to remove the spacer blocks from all of my blog posts. Otherwise, my new CSS code would mess up the look.

I highly recommend using CSS instead of using the spacer block, which is often repetitive and impractical.

Note boxes

Grey: #d2e1ee

Blue: #accbee

/* Change site title black */
.site-brand a {
	color: black;
}
/* change site title hover color to blue */ 
.site-brand a:hover {
	color: #0081cc !important;
}

Security

I’m not sure of the rules for using these tools on sites you don’t own. That includes finding, copying, analyzing, or exploiting the information they turn up. I am by no means a security expert, but I recently began poking at my website. It is interesting!

As a result, please be careful using them on sites you don’t own. For general WordPress security matters, you can contact its bounty programs: WordPress and Automattic.

SEO

I recently started using these. I am not an SEO expert, nor do I know if these even work well.

OG Health & Fitness

  • Blue 1 = #08225A
  • Blue 2 = #134AA5

Blue 2 also does double duty on the main site as the menu hover color.

Offensive Services

Portrait of Olivia Gallucci in garden, used in LNP article.

Written by Olivia Gallucci

Olivia is senior security engineer, certified personal trainer, and freedom software advocate. She writes about offensive security, open source software, and professional development.

Discover more from [ret]2read

A Monthly OS Internals Publication by Olivia Gallucci. Subscribe now to keep reading and get access to the full archive.

Continue reading