TTRPG - Rathgar Gold

by chrisairbrown-del
Screenshot of the TTRPG - Rathgar Gold Obsidian theme
5
4
3
2
1
New Theme

Description

This theme supports Dark Mode
This theme supports Light Mode

README file from

Github

TTRPG - Rathgar Gold

A gold-and-parchment Obsidian theme built for running a tabletop campaign out of your vault. TTRPG - Rathgar Gold solves one specific problem: turning a note full of dataview/dataviewjs queries into a real dashboard. Tag a note with any cssclasses value containing the word "dashboard" (your own name, not a fixed string), wrap each widget in a [!card] callout, and the theme handles the rest: a uniform grid, glass panels, and an optional full-bleed backdrop, with no manual CSS per note.

TTRPG - Rathgar Gold hero screenshot

Dark and light mode are both fully supported.

Light mode example

Features

Dashboard card grids

Tag a note with a cssclasses value containing "dashboard" (dashboard-wb, my-campaign-dashboard, whatever you want to call it, as long as the word is in there somewhere) and every top-level [!card] callout becomes a uniform-size grid tile. The title bar doubles as the card header; the content area scrolls internally if it overflows. No manual CSS per widget. A [!cardfull] callout spans the full grid width for a wider widget, and works whether the card holds a dataview/dataviewjs query, a table, or plain markdown.

Add "sr" anywhere in the same note's cssclasses (its own class, or appended to your dashboard class, e.g. my-dashboard-sr) to switch to the crimson accent and the session backdrop slot instead of gold. Leave it out for the default gold, world-building look.

Dashboard card grid

The core CSS:

[class*="dashboard"] .markdown-preview-sizer {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.85rem;
}
[class*="dashboard"] .callout[data-callout="card"] {
  height: 400px;
  display: flex;
  flex-direction: column;
}
[class*="dashboard"] .callout[data-callout="card"] .callout-content {
  flex: 1 1 auto;
  overflow-y: auto;
}

Optional backdrop photos, your own

Dashboard notes and Canvas cards support a full-bleed background photo behind a gradient overlay. TTRPG - Rathgar Gold ships with no backdrop images at all and never makes a network call to load one, matching the Community Themes rule that a theme can't load remote assets. Light mode uses its own lighter overlay instead of the dark-mode gradient, so a backdrop set in light mode stays legible instead of washing out.

Dashboard backdrop example

The core CSS (--rg-backdrop-session/--rg-backdrop-world default to none; light mode uses a lighter overlay tuned for legibility instead of reusing the dark-mode gradient):

.theme-dark [class*="dashboard"][class*="sr"] .markdown-preview-view {
  background-image: linear-gradient(180deg, rgba(6, 6, 8, 0.42), rgba(6, 6, 8, 0.64)),
    var(--rg-backdrop-session);
}
.theme-light [class*="dashboard"][class*="sr"] .markdown-preview-view {
  background-image: linear-gradient(180deg, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0.72)),
    var(--rg-backdrop-session);
}

There are three backdrop slots, each a plain CSS variable:

