Robert Birming

Bearly theme

Bearly theme

Bearly has been replaced by the more flexible and complete Bearming theme. But if you’d like, you can still use Bearly.

Here’s the very last version I made:

/*
* Bearly — a lovely Bear theme
* Version 2.0.1 | 2026-02-11
* Robert Birming | robertbirming.com
*/

/* Palette: Bearly Standard */
:root {
  color-scheme: light dark;

  /* Light mode colors */
  --background: #fafbfc;
  --link:       #3a73c8;
  --text:       #373a3c;

  /* Colors based on text, links, and background */
  --muted:      color-mix(in srgb, var(--text) 60%, var(--background));
  --border:     color-mix(in srgb, var(--link) 20%, var(--background));
  --surface:    color-mix(in srgb, var(--background) 94%, var(--text) 6%);
  
  /* Font sizes */
  --font-xs:    0.85rem;
  --font-s:     0.95rem;
  --font-m:     1.0625rem;
  
  /* Line heights */
  --lh-s:       1.3;
  --lh-m:       1.65;

  /* Shapes */
  --line:       1px solid;
  --radius:     4px;

  /* Spacing */
  --space-xs:   0.5em;
  --space-s:    1em;
  --space-m:    1.2em;
  --space-l:    1.5em;
}

@media (prefers-color-scheme: dark) {
:root {
  color-scheme: dark;

  /* Dark mode colors */
  --background: #1c2126;
  --link:       #82aee3;
  --text:       #d9d9d8;
  }
}

