@augurworks/augur 0.15.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.
Files changed (190) hide show
  1. package/CANVAS.md +858 -0
  2. package/INSTALL.md +603 -0
  3. package/LICENSE +27 -0
  4. package/README.md +150 -0
  5. package/TRADEMARKS.md +72 -0
  6. package/agents/README.md +65 -0
  7. package/agents/canon-extract.md +117 -0
  8. package/agents/canon.md +151 -0
  9. package/agents/canvas.md +88 -0
  10. package/agents/currency.md +74 -0
  11. package/agents/drafts.md +92 -0
  12. package/agents/identity.md +148 -0
  13. package/agents/prototype-contract.md +69 -0
  14. package/agents/publishing.md +324 -0
  15. package/agents/review-feedback.md +76 -0
  16. package/agents/space-json.md +132 -0
  17. package/agents/ui-skill.md +101 -0
  18. package/agents/working-marks.md +86 -0
  19. package/brand/augur-eye.svg +3 -0
  20. package/brand/augur-icon.svg +41 -0
  21. package/brand/augur-mark.svg +5 -0
  22. package/brand/lentianova-bulky.otf +0 -0
  23. package/brand/lentianova-median.otf +0 -0
  24. package/brand/lentianova.woff2 +0 -0
  25. package/build.js +8409 -0
  26. package/changelog.md +133 -0
  27. package/fonts/inter-latin-wght-normal.woff2 +0 -0
  28. package/package.json +57 -0
  29. package/pitis/PETS.md +121 -0
  30. package/pitis/README.md +117 -0
  31. package/pitis/index.html +266 -0
  32. package/pitis/piti.build.js +81 -0
  33. package/pitis/piti.js +929 -0
  34. package/pitis/roast-agent.md +185 -0
  35. package/realtime/src/index.js +119 -0
  36. package/realtime/wrangler.example.toml +44 -0
  37. package/scripts/adopt.mjs +106 -0
  38. package/scripts/board-snapshot.mjs +197 -0
  39. package/scripts/build-seed-pack.mjs +33 -0
  40. package/scripts/bundle-rekey.mjs +112 -0
  41. package/scripts/bundle-tenancy-rehearsal.mjs +781 -0
  42. package/scripts/canon-extract.mjs +578 -0
  43. package/scripts/canon.mjs +599 -0
  44. package/scripts/canvas-screen.mjs +333 -0
  45. package/scripts/check-local.mjs +136 -0
  46. package/scripts/clawd-art.mjs +75 -0
  47. package/scripts/clawd-canvas.mjs +741 -0
  48. package/scripts/cli.mjs +100 -0
  49. package/scripts/clone.mjs +422 -0
  50. package/scripts/close.mjs +30 -0
  51. package/scripts/connect.mjs +103 -0
  52. package/scripts/deploy.mjs +157 -0
  53. package/scripts/dev.mjs +54 -0
  54. package/scripts/doc-lint.mjs +143 -0
  55. package/scripts/export.mjs +300 -0
  56. package/scripts/fork.mjs +64 -0
  57. package/scripts/freeze.mjs +74 -0
  58. package/scripts/frontdoor-parity.mjs +180 -0
  59. package/scripts/hook.mjs +67 -0
  60. package/scripts/identity-rekey.mjs +112 -0
  61. package/scripts/init.mjs +122 -0
  62. package/scripts/land.mjs +40 -0
  63. package/scripts/lib/adapters.mjs +156 -0
  64. package/scripts/lib/board-snapshot.mjs +511 -0
  65. package/scripts/lib/draft.mjs +385 -0
  66. package/scripts/lib/graduate.mjs +276 -0
  67. package/scripts/lib/instance.mjs +74 -0
  68. package/scripts/lib/marks.mjs +107 -0
  69. package/scripts/lib/materialize.mjs +138 -0
  70. package/scripts/lib/merge3.mjs +124 -0
  71. package/scripts/lib/offline-posture.mjs +120 -0
  72. package/scripts/lib/offline-respawn.mjs +18 -0
  73. package/scripts/lib/offline-wrangler.mjs +78 -0
  74. package/scripts/lib/publish-compose.mjs +12 -0
  75. package/scripts/lib/publish-conflict.mjs +78 -0
  76. package/scripts/lib/publish-evidence.mjs +144 -0
  77. package/scripts/lib/refine-compare.mjs +140 -0
  78. package/scripts/lib/refine-ledger.mjs +150 -0
  79. package/scripts/lib/refine-png.mjs +149 -0
  80. package/scripts/lib/seed-pack-build.mjs +141 -0
  81. package/scripts/lib/state-compare.mjs +68 -0
  82. package/scripts/lib/store.mjs +122 -0
  83. package/scripts/login.mjs +84 -0
  84. package/scripts/mark.mjs +112 -0
  85. package/scripts/migrate-board-keys.mjs +164 -0
  86. package/scripts/migrate.mjs +265 -0
  87. package/scripts/no-foreign-vocabulary.mjs +216 -0
  88. package/scripts/no-product-names.mjs +157 -0
  89. package/scripts/no-tenant-globals.mjs +1134 -0
  90. package/scripts/offline.mjs +247 -0
  91. package/scripts/og.mjs +170 -0
  92. package/scripts/one-tenant-resolver.mjs +146 -0
  93. package/scripts/open.mjs +63 -0
  94. package/scripts/publish.mjs +1041 -0
  95. package/scripts/read.mjs +31 -0
  96. package/scripts/refine.mjs +455 -0
  97. package/scripts/release-drift.mjs +138 -0
  98. package/scripts/restore.mjs +322 -0
  99. package/scripts/review.mjs +125 -0
  100. package/scripts/save.mjs +21 -0
  101. package/scripts/shell-lint.mjs +189 -0
  102. package/scripts/ship.mjs +460 -0
  103. package/scripts/shoot.mjs +264 -0
  104. package/scripts/smoke-invite.mjs +113 -0
  105. package/scripts/state-inventory.mjs +223 -0
  106. package/scripts/status.mjs +177 -0
  107. package/scripts/sync.mjs +27 -0
  108. package/scripts/tenant-do-rehearsal.mjs +1314 -0
  109. package/scripts/ui-copy-lint.mjs +202 -0
  110. package/scripts/watch.mjs +32 -0
  111. package/scripts/wrangler-preflight.mjs +246 -0
  112. package/seed/CANON.md +43 -0
  113. package/seed/README.md +119 -0
  114. package/seed/prototype-status.json +9 -0
  115. package/seed/registry.json +88 -0
  116. package/seed/skills/starter-ui/SKILL.md +52 -0
  117. package/seed/skills/starter-ui/skill.json +11 -0
  118. package/seed/skills/starter-ui/starter-tokens.css +73 -0
  119. package/seed/skills/starter-ui/starter-ui.css +318 -0
  120. package/seed/skills/starter-ui/starter-ui.js +50 -0
  121. package/seed/space.json +5 -0
  122. package/seed/start-here/prototypes/connect-your-terminal/index.html +428 -0
  123. package/seed/start-here/prototypes/connect-your-terminal/preview.webp +0 -0
  124. package/seed/start-here/prototypes/sample-with-comments/index.html +172 -0
  125. package/seed/start-here/prototypes/sample-with-comments/preview.webp +0 -0
  126. package/seed/start-here/prototypes/set-up-your-design-system/index.html +353 -0
  127. package/seed/start-here/prototypes/set-up-your-design-system/preview.webp +0 -0
  128. package/seed/threads.json +52 -0
  129. package/seed/worked-examples/prototypes/field-readings/index.html +273 -0
  130. package/seed/worked-examples/prototypes/field-readings/preview.webp +0 -0
  131. package/seed/worked-examples/prototypes/slide-deck/index.html +214 -0
  132. package/seed/worked-examples/prototypes/slide-deck/preview.webp +0 -0
  133. package/seed/worked-examples/prototypes/specimen-viewer/index.html +203 -0
  134. package/seed/worked-examples/prototypes/specimen-viewer/preview.webp +0 -0
  135. package/src/_worker.js +12668 -0
  136. package/src/board-key.mjs +57 -0
  137. package/src/board-room.mjs +881 -0
  138. package/src/bundle-keys.mjs +138 -0
  139. package/src/canon/collect-in-browser.js +215 -0
  140. package/src/canon/emit.mjs +232 -0
  141. package/src/canon/observe.mjs +260 -0
  142. package/src/canon/schema.mjs +451 -0
  143. package/src/canvas/DSEG-LICENSE.txt +95 -0
  144. package/src/canvas/DSEG7Classic-Bold.woff2 +0 -0
  145. package/src/canvas/canvas.css +885 -0
  146. package/src/canvas/canvas.js +5780 -0
  147. package/src/canvas/capture.js +485 -0
  148. package/src/chrome/appchrome.mjs +568 -0
  149. package/src/currency.mjs +203 -0
  150. package/src/delete-confirmation.mjs +254 -0
  151. package/src/drafts/drafts.js +326 -0
  152. package/src/entry.js +58 -0
  153. package/src/galleries.mjs +400 -0
  154. package/src/health-cron.mjs +173 -0
  155. package/src/identity.json +1 -0
  156. package/src/kv-codec.mjs +135 -0
  157. package/src/kv-identity.mjs +259 -0
  158. package/src/mail.mjs +599 -0
  159. package/src/provenance.mjs +74 -0
  160. package/src/publish-compose.mjs +363 -0
  161. package/src/publish-fork.mjs +221 -0
  162. package/src/publish-units.mjs +44 -0
  163. package/src/purge.mjs +81 -0
  164. package/src/review/COMMENTING-UX.md +306 -0
  165. package/src/review/cat.png +0 -0
  166. package/src/review/comment-cursor.svg +7 -0
  167. package/src/review/comments.js +1738 -0
  168. package/src/room-ticket.mjs +96 -0
  169. package/src/roster-chip.mjs +32 -0
  170. package/src/seed-pack.mjs +261 -0
  171. package/src/state-inventory.mjs +249 -0
  172. package/src/sw-logic.mjs +48 -0
  173. package/src/tenant-cache.mjs +141 -0
  174. package/src/tenant-context.mjs +386 -0
  175. package/src/tenant-do.js +2940 -0
  176. package/src/tenant-host.mjs +144 -0
  177. package/src/tenant-quotas.mjs +140 -0
  178. package/src/unit-core.mjs +103 -0
  179. package/src/unit-object.mjs +338 -0
  180. package/templates/README.md +67 -0
  181. package/templates/shell/deploy.yml +145 -0
  182. package/templates/shell/engine-bump.yml +142 -0
  183. package/templates/shell/health.yml +233 -0
  184. package/templates/shell/kv-backup.yml +201 -0
  185. package/templates/shell/roster-update.yml +110 -0
  186. package/templates/shell/space-preflight.yml +35 -0
  187. package/templates/shell/space-rebake.yml +79 -0
  188. package/templates/shell/store-backup.yml +152 -0
  189. package/templates/shell/wrangler.example.toml +266 -0
  190. package/templates/space/publish.yml +91 -0
