@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 +1 -0
- package/package.json +1 -1
- package/prose.css +139 -0
- package/references/visual.md +3 -0
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
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
|
+
}
|
package/references/visual.md
CHANGED
|
@@ -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
|
|