gp-dimm-city 1.7.2 → 1.7.4
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
CHANGED
|
@@ -7,6 +7,44 @@ cut a version that has no `## [X.Y.Z]` heading below.
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.7.4] - 2026-10-15
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **Proxy and Wirephreak swap colours.** Proxy now takes the magenta (the more
|
|
15
|
+
purple of the two: `--brand-magenta` accent, `#9a1896` mid, `#8a1a90` dark,
|
|
16
|
+
a deep-magenta title band with a cream tier chip) and Wirephreak the electric
|
|
17
|
+
indigo (`--signal-indigo` accent, `#2f2290` mid, `#1e0f50` dark, an indigo
|
|
18
|
+
band and chip). Each keeps its own shapes and band register (Proxy's facet
|
|
19
|
+
plane, Wirephreak's ticked LED rule). The Surreal definition block keeps its
|
|
20
|
+
indigo-black surface, now read from `--wirephreak-dark`.
|
|
21
|
+
- **The design guide and tests run on Gutterpress 0.11.20-alpha.3** (a
|
|
22
|
+
development dependency only: the published package does not depend on
|
|
23
|
+
Gutterpress). Its preview repeats a table header only where print does
|
|
24
|
+
(dimm-city/gutterpress#398). The tests drop core's new `data-name` block
|
|
25
|
+
stamp before comparing markup, as they already drop its source stamps, and
|
|
26
|
+
read a column's alignment from `data-align`, which core now writes in place
|
|
27
|
+
of markdown-it's inline `text-align`.
|
|
28
|
+
|
|
29
|
+
## [1.7.3] - 2026-10-15
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **A specialty opener's art runs to the bottom edge of the sheet** (#54). The
|
|
34
|
+
image sits in a paragraph wrapper that stayed at its content height, so the
|
|
35
|
+
image's `height: 100%` resolved to nothing and it kept its own aspect ratio,
|
|
36
|
+
and core's in-flow image cap (`max-height: calc(var(--gp-content-h) - 4px)`)
|
|
37
|
+
held it 4px under the page besides. On the Field Guide's 8 openers the art
|
|
38
|
+
stopped 6.36pt (0.04in) short of the 810pt sheet, inside the bleed band, with
|
|
39
|
+
only the plate's dark backdrop under the gap. The wrapper now fills the
|
|
40
|
+
plate and the plate's image drops the cap (the plate is exactly one sheet
|
|
41
|
+
and clips its own overflow), so the art reaches every edge. Gutterpress
|
|
42
|
+
0.11.20's art safe-area overlay no longer flags those pages.
|
|
43
|
+
- **The release run's tarball tests have a timeout sized for `npm pack`.** The
|
|
44
|
+
first of them runs `npm pack`, which on a busy runner can take longer than
|
|
45
|
+
bun's default 5s test timeout; that failed the 1.7.1 release run before it
|
|
46
|
+
published.
|
|
47
|
+
|
|
10
48
|
## [1.7.2] - 2026-10-15
|
|
11
49
|
|
|
12
50
|
No package rule counts a book's rows or blocks any more: a threshold like
|
|
@@ -15,8 +53,9 @@ measured on, so it belongs in that book's own sheet.
|
|
|
15
53
|
|
|
16
54
|
### Removed
|
|
17
55
|
|
|
18
|
-
- **The
|
|
19
|
-
> tr:nth-child(12))`). Tables are kept whole
|
|
56
|
+
- **The long-choose-table rule from 1.7.1** (`.dc-section-choose > table:has(>
|
|
57
|
+
tbody > tr:nth-child(12))`), which never reached npm. Tables are kept whole,
|
|
58
|
+
as in 1.7.0. A book with a
|
|
20
59
|
table taller than the page under its heading lets that one split from its own
|
|
21
60
|
sheet, e.g. `.dc-flaws > table { break-inside: auto; }` for the Field Guide's
|
|
22
61
|
Flaw table.
|
|
@@ -34,7 +73,10 @@ measured on, so it belongs in that book's own sheet.
|
|
|
34
73
|
instead of `:nth-child(-n+2)`. Same rule: the flavor line and the block
|
|
35
74
|
after it stay with what follows.
|
|
36
75
|
|
|
37
|
-
## [1.7.1] -
|
|
76
|
+
## [1.7.1] - not released
|
|
77
|
+
|
|
78
|
+
Never published: its release run failed in the test job (the tarball test
|
|
79
|
+
timeout fixed in 1.7.3), and 1.7.2 removed its one change before the next run.
|
|
38
80
|
|
|
39
81
|
### Fixed
|
|
40
82
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gp-dimm-city",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.4",
|
|
4
4
|
"description": "Dimm City design system for Gutterpress: the markdown-it macros (@skill, @specialty, @learning-path, @callout, …), print stylesheets, design tokens, fonts and page templates the Dimm City TTRPG books are set in.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "plugin.js",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"pack:check": "npm pack --dry-run"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
|
-
"gutterpress": "0.11.
|
|
73
|
+
"gutterpress": "0.11.20-alpha.3",
|
|
74
74
|
"markdown-it": "^14.1.0"
|
|
75
75
|
},
|
|
76
76
|
"peerDependencies": {
|
|
@@ -430,10 +430,21 @@ hr {
|
|
|
430
430
|
background: var(--ink-dark); /* dark fallback so a missing image reads as intentional art plate */
|
|
431
431
|
}
|
|
432
432
|
|
|
433
|
+
/* The image runs to every edge of the sheet (#54). Its paragraph wrapper
|
|
434
|
+
fills the plate too: left at its content height, the image's `height: 100%`
|
|
435
|
+
has nothing to resolve against and the image keeps its own aspect ratio,
|
|
436
|
+
stopping short of the bottom edge. Core caps an in-flow picture 4px under
|
|
437
|
+
the page's content height so it cannot spill onto the next page; the plate
|
|
438
|
+
is exactly one sheet and clips its own overflow, so its image drops the cap. */
|
|
439
|
+
.dc-specialty-art > .dc-img-wrapper {
|
|
440
|
+
height: 100%;
|
|
441
|
+
}
|
|
442
|
+
|
|
433
443
|
.dc-specialty-art img {
|
|
434
444
|
display: block;
|
|
435
445
|
width: 100%;
|
|
436
446
|
height: 100%;
|
|
447
|
+
max-height: none;
|
|
437
448
|
object-fit: cover;
|
|
438
449
|
}
|
|
439
450
|
|
|
@@ -691,7 +691,7 @@
|
|
|
691
691
|
violet bands on opposite inner edges), the headword leaning. Body copy stays
|
|
692
692
|
upright and unrotated; only the label leans. */
|
|
693
693
|
.dc-definition-surreal {
|
|
694
|
-
--dc-definition-block-surface: var(--
|
|
694
|
+
--dc-definition-block-surface: var(--wirephreak-dark); /* indigo-black */
|
|
695
695
|
--dc-definition-block-accent: var(--brand-magenta);
|
|
696
696
|
--dc-definition-block-accent-width: 0px;
|
|
697
697
|
--dc-definition-block-rule-bottom: 0px;
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
--spec-accent/-mid/-dark the triad, aliasing its own --<name>-accent/-mid/-dark
|
|
39
39
|
--spec-band / --spec-on-band the title-band fill and the type on it: the
|
|
40
40
|
bright signal colour, with whichever of ink or
|
|
41
|
-
cream holds >= 4.5:1 on it (
|
|
41
|
+
cream holds >= 4.5:1 on it (proxy uses the
|
|
42
42
|
deep magenta: cream on the bright one is 3.6:1)
|
|
43
43
|
--spec-chip-bg / -fg / -edge the tier pill on the card tab. REQUIRED: the
|
|
44
44
|
--spec-* tokens have no :root default, so a
|
|
@@ -237,25 +237,25 @@
|
|
|
237
237
|
--dc-specialty-card-bg: var(--paper-aged);
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
-
/* ── Wirephreak — hacker,
|
|
240
|
+
/* ── Wirephreak — hacker, electric indigo, asymmetric cross-cuts ───────── */
|
|
241
241
|
.dc-specialty.wirephreak {
|
|
242
242
|
--spec-accent: var(--wirephreak-accent);
|
|
243
243
|
--spec-mid: var(--wirephreak-mid);
|
|
244
244
|
--spec-dark: var(--wirephreak-dark);
|
|
245
|
-
--spec-ink: var(--
|
|
246
|
-
/* TECH:
|
|
247
|
-
--spec-band: var(--
|
|
245
|
+
--spec-ink: var(--wirephreak-mid); /* text-safe ink: >= 4.5:1 on cream (skill card, path shell) and light (intro) paper; on aged paper only where this specialty's card uses it (technosorcerer, gutterdruid, etherlock). ROLL THE DIE! and the like */
|
|
246
|
+
/* TECH: electric-indigo band, cyan LED rule with ink ticks, inset LED rim. */
|
|
247
|
+
--spec-band: var(--wirephreak-accent);
|
|
248
248
|
--spec-on-band: var(--paper-cream);
|
|
249
|
-
--spec-chip-bg: var(--
|
|
250
|
-
--spec-chip-fg: var(--
|
|
251
|
-
--spec-chip-edge: var(--
|
|
249
|
+
--spec-chip-bg: var(--wirephreak-accent);
|
|
250
|
+
--spec-chip-fg: var(--paper-cream);
|
|
251
|
+
--spec-chip-edge: var(--paper-cream);
|
|
252
252
|
--dc-band-rule: var(--brand-cyan);
|
|
253
253
|
--dc-band-rule-h: 5px;
|
|
254
254
|
--dc-band-tick: var(--ink);
|
|
255
255
|
--dc-band-tick-style: dotted;
|
|
256
256
|
--dc-band-tick-w: 3px;
|
|
257
|
-
--dc-band-rim: inset 0 2px 0 color-mix(in srgb, var(--paper-cream)
|
|
258
|
-
--dc-band-reg: inset 0 -2px 0 var(--
|
|
257
|
+
--dc-band-rim: inset 0 2px 0 color-mix(in srgb, var(--paper-cream) 22%, var(--wirephreak-accent));
|
|
258
|
+
--dc-band-reg: inset 0 -2px 0 var(--signal-indigo); /* a second ink printed 2px off: a misregistered rule */
|
|
259
259
|
/* TECH, circuit jogs: two big right-angle steps on the diagonal corners. */
|
|
260
260
|
--spec-edge-top: 0 0, calc(100% - 26px) 0, calc(100% - 26px) 10px, calc(100% - 13px) 10px, calc(100% - 13px) 20px, 100% 20px;
|
|
261
261
|
--spec-edge-rest: 100% calc(100% - 10px), calc(100% - 10px) 100%, 22px 100%, 22px calc(100% - 6px), 11px calc(100% - 6px), 11px calc(100% - 12px), 0 calc(100% - 12px);
|
|
@@ -301,24 +301,24 @@
|
|
|
301
301
|
--dc-specialty-card-bg: var(--paper-light);
|
|
302
302
|
}
|
|
303
303
|
|
|
304
|
-
/* ── Proxy — faith wired in,
|
|
304
|
+
/* ── Proxy — faith wired in, magenta, top-centre gate notch ──────────── */
|
|
305
305
|
.dc-specialty.proxy {
|
|
306
306
|
--spec-accent: var(--proxy-accent);
|
|
307
307
|
--spec-mid: var(--proxy-mid);
|
|
308
308
|
--spec-dark: var(--proxy-dark);
|
|
309
|
-
--spec-ink: var(--
|
|
310
|
-
/* TECH + MAGIC:
|
|
311
|
-
--spec-band: var(--
|
|
309
|
+
--spec-ink: var(--brand-magenta-deep); /* text-safe ink: >= 4.5:1 on cream (skill card, path shell) and light (intro) paper; on aged paper only where this specialty's card uses it (technosorcerer, gutterdruid, etherlock). ROLL THE DIE! and the like */
|
|
310
|
+
/* TECH + MAGIC: deep-magenta band (cream on the bright magenta is 3.6:1) with a faceted plane and a cyan LED rule. */
|
|
311
|
+
--spec-band: var(--brand-magenta-deep);
|
|
312
312
|
--spec-on-band: var(--paper-cream);
|
|
313
|
-
--spec-chip-bg: var(--
|
|
314
|
-
--spec-chip-fg: var(--
|
|
315
|
-
--spec-chip-edge: var(--
|
|
313
|
+
--spec-chip-bg: var(--paper-cream);
|
|
314
|
+
--spec-chip-fg: var(--proxy-dark);
|
|
315
|
+
--spec-chip-edge: var(--proxy-dark);
|
|
316
316
|
--dc-band-rule: var(--brand-cyan);
|
|
317
317
|
--dc-band-rule-h: 4px;
|
|
318
|
-
--dc-band-facet: color-mix(in srgb, var(--ink) 30%, var(--
|
|
318
|
+
--dc-band-facet: color-mix(in srgb, var(--ink) 30%, var(--brand-magenta-deep));
|
|
319
319
|
--dc-band-facet-width: 30%;
|
|
320
|
-
--dc-band-rim: inset 0 2px 0 color-mix(in srgb, var(--paper-cream)
|
|
321
|
-
--dc-band-reg: inset 0 -2px 0 var(--
|
|
320
|
+
--dc-band-rim: inset 0 2px 0 color-mix(in srgb, var(--paper-cream) 26%, var(--brand-magenta-deep));
|
|
321
|
+
--dc-band-reg: inset 0 -2px 0 var(--brand-magenta); /* a second ink printed 2px off: a misregistered rule */
|
|
322
322
|
/* TECH + MAGIC: a shallow centre gate on top (the rune), a stair at one corner and a facet at the other. */
|
|
323
323
|
--spec-edge-top: 0 0, calc(50% - 22px) 0, 50% 7px, calc(50% + 22px) 0, calc(100% - 14px) 0, 100% 14px;
|
|
324
324
|
--spec-edge-rest: 100% calc(100% - 12px), calc(100% - 10px) calc(100% - 12px), calc(100% - 10px) calc(100% - 6px), calc(100% - 20px) calc(100% - 6px), calc(100% - 20px) 100%, 12px 100%, 0 calc(100% - 12px);
|
package/styles/dc-identity.css
CHANGED
|
@@ -8,17 +8,17 @@
|
|
|
8
8
|
──────────────────────────────────────────────────────────────────────── */
|
|
9
9
|
|
|
10
10
|
/* ── Specialty Accent Colors ──────────────────────────────────────────── */
|
|
11
|
-
/* 4 brand-anchored (augmerc=cyan,
|
|
11
|
+
/* 4 brand-anchored (augmerc=cyan, proxy=magenta, wirephreak=indigo, etherlock=yellow),
|
|
12
12
|
2 crystal (dualist=aqua, generalist=slate), 1 fungi (gutterdruid=bioluminescent rot),
|
|
13
13
|
3 bespoke creaturepunk hues (technosorcerer=burnt orange, streetwarden=toxic-civic hazard green,
|
|
14
14
|
cybersurgeon=chrome). Streetwarden's #4db840 is high-vis civic hazard, distinct from the
|
|
15
15
|
quieter lichen tone; gutterdruid is the alive-and-glowing spore. */
|
|
16
16
|
--augmerc-accent: var(--brand-cyan); /* cyber-augmentation = brand neon-cyan */
|
|
17
|
-
--proxy-accent: var(--
|
|
17
|
+
--proxy-accent: var(--brand-magenta); /* ritual + tech = brand-signature magenta, the more purple of the two (swapped with wirephreak) */
|
|
18
18
|
--streetwarden-accent: #4db840; /* toxic civic green — hazard, not park bench · TAC 171% (C70 M0 Y100 K0) */
|
|
19
19
|
--gutterdruid-accent: var(--fungi-glow); /* bioluminescent spore — alley fungus at full flare */
|
|
20
20
|
--cybersurgeon-accent: #a8b4b8; /* cool blue-gray chrome · TAC 79% (C34 M22 Y23 K0) */
|
|
21
|
-
--wirephreak-accent: var(--
|
|
21
|
+
--wirephreak-accent: var(--signal-indigo); /* signal interference = electric indigo, its own hue (violet is the world's) */
|
|
22
22
|
--technosorcerer-accent: var(--orange); /* burnt-circuit orange */
|
|
23
23
|
--etherlock-accent: var(--brand-yellow); /* spirit channeling = brand radiant gold */
|
|
24
24
|
--dualist-accent: var(--crystal-aqua); /* refractive mineral split — two-path walker */
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
Measured TAC (see the Ink & Text note in dc-palette.css), all <= 268%. Six
|
|
29
29
|
were lifted off black to get there; each was over 270% in the build's
|
|
30
30
|
CGATS21_CRPC1 conversion: technosorcerer #3d1a00 (278%), streetwarden #1a3d10
|
|
31
|
-
(280%), gutterdruid #2a3408 (276%), proxy #150c4a (275%),
|
|
31
|
+
(280%), gutterdruid #2a3408 (276%), wirephreak (then proxy) #150c4a (275%),
|
|
32
32
|
etherlock #3d3000 (272%), generalist #1c252d (272%). The hue and the
|
|
33
33
|
light-type contrast (cream on any of them is >= 8:1) are unchanged. */
|
|
34
34
|
--augmerc-dark: #003a40; /* deep teal-black — cold chrome under the skin · TAC 260% (C92 M59 Y58 K50) */
|
|
35
|
-
--proxy-dark: #
|
|
35
|
+
--proxy-dark: #8a1a90; /* deep magenta-violet · TAC 156% (C55 M100 Y1 K0) */
|
|
36
36
|
--cybersurgeon-dark: #303840; /* cold clinical near-black · TAC 246% (C76 M65 Y55 K50) */
|
|
37
|
-
--wirephreak-dark: #
|
|
37
|
+
--wirephreak-dark: #1e0f50; /* deep indigo-black · TAC 268% (C99 M100 Y30 K39) */
|
|
38
38
|
--streetwarden-dark: #294c1f; /* rot-soaked forest dark · TAC 268% (C77 M44 Y100 K46) */
|
|
39
39
|
--technosorcerer-dark: #4c290f; /* near-black scorch · TAC 268% (C44 M73 Y89 K62) */
|
|
40
40
|
--gutterdruid-dark: #394017; /* swamp-rot dark — greenish, not brown · TAC 268% (C65 M52 Y97 K54) */
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
dark, slightly shifted toward the dark hue. Used wherever a specialty
|
|
48
48
|
needs a chrome/structural tone that isn't accent-glare or dark-mass. */
|
|
49
49
|
--augmerc-mid: #006878; /* drowned signal teal · TAC 193% (C89 M46 Y43 K15) */
|
|
50
|
-
--proxy-mid: #
|
|
50
|
+
--proxy-mid: #9a1896; /* between brand-magenta and proxy-dark · TAC 146% (C46 M100 Y0 K0) */
|
|
51
51
|
--cybersurgeon-mid: #606870; /* cool steel mid · TAC 176% (C64 M52 Y45 K16) */
|
|
52
52
|
--streetwarden-mid: #347828; /* civic green mid, not chartreuse · TAC 227% (C80 M30 Y100 K17) */
|
|
53
53
|
--gutterdruid-mid: #4d6020; /* olive-swamp lichen · TAC 240% (C66 M42 Y100 K32) */
|
|
54
|
-
--wirephreak-mid: #
|
|
54
|
+
--wirephreak-mid: #2f2290; /* signal indigo midpoint · TAC 202% (C97 M100 Y4 K1) */
|
|
55
55
|
--technosorcerer-mid: #7a3008; /* burnt umber, between scorch-orange and dark · TAC 253% (C31 M84 Y100 K38) */
|
|
56
56
|
--etherlock-mid: #8a6a00; /* tarnished antique gold · TAC 211% (C40 M51 Y100 K20) */
|
|
57
57
|
--dualist-mid: #2a6878; /* drowned mineral aqua — between crystal-aqua and sapphire-trench · TAC 188% (C84 M48 Y42 K15) */
|
package/styles/dc-palette.css
CHANGED
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
--brand-cyan: #00bcd4; /* dimm.city neon-cyan, paper-contrast-tuned from web #00ffff · TAC 87% (C70 M1 Y16 K0) */
|
|
58
58
|
--brand-yellow: #ffd700; /* dimm.city brand-yellow — survives press unchanged · TAC 114% (C1 M13 Y100 K0) */
|
|
59
59
|
--brand-violet: #7030b8; /* dimm.city cyber-violet, SWOP-corrected from web #a020f0 — "the world" (lore, vibe, cabal, treasure); no specialty uses it · TAC 156% (C69 M87 Y0 K0) */
|
|
60
|
-
--signal-indigo: #4430e0; /* electric indigo, a blue-violet clear of --brand-violet: the
|
|
60
|
+
--signal-indigo: #4430e0; /* electric indigo, a blue-violet clear of --brand-violet: the wirephreak's own hue. cream on it 6.5:1 · TAC 159% (C81 M78 Y0 K0) */
|
|
61
61
|
|
|
62
62
|
/* ── HUD Colors — digital neon chrome ────────────────────────────────── */
|
|
63
63
|
--hud-blue: #1f6f94; /* teal-cyan mid HUD · TAC 167% (C87 M50 Y26 K4) */
|