@@ -0,0 +1,88 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "name": "sheet",
5
+ "type": "pattern",
6
+ "classes": ["s-sheet"],
7
+ "label": "Sheet",
8
+ "description": "The page itself: one specimen sheet on a ruled desk, hairline edged, with room in the margin."
9
+ },
10
+ {
11
+ "name": "block",
12
+ "type": "pattern",
13
+ "classes": ["s-block"],
14
+ "label": "Numbered block",
15
+ "description": "A section with its plate number out in the margin and a dotted leader running down beside it."
16
+ },
17
+ {
18
+ "name": "card",
19
+ "type": "component",
20
+ "classes": ["s-card"],
21
+ "label": "Card",
22
+ "description": "A panel on the sheet. Inset for something quieter, mark for the one that matters."
23
+ },
24
+ {
25
+ "name": "cmd",
26
+ "type": "component",
27
+ "classes": ["s-cmd"],
28
+ "label": "Command row",
29
+ "description": "A line meant to be copied, with the button that copies it. Dark for a terminal, pale for a sentence you paste to an assistant."
30
+ },
31
+ {
32
+ "name": "steps",
33
+ "type": "component",
34
+ "classes": ["s-steps", "s-step"],
35
+ "label": "Steps",
36
+ "description": "A numbered sequence where the order is the instruction."
37
+ },
38
+ {
39
+ "name": "table",
40
+ "type": "component",
41
+ "classes": ["s-table"],
42
+ "label": "Table",
43
+ "description": "Ruled rows, mono headers, no fills."
44
+ },
45
+ {
46
+ "name": "stage",
47
+ "type": "component",
48
+ "classes": ["s-stage"],
49
+ "label": "Stage",
50
+ "description": "The dark inset media sits in: 3D, a terminal, a chart on ink."
51
+ },
52
+ {
53
+ "name": "button",
54
+ "type": "primitive",
55
+ "classes": ["s-btn"],
56
+ "label": "Button",
57
+ "description": "One hot-ink button per screen; everything else is quiet."
58
+ },
59
+ {
60
+ "name": "chip",
61
+ "type": "primitive",
62
+ "classes": ["s-chip"],
63
+ "label": "Chip",
64
+ "description": "A small tag for state, time or category."
65
+ },
66
+ {
67
+ "name": "field",
68
+ "type": "primitive",
69
+ "classes": ["s-field", "s-label"],
70
+ "label": "Field",
71
+ "description": "Text input with a mono label above it."
72
+ },
73
+ {
74
+ "name": "swatch",
75
+ "type": "primitive",
76
+ "classes": ["s-swatch"],
77
+ "label": "Swatch",
78
+ "description": "A colour specimen: the chip, the token name, the live value."
79
+ },
80
+ {
81
+ "name": "type",
82
+ "type": "primitive",
83
+ "classes": ["s-title", "s-h2", "s-eyebrow", "s-lede"],
84
+ "label": "Type",
85
+ "description": "Monospaced display, system sans body. The scale is seven sizes and no more."
86
+ }
87
+ ]
88
+ }
@@ -0,0 +1,52 @@
1
+ # The starter design system
2
+
3
+ Three files, no build step, no dependencies:
4
+
5
+ - `starter-tokens.css` — every colour, size, space and radius as a CSS custom
6
+ property. This is the file to edit first: change a token and every screen in
7
+ the workspace moves with it.
8
+ - `starter-ui.css` — the components, all classed `.s-*`, all drinking from the
9
+ tokens. Nothing here hard-codes a colour.
10
+ - `starter-ui.js` — one behaviour: a button with `data-s-copy="<selector>"`
11
+ copies that element's text.
12
+
13
+ ## Using it in a prototype
14
+
15
+ Reference the canonical path. The build rewrites it so the page works both on
16
+ disk and on the site:
17
+
18
+ ```html
19
+ <link rel="stylesheet" href="../../../skills/starter-ui/starter-tokens.css">
20
+ <link rel="stylesheet" href="../../../skills/starter-ui/starter-ui.css">
21
+ <script src="../../../skills/starter-ui/starter-ui.js" defer></script>
22
+ <body class="s-page">
23
+ ```
24
+
25
+ ## The vocabulary
26
+
27
+ | Class | What it is |
28
+ | --- | --- |
29
+ | `.s-page` | ruled desk background; goes on `<body>` |
30
+ | `.s-sheet` | the sheet everything sits on |
31
+ | `.s-block` + `.s-block__rail` | a section with a plate number in the margin |
32
+ | `.s-eyebrow` `.s-title` `.s-h2` `.s-h3` `.s-lede` `.s-prose` `.s-caption` | type |
33
+ | `.s-card` (`--inset`, `--mark`) | a panel |
34
+ | `.s-btn` (`--mark`, `--quiet`, `--lg`) | a control |
35
+ | `.s-chip` (`--mark`, `--ok`) | a small status tag |
36
+ | `.s-cmd` + `.s-cmd__text` + `.s-cmd__btn` | a line to copy (`--paste` for prose) |
37
+ | `.s-steps` + `.s-step` | a numbered sequence |
38
+ | `.s-label` `.s-field` | a form control |
39
+ | `.s-stage` | a dark inset for media, 3D, terminals |
40
+ | `.s-table` | a ruled table |
41
+ | `.s-swatch` | a colour specimen |
42
+
43
+ ## House rules
44
+
45
+ - One hot ink. `--starter-mark` marks the thing the reader is meant to act on
46
+ and nothing else. If two things on a screen are red, neither one is.
47
+ - Hairlines, not shadows. `--starter-hair` separates; the sheet's single lift
48
+ is the only shadow in the system.
49
+ - Display type is monospaced. It is the workspace's voice: plain files, plainly
50
+ named.
51
+ - Add to the tokens before adding to the components, and to the components
52
+ before writing a one-off style in a prototype.
@@ -0,0 +1,11 @@
1
+ {
2
+ "assets": [
3
+ "starter-tokens.css",
4
+ "starter-ui.css",
5
+ "starter-ui.js"
6
+ ],
7
+ "cssPrefixes": [
8
+ "s",
9
+ "starter"
10
+ ]
11
+ }
@@ -0,0 +1,73 @@
1
+ /* Starter — design tokens
2
+ Every colour, size and rhythm the workspace uses, in one file. Change a value
3
+ here and every prototype that links this stylesheet moves with it.
4
+
5
+ The look: a specimen sheet. Cool newsprint stock, near-black ink, hairlines
6
+ instead of shadows, and exactly one hot ink reserved for the thing you are
7
+ meant to act on. */
8
+
9
+ :root {
10
+ /* ── Paper ─────────────────────────────────────────────────────────── */
11
+ --starter-paper: #eceae3; /* the desk the sheet lies on */
12
+ --starter-sheet: #fbfaf6; /* the sheet itself: cards, panels, surfaces */
13
+ --starter-inset: #f2f0e9; /* pressed, quiet fills, table stripes */
14
+ --starter-stage: #201e28; /* dark inset for media and terminals */
15
+ --starter-stage-on: #f4f1ea; /* what is written on the stage */
16
+
17
+ /* ── Ink ───────────────────────────────────────────────────────────── */
18
+ --starter-ink: #1d1b24; /* every word that matters */
19
+ --starter-ink-2: #5b576a; /* secondary text, captions */
20
+ --starter-ink-3: #8a8698; /* placeholders, disabled */
21
+ --starter-rule: #d7d3c6; /* hairlines — this system rules, it doesn't shadow */
22
+
23
+ /* ── The one hot ink ───────────────────────────────────────────────── */
24
+ --starter-mark: #cf4224; /* fills: primary buttons, step markers, pins */
25
+ --starter-mark-ink: #aa361e; /* the same ink, darkened until it passes as text */
26
+ --starter-wash: #f5e0d9; /* its quietest form: highlights, chips */
27
+ --starter-mark-on: #ffffff; /* what is written ON the mark — a primary button's label */
28
+
29
+ /* ── States ────────────────────────────────────────────────────────── */
30
+ --starter-ok: #2c7a51;
31
+ --starter-ok-wash: #e2f0e8;
32
+
33
+ /* ── Type ──────────────────────────────────────────────────────────── */
34
+ /* Display is monospaced on purpose: this is a workspace made of plain files. */
35
+ --starter-font-display: ui-monospace, SFMono-Regular, "SF Mono", Menlo,
36
+ "Cascadia Mono", Consolas, monospace;
37
+ --starter-font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
38
+ "Helvetica Neue", Arial, sans-serif;
39
+
40
+ --starter-text-xs: 0.6875rem; /* 11px — plate numbers, eyebrows */
41
+ --starter-text-sm: 0.8125rem; /* 13px — captions, chips */
42
+ --starter-text-md: 0.9375rem; /* 15px — body */
43
+ --starter-text-lg: 1.125rem; /* 18px — lede */
44
+ --starter-text-xl: 1.5rem; /* 24px — section titles */
45
+ --starter-text-2xl: 2rem; /* 32px — page titles */
46
+ --starter-text-3xl: 2.75rem; /* 44px — the one big thing on a page */
47
+
48
+ /* ── Space (4px base) ──────────────────────────────────────────────── */
49
+ --starter-s1: 0.25rem;
50
+ --starter-s2: 0.5rem;
51
+ --starter-s3: 0.75rem;
52
+ --starter-s4: 1rem;
53
+ --starter-s5: 1.5rem;
54
+ --starter-s6: 2rem;
55
+ --starter-s7: 3rem;
56
+ --starter-s8: 4rem;
57
+
58
+ /* ── Shape ─────────────────────────────────────────────────────────── */
59
+ --starter-radius-1: 3px;
60
+ --starter-radius-2: 7px;
61
+ --starter-radius-pill: 999px;
62
+ --starter-hair: 1px solid var(--starter-rule);
63
+ --starter-lift: 0 1px 2px rgba(29, 27, 36, .05), 0 14px 34px rgba(29, 27, 36, .07);
64
+
65
+ /* ── Measure ───────────────────────────────────────────────────────── */
66
+ --starter-sheet-w: 62rem; /* the sheet */
67
+ --starter-rail-w: 5rem; /* the margin the plate numbers live in */
68
+ --starter-measure: 66ch; /* longest comfortable line of prose */
69
+
70
+ /* ── Motion ────────────────────────────────────────────────────────── */
71
+ --starter-fast: 120ms ease;
72
+ --starter-slow: 320ms cubic-bezier(.2, .7, .3, 1);
73
+ }
@@ -0,0 +1,318 @@
1
+ /* Starter — components
2
+ A specimen sheet on a drafting desk: ruled paper behind, one sheet on top,
3
+ a margin rail carrying plate numbers, hairlines everywhere and one hot ink.
4
+ Tokens live in starter-tokens.css — every value below comes from there. */
5
+
6
+ * { box-sizing: border-box; }
7
+
8
+ body.s-page {
9
+ margin: 0;
10
+ color: var(--starter-ink);
11
+ background-color: var(--starter-paper);
12
+ /* Ruled desk: faint horizontal lines, one per 28px, plus a warm vignette. */
13
+ background-image:
14
+ repeating-linear-gradient(
15
+ to bottom,
16
+ color-mix(in srgb, var(--starter-ink) 3%, transparent) 0 1px,
17
+ transparent 1px 28px
18
+ );
19
+ font-family: var(--starter-font-body);
20
+ font-size: var(--starter-text-md);
21
+ line-height: 1.6;
22
+ -webkit-font-smoothing: antialiased;
23
+ -moz-osx-font-smoothing: grayscale;
24
+ }
25
+
26
+ /* ── The sheet ─────────────────────────────────────────────────────────── */
27
+
28
+ .s-sheet {
29
+ max-width: var(--starter-sheet-w);
30
+ margin: var(--starter-s6) auto;
31
+ padding: var(--starter-s7) var(--starter-s6) var(--starter-s6);
32
+ background: var(--starter-sheet);
33
+ border: var(--starter-hair);
34
+ border-radius: var(--starter-radius-1);
35
+ box-shadow: var(--starter-lift);
36
+ }
37
+ @media (max-width: 700px) {
38
+ .s-sheet { margin: 0; border-left: 0; border-right: 0; padding: var(--starter-s5) var(--starter-s4); }
39
+ }
40
+
41
+ /* A block: margin rail on the left, content on the right. The rail carries the
42
+ plate number and a dotted leader running down beside the content, so the
43
+ numbering is structure you can follow, not decoration. */
44
+ .s-block {
45
+ display: grid;
46
+ grid-template-columns: var(--starter-rail-w) minmax(0, 1fr);
47
+ gap: var(--starter-s5);
48
+ padding-block: var(--starter-s6);
49
+ border-top: var(--starter-hair);
50
+ }
51
+ .s-block:first-of-type { border-top: 0; padding-top: 0; }
52
+ .s-block__rail {
53
+ position: relative;
54
+ font-family: var(--starter-font-display);
55
+ font-size: var(--starter-text-xs);
56
+ letter-spacing: .14em;
57
+ text-transform: uppercase;
58
+ color: var(--starter-ink-3);
59
+ text-align: right;
60
+ padding-top: .35rem;
61
+ }
62
+ /* the leader line */
63
+ .s-block__rail::after {
64
+ content: "";
65
+ position: absolute;
66
+ top: 2.1rem; right: .28rem; bottom: 0;
67
+ border-right: 1px dotted var(--starter-rule);
68
+ }
69
+ @media (max-width: 700px) {
70
+ .s-block { grid-template-columns: minmax(0, 1fr); gap: var(--starter-s3); padding-block: var(--starter-s5); }
71
+ .s-block__rail { text-align: left; padding-top: 0; }
72
+ .s-block__rail::after { display: none; }
73
+ }
74
+
75
+ /* ── Type ──────────────────────────────────────────────────────────────── */
76
+
77
+ .s-eyebrow {
78
+ margin: 0 0 var(--starter-s2);
79
+ font-family: var(--starter-font-display);
80
+ font-size: var(--starter-text-xs);
81
+ letter-spacing: .16em;
82
+ text-transform: uppercase;
83
+ color: var(--starter-mark-ink);
84
+ }
85
+ .s-title {
86
+ margin: 0 0 var(--starter-s3);
87
+ font-family: var(--starter-font-display);
88
+ font-size: var(--starter-text-2xl);
89
+ font-weight: 600;
90
+ letter-spacing: -.03em;
91
+ line-height: 1.1;
92
+ }
93
+ .s-title--hero { font-size: var(--starter-text-3xl); }
94
+ .s-h2 {
95
+ margin: 0 0 var(--starter-s3);
96
+ font-family: var(--starter-font-display);
97
+ font-size: var(--starter-text-xl);
98
+ font-weight: 600;
99
+ letter-spacing: -.02em;
100
+ line-height: 1.2;
101
+ }
102
+ .s-h3 {
103
+ margin: 0 0 var(--starter-s2);
104
+ font-family: var(--starter-font-display);
105
+ font-size: var(--starter-text-md);
106
+ font-weight: 600;
107
+ letter-spacing: -.01em;
108
+ }
109
+ .s-lede { margin: 0 0 var(--starter-s4); max-width: var(--starter-measure); font-size: var(--starter-text-lg); color: var(--starter-ink-2); }
110
+ .s-prose { margin: 0 0 var(--starter-s4); max-width: var(--starter-measure); }
111
+ .s-prose:last-child { margin-bottom: 0; }
112
+ .s-caption { margin: 0; font-size: var(--starter-text-sm); color: var(--starter-ink-2); }
113
+ .s-mark { background: var(--starter-wash); box-shadow: 0 0 0 .18em var(--starter-wash); border-radius: 2px; }
114
+ /* Inline code, wherever prose names a file or a command. */
115
+ :where(.s-prose, .s-caption, .s-note, .s-lede, .s-table) code {
116
+ font-family: var(--starter-font-display);
117
+ font-size: .9em;
118
+ padding: .05em .32em;
119
+ background: var(--starter-inset);
120
+ border: var(--starter-hair);
121
+ border-radius: var(--starter-radius-1);
122
+ }
123
+ .s-num { font-family: var(--starter-font-display); font-variant-numeric: tabular-nums; letter-spacing: -.02em; }
124
+
125
+ /* ── Rules, notes ──────────────────────────────────────────────────────── */
126
+
127
+ .s-rule { border: 0; border-top: var(--starter-hair); margin: var(--starter-s5) 0; }
128
+ .s-note {
129
+ margin-top: var(--starter-s6);
130
+ padding-top: var(--starter-s4);
131
+ border-top: var(--starter-hair);
132
+ font-family: var(--starter-font-display);
133
+ font-size: var(--starter-text-sm);
134
+ line-height: 1.7;
135
+ color: var(--starter-ink-2);
136
+ }
137
+ .s-note strong { color: var(--starter-ink); font-weight: 600; }
138
+
139
+ /* ── Disclosure: the way out that stays folded until it is needed ──────── */
140
+
141
+ .s-disclosure > summary {
142
+ cursor: pointer;
143
+ list-style: none;
144
+ font: 600 var(--starter-text-sm)/1.5 var(--starter-font-display);
145
+ color: var(--starter-ink-2);
146
+ }
147
+ .s-disclosure > summary::-webkit-details-marker { display: none; }
148
+ .s-disclosure > summary::before { content: "+ "; color: var(--starter-mark-ink); }
149
+ .s-disclosure[open] > summary::before { content: "– "; }
150
+ .s-disclosure > summary:hover { color: var(--starter-ink); }
151
+
152
+ /* ── Cards, grids ──────────────────────────────────────────────────────── */
153
+
154
+ .s-card {
155
+ padding: var(--starter-s5);
156
+ background: var(--starter-sheet);
157
+ border: var(--starter-hair);
158
+ border-radius: var(--starter-radius-2);
159
+ }
160
+ .s-card--inset { background: var(--starter-inset); }
161
+ .s-card--mark { box-shadow: inset 3px 0 0 var(--starter-mark); }
162
+ .s-grid { display: grid; gap: var(--starter-s4); }
163
+ .s-grid--2 { grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); }
164
+ .s-grid--3 { grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); }
165
+ .s-row { display: flex; flex-wrap: wrap; gap: var(--starter-s3); align-items: center; }
166
+
167
+ /* ── Buttons ───────────────────────────────────────────────────────────── */
168
+
169
+ .s-btn {
170
+ display: inline-flex; align-items: center; gap: var(--starter-s2);
171
+ padding: .55rem 1rem;
172
+ font: 600 var(--starter-text-sm)/1.2 var(--starter-font-display);
173
+ letter-spacing: -.01em;
174
+ color: var(--starter-ink);
175
+ background: var(--starter-sheet);
176
+ border: 1px solid var(--starter-rule);
177
+ border-radius: var(--starter-radius-2);
178
+ cursor: pointer;
179
+ text-decoration: none;
180
+ transition: background var(--starter-fast), border-color var(--starter-fast), color var(--starter-fast);
181
+ }
182
+ .s-btn:hover { border-color: var(--starter-ink-3); background: var(--starter-inset); }
183
+ .s-btn--mark { background: var(--starter-mark); border-color: var(--starter-mark); color: var(--starter-mark-on); }
184
+ .s-btn--mark:hover { background: var(--starter-mark-ink); border-color: var(--starter-mark-ink); }
185
+ .s-btn--quiet { border-color: transparent; background: transparent; color: var(--starter-ink-2); }
186
+ .s-btn--quiet:hover { background: var(--starter-inset); border-color: transparent; color: var(--starter-ink); }
187
+ .s-btn--lg { padding: .8rem 1.3rem; font-size: var(--starter-text-md); }
188
+ .s-btn[aria-pressed="true"] { background: var(--starter-ink); border-color: var(--starter-ink); color: var(--starter-sheet); }
189
+ .s-btn:disabled { opacity: .45; cursor: not-allowed; }
190
+
191
+ :where(a, button, input, select, textarea, [tabindex]):focus-visible {
192
+ outline: 2px solid var(--starter-mark);
193
+ outline-offset: 2px;
194
+ border-radius: var(--starter-radius-1);
195
+ }
196
+
197
+ /* ── Chips ─────────────────────────────────────────────────────────────── */
198
+
199
+ .s-chip {
200
+ display: inline-flex; align-items: center; gap: .35rem;
201
+ padding: .2rem .6rem;
202
+ font: 600 var(--starter-text-xs)/1.6 var(--starter-font-display);
203
+ letter-spacing: .06em; text-transform: uppercase;
204
+ color: var(--starter-ink-2);
205
+ background: var(--starter-inset);
206
+ border: var(--starter-hair);
207
+ border-radius: var(--starter-radius-pill);
208
+ }
209
+ .s-chip--mark { color: var(--starter-mark-ink); background: var(--starter-wash); border-color: transparent; }
210
+ .s-chip--ok { color: var(--starter-ok); background: var(--starter-ok-wash); border-color: transparent; }
211
+
212
+ /* ── Command rows: the thing you copy ──────────────────────────────────── */
213
+
214
+ .s-cmd {
215
+ display: flex; align-items: stretch; gap: 0;
216
+ border: 1px solid var(--starter-ink);
217
+ border-radius: var(--starter-radius-2);
218
+ background: var(--starter-stage);
219
+ overflow: hidden;
220
+ }
221
+ .s-cmd__text {
222
+ flex: 1; min-width: 0;
223
+ padding: .7rem .9rem;
224
+ font: var(--starter-text-md)/1.5 var(--starter-font-display);
225
+ color: var(--starter-stage-on);
226
+ overflow-x: auto;
227
+ white-space: pre;
228
+ }
229
+ .s-cmd__text::before { content: "$ "; color: var(--starter-ink-3); }
230
+ .s-cmd__text--plain { white-space: pre-wrap; font-size: var(--starter-text-sm); }
231
+ .s-cmd__text--plain::before { content: none; }
232
+ .s-cmd__btn {
233
+ flex: none;
234
+ padding: 0 .9rem;
235
+ font: 600 var(--starter-text-xs)/1 var(--starter-font-display);
236
+ letter-spacing: .1em; text-transform: uppercase;
237
+ color: var(--starter-stage-on);
238
+ background: color-mix(in srgb, var(--starter-stage-on) 9%, transparent);
239
+ border: 0; border-left: 1px solid color-mix(in srgb, var(--starter-stage-on) 16%, transparent);
240
+ cursor: pointer;
241
+ transition: background var(--starter-fast), color var(--starter-fast);
242
+ }
243
+ .s-cmd__btn:hover { background: var(--starter-mark); color: var(--starter-mark-on); }
244
+ .s-cmd__btn[data-copied] { background: var(--starter-ok); }
245
+ .s-cmd--paste { border-color: var(--starter-rule); background: var(--starter-inset); }
246
+ .s-cmd--paste .s-cmd__text { color: var(--starter-ink); }
247
+ .s-cmd--paste .s-cmd__btn { color: var(--starter-ink-2); background: transparent; border-left-color: var(--starter-rule); }
248
+ .s-cmd--paste .s-cmd__btn:hover { background: var(--starter-mark); color: var(--starter-mark-on); }
249
+
250
+ /* ── Steps ─────────────────────────────────────────────────────────────── */
251
+
252
+ .s-steps { list-style: none; margin: 0; padding: 0; }
253
+ .s-step { display: grid; grid-template-columns: 2rem minmax(0, 1fr); gap: var(--starter-s4); padding: var(--starter-s5) 0; border-top: var(--starter-hair); }
254
+ .s-step:first-child { border-top: 0; padding-top: 0; }
255
+ .s-step__no {
256
+ width: 2rem; height: 2rem;
257
+ display: grid; place-items: center;
258
+ font: 600 var(--starter-text-sm)/1 var(--starter-font-display);
259
+ color: var(--starter-mark-on); background: var(--starter-mark);
260
+ border-radius: 50%;
261
+ }
262
+ .s-step__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--starter-s3); margin-bottom: var(--starter-s3); }
263
+ .s-step__title { margin: 0; font: 600 var(--starter-text-lg)/1.25 var(--starter-font-display); letter-spacing: -.02em; }
264
+ .s-step__body > * + * { margin-top: var(--starter-s3); }
265
+ @media (max-width: 700px) {
266
+ .s-step { grid-template-columns: 1.6rem minmax(0, 1fr); gap: var(--starter-s3); }
267
+ .s-step__no { width: 1.6rem; height: 1.6rem; font-size: var(--starter-text-xs); }
268
+ }
269
+
270
+ /* ── Fields ────────────────────────────────────────────────────────────── */
271
+
272
+ .s-label { display: block; margin-bottom: var(--starter-s1); font: 600 var(--starter-text-xs)/1.6 var(--starter-font-display); letter-spacing: .12em; text-transform: uppercase; color: var(--starter-ink-2); }
273
+ .s-field {
274
+ width: 100%; padding: .55rem .7rem;
275
+ font: var(--starter-text-md)/1.4 var(--starter-font-body);
276
+ color: var(--starter-ink); background: var(--starter-sheet);
277
+ border: 1px solid var(--starter-rule); border-radius: var(--starter-radius-2);
278
+ }
279
+ .s-field::placeholder { color: var(--starter-ink-3); }
280
+
281
+ /* ── Stage: a dark inset for media, terminals, 3D ─────────────────────── */
282
+
283
+ .s-stage {
284
+ position: relative;
285
+ background: var(--starter-stage);
286
+ border-radius: var(--starter-radius-2);
287
+ overflow: hidden;
288
+ color: var(--starter-stage-on);
289
+ }
290
+ .s-stage__caption {
291
+ position: absolute; left: var(--starter-s4); bottom: var(--starter-s3);
292
+ font: var(--starter-text-xs)/1.5 var(--starter-font-display);
293
+ letter-spacing: .12em; text-transform: uppercase;
294
+ color: color-mix(in srgb, var(--starter-stage-on) 60%, transparent);
295
+ }
296
+
297
+ /* ── Table ─────────────────────────────────────────────────────────────── */
298
+
299
+ .s-table { width: 100%; border-collapse: collapse; font-size: var(--starter-text-sm); }
300
+ .s-table th {
301
+ text-align: left; padding: var(--starter-s2) var(--starter-s3);
302
+ font: 600 var(--starter-text-xs)/1.6 var(--starter-font-display);
303
+ letter-spacing: .12em; text-transform: uppercase; color: var(--starter-ink-2);
304
+ border-bottom: var(--starter-hair);
305
+ }
306
+ .s-table td { padding: var(--starter-s3); border-bottom: var(--starter-hair); vertical-align: top; }
307
+ .s-table tr:last-child td { border-bottom: 0; }
308
+
309
+ /* ── Swatches (the tokens tier renders these) ──────────────────────────── */
310
+
311
+ .s-swatch { display: grid; grid-template-columns: 2.4rem minmax(0, 1fr); gap: var(--starter-s3); align-items: center; }
312
+ .s-swatch__chip { width: 2.4rem; height: 2.4rem; border-radius: var(--starter-radius-1); border: var(--starter-hair); }
313
+ .s-swatch__name { font: var(--starter-text-sm)/1.3 var(--starter-font-display); }
314
+ .s-swatch__val { font: var(--starter-text-xs)/1.5 var(--starter-font-display); color: var(--starter-ink-2); }
315
+
316
+ @media (prefers-reduced-motion: reduce) {
317
+ * { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
318
+ }
@@ -0,0 +1,50 @@
1
+ /* Starter — the one behaviour the design system ships: copy to clipboard.
2
+ A button carrying data-s-copy="<selector>" copies that element's text and
3
+ says so. Works over file:// as well as over https, because the clipboard
4
+ API is unavailable in some file:// contexts and the old execCommand path
5
+ still is not. No dependencies, no build step. */
6
+ (function () {
7
+ "use strict";
8
+
9
+ function fallbackCopy(text) {
10
+ var ta = document.createElement("textarea");
11
+ ta.value = text;
12
+ ta.setAttribute("readonly", "");
13
+ ta.style.position = "fixed";
14
+ ta.style.top = "-1000px";
15
+ document.body.appendChild(ta);
16
+ ta.select();
17
+ var ok = false;
18
+ try { ok = document.execCommand("copy"); } catch (e) { ok = false; }
19
+ document.body.removeChild(ta);
20
+ return ok;
21
+ }
22
+
23
+ function confirmOn(btn, ok) {
24
+ var was = btn.getAttribute("data-label") || btn.textContent;
25
+ btn.setAttribute("data-label", was);
26
+ btn.textContent = ok ? "Copied" : "Press ⌘C";
27
+ if (ok) btn.setAttribute("data-copied", "");
28
+ clearTimeout(btn._sTimer);
29
+ btn._sTimer = setTimeout(function () {
30
+ btn.textContent = btn.getAttribute("data-label");
31
+ btn.removeAttribute("data-copied");
32
+ }, 1800);
33
+ }
34
+
35
+ document.addEventListener("click", function (e) {
36
+ var btn = e.target.closest ? e.target.closest("[data-s-copy]") : null;
37
+ if (!btn) return;
38
+ var src = document.querySelector(btn.getAttribute("data-s-copy"));
39
+ if (!src) return;
40
+ var text = (src.textContent || "").trim();
41
+ if (navigator.clipboard && navigator.clipboard.writeText) {
42
+ navigator.clipboard.writeText(text).then(
43
+ function () { confirmOn(btn, true); },
44
+ function () { confirmOn(btn, fallbackCopy(text)); }
45
+ );
46
+ } else {
47
+ confirmOn(btn, fallbackCopy(text));
48
+ }
49
+ });
50
+ })();
@@ -0,0 +1,5 @@
1
+ {
2
+ "id": "workspace",
3
+ "name": "Your workspace",
4
+ "default": true
5
+ }