@1agh/maude 0.15.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/LICENSE +21 -0
- package/README.md +166 -0
- package/cli/bin/maude.exe +15 -0
- package/cli/bin/maude.mjs +45 -0
- package/cli/bin/mdcc.exe +10 -0
- package/cli/bin/mdcc.mjs +7 -0
- package/cli/cli-wrapper.cjs +67 -0
- package/cli/commands/config.mjs +94 -0
- package/cli/commands/design.mjs +386 -0
- package/cli/commands/help.mjs +57 -0
- package/cli/commands/init.mjs +178 -0
- package/cli/commands/version.mjs +7 -0
- package/cli/install.cjs +113 -0
- package/cli/lib/argv.mjs +37 -0
- package/cli/lib/argv.test.mjs +46 -0
- package/cli/lib/copy-tree.mjs +78 -0
- package/package.json +94 -0
- package/plugins/design/dev-server/annotations-context-toolbar.tsx +397 -0
- package/plugins/design/dev-server/annotations-layer.tsx +1717 -0
- package/plugins/design/dev-server/api.ts +674 -0
- package/plugins/design/dev-server/bin/_screenshot-playwright.mjs +50 -0
- package/plugins/design/dev-server/bin/bootstrap-check.sh +83 -0
- package/plugins/design/dev-server/bin/canvas-edit.sh +48 -0
- package/plugins/design/dev-server/bin/handoff.sh +27 -0
- package/plugins/design/dev-server/bin/screenshot.sh +232 -0
- package/plugins/design/dev-server/bin/server-up.sh +135 -0
- package/plugins/design/dev-server/bin/slug.sh +22 -0
- package/plugins/design/dev-server/bin/smoke.sh +272 -0
- package/plugins/design/dev-server/build.ts +267 -0
- package/plugins/design/dev-server/canvas-build.ts +219 -0
- package/plugins/design/dev-server/canvas-edit.ts +388 -0
- package/plugins/design/dev-server/canvas-header.ts +165 -0
- package/plugins/design/dev-server/canvas-icons.tsx +131 -0
- package/plugins/design/dev-server/canvas-lib-inline.ts +260 -0
- package/plugins/design/dev-server/canvas-lib-resolver.ts +85 -0
- package/plugins/design/dev-server/canvas-lib.tsx +1995 -0
- package/plugins/design/dev-server/canvas-meta.schema.json +181 -0
- package/plugins/design/dev-server/canvas-pipeline.ts +270 -0
- package/plugins/design/dev-server/canvas-shell.tsx +813 -0
- package/plugins/design/dev-server/client/app.jsx +2027 -0
- package/plugins/design/dev-server/client/hmr.mjs +85 -0
- package/plugins/design/dev-server/client/iframe-lazy.mjs +121 -0
- package/plugins/design/dev-server/client/index.html +15 -0
- package/plugins/design/dev-server/client/styles/0-reset.css +18 -0
- package/plugins/design/dev-server/client/styles/1-tokens.css +297 -0
- package/plugins/design/dev-server/client/styles/2-layout.css +35 -0
- package/plugins/design/dev-server/client/styles/3-shell.css +906 -0
- package/plugins/design/dev-server/client/styles/4-components.css +1268 -0
- package/plugins/design/dev-server/client/styles/5-utilities.css +4 -0
- package/plugins/design/dev-server/client/styles/_index.css +24 -0
- package/plugins/design/dev-server/client/styles.css +1419 -0
- package/plugins/design/dev-server/config.schema.json +147 -0
- package/plugins/design/dev-server/context-menu.tsx +343 -0
- package/plugins/design/dev-server/context.ts +173 -0
- package/plugins/design/dev-server/dist/client.bundle.js +20323 -0
- package/plugins/design/dev-server/dist/styles.css +2875 -0
- package/plugins/design/dev-server/examples/README.md +9 -0
- package/plugins/design/dev-server/examples/perf-100-artboards.tsx +113 -0
- package/plugins/design/dev-server/fs-watch.ts +63 -0
- package/plugins/design/dev-server/handoff.ts +721 -0
- package/plugins/design/dev-server/history.ts +125 -0
- package/plugins/design/dev-server/hmr-broadcast.ts +114 -0
- package/plugins/design/dev-server/http.ts +413 -0
- package/plugins/design/dev-server/input-router.tsx +485 -0
- package/plugins/design/dev-server/inspect.ts +365 -0
- package/plugins/design/dev-server/locator.ts +159 -0
- package/plugins/design/dev-server/mem.ts +97 -0
- package/plugins/design/dev-server/runtime-bundle.ts +235 -0
- package/plugins/design/dev-server/server.mjs +1246 -0
- package/plugins/design/dev-server/server.ts +131 -0
- package/plugins/design/dev-server/test/_helpers.ts +81 -0
- package/plugins/design/dev-server/test/active-state.test.ts +145 -0
- package/plugins/design/dev-server/test/annotations-api.test.ts +146 -0
- package/plugins/design/dev-server/test/annotations-layer.test.ts +419 -0
- package/plugins/design/dev-server/test/binary-smoke.test.ts +47 -0
- package/plugins/design/dev-server/test/bundle-smoke.test.ts +29 -0
- package/plugins/design/dev-server/test/canvas-build.test.ts +78 -0
- package/plugins/design/dev-server/test/canvas-edit.test.ts +139 -0
- package/plugins/design/dev-server/test/canvas-header.test.ts +127 -0
- package/plugins/design/dev-server/test/canvas-lib-inline.test.ts +146 -0
- package/plugins/design/dev-server/test/canvas-lib-resolver.test.ts +112 -0
- package/plugins/design/dev-server/test/canvas-meta-api.test.ts +236 -0
- package/plugins/design/dev-server/test/canvas-pipeline.test.ts +180 -0
- package/plugins/design/dev-server/test/canvas-route.test.ts +176 -0
- package/plugins/design/dev-server/test/fs-watch.test.ts +41 -0
- package/plugins/design/dev-server/test/handoff-static-frames.test.ts +215 -0
- package/plugins/design/dev-server/test/handoff.test.ts +281 -0
- package/plugins/design/dev-server/test/history-rollback.test.ts +62 -0
- package/plugins/design/dev-server/test/hmr-broadcast.test.ts +108 -0
- package/plugins/design/dev-server/test/input-router.test.ts +316 -0
- package/plugins/design/dev-server/test/locator.test.ts +214 -0
- package/plugins/design/dev-server/test/perf-harness.ts +193 -0
- package/plugins/design/dev-server/test/phase-3.6-smoke.test.ts +77 -0
- package/plugins/design/dev-server/test/runtime-bundle.test.ts +69 -0
- package/plugins/design/dev-server/test/server-lifecycle.test.ts +28 -0
- package/plugins/design/dev-server/test/tool-palette.test.tsx +55 -0
- package/plugins/design/dev-server/test/use-annotation-selection.test.tsx +77 -0
- package/plugins/design/dev-server/test/use-artboard-drag.test.ts +325 -0
- package/plugins/design/dev-server/test/use-selection-set.test.tsx +166 -0
- package/plugins/design/dev-server/test/use-snap-guides.test.ts +190 -0
- package/plugins/design/dev-server/test/use-tool-mode.test.tsx +93 -0
- package/plugins/design/dev-server/test/ws-handshake.test.ts +33 -0
- package/plugins/design/dev-server/tool-palette.tsx +278 -0
- package/plugins/design/dev-server/tsconfig.json +26 -0
- package/plugins/design/dev-server/use-annotation-selection.tsx +92 -0
- package/plugins/design/dev-server/use-annotations-visibility.tsx +43 -0
- package/plugins/design/dev-server/use-artboard-drag.tsx +445 -0
- package/plugins/design/dev-server/use-selection-set.tsx +224 -0
- package/plugins/design/dev-server/use-snap-guides.tsx +215 -0
- package/plugins/design/dev-server/use-tool-mode.tsx +114 -0
- package/plugins/design/dev-server/ws.ts +90 -0
- package/plugins/design/templates/_shell.html +177 -0
- package/plugins/design/templates/canvas.tsx.template +54 -0
- package/plugins/design/templates/design-system-inspiration/_MAPPING.md +277 -0
- package/plugins/design/templates/design-system-inspiration/_README.md +71 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-banner.html +68 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-empty-state-generous.html +39 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-feature-grid.html +62 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-marketing-card.html +63 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-testimonial.html +80 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-code-block.html +71 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-diff-view.html +65 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-log-stream.html +62 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-monospace-table.html +57 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-terminal-pane.html +67 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/type-mono.html +57 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/colors-presence.html +74 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-command-palette.html +90 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-keyboard.html +51 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-list.html +89 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-shortcuts-overlay.html +85 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-toast-menu.html +80 -0
- package/plugins/design/templates/design-system-inspiration/core/INDEX.md.tpl +25 -0
- package/plugins/design/templates/design-system-inspiration/core/README.orchestration.md.tpl +71 -0
- package/plugins/design/templates/design-system-inspiration/core/README.philosophy.md.tpl +77 -0
- package/plugins/design/templates/design-system-inspiration/core/SKILL.md.tpl +50 -0
- package/plugins/design/templates/design-system-inspiration/core/colors_and_type.css.tpl +111 -0
- package/plugins/design/templates/design-system-inspiration/core/config.json.tpl +28 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/_layout.css +113 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/colors-accent.html +48 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/colors-surfaces.html +49 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/colors-text.html +52 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/components-buttons.html +83 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/components-cards.html +79 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/components-inputs.html +82 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/motion.html +66 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/spacing-scale.html +53 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/type-scale.html +62 -0
- package/plugins/design/templates/design-system-inspiration/foundations/borders.html +39 -0
- package/plugins/design/templates/design-system-inspiration/foundations/elevation.html +46 -0
- package/plugins/design/templates/design-system-inspiration/foundations/focus.html +48 -0
- package/plugins/design/templates/design-system-inspiration/foundations/grid.html +51 -0
- package/plugins/design/templates/design-system-inspiration/foundations/iconography.html +73 -0
- package/plugins/design/templates/design-system-inspiration/foundations/opacity.html +45 -0
- package/plugins/design/templates/design-system-inspiration/foundations/radii.html +40 -0
- package/plugins/design/templates/design-system-inspiration/foundations/selection.html +45 -0
- package/plugins/design/templates/design-system-inspiration/meta/accessibility.html +62 -0
- package/plugins/design/templates/design-system-inspiration/meta/i18n.html +73 -0
- package/plugins/design/templates/design-system-inspiration/meta/presence-multiplayer.html +71 -0
- package/plugins/design/templates/design-system-inspiration/meta/tokens-index.html +80 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-auth.html +78 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-data-density.html +61 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-error-pages.html +70 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-form-layouts.html +70 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-onboarding.html +71 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-pricing.html +83 -0
- package/plugins/design/templates/design-system-inspiration/platform-desktop/components-resize-panels.html +63 -0
- package/plugins/design/templates/design-system-inspiration/platform-desktop/ui_kits-desktop-index.html +55 -0
- package/plugins/design/templates/design-system-inspiration/platform-desktop/ui_kits-desktop-showcase.html +302 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/components-bottom-sheet.html +63 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/components-pull-to-refresh.html +74 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/components-segmented-control.html +51 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/components-tab-bar.html +57 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/ui_kits-mobile-index.html +58 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/ui_kits-mobile-showcase.html +237 -0
- package/plugins/design/templates/design-system-inspiration/status/colors-status.html +49 -0
- package/plugins/design/templates/design-system-inspiration/status/components-status.html +63 -0
- package/plugins/design/templates/design-system-inspiration/status/skeletons.html +74 -0
- package/plugins/design/templates/design-system-inspiration/theme-both/colors-themes-side-by-side.html +59 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-callout.html +74 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-dialogs.html +81 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-tables.html +101 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-toggles.html +74 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-tooltips.html +74 -0
- package/plugins/design/templates/design-system-inspiration/universal/empty-state.html.tpl +34 -0
- package/plugins/design/templates/design-system-inspiration/universal/logo.html +42 -0
- package/plugins/design/templates/ds-specimen.tsx.template +59 -0
- package/plugins/flow/.claude-plugin/config.schema.json +398 -0
- package/plugins/flow/README.md +45 -0
- package/plugins/flow/templates/ai-skeleton/INDEX.md +50 -0
- package/plugins/flow/templates/ai-skeleton/README.md +46 -0
- package/plugins/flow/templates/ai-skeleton/browser/har/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/browser/snapshots/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/business/README.md +12 -0
- package/plugins/flow/templates/ai-skeleton/context/README.md +12 -0
- package/plugins/flow/templates/ai-skeleton/decisions/README.md +20 -0
- package/plugins/flow/templates/ai-skeleton/design-import/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/dev-logs/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/device/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/docs/README.md +5 -0
- package/plugins/flow/templates/ai-skeleton/logs/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/logs/README.md +13 -0
- package/plugins/flow/templates/ai-skeleton/plans/README.md +16 -0
- package/plugins/flow/templates/ai-skeleton/plans/archive/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/release-guide.md +35 -0
- package/plugins/flow/templates/ai-skeleton/reviews/README.md +15 -0
- package/plugins/flow/templates/ai-skeleton/scenarios/README.md +26 -0
- package/plugins/flow/templates/ai-skeleton/scenarios/_lib/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/state/STATE.md +25 -0
- package/plugins/flow/templates/ai-skeleton/templates/HANDOFF.md +32 -0
- package/plugins/flow/templates/ai-skeleton/workflows.config.json +74 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-consumer-testimonial
|
|
3
|
+
DEMONSTRATES: quote typography, attribution shape (name + role + photo placeholder), pull-quote vs in-flow variants
|
|
4
|
+
COMPOSITION: pull-quote (large) + grid of 3 in-flow testimonials + featured testimonial with rating
|
|
5
|
+
COPY VOICE: specific, in-the-user's-words (no marketing-paraphrased praise)
|
|
6
|
+
WHEN SCAFFOLDED: audience-consumer
|
|
7
|
+
NOTES: Real testimonial copy beats invented ones — placeholder text here is a sentence the actual user said. Use --type-lg for pull-quote, --type-base for in-flow, --type-md for featured.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — consumer testimonial</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.tcard { background: var(--bg-1); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 20px; display: grid; gap: 12px; }
|
|
18
|
+
.tcard .quote { color: var(--fg-0); margin: 0; }
|
|
19
|
+
.attr { display: flex; align-items: center; gap: 10px; }
|
|
20
|
+
.attr .avatar { width: 36px; height: 36px; background: var(--bg-3); border-radius: 50%; }
|
|
21
|
+
.attr .meta { font-size: var(--type-sm); }
|
|
22
|
+
.attr .name { color: var(--fg-0); font-weight: 500; }
|
|
23
|
+
.attr .role { color: var(--fg-2); font-size: var(--type-xs); }
|
|
24
|
+
.stars { color: var(--status-warn); letter-spacing: 2px; font-size: var(--type-sm); }
|
|
25
|
+
</style>
|
|
26
|
+
</head>
|
|
27
|
+
<body class="app" data-theme="dark">
|
|
28
|
+
<main class="specimen">
|
|
29
|
+
<h1>Testimonials</h1>
|
|
30
|
+
<p class="lede">Use real quotes from real users. Specific outcomes ("cut my prep time by half on match days") beat generic praise ("amazing app!"). Three densities for three placements: pull-quote, in-flow grid, featured.</p>
|
|
31
|
+
|
|
32
|
+
<h2>Pull-quote</h2>
|
|
33
|
+
<figure style="border-left: 3px solid var(--accent); padding: 8px 20px; margin: 0;">
|
|
34
|
+
<blockquote class="quote" style="font-family: var(--font-display); font-size: var(--type-2xl); line-height: var(--lh-2xl); margin: 0;">"It's the first sideline tool that doesn't make me look at my phone during the match."</blockquote>
|
|
35
|
+
<figcaption class="attr" style="margin-top: 12px;">
|
|
36
|
+
<div class="avatar"></div>
|
|
37
|
+
<div class="meta">
|
|
38
|
+
<div class="name">Sam Park</div>
|
|
39
|
+
<div class="role">Coach, FC Riverside U17</div>
|
|
40
|
+
</div>
|
|
41
|
+
</figcaption>
|
|
42
|
+
</figure>
|
|
43
|
+
|
|
44
|
+
<h2>In-flow grid</h2>
|
|
45
|
+
<div class="grid" style="grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));">
|
|
46
|
+
<div class="tcard">
|
|
47
|
+
<p class="quote" style="font-size: var(--type-base);">"Cut my match prep time by half. Captain gets the brief on the way to the bus."</p>
|
|
48
|
+
<div class="attr">
|
|
49
|
+
<div class="avatar"></div>
|
|
50
|
+
<div class="meta"><div class="name">Marta Silva</div><div class="role">Assistant coach</div></div>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="tcard">
|
|
54
|
+
<p class="quote" style="font-size: var(--type-base);">"The roster sync killed a Monday morning admin loop I'd been doing for three years."</p>
|
|
55
|
+
<div class="attr">
|
|
56
|
+
<div class="avatar"></div>
|
|
57
|
+
<div class="meta"><div class="name">Jonas Weber</div><div class="role">Club secretary</div></div>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="tcard">
|
|
61
|
+
<p class="quote" style="font-size: var(--type-base);">"Match recap export goes straight into the club WhatsApp. Parents stopped asking 'what happened?'"</p>
|
|
62
|
+
<div class="attr">
|
|
63
|
+
<div class="avatar"></div>
|
|
64
|
+
<div class="meta"><div class="name">Liam Chen</div><div class="role">Team manager</div></div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<h2>Featured (with rating)</h2>
|
|
70
|
+
<div class="tcard" style="max-width: 480px; border-color: var(--border-default);">
|
|
71
|
+
<div class="stars">★★★★★</div>
|
|
72
|
+
<p class="quote" style="font-size: var(--type-md); line-height: var(--lh-md);">"I've tried four club apps. This is the first one that the parents and the players actually open. The match recap with the shareable card is the killer feature."</p>
|
|
73
|
+
<div class="attr">
|
|
74
|
+
<div class="avatar"></div>
|
|
75
|
+
<div class="meta"><div class="name">Sara Novak</div><div class="role">Club president, Sparta U15</div></div>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</main>
|
|
79
|
+
</body>
|
|
80
|
+
</html>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-developer-code-block
|
|
3
|
+
DEMONSTRATES: code block with syntax-color stub (using token palette), language label, copy button, line numbers (optional)
|
|
4
|
+
COMPOSITION: 3 code blocks — bash (no syntax), js (with token-colored keywords), JSON (key/value coloring); each with header + copy
|
|
5
|
+
COPY VOICE: real code, real package names, real file paths
|
|
6
|
+
WHEN SCAFFOLDED: audience-developer
|
|
7
|
+
NOTES: Syntax highlighting uses the token palette — --status-info (blue) for keywords, --accent (project color) for strings, --status-success (green) for numbers, --fg-2 (muted) for comments. Don't pull in a separate syntax-color palette — reuse what the system has.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — developer code block</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.code-block { background: var(--bg-0); border: 1px solid var(--border-default); border-radius: var(--radius-md); margin: 0 0 16px; max-width: 720px; overflow: hidden; }
|
|
18
|
+
.code-header { display: flex; justify-content: space-between; align-items: center; padding: 6px 12px; background: var(--bg-2); border-bottom: 1px solid var(--border-default); font-family: var(--font-mono); font-size: var(--type-xs); color: var(--fg-2); }
|
|
19
|
+
.code-header button { background: transparent; border: 0; color: var(--fg-1); font: inherit; font-size: var(--type-xs); padding: 2px 8px; border-radius: var(--radius-xs); cursor: pointer; }
|
|
20
|
+
.code-header button:hover { background: var(--bg-3); color: var(--fg-0); }
|
|
21
|
+
pre { margin: 0; padding: 12px 14px; font-family: var(--font-mono); font-size: 12px; line-height: 1.6; color: var(--fg-0); overflow-x: auto; }
|
|
22
|
+
.kw { color: var(--status-info); }
|
|
23
|
+
.str { color: var(--accent); }
|
|
24
|
+
.num { color: var(--status-success); }
|
|
25
|
+
.cmt { color: var(--fg-2); }
|
|
26
|
+
.fn { color: var(--status-warn); }
|
|
27
|
+
</style>
|
|
28
|
+
</head>
|
|
29
|
+
<body class="app" data-theme="dark">
|
|
30
|
+
<main class="specimen">
|
|
31
|
+
<h1>Code blocks</h1>
|
|
32
|
+
<p class="lede">Code blocks reuse the status palette for syntax tokens — blue for keywords, accent for strings, green for numbers, muted for comments. No separate theme.</p>
|
|
33
|
+
|
|
34
|
+
<div class="code-block">
|
|
35
|
+
<div class="code-header"><span>bash</span><button>copy</button></div>
|
|
36
|
+
<pre><span class="cmt"># Install + scaffold</span>
|
|
37
|
+
npm i -g @1agh/maude
|
|
38
|
+
maude design init --no-discovery --name acme
|
|
39
|
+
cd acme && claude
|
|
40
|
+
<span class="cmt"># Inside Claude Code:</span>
|
|
41
|
+
<span class="cmt"># /design:setup-ds project "team scouting tool"</span></pre>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div class="code-block">
|
|
45
|
+
<div class="code-header"><span>typescript</span><button>copy</button></div>
|
|
46
|
+
<pre><span class="kw">import</span> { copyTree } <span class="kw">from</span> <span class="str">'../lib/copy-tree.mjs'</span>;
|
|
47
|
+
|
|
48
|
+
<span class="kw">async function</span> <span class="fn">runInit</span>({ args, pkgRoot }) {
|
|
49
|
+
<span class="kw">const</span> { flags } = <span class="fn">parseArgs</span>(args, {
|
|
50
|
+
booleans: [<span class="str">'force'</span>, <span class="str">'dry-run'</span>, <span class="str">'no-discovery'</span>],
|
|
51
|
+
});
|
|
52
|
+
<span class="kw">if</span> (!flags[<span class="str">'no-discovery'</span>]) <span class="kw">return</span> <span class="fn">refuseInteractive</span>();
|
|
53
|
+
<span class="kw">return</span> <span class="fn">scaffoldCore</span>({ designDir, dsName, payload });
|
|
54
|
+
}</pre>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<div class="code-block">
|
|
58
|
+
<div class="code-header"><span>json</span><button>copy</button></div>
|
|
59
|
+
<pre>{
|
|
60
|
+
<span class="str">"name"</span>: <span class="str">"acme"</span>,
|
|
61
|
+
<span class="str">"version"</span>: <span class="str">"0.8.0"</span>,
|
|
62
|
+
<span class="str">"completenessProfile"</span>: <span class="str">"standard"</span>,
|
|
63
|
+
<span class="str">"activeFamilies"</span>: [<span class="str">"accent"</span>, <span class="str">"status"</span>],
|
|
64
|
+
<span class="str">"designSystems"</span>: [
|
|
65
|
+
{ <span class="str">"name"</span>: <span class="str">"project"</span>, <span class="str">"path"</span>: <span class="str">"system/project"</span> }
|
|
66
|
+
]
|
|
67
|
+
}</pre>
|
|
68
|
+
</div>
|
|
69
|
+
</main>
|
|
70
|
+
</body>
|
|
71
|
+
</html>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-developer-diff-view
|
|
3
|
+
DEMONSTRATES: side-by-side + unified diff, +/- gutter, line numbers, syntax-tinted lines
|
|
4
|
+
COMPOSITION: unified diff showing 6 lines of context + 2 removed + 3 added, plus a side-by-side variant header
|
|
5
|
+
COPY VOICE: real code diff (JS/TS), real file paths
|
|
6
|
+
WHEN SCAFFOLDED: audience-developer
|
|
7
|
+
NOTES: Use opacity-modulated --status-success (added) and --status-error (removed) — never fully saturated. Tabular nums on line numbers. Don't word-wrap; horizontal scroll if needed.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — developer diff view</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.diff { background: var(--bg-0); border: 1px solid var(--border-default); border-radius: var(--radius-md); font-family: var(--font-mono); font-size: 12px; line-height: 1.6; max-width: 760px; overflow-x: auto; }
|
|
18
|
+
.diff-header { padding: 8px 12px; border-bottom: 1px solid var(--border-default); background: var(--bg-2); display: flex; justify-content: space-between; }
|
|
19
|
+
.diff-header strong { color: var(--fg-0); }
|
|
20
|
+
.diff-line { display: grid; grid-template-columns: 36px 36px 14px 1fr; gap: 0; padding: 0 12px; align-items: center; }
|
|
21
|
+
.diff-line .ln { color: var(--fg-3); font-variant-numeric: tabular-nums; text-align: right; padding-right: 6px; }
|
|
22
|
+
.diff-line .sign { width: 14px; text-align: center; }
|
|
23
|
+
.diff-line code { color: inherit; }
|
|
24
|
+
.diff-line.is-add { background: oklch(from var(--status-success) l c h / 0.10); }
|
|
25
|
+
.diff-line.is-add .sign { color: var(--status-success); }
|
|
26
|
+
.diff-line.is-rem { background: oklch(from var(--status-error) l c h / 0.10); }
|
|
27
|
+
.diff-line.is-rem .sign { color: var(--status-error); }
|
|
28
|
+
</style>
|
|
29
|
+
</head>
|
|
30
|
+
<body class="app" data-theme="dark">
|
|
31
|
+
<main class="specimen">
|
|
32
|
+
<h1>Diff view</h1>
|
|
33
|
+
<p class="lede">Unified view by default — denser, easier to read in PR contexts. Side-by-side is reserved for paired comparison (theme variants, before / after of a rename).</p>
|
|
34
|
+
|
|
35
|
+
<h2>Unified</h2>
|
|
36
|
+
<div class="diff">
|
|
37
|
+
<div class="diff-header">
|
|
38
|
+
<strong>cli/commands/design.mjs</strong>
|
|
39
|
+
<span style="color: var(--fg-2);">+3 −2</span>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="diff-line"><span class="ln">42</span><span class="ln">42</span><span class="sign"> </span><code> if (sub === 'serve') {</code></div>
|
|
42
|
+
<div class="diff-line"><span class="ln">43</span><span class="ln">43</span><span class="sign"> </span><code> return runServe({ args, pkgRoot });</code></div>
|
|
43
|
+
<div class="diff-line"><span class="ln">44</span><span class="ln">44</span><span class="sign"> </span><code> }</code></div>
|
|
44
|
+
<div class="diff-line is-rem"><span class="ln">45</span><span class="ln"></span><span class="sign">-</span><code> // TODO: init subcommand</code></div>
|
|
45
|
+
<div class="diff-line is-rem"><span class="ln">46</span><span class="ln"></span><span class="sign">-</span><code> return null;</code></div>
|
|
46
|
+
<div class="diff-line is-add"><span class="ln"></span><span class="ln">45</span><span class="sign">+</span><code> if (sub === 'init') {</code></div>
|
|
47
|
+
<div class="diff-line is-add"><span class="ln"></span><span class="ln">46</span><span class="sign">+</span><code> return runInit({ args, pkgRoot });</code></div>
|
|
48
|
+
<div class="diff-line is-add"><span class="ln"></span><span class="ln">47</span><span class="sign">+</span><code> }</code></div>
|
|
49
|
+
<div class="diff-line"><span class="ln">47</span><span class="ln">48</span><span class="sign"> </span><code>}</code></div>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<h2>Side-by-side header (paired)</h2>
|
|
53
|
+
<div class="diff" style="display: grid; grid-template-columns: 1fr 1fr;">
|
|
54
|
+
<div class="diff-header" style="border-right: 1px solid var(--border-default);">
|
|
55
|
+
<strong>system/project/colors_and_type.css <span style="color: var(--fg-2);">(before)</span></strong>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="diff-header">
|
|
58
|
+
<strong>system/marketing/colors_and_type.css <span style="color: var(--fg-2);">(after)</span></strong>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="diff-line is-rem" style="border-right: 1px solid var(--border-default);"><span class="ln">12</span><span class="ln"></span><span class="sign">-</span><code>--accent: oklch(64% 0.18 264);</code></div>
|
|
61
|
+
<div class="diff-line is-add"><span class="ln"></span><span class="ln">12</span><span class="sign">+</span><code>--accent: oklch(68% 0.22 25);</code></div>
|
|
62
|
+
</div>
|
|
63
|
+
</main>
|
|
64
|
+
</body>
|
|
65
|
+
</html>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-developer-log-stream
|
|
3
|
+
DEMONSTRATES: dense log rows with timestamp + level pill + payload, filter UI, sticky bottom (live tail)
|
|
4
|
+
COMPOSITION: log viewer with 8 rows mixing levels (DEBUG / INFO / WARN / ERROR), filter chips, auto-scroll indicator
|
|
5
|
+
COPY VOICE: real log messages with structured fields ([http] GET /api/x 200 12ms), no Lorem
|
|
6
|
+
WHEN SCAFFOLDED: audience-developer
|
|
7
|
+
NOTES: Timestamps in --font-mono with tabular nums for alignment. Levels are tiny pills (not full badges). Payload uses copyable inline code styling.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — developer log stream</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.logs { background: var(--bg-0); border: 1px solid var(--border-default); border-radius: var(--radius-md); padding: 12px; font-family: var(--font-mono); font-size: 12px; line-height: 1.6; max-width: 760px; max-height: 320px; overflow-y: auto; }
|
|
18
|
+
.log-row { display: grid; grid-template-columns: 92px 64px 1fr; gap: 12px; align-items: center; }
|
|
19
|
+
.log-row.is-hl { background: oklch(from var(--accent) l c h / 0.08); }
|
|
20
|
+
.ts { color: var(--fg-2); font-variant-numeric: tabular-nums; }
|
|
21
|
+
.lvl { display: inline-block; padding: 0 6px; border-radius: var(--radius-xs); font-size: 10px; text-align: center; line-height: 14px; }
|
|
22
|
+
.lvl.debug { background: var(--bg-3); color: var(--fg-2); }
|
|
23
|
+
.lvl.info { background: oklch(from var(--status-info) l c h / 0.2); color: var(--status-info); }
|
|
24
|
+
.lvl.warn { background: oklch(from var(--status-warn) l c h / 0.2); color: var(--status-warn); }
|
|
25
|
+
.lvl.error { background: oklch(from var(--status-error) l c h / 0.2); color: var(--status-error); }
|
|
26
|
+
.filter-row { display: flex; gap: 6px; margin: 0 0 12px; flex-wrap: wrap; }
|
|
27
|
+
.chip { background: var(--bg-3); border: 1px solid var(--border-default); padding: 3px 10px; border-radius: var(--radius-pill); font-size: var(--type-xs); cursor: pointer; }
|
|
28
|
+
.chip.is-active { background: var(--accent); color: var(--accent-fg); border-color: var(--accent); }
|
|
29
|
+
</style>
|
|
30
|
+
</head>
|
|
31
|
+
<body class="app" data-theme="dark">
|
|
32
|
+
<main class="specimen">
|
|
33
|
+
<h1>Log stream</h1>
|
|
34
|
+
<p class="lede">Dense, monospaced, color-coded by level. Tail-mode auto-scrolls to the bottom; clicking a row pauses auto-scroll. Filters narrow by level / service / search.</p>
|
|
35
|
+
|
|
36
|
+
<h2>Filters</h2>
|
|
37
|
+
<div class="filter-row">
|
|
38
|
+
<span class="chip is-active">All</span>
|
|
39
|
+
<span class="chip">debug</span>
|
|
40
|
+
<span class="chip is-active">info</span>
|
|
41
|
+
<span class="chip is-active">warn</span>
|
|
42
|
+
<span class="chip is-active">error</span>
|
|
43
|
+
<span class="chip">[http]</span>
|
|
44
|
+
<span class="chip">[sync]</span>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<h2>Stream (live tail)</h2>
|
|
48
|
+
<div class="logs">
|
|
49
|
+
<div class="log-row"><span class="ts">12:14:02.103</span><span class="lvl info">INFO</span><span>[http] GET /api/roster 200 12ms</span></div>
|
|
50
|
+
<div class="log-row"><span class="ts">12:14:02.241</span><span class="lvl info">INFO</span><span>[sync] pulled 24 players for season 2026</span></div>
|
|
51
|
+
<div class="log-row"><span class="ts">12:14:02.388</span><span class="lvl debug">DBUG</span><span>[cache] hit ratio 0.82 (last 1m)</span></div>
|
|
52
|
+
<div class="log-row"><span class="ts">12:14:03.022</span><span class="lvl warn">WARN</span><span>[sync] retry attempt 2 for league_api.fetch_fixtures()</span></div>
|
|
53
|
+
<div class="log-row is-hl"><span class="ts">12:14:03.512</span><span class="lvl error">ERR</span><span>[sync] league_api timeout after 30000ms (will retry in 30s)</span></div>
|
|
54
|
+
<div class="log-row"><span class="ts">12:14:04.107</span><span class="lvl info">INFO</span><span>[http] POST /api/match 201 47ms (match_id=8421)</span></div>
|
|
55
|
+
<div class="log-row"><span class="ts">12:14:04.215</span><span class="lvl info">INFO</span><span>[ws] client subscribed: roster.8421</span></div>
|
|
56
|
+
<div class="log-row"><span class="ts">12:14:04.832</span><span class="lvl debug">DBUG</span><span>[render] canvas frame 14 (16.4ms)</span></div>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<p style="color: var(--fg-2); font-size: var(--type-xs); margin-top: 8px;">Live · 8 visible · paused on hover</p>
|
|
60
|
+
</main>
|
|
61
|
+
</body>
|
|
62
|
+
</html>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-developer-monospace-table
|
|
3
|
+
DEMONSTRATES: tabular-nums alignment, monospace mixed with proportional, status pills inline with data
|
|
4
|
+
COMPOSITION: process table (PID / cmd / mem / cpu) — 8 rows, monospaced numbers, color-coded by status
|
|
5
|
+
COPY VOICE: real process names, real numbers
|
|
6
|
+
WHEN SCAFFOLDED: audience-developer
|
|
7
|
+
NOTES: Use --font-mono ONLY for numeric / id / hash columns. Text columns stay --font-body for readability. font-variant-numeric: tabular-nums is mandatory on numeric columns.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — developer monospace table</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.ptable { width: 100%; max-width: 720px; background: var(--bg-1); border: 1px solid var(--border-default); border-radius: var(--radius-md); border-collapse: collapse; overflow: hidden; font-size: var(--type-sm); }
|
|
18
|
+
.ptable th, .ptable td { padding: 6px 12px; border-bottom: 1px solid var(--border-subtle); text-align: left; }
|
|
19
|
+
.ptable th { background: var(--bg-2); color: var(--fg-1); font-weight: 500; font-size: var(--type-xs); text-transform: uppercase; letter-spacing: 0.04em; }
|
|
20
|
+
.ptable tr:last-child td { border-bottom: 0; }
|
|
21
|
+
.ptable tr:hover td { background: var(--bg-3); }
|
|
22
|
+
.mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
|
|
23
|
+
.num { text-align: right; }
|
|
24
|
+
.ok { color: var(--status-success); }
|
|
25
|
+
.high { color: var(--status-warn); }
|
|
26
|
+
</style>
|
|
27
|
+
</head>
|
|
28
|
+
<body class="app" data-theme="dark">
|
|
29
|
+
<main class="specimen">
|
|
30
|
+
<h1>Monospace data table</h1>
|
|
31
|
+
<p class="lede">Numeric columns use <code>--font-mono</code> + <code>font-variant-numeric: tabular-nums</code> for column alignment. Text columns stay in the body font for legibility — never make a whole table monospace.</p>
|
|
32
|
+
|
|
33
|
+
<table class="ptable">
|
|
34
|
+
<thead>
|
|
35
|
+
<tr>
|
|
36
|
+
<th class="mono num">PID</th>
|
|
37
|
+
<th>Command</th>
|
|
38
|
+
<th class="mono num">RSS</th>
|
|
39
|
+
<th class="mono num">CPU%</th>
|
|
40
|
+
<th>Status</th>
|
|
41
|
+
<th>Uptime</th>
|
|
42
|
+
</tr>
|
|
43
|
+
</thead>
|
|
44
|
+
<tbody>
|
|
45
|
+
<tr><td class="mono num">12382</td><td>node server.mjs</td><td class="mono num">142.0M</td><td class="mono num ok">2.4</td><td><span class="ok">running</span></td><td class="mono">2h 14m</td></tr>
|
|
46
|
+
<tr><td class="mono num">12390</td><td>postgres</td><td class="mono num">512.8M</td><td class="mono num ok">0.8</td><td><span class="ok">running</span></td><td class="mono">14d</td></tr>
|
|
47
|
+
<tr><td class="mono num">12421</td><td>redis-server</td><td class="mono num">28.4M</td><td class="mono num ok">0.1</td><td><span class="ok">running</span></td><td class="mono">14d</td></tr>
|
|
48
|
+
<tr><td class="mono num">12502</td><td>nginx worker</td><td class="mono num">16.2M</td><td class="mono num ok">0.0</td><td><span class="ok">running</span></td><td class="mono">7d</td></tr>
|
|
49
|
+
<tr><td class="mono num">14224</td><td>scenario-runner</td><td class="mono num">1.4G</td><td class="mono num high">68.2</td><td><span class="high">busy</span></td><td class="mono">3m 12s</td></tr>
|
|
50
|
+
<tr><td class="mono num">14502</td><td>esbuild watch</td><td class="mono num">82.0M</td><td class="mono num ok">0.4</td><td><span class="ok">idle</span></td><td class="mono">42m</td></tr>
|
|
51
|
+
<tr><td class="mono num">14820</td><td>agent-browser</td><td class="mono num">256.2M</td><td class="mono num ok">1.2</td><td><span class="ok">running</span></td><td class="mono">8m</td></tr>
|
|
52
|
+
<tr><td class="mono num">15014</td><td>fumadocs-mdx</td><td class="mono num">48.8M</td><td class="mono num ok">0.0</td><td><span class="ok">idle</span></td><td class="mono">12s</td></tr>
|
|
53
|
+
</tbody>
|
|
54
|
+
</table>
|
|
55
|
+
</main>
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-developer-terminal-pane
|
|
3
|
+
DEMONSTRATES: monospace stack, ANSI-style color tokens, prompt char ($/>), output line types
|
|
4
|
+
COMPOSITION: terminal pane with bash prompt + command + multi-line output + cursor + scrollback
|
|
5
|
+
COPY VOICE: real shell commands, real output (no fake $ ls Desktop)
|
|
6
|
+
WHEN SCAFFOLDED: audience-developer
|
|
7
|
+
NOTES: Uses --font-mono throughout. Foreground colors map to status semantics (--status-success for ✓, --status-error for ✗). Cursor blinks via opacity (respect prefers-reduced-motion).
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — developer terminal pane</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.terminal { background: var(--bg-0); border: 1px solid var(--border-default); border-radius: var(--radius-md); padding: 16px; font-family: var(--font-mono); font-size: 13px; line-height: 1.5; color: var(--fg-0); max-width: 720px; overflow-x: auto; }
|
|
18
|
+
.terminal .prompt { color: var(--accent); }
|
|
19
|
+
.terminal .path { color: var(--status-info); }
|
|
20
|
+
.terminal .ok { color: var(--status-success); }
|
|
21
|
+
.terminal .err { color: var(--status-error); }
|
|
22
|
+
.terminal .meta { color: var(--fg-2); }
|
|
23
|
+
.terminal .cursor { display: inline-block; width: 7px; height: 14px; background: var(--fg-0); vertical-align: text-bottom; animation: blink 1s steps(2, end) infinite; }
|
|
24
|
+
@keyframes blink { 50% { opacity: 0; } }
|
|
25
|
+
@media (prefers-reduced-motion: reduce) { .terminal .cursor { animation: none; } }
|
|
26
|
+
</style>
|
|
27
|
+
</head>
|
|
28
|
+
<body class="app" data-theme="dark">
|
|
29
|
+
<main class="specimen">
|
|
30
|
+
<h1>Terminal pane</h1>
|
|
31
|
+
<p class="lede">Monospace stack, ANSI-mapped status colors, blinking cursor (motion-respect). Foreground roles use the status palette so terminals stay readable across themes.</p>
|
|
32
|
+
|
|
33
|
+
<div class="terminal">
|
|
34
|
+
<div><span class="path">~/code/maude</span> <span class="prompt">$</span> maude design init --no-discovery --name acme</div>
|
|
35
|
+
<div> project name: acme</div>
|
|
36
|
+
<div> ds name: project</div>
|
|
37
|
+
<div> scaffold target: /private/tmp/acme/.design</div>
|
|
38
|
+
<div> mode: --no-discovery (Recommended defaults, Core only)</div>
|
|
39
|
+
<div> </div>
|
|
40
|
+
<div> <span class="ok">✓</span> 16 created</div>
|
|
41
|
+
<div> </div>
|
|
42
|
+
<div><span class="meta">Next steps:</span></div>
|
|
43
|
+
<div> This is the Core-only scaffold (~10 files) using Recommended defaults.</div>
|
|
44
|
+
<div> For audience-specific specimens, use Claude Code:</div>
|
|
45
|
+
<div> cd /private/tmp/acme && claude</div>
|
|
46
|
+
<div> /design:setup-ds project "<one-line product brief>"</div>
|
|
47
|
+
<div> </div>
|
|
48
|
+
<div><span class="path">~/code/maude</span> <span class="prompt">$</span> ls .design/system/project/preview/ | wc -l</div>
|
|
49
|
+
<div> 10</div>
|
|
50
|
+
<div><span class="path">~/code/maude</span> <span class="prompt">$</span> <span class="cursor"></span></div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<h2>Error state</h2>
|
|
54
|
+
<div class="terminal">
|
|
55
|
+
<div><span class="path">~/code/maude</span> <span class="prompt">$</span> maude design init</div>
|
|
56
|
+
<div class="err">maude design init: interactive bootstrap requires Claude Code.</div>
|
|
57
|
+
<div> </div>
|
|
58
|
+
<div> Inside Claude Code:</div>
|
|
59
|
+
<div> /design:setup-ds <name> — full discovery + scaffold (recommended)</div>
|
|
60
|
+
<div> /design:init — just prepare the env (no DS yet)</div>
|
|
61
|
+
<div> </div>
|
|
62
|
+
<div><span class="path">~/code/maude</span> <span class="prompt">$</span> echo $?</div>
|
|
63
|
+
<div>2</div>
|
|
64
|
+
</div>
|
|
65
|
+
</main>
|
|
66
|
+
</body>
|
|
67
|
+
</html>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-developer-type-mono
|
|
3
|
+
DEMONSTRATES: --font-mono usage roles — code blocks, IDs, hashes, timestamps, kbd, inline code
|
|
4
|
+
COMPOSITION: 6 mono-typography roles each with a real-world example
|
|
5
|
+
COPY VOICE: real strings (hashes, timestamps, IDs)
|
|
6
|
+
WHEN SCAFFOLDED: audience-developer (mono family — promoted from foundations when developer-flavored). Also when "mono" ∈ activeFamilies (Q7 chose mono pairing).
|
|
7
|
+
NOTES: Mono should NEVER carry body copy — it's role-typed for things that look like data. Use --font-mono at smaller sizes (12-13px) than --font-body (14px) because monospace reads denser.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Type — mono</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.mono { font-family: var(--font-mono); }
|
|
18
|
+
kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 4px; background: var(--bg-3); border: 1px solid var(--border-default); border-radius: var(--radius-xs); font-family: var(--font-mono); font-size: 10px; }
|
|
19
|
+
code { background: var(--bg-3); padding: 1px 5px; border-radius: var(--radius-xs); font-family: var(--font-mono); font-size: 12px; color: var(--fg-0); }
|
|
20
|
+
.role { display: grid; grid-template-columns: 140px 1fr; gap: 16px; align-items: center; padding: 12px 0; border-bottom: 1px solid var(--border-subtle); }
|
|
21
|
+
.role:last-child { border-bottom: 0; }
|
|
22
|
+
.role .label { color: var(--fg-2); font-size: var(--type-xs); text-transform: uppercase; letter-spacing: 0.04em; }
|
|
23
|
+
.role .demo { font-size: var(--type-sm); color: var(--fg-0); }
|
|
24
|
+
</style>
|
|
25
|
+
</head>
|
|
26
|
+
<body class="app" data-theme="dark">
|
|
27
|
+
<main class="specimen">
|
|
28
|
+
<h1>Monospace typography</h1>
|
|
29
|
+
<p class="lede">Mono is role-typed. Use it for code, IDs, hashes, timestamps, keyboard shortcuts, and command names. Never for body copy — it reads denser and slower.</p>
|
|
30
|
+
|
|
31
|
+
<div class="role">
|
|
32
|
+
<span class="label">Inline code</span>
|
|
33
|
+
<span class="demo">Run <code>maude design init --no-discovery</code> in your repo root.</span>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="role">
|
|
36
|
+
<span class="label">Hashes / IDs</span>
|
|
37
|
+
<span class="demo mono">commit e7d7773 · 0x4f8a2c · uuid 7a3e-9f1c-…</span>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="role">
|
|
40
|
+
<span class="label">Timestamps</span>
|
|
41
|
+
<span class="demo mono">2026-05-13 12:14:02.103Z</span>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="role">
|
|
44
|
+
<span class="label">Keyboard</span>
|
|
45
|
+
<span class="demo"><kbd>⌘</kbd> + <kbd>K</kbd> opens the command palette.</span>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="role">
|
|
48
|
+
<span class="label">File paths</span>
|
|
49
|
+
<span class="demo mono">~/code/maude/.design/system/project/colors_and_type.css</span>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="role">
|
|
52
|
+
<span class="label">Numeric tables</span>
|
|
53
|
+
<span class="demo mono" style="font-variant-numeric: tabular-nums;">142.0M · 28.4M · 1.4G · 16.2M</span>
|
|
54
|
+
</div>
|
|
55
|
+
</main>
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-pro-presence
|
|
3
|
+
DEMONSTRATES: --presence-online, --presence-away, --presence-offline; presence dot on avatar, presence cursor + label
|
|
4
|
+
COMPOSITION: 4 avatars with presence dots (online / away / offline / idle) + a "live cursors" mockup with 3 simultaneous users
|
|
5
|
+
COPY VOICE: real names, real timestamps
|
|
6
|
+
WHEN SCAFFOLDED: presence family (IF "presence" ∈ activeFamilies — typically pro tools with multiplayer)
|
|
7
|
+
NOTES: Presence dot is 8px circle bottom-right of 32-40px avatars (anchor on the visual bottom-right, not on a math grid). Cursor labels are subtle (pill at 11px, low opacity bg). Don't blink presence — too noisy in a busy view.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Presence — colors</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.avatar { position: relative; width: 40px; height: 40px; background: var(--bg-3); border: 1px solid var(--border-default); border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; color: var(--fg-1); font-size: var(--type-sm); }
|
|
18
|
+
.avatar .dot { position: absolute; bottom: -1px; right: -1px; width: 10px; height: 10px; border: 2px solid var(--bg-0); border-radius: 50%; }
|
|
19
|
+
.avatar-block { display: grid; gap: 6px; justify-items: center; }
|
|
20
|
+
.avatar-block .label { font-size: var(--type-xs); color: var(--fg-2); }
|
|
21
|
+
.canvas-frame { position: relative; background: var(--bg-1); border: 1px solid var(--border-default); border-radius: var(--radius-md); padding: 24px; min-height: 200px; overflow: hidden; }
|
|
22
|
+
.cursor { position: absolute; display: flex; align-items: flex-start; gap: 2px; pointer-events: none; }
|
|
23
|
+
.cursor svg { color: inherit; }
|
|
24
|
+
.cursor-label { background: currentColor; color: var(--accent-fg); font-size: 11px; padding: 1px 6px; border-radius: var(--radius-pill); margin-top: 12px; margin-left: 4px; }
|
|
25
|
+
</style>
|
|
26
|
+
</head>
|
|
27
|
+
<body class="app" data-theme="dark">
|
|
28
|
+
<main class="specimen">
|
|
29
|
+
<h1>Presence</h1>
|
|
30
|
+
<p class="lede">Three presence states — online (green), away (amber), offline (muted). For multiplayer pro tools where "who's looking right now" matters.</p>
|
|
31
|
+
|
|
32
|
+
<h2>Presence dots on avatars</h2>
|
|
33
|
+
<div class="row" style="gap: 32px;">
|
|
34
|
+
<div class="avatar-block">
|
|
35
|
+
<div class="avatar">KP<div class="dot" style="background: var(--presence-online);"></div></div>
|
|
36
|
+
<div class="label">online</div>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="avatar-block">
|
|
39
|
+
<div class="avatar">JW<div class="dot" style="background: var(--presence-away);"></div></div>
|
|
40
|
+
<div class="label">away (idle 5m)</div>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="avatar-block">
|
|
43
|
+
<div class="avatar">MS<div class="dot" style="background: var(--presence-offline);"></div></div>
|
|
44
|
+
<div class="label">offline</div>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="avatar-block">
|
|
47
|
+
<div class="avatar">LC</div>
|
|
48
|
+
<div class="label">unknown</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<h2>Live cursors (multiplayer)</h2>
|
|
53
|
+
<div class="canvas-frame">
|
|
54
|
+
<div class="cursor" style="top: 20%; left: 30%; color: oklch(64% 0.20 264);">
|
|
55
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M3 3 L21 12 L13 14 L11 22 Z"/></svg>
|
|
56
|
+
<span class="cursor-label">Kim</span>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="cursor" style="top: 55%; left: 60%; color: oklch(68% 0.18 145);">
|
|
59
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M3 3 L21 12 L13 14 L11 22 Z"/></svg>
|
|
60
|
+
<span class="cursor-label">Marta</span>
|
|
61
|
+
</div>
|
|
62
|
+
<div class="cursor" style="top: 70%; left: 18%; color: oklch(72% 0.15 50);">
|
|
63
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M3 3 L21 12 L13 14 L11 22 Z"/></svg>
|
|
64
|
+
<span class="cursor-label">Jonas</span>
|
|
65
|
+
</div>
|
|
66
|
+
<div style="position: absolute; bottom: 12px; left: 12px; color: var(--fg-2); font-size: var(--type-xs);">3 viewers</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<footer class="legend">
|
|
70
|
+
<p>Cursor color is per-user, not a token — derived from a stable hash of the user ID into an OKLCH lightness/chroma band. Stays consistent across sessions.</p>
|
|
71
|
+
</footer>
|
|
72
|
+
</main>
|
|
73
|
+
</body>
|
|
74
|
+
</html>
|