/* Layout */
html {
  font-size: 100%;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

*,
*::before,
*::after {
  box-sizing: border-box;
}

body {
  max-width: 66ch;
  margin: 0 auto;
  padding: 2.5rem 1.5rem;
  font-family: system-ui, sans-serif;
  font-size: var(--font-m);
  line-height: var(--lh-m);
  color: var(--text);
  background: var(--background);
  overflow-wrap: break-word;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Styles */
h1, h2, h3, h4 {
  margin: 0 0 var(--space-s);
  font-weight: 600;
  line-height: var(--lh-s);
  letter-spacing: 0;
}

h1 { font-size: 1.7rem; }
h2 { font-size: 1.4rem; }
h3 { font-size: 1.2rem; }
h4 { font-size: 1.1rem; }

p {
  margin: 0 0 var(--space-m);
}

ul, ol {
  margin: 0 0 var(--space-m);
  padding-left: var(--space-m);
}

li {
  margin: var(--space-xs) 0;
}

blockquote {
  margin: var(--space-l) 0;
  padding: var(--space-s) var(--space-m);
  font-style: italic;
  border: var(--line) var(--border);
  border-left: 4px solid var(--link);
  border-radius: var(--radius);
  background: var(--surface);
}

blockquote p {
  margin: 0;
}

hr {
  margin: var(--space-l) 0;
  border: 0;
  border-top: var(--line) var(--border);
}

time {
  font-style: normal;
  font-size: var(--font-s);
  font-variant-numeric: tabular-nums;
  line-height: var(--lh-s);
  color: var(--muted);
}

a {
  color: var(--link);
  text-decoration: none;
  text-underline-offset: 0.18em;
}

a:hover,
a:focus-visible {
  text-decoration: underline;
}

strong {
  font-weight: 600;
  color: var(--text);
}

em {
  font-style: italic;
  color: var(--text);
}

img {
  display: block;
  max-width: 100%;
  height: auto;
  margin: var(--space-l) 0;
  border-radius: var(--radius);
}

pre {
  margin: var(--space-l) 0;
  padding: var(--space-s);
  background: var(--surface);
  border: var(--line) var(--border);
  border-radius: var(--radius);
  font-size: var(--font-s);
  overflow-x: auto;
}

code {
  font-family: ui-monospace, monospace;
}

table {
  width: 100%;
  margin: var(--space-l) 0;
  border-collapse: collapse;
  font-size: var(--font-s);
}

th, td {
  padding: var(--space-xs) var(--space-s);
  border: var(--line) var(--border);
}

th {
  background: var(--surface);
  text-align: left;
}

input, textarea, select {
  font: inherit;
  color: var(--text);
  background: var(--surface);
  border: var(--line) var(--border);
  border-radius: var(--radius);
  padding: var(--space-xs);
  width: 100%;
}

input:focus,
textarea:focus,
select:focus {
  outline: 2px solid var(--link);
  outline-offset: 2px;
}

label {
  display: block;
  margin-bottom: var(--space-xs);
}

button:not(.upvote-button),
input[type="submit"],
input[type="button"] {
  font: inherit;
  color: var(--background);
  background: var(--link);
  border: 0;
  padding: var(--space-xs) var(--space-s);
  border-radius: var(--radius);
  cursor: pointer;
}

button:not(.upvote-button):hover,
input[type="submit"]:hover,
input[type="button"]:hover {
  background: color-mix(in srgb, var(--link) 90%, var(--text) 10%);
}

/* Header */
header {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-xs) var(--space-s);
  margin-bottom: var(--space-l);
  padding-bottom: calc(var(--space-l) * 0.8);
  border-bottom: var(--line) var(--border);
}

header .title {
  color: var(--text);
  text-decoration: none;
  transition: inherit;
}

header a.title h1 {
  margin: 0;
  font-size: var(--font-m);
  line-height: var(--lh-s);
}

header nav {
  margin-left: auto;
}

header nav p {
  margin: 0;
  display: flex;
  gap: var(--space-s);
  font-size: var(--font-s);
}

@media (max-width: 600px) {
  header {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: var(--space-xs);
  }

  header nav {
    margin-left: 0;
  }

  header nav p {
    justify-content: center;
    flex-wrap: wrap;
    gap: var(--space-xs) var(--space-s);
  }
}

/* Footer */
footer {
  border-top: var(--line) var(--border);
  margin-top: var(--space-l);
  padding: calc(var(--space-l) * 1.2) 0;
  text-align: center;
  font-size: var(--font-s);
  line-height: var(--lh-s);
  color: var(--muted);
}

footer span:last-of-type {
  font-size: var(--font-xs);
}

footer span:last-of-type a {
  color: inherit;
}

/* Pages & Posts */
main > h1:first-child {
  margin: 0;
}

:is(.post, .page) main > h1 + p {
  margin: var(--space-xs) 0 var(--space-l);
}

body.post main > h1 + p:has(time) {
  margin: 0 0 var(--space-l);
}

/* Blog list */
ul.blog-posts {
  margin: var(--space-l) 0;
  padding: 0;
  list-style: none;
  border: var(--line) var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  overflow: hidden;
}

ul.blog-posts li {
  display: flex;
  align-items: center;
  gap: var(--space-s);
  padding: var(--space-xs) var(--space-m) var(--space-s);
  border-bottom: var(--line) var(--border);
}

ul.blog-posts li:last-child {
  padding-bottom: var(--space-xs);
  border-bottom: 0;
}

ul.blog-posts li * {
  margin: 0;
}

ul.blog-posts li a {
  order: 1;
  flex: 1 1 auto;
  min-width: 0;
  display: block;
  line-height: var(--lh-s);
  color: inherit;
  text-decoration: none;
  transform: translateX(0);
  transition: transform .18s ease;
}

ul.blog-posts li:hover a,
ul.blog-posts li:focus-within a {
  transform: translateX(6px);
}

ul.blog-posts li a:focus-visible {
  text-decoration: underline;
  text-underline-offset: 0.18em;
}

ul.blog-posts li span {
  order: 2;
  flex: 0 0 auto;
  margin-left: auto;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  text-align: right;
}

ul.blog-posts li span time {
  font-size: var(--font-xs);
  line-height: var(--lh-s);
}

@media (max-width: 600px) {
  ul.blog-posts li {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.1em;
    padding: var(--space-xs) var(--space-m);
  }

  ul.blog-posts li a {
    order: 1;
    width: 100%;
  }

  ul.blog-posts li span {
    order: 2;
    margin-left: 0;
    text-align: left;
  }
}

/* Optional: Upvote button */ /* Continue optimizing */
:is(.post, .page) .upvote-button {
  display: inline-flex !important;
  flex-direction: row !important;
  align-items: center !important;
  gap: .25em;
  padding: .15em .3em;
  border: 0;
  background: transparent !important;
  color: inherit;
  font: inherit;
  line-height: 1;
  cursor: pointer;
  white-space: nowrap;
}

:is(.post, .page) .upvote-button svg {
  display: none !important;
}

:is(.post, .page) .upvote-button::before {
  content: "♡";
  font-size: 1.5em;
  line-height: 1;
  color: var(--link);
}

:is(.post, .page) .upvote-button .upvote-count {
  display: inline-block !important;
  width: auto !important;
  flex: 0 0 auto !important;
  margin: 0 !important;
  padding: 0 !important;
  font-size: var(--font-s);
  color: var(--text);
  opacity: .7;
  white-space: nowrap;
  transform: translateY(1px);
}

:is(.post, .page) .upvote-button:is(.upvoted, [aria-pressed="true"], [disabled])::before {
  content: "♥";
}

:is(.post, .page) .upvote-button[disabled] {
  cursor: default;
}

/* Optional: Guestbooks.meadow.cafe */
#guestbooks___guestbook-form-container form {
  display: flex;
  flex-direction: column;
  gap: var(--space-xs);
  margin: var(--space-m) 0;
}

#guestbooks___guestbook-messages-container > div {
  margin: var(--space-m) 0;
  padding: var(--space-m);
  font-size: var(--font-s);
  border: var(--line) var(--border);
  border-radius: var(--radius);
  background: var(--surface);
}

#guestbooks___guestbook-messages-container blockquote {
  margin: 0;
  padding: 0;
  border: 0;
  font-style: normal;
  background: transparent;
}

#guestbooks___guestbook-messages-container p {
  margin-bottom: var(--space-xs);
}

#guestbooks___guestbook-made-with {
  color: var(--muted);
}

/* Post Meta: Tags */
p.tags {
  margin-block: var(--space-l);
  text-align: center;
}

p.tags a {
  color: var(--muted); 
  font-size: var(--font-s); 
  text-decoration: none;
  padding: 0.3em 0.6em;
  background: var(--surface);
  border-radius: var(--radius);
  transition: all 0.2s ease;
}

p.tags a:hover {
  color: var(--background);
  background: var(--link);
}