Files
vanity-delve/foundry-module/styles/vanity-delve.css
T
tevansandClaude Opus 5 47778fdbf6 The Forge: one button, a whole dungeon in the world
The brief was a tool in Foundry that generates everything on a click and injects
it as a new dungeon. Previously the module could only stage a delve authored at
the desk, and the only way in was a console command — an API with a button glued
on, which is why it looked like nothing was there.

The ⛏ button now opens a form (theme, areas, depth, heroes, deadliness, density,
greed, clock, ending, seed, and whether to build maps and roll encounters), and
Raise the dungeon builds the lot in about five seconds:

  • a folder per document type, named for the dungeon
  • one scene per area, walls and lighting placed, via the VANITY Forge
  • encounter actors, foldered rather than scattered across the world
  • a JournalEntry — GM truth, a page per area, the ending — which is the
    adventure, and is written to be read cold

The journal is the deliverable. Scenes without it are a pile of maps.

Generating is cheap, so removing had to be. Every document DELVE creates is
stamped with a dungeonId, and a 🗑 button lists what it built and deletes one
dungeon entirely — confirming with exact counts first, and never deleting the
scene the GM is standing in. Colour is not an identifier: it is a Color object,
and a GM may recolour a folder.

Verified live: two dungeons raised from the form and the API, then one removed
cleanly at -3 scenes, -10 actors, -1 journal, -3 folders with nothing else
touched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 09:27:23 +01:00

19 lines
1.1 KiB
CSS

.delve-card { border: 1px solid #b8912f; background: #1a1410; padding: .4rem .6rem; }
.delve-card header { border-bottom: 1px solid #b8912f; margin-bottom: .3rem; }
.delve-label { font-family: "Cinzel", serif; color: #e8c96a; letter-spacing: .04em; }
.delve-sub { display: block; font-size: .8em; opacity: .75; }
.delve-card ul { margin: .2rem 0 .3rem 1.1rem; }
.delve-truth { border-left: 3px solid #7a5cff; padding-left: .5rem; opacity: .9; }
.delve-read { border-left: 3px solid #e8c96a; font-size: 1.02em; }
.delve-read p { margin: .2rem 0; }
.delve-forge .hint { opacity: .8; font-size: .92em; margin: 0 0 .6rem; }
.delve-grid { display: grid; grid-template-columns: 1fr 1fr; gap: .45rem .7rem; }
.delve-grid label, .delve-toggles label { display: flex; flex-direction: column; font-size: .9em; gap: .15rem; }
.delve-grid .sub, .delve-toggles .sub { opacity: .6; font-size: .85em; font-weight: normal; }
.delve-toggles { margin-top: .6rem; display: flex; flex-direction: column; gap: .3rem; }
.delve-toggles .checkbox { flex-direction: row; align-items: center; gap: .4rem; }
.delve-actions { margin-top: .8rem; }
.delve-actions button.bright { width: 100%; }