Variable Applies to
--rg-backdrop-world any dashboard note without "sr" in its cssclasses
--rg-backdrop-session any dashboard note with "sr" also in its cssclasses
--rg-backdrop-canvas-card a crimson-metadata card (`[!card

Recommended: CSS Resource Variables. This is a small, separate plugin (not specific to this theme) that maps a file already in your vault to a CSS variable, with a real file picker, no manual editing. Install it, then in Settings -> CSS Resource Variables, click Add mapping, pick an image, and type one of the three variable names above (no leading --, the plugin adds that). That's the whole setup. See that plugin's own README for how it works and what else it's useful for.

No extra plugin? Edit theme.css directly and paste a base64 data: URI into one of the three variables above. See images/README.md for the exact steps. It's not elegant, but it's local, offline, and it works without installing anything else.

Canvas boards

Canvas gets its own token set (background, dot-grid color) so boards don't fall back to Obsidian's default blue-gray tint. A card's crimson metadata variant ([!card|crimson]) carries into a Canvas embed too, and an embedded dashboard card correctly fills its Canvas node's full height, not just its natural content height.

Canvas board

The core CSS:

.theme-dark {
  --canvas-background: #17110c;
  --canvas-dot-pattern: rgba(240, 178, 58, 0.35);
  --canvas-color: 240, 178, 58;
}
.canvas-node-container:has(.callout[data-callout-metadata~="crimson"]) {
  border-color: var(--rg-accent-crimson);
}
.theme-dark .canvas-sr .canvas-node-container:has(.callout[data-callout-metadata~="crimson"]) {
  background-image: var(--rg-backdrop-canvas-card);
  background-size: cover;
}

Fantasy Statblocks

An outer gold glow around every ```statblock``` block, using Fantasy Statblocks' own --statblock-* theming API. Only the frame and accent colors follow the theme; the plugin's own internal layout (ability score grid, HP bar, etc.) is untouched.

Fantasy Statblocks example

The core CSS, using the plugin's own theming variables:

.theme-dark {
  --statblock-background-color: var(--rg-surface);
  --statblock-primary-color: var(--rg-accent-gold-bright);
  --statblock-border-color: var(--rg-border);
  --statblock-box-shadow-color: var(--rg-accent-gold);
  --statblock-box-shadow-blur: 1em;
  --statblock-heading-font: var(--rg-font-display);
}

Dice Roller

Inline dice: XdY rolls from Dice Roller render as die-shaped buttons (d4 triangle, d6 rounded square, d8/d10/d12/d20 polygons, d2/d100 variants) with a gold label above and the result displayed in the same spot after rolling.

Dice Roller buttons

The core CSS:

[class*="dashboard"][class*="sr"] .callout[data-callout="card"] .dice-roller {
  position: relative;
  width: 52px;
  height: 52px;
}
[class*="dashboard"][class*="sr"] .callout[data-callout="card"] .dice-roller::before {
  content: attr(data-dice);
  position: absolute;
  inset: 0;
}
[class*="dashboard"][class*="sr"] .callout[data-callout="card"] .dice-roller[data-dice="1d4"] {
  clip-path: polygon(50% 6%, 96% 94%, 4% 94%);
}

Buttons, Kanban, Dataview

  • Buttons blocks lay out in a clean flex row when placed inside a [!card|buttons-grid] callout.
  • Kanban session/chapter divider cards get a themed gold label.
  • Dataview query blocks get a glass-panel treatment outside a dashboard card, and sit flush inside one.

Buttons in a card

Kanban session dividers

The core CSS:

.callout[data-callout="card"][data-callout-metadata~="buttons-grid"] > .callout-content {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.rg-kanban-divider {
  color: var(--rg-accent-gold-bright);
  font-family: var(--rg-font-display);
}
[class*="dashboard"] .block-language-dataviewjs {
  background: rgba(13, 13, 16, 0.6);
  backdrop-filter: blur(16px) saturate(140%);
  border: 1px solid var(--rg-border);
}

Native callouts

All nine built-in callout types are restyled with a consistent design language: solid border for confirmed/stable content (success, example, warning, info, tip, quote), dashed border for provisional/incomplete content (danger, caution, question).

Native callout types

The core CSS, one type shown (solid border, success):

.callout[data-callout="success"] {
  --callout-color: 89, 194, 122;
  --callout-icon: sparkles;
}
.callout[data-callout="danger"] {
  --callout-color: 144, 137, 160;
  border-style: dashed;
}

Wiki-style floating infobox

A floating [!infobox] card, with a |wide variant for denser content, for character and item reference boxes. See Credits below.

Infobox example

The core CSS:

.callout.callout[data-callout~="infobox"] {
  width: auto;
  max-width: 300px;
  float: right;
  margin: 0 0 12px 12px;
}
.callout.callout[data-callout~="infobox"] > .callout-title {
  display: none;
}
.callout.callout[data-callout~="infobox"] .callout-content > :is(h1, h2, h3) {
  text-align: center;
  background: var(--rg-surface-alt);
  border-bottom: 2px solid var(--rg-accent-gold);
}

Building your own dashboard

The card grid shown in the screenshots above isn't a special widget, it's five callouts in a plain note. Here's the exact recipe:

1. Tag the note. Add frontmatter so the theme knows to grid this note instead of rendering it as normal flow. Any class containing the word "dashboard" works, so pick whatever name fits your vault:

---
cssclasses: [my-campaign-dashboard]
---

That gives you the gold, world-building-style accent. Add "sr" anywhere in the same list ([my-campaign-dashboard-sr], or a second class like [my-campaign-dashboard, sr]) for the crimson, session-running-style accent instead (see Dashboard card grids above). dashboard-wb and dashboard-sr still work exactly as before if you'd rather keep using those.

2. Wrap each widget in a [!card] callout. Anything can go inside: a dataviewjs query, a table, plain markdown, a [!card|buttons-grid] variant for a row of Buttons blocks. The callout's own title bar becomes the card's header, so you don't write a separate markdown heading:

> [!card]+ My Widget
> Whatever content you want here.

3. Watch your card count. The grid is fixed at 3 columns. If your card count doesn't divide evenly by 3, the last card ends up in a partially-filled row. Swap that last [!card] for [!cardfull] to span the full width instead:

> [!cardfull]+ My Wide Widget
> Spans all 3 columns.

That's the whole recipe: tag the note, wrap each widget, use [!cardfull] for the odd one out. Everything else (uniform height, internal scroll, glass panels, the backdrop) is automatic.

Want a different column count or card height? Both are one-line changes in theme.css:

[class*="dashboard"] .markdown-preview-sizer {
  grid-template-columns: repeat(3, 1fr); /* change 3 to your column count */
}
[class*="dashboard"] .callout[data-callout="card"] {
  height: 400px; /* change to your preferred card height */
}

A working example lives in this repo's test setup if you want to open it directly rather than build one from scratch: see Demo - World Building Dashboard.md and Demo - Session Dashboard.md.

Installation

From Obsidian (once published): Settings -> Appearance -> Themes -> Browse -> search "TTRPG - Rathgar Gold" -> Install and use.

Manual install: download this repo's latest release, extract it into <your vault>/.obsidian/themes/TTRPG - Rathgar Gold/, then enable it in Settings -> Appearance -> Themes.

Supported plugins

TTRPG - Rathgar Gold themes the following plugins directly. None are required: your vault renders fine without them. These are the integrations that get special treatment beyond default styling.

Plugin Author What TTRPG - Rathgar Gold adds
Canvas (core Obsidian feature, not a plugin) the Obsidian team Custom background token set, dot-grid color, crimson card borders/backdrops
Fantasy Statblocks Jeremy Valentine Gold glow frame via the plugin's own theming variables
Dice Roller Jeremy Valentine Die-shaped roll buttons with gold labels
Dataview Michael Brenan Glass-panel query blocks, dashboard-card integration
Buttons shabegom Flex-row layout inside dashboard cards
Kanban mgmeyers Themed session/chapter divider cards
Editing Toolbar Cuman Gold icon/background theming for its Custom Aesthetic mode

TTRPG - Rathgar Gold's own CSS replaces the need for a folder-coloring plugin like File Color with a pure-CSS depth-based layering technique. Nothing to install there.

Credits

A big thank you to SlRvb, author of ITS Theme. This theme was built while learning from ITS Theme's own source, and it shows: the floating [!infobox] callout and its |wide variant are a direct port of ITS's mechanism and token mapping, adapted here to this theme's own color tokens, and several smaller techniques elsewhere in Rathgar Gold (Canvas icon theming, tab-bar specificity handling, and more) were worked out by reading how ITS Theme solved the same problem first. If you like anything about this theme, go look at ITS Theme itself: it's one of the most complete theming systems in the Obsidian ecosystem, and a large part of why this theme was possible at all.

This theme also themes Obsidian's own core Canvas feature, built by the Obsidian team, not a third-party plugin: the custom background token set, dot-grid color, and crimson card borders/backdrops all sit on top of Canvas as Obsidian ships it.

Beyond that, this theme themes the following community plugins directly (see Supported plugins above for what each integration does). None of this works without the plugin authors' own work, credited here by name:

Fonts: Cinzel Decorative by Natanael Gama, licensed under the SIL Open Font License.

Contributing

Issues and pull requests are welcome.

Support

If this theme is useful to you, you can buy me a coffee.

License

MIT. See LICENSE.