@agentic-design-kits/verdigris 2026.1113.0 → 2026.1113.1
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/COMPONENTS.md +12 -8
- package/DESIGN.md +3 -3
- package/kit/verdigris.css +63 -1
- package/package.json +2 -2
- package/tokens.json +1 -1
package/COMPONENTS.md
CHANGED
|
@@ -909,10 +909,12 @@ The top of a blog post, in place of a `Hero` or `PageTitle`: a small label back
|
|
|
909
909
|
|
|
910
910
|
In Astro, `<PostHeader title="…" lead="…" back={{ label: 'Blog', href: '/blog/' }} date="2026-10-20" author="…" minutes={4} tags={['Type']} />`. It writes Published, By, Reading and Topics, leaving out any you don't pass.
|
|
911
911
|
|
|
912
|
-
-
|
|
913
|
-
- The
|
|
914
|
-
- The
|
|
915
|
-
-
|
|
912
|
+
- Everything is centered, like a title page.
|
|
913
|
+
- The label is 22px (`--size-300`) in `copper-text`, between two asterisms (⁂, hidden from screen readers), and turns `accent-text` and underlined on hover. One or two words.
|
|
914
|
+
- The title is light at `--size-post-title` (`clamp(3.5rem, 7.4vw, 5.75rem)`), between `page-title` and `h2`, since post titles run longer. It stops at 18em wide, so a long title breaks into lines of a few words, and it wraps a long word.
|
|
915
|
+
- The lead is italic at `clamp(1.625rem, 2.6vw, 2rem)`, at most 28em wide.
|
|
916
|
+
- The byline is one 22px (`--size-300`) `muted` line of values with a copper lozenge (◆) between them, and no rule. Its labels (Published, By…) are hidden but stay in the markup for screen readers.
|
|
917
|
+
- A cover image, if any, goes after the header: full width at 16:9 (`.media .media--16x9`) when it is landscape, centered at its own shape when it is not, never behind the title. A post with no picture takes a `.rule-fleuron` there instead, at the text's width.
|
|
916
918
|
|
|
917
919
|
## PostBody
|
|
918
920
|
|
|
@@ -920,13 +922,15 @@ Long-form text from Markdown: `.post-body` styles the plain elements inside it,
|
|
|
920
922
|
|
|
921
923
|
**Markup.** `<div class="post-body"><Content /></div>`, after the `PostHeader`.
|
|
922
924
|
|
|
923
|
-
- A
|
|
925
|
+
- A 45rem measure (`max-w-*` on the same element changes it); center it under the header with `mx-auto`. Paragraphs are `clamp(1.375rem, 2vw, 1.625rem)` on 1.52 leading, a step up from the page's text, and blocks are 1.25rem apart.
|
|
924
926
|
- `h2` is bold at 1.75rem, 2.25rem from 768px, with `space-12` above it and no rule: inside one article, space and size mark a new part, and the 2px rule is kept for the page's own sections; `h3` is the `title` size. Don't skip from the post's `h1` to an `h3`.
|
|
925
927
|
- Links underline and turn `accent-text` on hover, like `.link`.
|
|
926
928
|
- Lists have square markers (`ul`) or tabular numbers (`ol`), in `muted`.
|
|
927
|
-
- A quote is large and
|
|
928
|
-
- `hr` is
|
|
929
|
+
- A quote is large, light and italic in `accent-text`, centered between two 1px `rule` lines. Keep quotes short; one or two per post.
|
|
930
|
+
- `hr` is an asterism (⁂) in `copper-text`. Images fill the measure, square, on `rule` until they load. A table has small headings over a 2px rule and 1px rules between rows.
|
|
929
931
|
- Code uses the kit's own `pre` and `code` styles.
|
|
932
|
+
- Markdown footnotes (`[^1]`) are numbered in `accent-text`; the notes sit at the end in 20px `muted` text under a 1px `ink` rule, numbered in `copper-text`.
|
|
933
|
+
- `.post-body--end` ends the piece with an asterism, above the notes when there are any.
|
|
930
934
|
|
|
931
935
|
**Don't.** Set a whole paragraph in a quote to make it stand out, or add colored callout boxes.
|
|
932
936
|
|
|
@@ -945,7 +949,7 @@ The previous and next posts, at the end of a post.
|
|
|
945
949
|
|
|
946
950
|
In Astro, `<PostNav prev={{ title, href }} next={{ title, href }} />` (`PostLink` in `kit/astro/types.ts`). Previous is the older post, Next the newer one; leave either off at the ends, and it draws nothing when both are off.
|
|
947
951
|
|
|
948
|
-
- A scotch rule, then a
|
|
952
|
+
- A scotch rule, then a 20px `copper-text` label over each post's title, set at 1.75rem in the reading weight, which underlines on hover.
|
|
949
953
|
- Stacked on phones with a 1px `rule` between; two columns from 640px, Next always on the right.
|
|
950
954
|
- The arrows are the font's own glyphs, hidden from screen readers.
|
|
951
955
|
|
package/DESIGN.md
CHANGED
|
@@ -89,7 +89,7 @@ One family, `--font-sans` (Cormorant, falling back to Garamond, Iowan Old Style,
|
|
|
89
89
|
- Pages end with a `Footer`: the scotch rule, the site name and its links.
|
|
90
90
|
- A fixed bottom bar (`BottomBar`) is optional, and goes only on pages where something stays current while the page scrolls. On those pages, set `bar-h` to its height and reserve that space at the bottom of the page (`BaseLayout`'s `barHeight` prop does both). Without one, `--bar-h` is `0rem`.
|
|
91
91
|
- A page that needs a name but no hero opens with a `PageTitle`: one big `h1` across the width of `.page`, on the paper or on a `bar` block.
|
|
92
|
-
- A blog's index may open with a `PostFeature` (one post beside a square image) in place of a hero, kept at the top of every page when a `Pager` splits the list. A blog post opens with a `PostHeader`, its text in a `.post-body` at a
|
|
92
|
+
- A blog's index may open with a `PostFeature` (one post beside a square image) in place of a hero, kept at the top of every page when a `Pager` splits the list. A blog post opens with a `PostHeader`, centered, its text in a `.post-body` at a 45rem measure under it, and ends with a `PostNav`.
|
|
93
93
|
- Everything is square: `radius-none`. `radius-round` is for six marks only: the spinner, the "new" dot (`.new-dot`), the drawer's "more below" arrow (`.drawer-more`), the radio button (`.radio`), the oval badge (`.ellipse`, at 50%) and the number circle (`.num-circle`, at 50%). The switch stays square.
|
|
94
94
|
|
|
95
95
|
## Iconography
|
|
@@ -108,7 +108,7 @@ One family, `--font-sans` (Cormorant, falling back to Garamond, Iowan Old Style,
|
|
|
108
108
|
Ornament is what separates this kit from Swiss Minimal, so it has its own limits.
|
|
109
109
|
|
|
110
110
|
- **Fleuron rule** (`.rule-fleuron`): a pause between parts of a page. Once a page at most.
|
|
111
|
-
- **Asterism** (⁂): the end of a piece, or a Markdown `---` in a post.
|
|
111
|
+
- **Asterism** (⁂): the end of a piece (`.post-body--end`), or a Markdown `---` in a post.
|
|
112
112
|
- **Dagger** (†): a footnote mark.
|
|
113
113
|
- **Manicule** (☞): a `.notice`, for one note a reader must not miss.
|
|
114
114
|
- **Lozenge** (◆): separates metadata.
|
|
@@ -155,7 +155,7 @@ Photos, artwork, screenshots and product shots are welcome. The test is whether
|
|
|
155
155
|
|
|
156
156
|
## Components
|
|
157
157
|
|
|
158
|
-
Every component is a plain CSS class in `kit/theme.css` (loaded through `kit/tailwind.css`); there is no JavaScript bundle, only a few small plain scripts for the pieces that need behavior. In short: **Skip link** (`.skip-link`), **Top bar** (`.topbar`), **Outlined button** (`.topbar-btn`, `.burger`), **Hover label** (`data-tip`), **Primary button** (`.btn`), **Secondary button** (`.btn-outline`, `.btn-group`), **Tertiary button** (`.btn-outline--tertiary`), **Slide-down panel** (`.panel`, with `kit/panel.js`), **Menu** (`.menu-list`, `.acc`, `.submenu`), **Panel tabs** (`.panel-tabs`, `.panel-tab`), **"New" dot** (`.new-dot`, with `kit/new-dot.js`), **Field** (`.field`), **Select** (`.select-wrap`, `.select`), **Date and time** (`.field` on `type="date"`, `time`…), **File picker** (`.file-pick`, with `kit/file-pick.js`), **Switch** (`.choice`, `.switch`), **Radio** (`.choice-group`, `.radio`), **Filter buttons** (`.chip`), **Favorite star** (`.fav-btn`, with `kit/favorites.js`), **Page accordion** (`.page-acc`), **List row** (`.row`), **Bottom bar** (`.bottom-bar`, optional), **Jump to current** (`.jump-btn`, with `kit/jump.js`), **Scrolling title** (`.marquee`, with `kit/marquee.js`), **Dialog** (`.dialog` on `<dialog>`, with `kit/dialog.js`), **Toast** (`.toast`), **Drawer** (`.drawer`, with `kit/drawer.js`), **Scotch rule** (`.rule-scotch`, `.rule-thick`), **Fleuron rule** (`.rule-fleuron`), **Plate** (`.plate`), **Notice** (`.notice`), **Rosette** (`.rosette`), **Mark** (`.mark`), **Drop cap** (`.post-body--cap`), **Icon actions** (`.icon-row`, `.icon-btn`, with `kit/icon-controls.js`), **Closing note** (`.closing-note`), **Dated list** (`.dated-list`), **Summary list** (`.summary-list`), **Output panel** (`.output`, with `kit/output.js`), **Code block** (`pre`, `.pre--bar`, `.pre-cmd`, `.pre-err`, `.tok-*`), **Ellipse** (`.ellipse`, `.ellipse--solid`), **Number circle** (`.num-circle`, `.num-circle--solid`, `.num-circle--accent`), **Activity indicators** (`.eq`, `.spinner`), **Image** (`.media`, `.figure`), **Hero** (`.hero`, `.hero--split`, `.hero--wide`), **Page title** (`.page-title`, `.page-title--bar`), **CTA** (`.cta`), **Card grid** (`.card-grid`, `.card`), **Post list** (`.post-list`), **Post feature** (`.post-feature`), **Pager** (`.pager`), **Post header** (`.post-header`, `.post-meta`), **Post body** (`.post-body`), **Post nav** (`.post-nav`), **Footer** (`.site-footer`, `.site-footer--bar`).
|
|
158
|
+
Every component is a plain CSS class in `kit/theme.css` (loaded through `kit/tailwind.css`); there is no JavaScript bundle, only a few small plain scripts for the pieces that need behavior. In short: **Skip link** (`.skip-link`), **Top bar** (`.topbar`), **Outlined button** (`.topbar-btn`, `.burger`), **Hover label** (`data-tip`), **Primary button** (`.btn`), **Secondary button** (`.btn-outline`, `.btn-group`), **Tertiary button** (`.btn-outline--tertiary`), **Slide-down panel** (`.panel`, with `kit/panel.js`), **Menu** (`.menu-list`, `.acc`, `.submenu`), **Panel tabs** (`.panel-tabs`, `.panel-tab`), **"New" dot** (`.new-dot`, with `kit/new-dot.js`), **Field** (`.field`), **Select** (`.select-wrap`, `.select`), **Date and time** (`.field` on `type="date"`, `time`…), **File picker** (`.file-pick`, with `kit/file-pick.js`), **Switch** (`.choice`, `.switch`), **Radio** (`.choice-group`, `.radio`), **Filter buttons** (`.chip`), **Favorite star** (`.fav-btn`, with `kit/favorites.js`), **Page accordion** (`.page-acc`), **List row** (`.row`), **Bottom bar** (`.bottom-bar`, optional), **Jump to current** (`.jump-btn`, with `kit/jump.js`), **Scrolling title** (`.marquee`, with `kit/marquee.js`), **Dialog** (`.dialog` on `<dialog>`, with `kit/dialog.js`), **Toast** (`.toast`), **Drawer** (`.drawer`, with `kit/drawer.js`), **Scotch rule** (`.rule-scotch`, `.rule-thick`), **Fleuron rule** (`.rule-fleuron`), **Plate** (`.plate`), **Notice** (`.notice`), **Rosette** (`.rosette`), **Mark** (`.mark`), **Drop cap** (`.post-body--cap`), **Ending** (`.post-body--end`), **Icon actions** (`.icon-row`, `.icon-btn`, with `kit/icon-controls.js`), **Closing note** (`.closing-note`), **Dated list** (`.dated-list`), **Summary list** (`.summary-list`), **Output panel** (`.output`, with `kit/output.js`), **Code block** (`pre`, `.pre--bar`, `.pre-cmd`, `.pre-err`, `.tok-*`), **Ellipse** (`.ellipse`, `.ellipse--solid`), **Number circle** (`.num-circle`, `.num-circle--solid`, `.num-circle--accent`), **Activity indicators** (`.eq`, `.spinner`), **Image** (`.media`, `.figure`), **Hero** (`.hero`, `.hero--split`, `.hero--wide`), **Page title** (`.page-title`, `.page-title--bar`), **CTA** (`.cta`), **Card grid** (`.card-grid`, `.card`), **Post list** (`.post-list`), **Post feature** (`.post-feature`), **Pager** (`.pager`), **Post header** (`.post-header`, `.post-meta`), **Post body** (`.post-body`), **Post nav** (`.post-nav`), **Footer** (`.site-footer`, `.site-footer--bar`).
|
|
159
159
|
|
|
160
160
|
## With Tailwind v4
|
|
161
161
|
|
package/kit/verdigris.css
CHANGED
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
--size-display-split: clamp(4rem, 9.5vw, 9.5rem);
|
|
41
41
|
--size-page-title: clamp(3.5rem, 9vw, 8rem);
|
|
42
42
|
--size-post-feature: clamp(2.75rem, 5.5vw, 5.25rem);
|
|
43
|
-
--size-post-title: clamp(
|
|
43
|
+
--size-post-title: clamp(3.5rem, 7.4vw, 5.75rem);
|
|
44
44
|
--code-sample-size: var(--size-200); /* code on the Beautiful Code page: 20px, as --size-300 runs large here */
|
|
45
45
|
--weight-body: 500;
|
|
46
46
|
--weight-medium: 600;
|
|
@@ -105,6 +105,10 @@ body {
|
|
|
105
105
|
.figure > figcaption, .post-body figcaption { font-style: italic; }
|
|
106
106
|
/* Source Code Pro is far larger on its body than Cormorant, so code steps down to match. */
|
|
107
107
|
code, kbd, samp { font-size: max(0.875rem, 0.8em); }
|
|
108
|
+
/* A code block steps down further than theme.css's 0.9375em, or it reads nearly as large as
|
|
109
|
+
the text around it: about 20px beside 26px text, as on the Beautiful Code page, never under
|
|
110
|
+
the 18px floor. */
|
|
111
|
+
pre { font-size: max(var(--size-100), 0.77em); }
|
|
108
112
|
/* Numbers that line up need lining figures; old-style would wander. */
|
|
109
113
|
.num, .chip-count, .panel-tab-num, .num-circle, .post-body ol { font-variant-numeric: lining-nums tabular-nums; }
|
|
110
114
|
|
|
@@ -161,6 +165,12 @@ code, kbd, samp { font-size: max(0.875rem, 0.8em); }
|
|
|
161
165
|
.mark { flex: none; width: 1.625rem; height: 1.625rem; fill: none; stroke: currentColor; stroke-width: 1.25; stroke-linecap: round; stroke-linejoin: round; }
|
|
162
166
|
|
|
163
167
|
/* ---------- Reading ---------- */
|
|
168
|
+
/* The site name in the top bar: the shared layout sets it at 16px, under this kit's 18px floor
|
|
169
|
+
for Cormorant. It takes the floor on phones, where it shares the row with three buttons, and
|
|
170
|
+
the bar's own 20px from 640px. */
|
|
171
|
+
.topbar-home { font-size: var(--size-100); }
|
|
172
|
+
@media (min-width: 640px) { .topbar-home { font-size: var(--size-200); } }
|
|
173
|
+
|
|
164
174
|
/* The drop cap is ::first-letter, so the word stays whole for screen readers. */
|
|
165
175
|
.post-body--cap > p:first-of-type::first-letter {
|
|
166
176
|
float: left; padding: 0.5rem 0.75rem 0 0;
|
|
@@ -175,3 +185,55 @@ code, kbd, samp { font-size: max(0.875rem, 0.8em); }
|
|
|
175
185
|
}
|
|
176
186
|
.post-body hr { border-top: 0; height: auto; overflow: visible; text-align: center; }
|
|
177
187
|
.post-body hr::before { content: "\2042"; color: var(--copper-text); font-size: 2.125rem; line-height: 1; }
|
|
188
|
+
|
|
189
|
+
/* A post is set on a centered axis, like a title page: the label in copper over the title,
|
|
190
|
+
the lead in italic, and the byline as one quiet line of values parted by lozenges. Its
|
|
191
|
+
labels (Published, By…) stay in the markup for screen readers. */
|
|
192
|
+
.post-header { display: flex; flex-direction: column; align-items: center; text-align: center; }
|
|
193
|
+
.post-header-label { margin-bottom: 1.25rem; font-size: var(--size-300); color: var(--copper-text); }
|
|
194
|
+
a.post-header-label:hover { color: var(--accent-text); }
|
|
195
|
+
/* An asterism each side of the label. Inline blocks, so the hover underline leaves them out. */
|
|
196
|
+
.post-header-label::before, .post-header-label::after {
|
|
197
|
+
content: "\2042" / ""; display: inline-block; color: var(--copper-text); text-decoration: none;
|
|
198
|
+
}
|
|
199
|
+
.post-header-label::before { margin-right: 0.5em; }
|
|
200
|
+
.post-header-label::after { margin-left: 0.5em; }
|
|
201
|
+
.post-header-title { line-height: 0.98; letter-spacing: -0.015em; }
|
|
202
|
+
.post-header-lead { max-width: 28em; margin-top: 1.25rem; font-size: clamp(1.625rem, 2.6vw, 2rem); line-height: 1.25; }
|
|
203
|
+
.post-meta {
|
|
204
|
+
justify-content: center; gap: 0.25rem 1rem;
|
|
205
|
+
margin-top: 1.25rem; padding-top: 0; border-top: 0; background-image: none;
|
|
206
|
+
font-size: var(--size-300); color: var(--muted);
|
|
207
|
+
}
|
|
208
|
+
.post-meta > div { display: flex; gap: 1rem; align-items: baseline; }
|
|
209
|
+
.post-meta > div + div::before { content: "\25C6" / ""; color: var(--copper-text); }
|
|
210
|
+
.post-meta dt { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; }
|
|
211
|
+
.post-meta dd { margin: 0; }
|
|
212
|
+
|
|
213
|
+
/* Body text a step up from the page's, at a 45rem measure. */
|
|
214
|
+
.post-body { max-width: 45rem; }
|
|
215
|
+
.post-body p { font-size: clamp(1.375rem, 2vw, 1.625rem); line-height: 1.52; }
|
|
216
|
+
.post-body blockquote p { font-size: inherit; line-height: inherit; }
|
|
217
|
+
|
|
218
|
+
/* The end of a piece (.post-body--end): an asterism, then the notes, if any, under a rule. */
|
|
219
|
+
.post-body--end::after, .post-body--end .footnotes::before {
|
|
220
|
+
content: "\2042" / ""; display: block; margin-top: 2.5rem; text-align: center;
|
|
221
|
+
color: var(--copper-text); font-size: 2.125rem; line-height: 1;
|
|
222
|
+
}
|
|
223
|
+
.post-body--end:has(.footnotes)::after { content: none; }
|
|
224
|
+
.post-body .footnotes { margin: 0; font-size: var(--size-200); line-height: 1.4; color: var(--muted); }
|
|
225
|
+
.post-body .footnotes::before { margin-bottom: 2rem; }
|
|
226
|
+
.post-body .footnotes ol { margin: 0; padding: 0.75rem 0 0 0; border-top: 1px solid var(--ink); list-style: decimal inside; }
|
|
227
|
+
.post-body .footnotes li::marker { color: var(--copper-text); }
|
|
228
|
+
.post-body .footnotes p { display: inline; font-size: inherit; line-height: inherit; }
|
|
229
|
+
/* The number in the text is a superscript, so it can drop the underline; the way back sits in
|
|
230
|
+
the note's own text, so it keeps one. */
|
|
231
|
+
.post-body :is([data-footnote-ref], [data-footnote-backref]) { margin-left: 0.125rem; color: var(--accent-text); }
|
|
232
|
+
.post-body [data-footnote-ref] { text-decoration: none; }
|
|
233
|
+
.post-body :is([data-footnote-ref], [data-footnote-backref]):hover { color: var(--copper-text); }
|
|
234
|
+
|
|
235
|
+
/* The previous and next posts: copper labels over the titles, set in the reading weight. */
|
|
236
|
+
.post-nav { margin-top: 4.5rem; }
|
|
237
|
+
.post-nav a { padding-top: 1.25rem; }
|
|
238
|
+
.post-nav-label { font-size: var(--size-200); color: var(--copper-text); }
|
|
239
|
+
.post-nav-title { font-size: var(--size-500); font-weight: var(--weight-body); letter-spacing: 0; }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentic-design-kits/verdigris",
|
|
3
|
-
"version": "2026.1113.
|
|
3
|
+
"version": "2026.1113.1",
|
|
4
4
|
"description": "A design kit in Cormorant, copper green and engraved line work, for Astro and Tailwind v4 sites. Built on Swiss Minimal.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Danny Englander",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"./*.js": "./kit/shared/*.ts"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@agentic-design-kits/swiss-minimal": "2026.1113.
|
|
46
|
+
"@agentic-design-kits/swiss-minimal": "2026.1113.1"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"astro": ">=7.0.0",
|