gp-dimm-city 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -0
- package/LICENSE +32 -0
- package/README.md +165 -0
- package/components.yaml +832 -0
- package/fonts/lixdu/LICENSE.txt +34 -0
- package/fonts/lixdu/lixdu.woff +0 -0
- package/fonts/titillium-web/OFL.txt +93 -0
- package/fonts/titillium-web/titillium-web-400-italic.ttf +0 -0
- package/fonts/titillium-web/titillium-web-400.ttf +0 -0
- package/fonts/titillium-web/titillium-web-600-italic.ttf +0 -0
- package/fonts/titillium-web/titillium-web-600.ttf +0 -0
- package/fonts/titillium-web/titillium-web-700-italic.ttf +0 -0
- package/fonts/titillium-web/titillium-web-700.ttf +0 -0
- package/fonts/tomorrow/OFL.txt +93 -0
- package/fonts/tomorrow/tomorrow-400-italic.ttf +0 -0
- package/fonts/tomorrow/tomorrow-400.ttf +0 -0
- package/fonts/tomorrow/tomorrow-500-italic.ttf +0 -0
- package/fonts/tomorrow/tomorrow-500.ttf +0 -0
- package/fonts/tomorrow/tomorrow-700-italic.ttf +0 -0
- package/fonts/tomorrow/tomorrow-700.ttf +0 -0
- package/images/brick-bg-01.png +0 -0
- package/package.json +78 -0
- package/plugin.js +2131 -0
- package/snippets/alert.md +2 -0
- package/snippets/block.md +5 -0
- package/snippets/callout.md +5 -0
- package/snippets/card.md +11 -0
- package/snippets/chapter-start-page.md +11 -0
- package/snippets/credits-page.md +13 -0
- package/snippets/definition.md +7 -0
- package/snippets/dm-note.md +5 -0
- package/snippets/gear.md +9 -0
- package/snippets/learning-path.md +10 -0
- package/snippets/lede.md +5 -0
- package/snippets/outcome.md +8 -0
- package/snippets/procedure.md +7 -0
- package/snippets/sidebar.md +7 -0
- package/snippets/skill.md +9 -0
- package/snippets/specialty-art.md +5 -0
- package/snippets/specialty-card.md +5 -0
- package/snippets/specialty.md +11 -0
- package/snippets/toc-page.md +15 -0
- package/styles/components/callouts.css +227 -0
- package/styles/components/cards.css +487 -0
- package/styles/components/chrome.css +483 -0
- package/styles/components/data.css +1026 -0
- package/styles/components/images.css +215 -0
- package/styles/components/section.css +1074 -0
- package/styles/components/specialty-identity.css +315 -0
- package/styles/components/specialty.css +273 -0
- package/styles/dc-component-defaults.css +214 -0
- package/styles/dc-core.css +268 -0
- package/styles/dc-fonts.css +107 -0
- package/styles/dc-identity.css +66 -0
- package/styles/dc-native.css +330 -0
- package/styles/dc-palette.css +198 -0
- package/styles/page-rules.css +207 -0
- package/styles/page-templates.css +636 -0
package/snippets/card.md
ADDED
package/snippets/gear.md
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/* =============================================================================
|
|
2
|
+
DC-COMPONENTS.CSS — Reusable DC Component Library
|
|
3
|
+
=============================================================================
|
|
4
|
+
This file IS the DC component library. Any DC-branded Gutterpress book
|
|
5
|
+
imports this file and gets all components at their correct defaults with
|
|
6
|
+
no override files required. Do not break that portability contract.
|
|
7
|
+
|
|
8
|
+
── ARCHITECTURAL CONTRACT ────────────────────────────────────────────────
|
|
9
|
+
OWNS:
|
|
10
|
+
- Every .dc-* component class (base + thin variants)
|
|
11
|
+
- Every .pmd-* utility class
|
|
12
|
+
- Specialty parent-scoped overrides:
|
|
13
|
+
.dc-specialty.<name> .dc-skill-card { … }
|
|
14
|
+
.dc-specialty.<name> .dc-path-shell { … }
|
|
15
|
+
.dc-specialty.<name> .dc-specialty-card { … }
|
|
16
|
+
These live HERE adjacent to the component they modify.
|
|
17
|
+
- Break control (break-inside/break-before/break-after) for individual
|
|
18
|
+
components
|
|
19
|
+
- Component-scoped public custom properties (--dc-alert-bg, etc.)
|
|
20
|
+
|
|
21
|
+
MUST NOT CONTAIN:
|
|
22
|
+
- columns:N rules of any kind (→ page-templates.css)
|
|
23
|
+
- @page declarations or named-page assignments (→ page-rules.css)
|
|
24
|
+
- div.chapter scaffolding (→ the consuming book's own sheet)
|
|
25
|
+
- :root token definitions (→ dc-component-defaults.css)
|
|
26
|
+
- @media screen rules (print-only project)
|
|
27
|
+
- Element selectors scoped to page/chapter context classes
|
|
28
|
+
(→ the book's own sheet (`@layer book`))
|
|
29
|
+
|
|
30
|
+
CORE CONSTRAINT — COMPONENT STYLE ISOLATION:
|
|
31
|
+
If a bare .dc-* rule needs different values in the book's own sheet (`@layer book`), the
|
|
32
|
+
components/*.css value is WRONG — fix it here. The override files own
|
|
33
|
+
layout context only. Never split a component's appearance across files.
|
|
34
|
+
|
|
35
|
+
CORE CONSTRAINT — shape-following chrome is a clipped SIBLING layer, never
|
|
36
|
+
a filter:
|
|
37
|
+
An element with clip-path clips everything it paints, its own pseudos
|
|
38
|
+
included, so an outline or shadow that has to reach outside the silhouette
|
|
39
|
+
cannot live on the clipped element. `filter: drop-shadow()` is not the
|
|
40
|
+
answer either: any filter makes Chromium rasterize the whole subtree into
|
|
41
|
+
a 300 DPI bitmap at print — the text inside stops being text, the PDF
|
|
42
|
+
bloats, and the build pays for it (dc#28: 166 skill cards were most of the
|
|
43
|
+
field guide's build time). The pattern is two pseudos on an UNCLIPPED host
|
|
44
|
+
that is a stacking context (isolation: isolate): one carries the surface
|
|
45
|
+
and the clip, the other the same clip on a box 2px larger (outline) or
|
|
46
|
+
offset (shadow), filled with the chrome colour. Canonical examples:
|
|
47
|
+
.section → ::before (surface + clip), ::after (shadow)
|
|
48
|
+
.dc-path-shell → ::before (surface + clip), ::after (outline)
|
|
49
|
+
.dc-skill-card → .dc-card-inner::after (surface + clip),
|
|
50
|
+
.dc-card-body::after (outline), .dc-card-inner::before (shadow)
|
|
51
|
+
Any component needing both a geometric clip AND chrome outside it MUST
|
|
52
|
+
follow this.
|
|
53
|
+
|
|
54
|
+
COMPONENT PATTERN:
|
|
55
|
+
One dc-prefixed base class owns the full default shell (structure, spacing,
|
|
56
|
+
typography, borders, break behavior). Variant classes (including specialty
|
|
57
|
+
parent-container overrides) override ONLY the documented public API:
|
|
58
|
+
--dc-[component]-surface / --dc-[component]-accent /
|
|
59
|
+
--dc-[component]-fg / --dc-[component]-label-color /
|
|
60
|
+
--dc-[component]-title-color
|
|
61
|
+
Do not expose internal layout dimensions as a variable API.
|
|
62
|
+
|
|
63
|
+
TOKEN CONVENTION (dc#34, one rule, no exceptions):
|
|
64
|
+
- Every public component token DEFAULTS at :root in dc-component-defaults.css. A
|
|
65
|
+
component's own base rule NEVER declares its own public token — an
|
|
66
|
+
element that sets a custom property on itself makes that property
|
|
67
|
+
unconditionally win over any ancestor-scope override for as long as
|
|
68
|
+
the element rule exists, regardless of the override's specificity,
|
|
69
|
+
because the winning declaration for an element is chosen among rules
|
|
70
|
+
that match that element BEFORE inheritance is ever considered. Three
|
|
71
|
+
components (.dc-ap, .dc-sidebar, .section.dc-fiction-excerpt) violated
|
|
72
|
+
this until dc#34 and silently ate every `#ch-x { --dc-ap-bg: … }`-shaped
|
|
73
|
+
override; the fix moved their defaults to :root and changed no render.
|
|
74
|
+
- Components consume their tokens as a bare `var(--x)` — no inline
|
|
75
|
+
`var(--x, fallback)`. A token declared at :root needs no fallback, and
|
|
76
|
+
an inline fallback that duplicates the :root value is dead weight that
|
|
77
|
+
invites the two to drift (found and corrected during dc#34).
|
|
78
|
+
- Variants and contexts set tokens on ANCESTORS (the book's own sheet (`@layer book`)
|
|
79
|
+
chapter/page scopes) or on VARIANT CLASSES on the same element
|
|
80
|
+
(`.dc-ap.free`, `.dc-sidebar.inset`, `.dc-specialty.<name> .dc-X`) —
|
|
81
|
+
never by re-declaring the token on the base component selector itself.
|
|
82
|
+
|
|
83
|
+
AGENT RULE: "Is this a .dc-* or .pmd-* component style, or a
|
|
84
|
+
.dc-specialty.<name> scope block for a component?" — if NO, use another file.
|
|
85
|
+
──────────────────────────────────────────────────────────────────────── */
|
|
86
|
+
|
|
87
|
+
@layer dc.components {
|
|
88
|
+
|
|
89
|
+
/* ═══ ALERTS — base+thin-variant pattern ═══
|
|
90
|
+
.dc-alert base + .dc-alert-label label chrome + thin variant classes.
|
|
91
|
+
GFM: > [!NOTE/WARNING/DM/VIBE/ORIGIN/VISIT/GEAR] or @callout/@dm-note macros. */
|
|
92
|
+
|
|
93
|
+
/* ── Base shell — player-facing: pale cyan HUD panel, blue border ─────────── */
|
|
94
|
+
/* Token defaults for .dc-alert are declared in :root in dc-component-defaults.css.
|
|
95
|
+
Override at chapter-id scope in the book's own sheet (`@layer book`), or in variant rules below. */
|
|
96
|
+
.dc-alert {
|
|
97
|
+
background: var(--dc-alert-bg);
|
|
98
|
+
border-left: var(--dc-alert-border-width) solid var(--dc-alert-border);
|
|
99
|
+
color: var(--dc-alert-fg);
|
|
100
|
+
font-size: var(--dc-alert-body-size);
|
|
101
|
+
line-height: var(--lh-normal);
|
|
102
|
+
padding: var(--space-lg) var(--space-xl);
|
|
103
|
+
margin-top: var(--dc-alert-margin-top);
|
|
104
|
+
break-inside: avoid;
|
|
105
|
+
/* Alerts are full-width callouts that interrupt the reading flow; they
|
|
106
|
+
should NEVER overlap a preceding right-floated image (observed 2026-05-25
|
|
107
|
+
with the portrait in the citizen-file intro). Block elements don't wrap
|
|
108
|
+
floats by default — clear: right ensures any alert after a floated image
|
|
109
|
+
sits decisively below it. Unconditional at the component-base layer: a
|
|
110
|
+
:has() variant would only narrow it, and the clear costs nothing on an
|
|
111
|
+
alert that follows no float. */
|
|
112
|
+
clear: right;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.dc-alert p {
|
|
116
|
+
margin: 0;
|
|
117
|
+
font-style: italic;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.dc-alert p+p {
|
|
121
|
+
margin-top: 6pt;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* Inline emphasis + paragraphs inside callouts must inherit the alert's
|
|
125
|
+
--dc-alert-fg color. The global p/em/strong rules in dc-core.css set
|
|
126
|
+
dark text colors (color: --ink / --ink-smoke). Inside dark-fill callout
|
|
127
|
+
variants (.dc-dm-note etc.), dark-on-dark measured 1.17:1 — invisible.
|
|
128
|
+
Inherit makes p/em/strong adopt the alert's own foreground. */
|
|
129
|
+
.dc-alert p,
|
|
130
|
+
.dc-alert em,
|
|
131
|
+
.dc-alert strong {
|
|
132
|
+
color: inherit;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.dc-alert ul,
|
|
136
|
+
.dc-alert ol {
|
|
137
|
+
margin: 6pt 0 0;
|
|
138
|
+
padding-left: 0.2in;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.dc-alert li {
|
|
142
|
+
margin-bottom: 0.04in;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.dc-alert li::before {
|
|
146
|
+
color: var(--dc-alert-border);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* ── Label chrome ───────────────────────────────────────────────────────── */
|
|
150
|
+
.dc-alert-label {
|
|
151
|
+
display: block;
|
|
152
|
+
font-family: var(--font-mono);
|
|
153
|
+
font-size: var(--dc-alert-label-size);
|
|
154
|
+
font-weight: var(--dc-alert-label-weight);
|
|
155
|
+
font-style: normal;
|
|
156
|
+
text-transform: uppercase;
|
|
157
|
+
letter-spacing: var(--dc-alert-label-spacing);
|
|
158
|
+
margin-bottom: var(--dc-alert-label-margin);
|
|
159
|
+
color: var(--dc-alert-label-color);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* ── Variant: Note (player-facing, default) ─────────────────────────────── */
|
|
163
|
+
.dc-note {
|
|
164
|
+
--dc-alert-label-size: 9px;
|
|
165
|
+
--dc-alert-label-spacing: 2px;
|
|
166
|
+
--dc-alert-label-margin: var(--space-sm);
|
|
167
|
+
--dc-alert-margin-top: var(--space-lg);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* ── Variant: Warning (note with distinct surface) ──────────────────────── */
|
|
171
|
+
.dc-note.warning {
|
|
172
|
+
--dc-alert-bg: var(--paper-stain);
|
|
173
|
+
--dc-alert-border: var(--orange);
|
|
174
|
+
--dc-alert-label-color: var(--rust);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/* ── Variant: DM Note (Dream Master-facing) — dark panel, authoritative ──── */
|
|
178
|
+
.dc-dm-note {
|
|
179
|
+
--dc-alert-bg: var(--ink-dark);
|
|
180
|
+
--dc-alert-fg: var(--paper-cream);
|
|
181
|
+
--dc-alert-border: var(--hud-blue-bright);
|
|
182
|
+
--dc-alert-label-color: var(--hud-blue-bright);
|
|
183
|
+
--dc-alert-body-size: 9pt;
|
|
184
|
+
--dc-alert-border-width: 3px;
|
|
185
|
+
--dc-alert-label-weight: 600;
|
|
186
|
+
--dc-alert-label-spacing: 0.1em;
|
|
187
|
+
--dc-alert-margin-top: 9pt;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* ── Variant: Vibe Callout — flavor fiction, dark panel ──────────────────── */
|
|
191
|
+
.dc-vibe-callout {
|
|
192
|
+
--dc-alert-bg: var(--ink-dark);
|
|
193
|
+
--dc-alert-fg: var(--paper-aged);
|
|
194
|
+
--dc-alert-border: var(--hud-magenta);
|
|
195
|
+
--dc-alert-label-color: var(--hud-magenta);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/* ── Variant: Origin Callout ────────────────────────────────────────────── */
|
|
199
|
+
.dc-origin-callout {
|
|
200
|
+
--dc-alert-bg: var(--surface-orange-tint);
|
|
201
|
+
--dc-alert-border: var(--rust); /* warmth without blood's full danger weight */
|
|
202
|
+
--dc-alert-label-color: var(--crimson);
|
|
203
|
+
--dc-alert-border-width: 3px;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* ── Variant: Visit Callout ─────────────────────────────────────────────── */
|
|
207
|
+
.dc-visit-callout {
|
|
208
|
+
--dc-alert-border: var(--hud-blue);
|
|
209
|
+
/* Was --hud-blue-dark on --hud-blue-dim (default alert bg) = 3.95:1
|
|
210
|
+
(fails AA). --ink-dark gives 7.05:1 on the same cyan bg. */
|
|
211
|
+
--dc-alert-label-color: var(--ink-dark);
|
|
212
|
+
--dc-alert-body-size: var(--fs-body);
|
|
213
|
+
margin: 0.12in 0;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* ── Variant: Gear Callout ──────────────────────────────────────────────── */
|
|
217
|
+
.dc-gear-callout {
|
|
218
|
+
--dc-alert-bg: var(--ink-dark);
|
|
219
|
+
--dc-alert-fg: var(--paper-cream);
|
|
220
|
+
--dc-alert-border: var(--brand-yellow); /* brand-yellow = hazmat/tech signal */
|
|
221
|
+
--dc-alert-label-color: var(--brand-yellow);
|
|
222
|
+
margin: 0.12in auto 0.18in;
|
|
223
|
+
border-left-width: 4px;
|
|
224
|
+
width: 90%;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
}
|