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
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
@layer dc.components {
|
|
2
|
+
|
|
3
|
+
/* ═══ SIMPLE COMPONENTS ═══ */
|
|
4
|
+
|
|
5
|
+
/* ── Tag ──────────────────────────────────────────────────────────────── */
|
|
6
|
+
.dc-tag {
|
|
7
|
+
font-family: var(--font-mono);
|
|
8
|
+
font-size: 0.62rem;
|
|
9
|
+
text-transform: uppercase;
|
|
10
|
+
letter-spacing: var(--ls-cap-sm);
|
|
11
|
+
color: var(--ink-dust);
|
|
12
|
+
font-weight: 600;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* ── Chevron banner ───────────────────────────────────────────────────── */
|
|
16
|
+
/* Chapter-title chevron banner. Token contract:
|
|
17
|
+
--dc-chevron-bg → banner background (default --brand-magenta-deep)
|
|
18
|
+
--dc-chevron-color → text color (default --paper-cream)
|
|
19
|
+
Per-chapter override e.g.:
|
|
20
|
+
#ch-example-gear-tech .dc-chevron { --dc-chevron-bg: var(--hud-blue-dark); }
|
|
21
|
+
|
|
22
|
+
WHY brand-magenta-deep default (and not rust): per the creaturepunk-
|
|
23
|
+
design-guide brand spec, magenta is the "banner / chapter punch /
|
|
24
|
+
spray treatment" role color. Rust/orange is reserved for "warnings,
|
|
25
|
+
AP tags, arrows, mechanical emphasis" — putting it on chapter banners
|
|
26
|
+
miscommunicates the semantic (CONTENTS shouldn't read as a warning).
|
|
27
|
+
Rubric: D9 (brand identity per chapter — chroma anchor must match
|
|
28
|
+
the banner's semantic role). */
|
|
29
|
+
/* Chevron banner. Applies to elements explicitly marked `.dc-chevron`
|
|
30
|
+
AND to the h1 that's the first child of a chapter-opener intro section
|
|
31
|
+
— so authors don't have to write `{.dc-chevron}` on every chapter h1.
|
|
32
|
+
The structural-selector branch is the same selector used by the
|
|
33
|
+
chapter-opener composite rules above. */
|
|
34
|
+
.dc-chevron,
|
|
35
|
+
.chapter[data-chapter-label] > .page[data-page="intro"] > .section > h1:first-of-type {
|
|
36
|
+
font-family: var(--font-display);
|
|
37
|
+
font-size: var(--dc-chevron-font-size);
|
|
38
|
+
letter-spacing: 0.06em;
|
|
39
|
+
color: var(--dc-chevron-color);
|
|
40
|
+
text-transform: uppercase;
|
|
41
|
+
background: var(--dc-chevron-bg);
|
|
42
|
+
padding: 10px 28px 10px 14px;
|
|
43
|
+
display: block;
|
|
44
|
+
box-sizing: border-box;
|
|
45
|
+
clip-path: var(--clip-banner);
|
|
46
|
+
margin: 0;
|
|
47
|
+
line-height: 1.2;
|
|
48
|
+
word-break: break-word;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
/* HEADING-SECTION ADJACENCY (D11, ≤ 0px gap)
|
|
53
|
+
See the single-direction margin convention applied to .section, .dc-intro,
|
|
54
|
+
.dc-toc etc. below in their base definitions: each component
|
|
55
|
+
has `margin-top: 0` and spaces itself via bottom margin only. Consecutive
|
|
56
|
+
siblings collapse naturally (top:0 + bottom:Npt = Npt gap). The first
|
|
57
|
+
sibling after a chevron has no top gap → flush attachment "for free",
|
|
58
|
+
no adjacency rule required.
|
|
59
|
+
|
|
60
|
+
Why not adjacent-sibling selectors? Single-direction margins side-step
|
|
61
|
+
the cascade tiebreak entirely — a later `.B { margin: ... }` shorthand
|
|
62
|
+
cannot silently beat an `A + B` gap rule if there is no gap rule.
|
|
63
|
+
Iter-8 (2026-05-25). */
|
|
64
|
+
|
|
65
|
+
/* When a .dc-intro lede is followed by an alert/callout (the common
|
|
66
|
+
"lede + supporting note" pattern from How Abilities Work), tighten the
|
|
67
|
+
gap so they read as a connected pair. (@callout emits .dc-alert — the
|
|
68
|
+
former .dc-callout adjacency rule was dead and was removed 2026-06-21.) */
|
|
69
|
+
.dc-intro + .dc-alert {
|
|
70
|
+
margin-top: 6pt;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Adjacent callouts/alerts (e.g. Cybersuck followed by SysFAIL after
|
|
74
|
+
the Ego Points table) read as a CONNECTED PAIR rather than two
|
|
75
|
+
independent floating boxes. Per user feedback: "design elements just
|
|
76
|
+
scattered on pages after Ego Points." (@callout only ever emits
|
|
77
|
+
.dc-alert; the three .dc-callout adjacency permutations never fired and
|
|
78
|
+
were removed 2026-06-21.) */
|
|
79
|
+
.dc-alert + .dc-alert {
|
|
80
|
+
margin-top: 6pt;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* H1.dc-chevron — chapter-title banner sized to fit long chapter names on
|
|
84
|
+
one or two lines. The base .dc-chevron font-size is too large for typical
|
|
85
|
+
H1 chapter titles ("What Do You Dream of Doing?", etc.). Front-matter pages
|
|
86
|
+
(TOC / Credits / Introduction) override this back up to a commanding display
|
|
87
|
+
size — see the page-scoped rule below. D4 type scale (banner-to-body ratio
|
|
88
|
+
must be ≥ 2× at print scale for chapter-punch role). */
|
|
89
|
+
h1.dc-chevron {
|
|
90
|
+
font-size: 1.4rem;
|
|
91
|
+
line-height: 1.2;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* Chapter-opener heading runs at a smaller size than other h1.dc-chevron
|
|
95
|
+
instances so the section body weight stays the focal anchor below the
|
|
96
|
+
composite badge + banner. User-approved 2026-05-25. */
|
|
97
|
+
.chapter[data-chapter-label] > .page[data-page="intro"] > .section > h1:first-of-type {
|
|
98
|
+
font-size: 1.1rem;
|
|
99
|
+
line-height: 1.2;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Front-matter chevron font-size overrides moved to the book's own sheet (`@layer book`) per A1
|
|
103
|
+
layer-ownership (page-context rules belong in the guide-specific override
|
|
104
|
+
file, not the portable component library). Three-judge gate iteration 3. */
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
/* ── Spray banner (h2 path header) ───────────────────────────────────────
|
|
108
|
+
Token contract:
|
|
109
|
+
--dc-spray-bg → banner background (default --hud-magenta)
|
|
110
|
+
--dc-spray-color → text color (default --paper-cream)
|
|
111
|
+
Section-level override e.g.:
|
|
112
|
+
.section.dc-augmerc .dc-spray { --dc-spray-bg: var(--augmerc-dark); } */
|
|
113
|
+
.dc-spray {
|
|
114
|
+
font-family: var(--font-display);
|
|
115
|
+
font-size: 22px;
|
|
116
|
+
color: var(--dc-spray-color);
|
|
117
|
+
text-transform: uppercase;
|
|
118
|
+
line-height: 1.5;
|
|
119
|
+
background: var(--dc-spray-bg);
|
|
120
|
+
display: inline-block;
|
|
121
|
+
box-sizing: border-box;
|
|
122
|
+
padding: 16px 22px 18px;
|
|
123
|
+
position: relative;
|
|
124
|
+
/* clip-path does double duty here: besides the chipped corner it makes this
|
|
125
|
+
banner a stacking context, which is what keeps the ::before skew tab
|
|
126
|
+
(z-index: -1) behind THIS element instead of escaping to an ancestor. The
|
|
127
|
+
banner used to get that context from a `.dc-path-shell > * { z-index: 1 }`
|
|
128
|
+
lift, now deleted; MEASURED pixel-identical (0 differing pixels at 2x over
|
|
129
|
+
the whole .dc-path-shell) with the lift, with an explicit
|
|
130
|
+
`isolation: isolate`, and with neither. */
|
|
131
|
+
clip-path: polygon(0 0, 100% 0, 100% 100%, 25px 100%, 0 calc(100% - 15px));
|
|
132
|
+
margin: 0;
|
|
133
|
+
word-break: break-word;
|
|
134
|
+
overflow: visible;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.dc-spray::before {
|
|
138
|
+
content: '';
|
|
139
|
+
position: absolute;
|
|
140
|
+
top: -3px;
|
|
141
|
+
right: -8px;
|
|
142
|
+
bottom: -3px;
|
|
143
|
+
width: 14px;
|
|
144
|
+
background: var(--dc-spray-bg);
|
|
145
|
+
transform: skewX(-8deg);
|
|
146
|
+
z-index: -1;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.dc-spray::after {
|
|
150
|
+
content: '';
|
|
151
|
+
position: absolute;
|
|
152
|
+
bottom: -6px;
|
|
153
|
+
left: 8%;
|
|
154
|
+
width: 45%;
|
|
155
|
+
height: 5px;
|
|
156
|
+
background: var(--dc-spray-bg);
|
|
157
|
+
opacity: 0.08;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
/* ── Path subtitle ────────────────────────────────────────────────────── */
|
|
162
|
+
.dc-path-subtitle {
|
|
163
|
+
font-family: var(--font-mono);
|
|
164
|
+
font-size: 9px;
|
|
165
|
+
text-transform: uppercase;
|
|
166
|
+
letter-spacing: 3px;
|
|
167
|
+
color: var(--hud-blue-dark);
|
|
168
|
+
font-weight: 600;
|
|
169
|
+
margin: 8px 0 4px;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
/* ── Stickers / Arrow ─────────────────────────────────────────────────── */
|
|
174
|
+
.dc-stickers {
|
|
175
|
+
display: flex;
|
|
176
|
+
gap: 8px;
|
|
177
|
+
flex-wrap: wrap;
|
|
178
|
+
align-items: center;
|
|
179
|
+
margin: 4px 0 22px;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.dc-sticker {
|
|
183
|
+
font-family: var(--font-mono);
|
|
184
|
+
font-size: 11px;
|
|
185
|
+
font-weight: 700;
|
|
186
|
+
padding: 4px 10px;
|
|
187
|
+
background: var(--ink-dark);
|
|
188
|
+
color: var(--paper-cream);
|
|
189
|
+
border: 1px solid var(--hud-blue-dark);
|
|
190
|
+
transform: rotate(-0.5deg);
|
|
191
|
+
text-transform: uppercase;
|
|
192
|
+
letter-spacing: 1px;
|
|
193
|
+
box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.35);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.dc-sticker:nth-child(4n+3) {
|
|
197
|
+
transform: rotate(0.7deg);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.dc-sticker:nth-child(4n+5) {
|
|
201
|
+
transform: rotate(-0.9deg);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.dc-sticker.active {
|
|
205
|
+
/* cream on --crimson = 4.03:1 (fails AA at 11px). I tested --ink on
|
|
206
|
+
--crimson per the pressure-test expert; measured 3.83:1 — also fails.
|
|
207
|
+
Neither text-color choice passes on the bright crimson fill at sticker
|
|
208
|
+
size. Switching the bg to --blood: cream-on-blood = 7.73:1, comfortably
|
|
209
|
+
passes AA. The "active/hot" semantic is preserved (still warm red),
|
|
210
|
+
just deeper. */
|
|
211
|
+
background: var(--blood);
|
|
212
|
+
color: var(--paper-cream);
|
|
213
|
+
border-color: var(--blood);
|
|
214
|
+
transform: rotate(-1.5deg);
|
|
215
|
+
box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.28);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/* Inline ↑↓→ marker. Token: --dc-arrow-color (default --blood).
|
|
219
|
+
--orange #d4500a = 2.46:1 on wall — fails AA. --rust #b23a12 measured
|
|
220
|
+
3.48:1 on wall — still fails. --blood #901a12 = 5.21:1 on wall, passes
|
|
221
|
+
AA small text. Arrows can render outside a paper substrate, so default
|
|
222
|
+
needs to read against the worst case. */
|
|
223
|
+
.dc-arrow {
|
|
224
|
+
font-family: var(--font-mono);
|
|
225
|
+
color: var(--dc-arrow-color);
|
|
226
|
+
font-size: 14px;
|
|
227
|
+
font-weight: 700;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
/* ── Path sticker / Sticker tier ref ──────────────────────────────────── */
|
|
232
|
+
.dc-path-sticker {
|
|
233
|
+
display: inline-block;
|
|
234
|
+
font-family: var(--font-mono);
|
|
235
|
+
font-size: 8px;
|
|
236
|
+
font-weight: 700;
|
|
237
|
+
letter-spacing: 0.10em;
|
|
238
|
+
text-transform: uppercase;
|
|
239
|
+
background: var(--paper-cream);
|
|
240
|
+
color: var(--hud-blue);
|
|
241
|
+
padding: 2px 5px 1px;
|
|
242
|
+
transform: rotate(-2.5deg);
|
|
243
|
+
vertical-align: middle;
|
|
244
|
+
position: relative;
|
|
245
|
+
top: -1px;
|
|
246
|
+
margin-right: 10px;
|
|
247
|
+
box-shadow: 1px 2px 0 rgba(0, 0, 0, 0.30);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* ───────── STICKER TIER REF ───────── */
|
|
251
|
+
.dc-sticker-ref {
|
|
252
|
+
font-family: var(--font-mono);
|
|
253
|
+
font-size: 9px;
|
|
254
|
+
font-weight: 700;
|
|
255
|
+
color: inherit;
|
|
256
|
+
opacity: 0.55;
|
|
257
|
+
margin-right: 5px;
|
|
258
|
+
letter-spacing: 0.5px;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/* ── Flavor (italic flavor text) ──────────────────────────────────────────
|
|
262
|
+
Token contract:
|
|
263
|
+
--dc-flavor-color → text color (default --ink-smoke)
|
|
264
|
+
--dc-flavor-accent → left-rail color (default --orange)
|
|
265
|
+
--dc-flavor-accent-width → left-rail weight (default 3px)
|
|
266
|
+
*/
|
|
267
|
+
.dc-flavor {
|
|
268
|
+
font-family: var(--font-body);
|
|
269
|
+
font-style: italic;
|
|
270
|
+
color: var(--dc-flavor-color);
|
|
271
|
+
font-size: var(--fs-body-sm);
|
|
272
|
+
padding-bottom: 4px;
|
|
273
|
+
margin-bottom: 6px;
|
|
274
|
+
position: relative;
|
|
275
|
+
border-left: var(--dc-flavor-accent-width) solid var(--dc-flavor-accent);
|
|
276
|
+
padding-left: 8px;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/* ── Sub-header ───────────────────────────────────────────────────────── */
|
|
280
|
+
.dc-sub-header {
|
|
281
|
+
font-family: var(--font-mono);
|
|
282
|
+
font-size: 10px;
|
|
283
|
+
text-transform: uppercase;
|
|
284
|
+
letter-spacing: 3px;
|
|
285
|
+
color: var(--hud-blue);
|
|
286
|
+
margin: 6px 0 3px;
|
|
287
|
+
padding-top: 4px;
|
|
288
|
+
border-top: 1px solid var(--hud-blue-dim);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
/* ── Portrait panel ───────────────────────────────────────────────────── */
|
|
293
|
+
/* Token contract:
|
|
294
|
+
--dc-portrait-surface → frame fill (default --paper-cream)
|
|
295
|
+
--dc-portrait-border → frame border color (default --paper-aged)
|
|
296
|
+
*/
|
|
297
|
+
.dc-portrait {
|
|
298
|
+
background: var(--dc-portrait-surface);
|
|
299
|
+
border: 1px solid var(--dc-portrait-border);
|
|
300
|
+
padding: 14px;
|
|
301
|
+
position: relative;
|
|
302
|
+
overflow: hidden;
|
|
303
|
+
height: fit-content;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.dc-portrait img {
|
|
307
|
+
width: 100%;
|
|
308
|
+
height: auto;
|
|
309
|
+
display: block;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
/* ── Intro / Lede line ──────────────────────────────────────────────────
|
|
314
|
+
Single-direction margin: top: 0, bottom: standard gap. This gives the
|
|
315
|
+
lede flush attachment to a chevron heading above (D11 = 0) and natural
|
|
316
|
+
spacing to whatever comes below. When a lede follows body text (rare),
|
|
317
|
+
the paragraph's bottom margin provides the gap above the lede.
|
|
318
|
+
|
|
319
|
+
Token contract:
|
|
320
|
+
--dc-intro-accent → 4px left-strip color (default --orange)
|
|
321
|
+
--dc-intro-bg → substrate color right of the strip (default --paper-stain) */
|
|
322
|
+
.dc-intro {
|
|
323
|
+
font-family: var(--font-body);
|
|
324
|
+
font-size: var(--fs-body);
|
|
325
|
+
font-style: italic;
|
|
326
|
+
color: var(--ink-smoke);
|
|
327
|
+
background: linear-gradient(to right, var(--dc-intro-accent) 4px, var(--dc-intro-bg) 4px);
|
|
328
|
+
line-height: 1.5;
|
|
329
|
+
padding: 0 14px 10px 18px;
|
|
330
|
+
margin: 0 0 calc(0.1in + 3pt) 0;
|
|
331
|
+
box-shadow: var(--shadow-poster);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* ── Spec tweak section header ────────────────────────────────────────── */
|
|
335
|
+
.dc-spec-tweak {
|
|
336
|
+
font-size: 22px;
|
|
337
|
+
/* User feedback (2026-05-24): "Spec Tweak text color is kind of off."
|
|
338
|
+
Was --blood (red) which reads as "warning/wound" — too strong a
|
|
339
|
+
semantic for a structural section label. Switched to --ink-dark
|
|
340
|
+
(neutral dark) for text + bottom-rule, with --brand-magenta as the
|
|
341
|
+
left-rail accent so the chapter's brand color anchors the element
|
|
342
|
+
without taking the text color hostage. */
|
|
343
|
+
color: var(--ink-dark);
|
|
344
|
+
border-bottom: 2px solid var(--ink-dark);
|
|
345
|
+
border-left: 4px solid var(--brand-magenta);
|
|
346
|
+
padding-bottom: 6px;
|
|
347
|
+
padding-left: 10px;
|
|
348
|
+
margin: 20px 0 14px;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* ── Dashed rule divider (hr) ─────────────────────────────────────────── */
|
|
352
|
+
hr,
|
|
353
|
+
.dc-dashed-rule {
|
|
354
|
+
border: none;
|
|
355
|
+
border-top: 1.5px dashed var(--hud-magenta);
|
|
356
|
+
opacity: 0.5;
|
|
357
|
+
margin: var(--space-xl) 0;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
/* ── Class tag pill + specialty color variants ────────────────────────── */
|
|
362
|
+
.dc-classtag {
|
|
363
|
+
display: inline-flex;
|
|
364
|
+
align-items: center;
|
|
365
|
+
gap: 8px;
|
|
366
|
+
font-family: var(--font-mono);
|
|
367
|
+
font-size: 10px;
|
|
368
|
+
letter-spacing: 3px;
|
|
369
|
+
text-transform: uppercase;
|
|
370
|
+
background: var(--paper-light);
|
|
371
|
+
color: var(--ink);
|
|
372
|
+
border: 2px solid var(--ink);
|
|
373
|
+
padding: 4px 10px 4px 6px;
|
|
374
|
+
font-weight: 600;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/* Token contract:
|
|
378
|
+
--dc-classtag-color → dot fill color (default --orange)
|
|
379
|
+
Set by each .dc-classtag.X variant to its specialty's accent.
|
|
380
|
+
The dot is now a ::before pseudo on .dc-classtag itself — no inner
|
|
381
|
+
.dc-classtag-dot element is required. Authors / plugin emit only the
|
|
382
|
+
outer .dc-classtag span. */
|
|
383
|
+
.dc-classtag::before {
|
|
384
|
+
content: '';
|
|
385
|
+
width: 10px;
|
|
386
|
+
height: 10px;
|
|
387
|
+
background: var(--dc-classtag-color);
|
|
388
|
+
display: inline-block;
|
|
389
|
+
flex-shrink: 0;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/* Classtag dots — each specialty's own --*-accent for consistent identity */
|
|
393
|
+
.dc-classtag.augmerc { --dc-classtag-color: var(--augmerc-accent); }
|
|
394
|
+
.dc-classtag.proxy { --dc-classtag-color: var(--proxy-accent); }
|
|
395
|
+
.dc-classtag.streetwarden { --dc-classtag-color: var(--streetwarden-accent); }
|
|
396
|
+
.dc-classtag.gutterdruid { --dc-classtag-color: var(--gutterdruid-accent); }
|
|
397
|
+
.dc-classtag.cybersurgeon { --dc-classtag-color: var(--cybersurgeon-accent); }
|
|
398
|
+
.dc-classtag.wirephreak { --dc-classtag-color: var(--wirephreak-accent); }
|
|
399
|
+
.dc-classtag.technosorcerer { --dc-classtag-color: var(--technosorcerer-accent); }
|
|
400
|
+
.dc-classtag.etherlock { --dc-classtag-color: var(--etherlock-accent); }
|
|
401
|
+
.dc-classtag.dualist { --dc-classtag-color: var(--dualist-accent); }
|
|
402
|
+
.dc-classtag.generalist { --dc-classtag-color: var(--generalist-accent); }
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
/* .dc-stamp / .dc-classified were removed 2026-05-24 (zero live usage; the
|
|
406
|
+
only authoring path was raw HTML, which the cascade principle forbids).
|
|
407
|
+
They were parked in an unloaded css/deprecated.css, which has since been
|
|
408
|
+
deleted — the dc-op-manual repo's history (`dc-design-guide/css/deprecated.css`) has the rules if
|
|
409
|
+
the design is ever revived. Revive as `@section .dc-stamp`, not raw HTML. */
|
|
410
|
+
|
|
411
|
+
/* ── Tape (torn-tape divider) ─────────────────────────────────────────── */
|
|
412
|
+
.dc-tape {
|
|
413
|
+
display: flex;
|
|
414
|
+
align-items: center;
|
|
415
|
+
gap: 12px;
|
|
416
|
+
margin: 28px 0 22px;
|
|
417
|
+
font-family: var(--font-mono);
|
|
418
|
+
font-size: 11px;
|
|
419
|
+
letter-spacing: 4px;
|
|
420
|
+
text-transform: uppercase;
|
|
421
|
+
color: var(--dc-tape-color);
|
|
422
|
+
background: var(--dc-tape-bg);
|
|
423
|
+
padding: 14px 14px;
|
|
424
|
+
border: 2px solid var(--dc-tape-border);
|
|
425
|
+
box-shadow: 1px 1px 0 rgba(0, 0, 0, 0.15);
|
|
426
|
+
break-inside: avoid;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
.dc-tape::before,
|
|
430
|
+
.dc-tape::after {
|
|
431
|
+
content: '';
|
|
432
|
+
flex: 1;
|
|
433
|
+
height: 4px;
|
|
434
|
+
background: repeating-linear-gradient(90deg, var(--crimson) 0 6px, transparent 6px 10px);
|
|
435
|
+
opacity: 0.85;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/* Chapter-opener badge + H1 banner — see the chapter-opener composite
|
|
439
|
+
block further down (.page[data-page="intro"][data-chapter-label]).
|
|
440
|
+
The legacy .dc-chapter-opener-no rules previously here were removed
|
|
441
|
+
when the legacy @chapter-opener macro was retired. */
|
|
442
|
+
|
|
443
|
+
/* ── Specialty art full-page plate ─────────────────────────────────────────── */
|
|
444
|
+
.dc-specialty-art {
|
|
445
|
+
width: var(--page-width);
|
|
446
|
+
height: var(--page-height);
|
|
447
|
+
break-before: page;
|
|
448
|
+
margin: 0;
|
|
449
|
+
overflow: hidden;
|
|
450
|
+
background: var(--ink-dark); /* dark fallback so a missing image reads as intentional art plate */
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
.dc-specialty-art img {
|
|
454
|
+
display: block;
|
|
455
|
+
width: 100%;
|
|
456
|
+
height: 100%;
|
|
457
|
+
object-fit: cover;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
/* ── Modifier variants — .dc-flush removes margin ─────────────────────────── */
|
|
462
|
+
.dc-stickers.dc-flush,
|
|
463
|
+
.dc-path-subtitle.dc-flush,
|
|
464
|
+
.dc-intro.dc-flush,
|
|
465
|
+
.dc-tape.dc-flush {
|
|
466
|
+
margin: 0;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
.dc-sub-header.dc-flush {
|
|
470
|
+
margin: 0;
|
|
471
|
+
padding-top: 0;
|
|
472
|
+
border-top: 0;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.dc-spec-tweak.dc-no-top {
|
|
476
|
+
margin-top: 0;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.dc-tape.dc-margin-sm {
|
|
480
|
+
margin: 14px 0 8px;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
}
|