@notambourine/brand-kit 1.6.0 → 1.7.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/README.md CHANGED
@@ -12,6 +12,7 @@ Correct a brand value here. Every other copy is downstream.
12
12
  | `vars.css` | The values alone, for a surface with its own faces and base layer. |
13
13
  | `components.css` | `.nt-btn`, `.nt-card`, `.nt-nav`, and the rest, all `var()`-based. |
14
14
  | `deck.css` | The Marpit slide theme, 1280x720. Load `vars.css` on the page too. |
15
+ | `prose.css` | `.nt-prose` for rendered markdown, on screen and on paper. |
15
16
  | `logo/` | The mark, the lockup, the icons, and the rasters cut from them. |
16
17
 
17
18
  ## Logo
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@notambourine/brand-kit",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "NoTambourine brand assets and guidance for design, decks, and copy",
5
5
  "license": "MIT",
6
6
  "repository": {
package/prose.css ADDED
@@ -0,0 +1,139 @@
1
+ /* =========================================================
2
+ NoTambourine: long-form documents
3
+ ---------------------------------------------------------
4
+ Part of the golden set. Wrap rendered markdown in .nt-prose
5
+ and load vars.css (or tokens.css) on the page. Every length
6
+ is em or ch, so the container's font-size and line-height
7
+ are the only knobs: the golden set's body on screen, about
8
+ 10.5pt and 1.55 on paper.
9
+ ========================================================= */
10
+
11
+ .nt-prose {
12
+ font-family: var(--font-body);
13
+ color: var(--fg2);
14
+ line-height: var(--lh-body);
15
+ letter-spacing: var(--ls-body);
16
+ max-width: 40em;
17
+ }
18
+ /* elements.css pins p, code, and pre to rem; inside prose they follow the
19
+ container, or a PDF paragraph prints larger than its own list items. */
20
+ .nt-prose :is(p, li, td, th, blockquote) { font-size: inherit; line-height: inherit; }
21
+ .nt-prose > * { margin: 0; }
22
+ .nt-prose > * + * { margin-top: 1em; }
23
+
24
+ /* Space above a heading outweighs space below, so it binds to what it opens. */
25
+ .nt-prose :is(h1, h2, h3) {
26
+ font-family: var(--font-display);
27
+ color: var(--fg1);
28
+ font-weight: var(--fw-bold);
29
+ letter-spacing: var(--ls-tight);
30
+ line-height: 1.2;
31
+ text-wrap: balance;
32
+ }
33
+ .nt-prose h1 { font-size: 2em; line-height: 1.15; }
34
+ .nt-prose h2 { font-size: 1.5em; }
35
+ .nt-prose h3 { font-size: 1.25em; }
36
+ /* At body size a grotesk h4 barely differs from the h3; the mono does. */
37
+ .nt-prose h4 {
38
+ font-family: var(--font-body);
39
+ font-size: 1em;
40
+ font-weight: var(--fw-semibold);
41
+ letter-spacing: 0;
42
+ color: var(--fg1);
43
+ }
44
+ .nt-prose > * + h2 { margin-top: 1.75em; padding-top: 0.75em; border-top: 1px solid var(--line); }
45
+ .nt-prose > * + h3 { margin-top: 1.6em; }
46
+ .nt-prose > * + h4 { margin-top: 1.75em; }
47
+ .nt-prose > :is(h1, h2, h3, h4) + * { margin-top: 0.5em; }
48
+ /* The line under the title is the document's purpose: brightest, not biggest. */
49
+ .nt-prose > h1 + p { color: var(--fg1); }
50
+
51
+ /* Markers sit flush with the text column and nested markers land under the
52
+ parent's text. ch is exact in a mono face, so the indent is the marker. */
53
+ .nt-prose ul { padding-left: 2ch; list-style-type: "\2022 "; }
54
+ .nt-prose ol { padding-left: 3ch; }
55
+ .nt-prose :is(ul, ol) :is(ul, ol) { margin-top: 0.25em; }
56
+ .nt-prose li + li { margin-top: 0.375em; }
57
+ .nt-prose li::marker { color: var(--fg3); font-variant-numeric: tabular-nums; }
58
+ .nt-prose li > p { margin: 0; }
59
+ .nt-prose li > p + p { margin-top: 0.5em; }
60
+
61
+ /* The box takes the marker's slot, so a checklist aligns with the bullets. */
62
+ .nt-prose li:has(> input[type="checkbox"]) { list-style: none; }
63
+ .nt-prose li > input[type="checkbox"] {
64
+ width: 0.9em;
65
+ height: 0.9em;
66
+ vertical-align: -0.1em;
67
+ margin: 0 calc(2ch - 0.9em) 0 -2ch;
68
+ accent-color: var(--support);
69
+ }
70
+ .nt-prose li:has(> input:checked) { color: var(--fg3); }
71
+
72
+ /* Pink is for links alone, and the underline means a link never rests on hue:
73
+ pink against body grey is about 2:1. */
74
+ .nt-prose a {
75
+ color: var(--accent-text);
76
+ border-bottom: 0;
77
+ text-decoration: underline;
78
+ text-decoration-thickness: 1px;
79
+ text-underline-offset: 0.2em;
80
+ text-decoration-color: color-mix(in srgb, currentColor 45%, transparent);
81
+ }
82
+ .nt-prose a:hover { text-decoration-color: currentColor; }
83
+ .nt-prose strong { color: var(--fg1); font-weight: var(--fw-semibold); }
84
+ .nt-prose :is(del, s) { color: var(--fg3); }
85
+
86
+ /* A file name in a document is reference, not alarm. */
87
+ .nt-prose :not(pre) > code {
88
+ font-size: 0.875em;
89
+ color: var(--fg1);
90
+ background: var(--bg-raised);
91
+ border: 1px solid var(--line);
92
+ border-radius: var(--r-xs);
93
+ padding: 0.05em 0.35em;
94
+ }
95
+ /* A renderer that draws a diagram into a `<pre>` (a mermaid fence, say) wants
96
+ none of the code-block box. */
97
+ .nt-prose pre:not(:has(> svg)) {
98
+ font-size: 0.8125em;
99
+ line-height: 1.6;
100
+ background: var(--bg-card);
101
+ border: 1px solid var(--line);
102
+ border-radius: var(--r-sm);
103
+ padding: 0.9em 1.1em;
104
+ overflow-x: auto;
105
+ }
106
+ .nt-prose pre code { font-size: 1em; background: none; color: var(--fg2); padding: 0; }
107
+
108
+ .nt-prose blockquote {
109
+ padding-left: 1em;
110
+ border-left: 2px solid var(--support);
111
+ color: var(--fg2);
112
+ }
113
+
114
+ /* `display: block` lets a wide table scroll itself: the render emits no wrapper
115
+ to hang the overflow on, and the page must never scroll sideways. */
116
+ .nt-prose table {
117
+ display: block;
118
+ width: max-content;
119
+ max-width: 100%;
120
+ overflow-x: auto;
121
+ border-collapse: collapse;
122
+ font-size: 0.875em;
123
+ font-variant-numeric: tabular-nums;
124
+ }
125
+ .nt-prose :is(th, td) { padding: 0.45em 0.9em; border-bottom: 1px solid var(--line); }
126
+ .nt-prose :is(th, td):first-child { padding-left: 0; }
127
+ /* Only unaligned cells: a stylesheet beats the `align` a `---:` column emits. */
128
+ .nt-prose :is(th, td):not([align]) { text-align: start; }
129
+ .nt-prose th { color: var(--fg1); font-weight: var(--fw-semibold); border-bottom-color: var(--fg3); }
130
+
131
+ .nt-prose hr { border: 0; border-top: 1px solid var(--line); margin-block: 2em; }
132
+ .nt-prose img { max-width: 100%; border-radius: var(--r-sm); }
133
+
134
+ @media print {
135
+ .nt-prose :is(h1, h2, h3, h4) { break-after: avoid; break-inside: avoid; }
136
+ .nt-prose :is(p, li) { orphans: 2; widows: 2; }
137
+ .nt-prose :is(pre, table, blockquote, img) { break-inside: avoid; }
138
+ .nt-prose pre:not(:has(> svg)) { white-space: pre-wrap; word-break: break-word; }
139
+ }
@@ -26,6 +26,9 @@ Read exact values and component behavior from the CSS.
26
26
  - Keep body copy in one column, at most about 640px wide. Use two or three
27
27
  columns for card grids, one on mobile, never four. Leave generous space
28
28
  between blocks.
29
+ - Wrap long-form documents in `.nt-prose` from `prose.css`. In a document, pink
30
+ marks links alone, and links carry an underline. Set density on the container:
31
+ the body tokens on screen, about 10.5pt on paper.
29
32
  - Make nav the only sticky element. No sticky CTAs, chat bubbles, or cookie
30
33
  banners.
31
34