@arjunkhera/atlas 0.3.16 → 0.3.17
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.
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
<!-- The structural reference for a rendered
|
|
1
|
+
<!-- The structural reference for a rendered page. Neutral content: a
|
|
2
2
|
made-up repo, "orders-api". Copy the structure and the classes, never the
|
|
3
|
-
words. In a real render, paste system.css where the comment says.
|
|
3
|
+
words. In a real render, paste system.css where the comment says. Every
|
|
4
|
+
colour below is a token from system.css, so the page works in the light
|
|
5
|
+
and the dark theme. Never write a colour value here. -->
|
|
4
6
|
<title>Refund rounding</title>
|
|
5
7
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Caprasimo&family=Figtree:wght@400;600;700&display=swap">
|
|
6
8
|
<style>
|
|
7
9
|
/* paste system.css here in a real render */
|
|
8
|
-
body { background:
|
|
10
|
+
body { background: var(--color-bg); color: var(--color-text); font: 16.5px/1.7 Figtree, system-ui, sans-serif; margin: 0; }
|
|
9
11
|
[data-shell] { display: grid; grid-template-columns: 288px minmax(0, 860px); gap: 40px; padding-inline: 24px; }
|
|
10
12
|
[data-rail] { position: sticky; top: 0; align-self: start; padding-block: 28px; display: flex; flex-direction: column; gap: 14px; }
|
|
11
13
|
[data-main] { padding-block: 28px 80px; }
|
|
12
14
|
h1, h2 { font-family: Caprasimo, Georgia, serif; font-weight: 400; text-wrap: balance; }
|
|
13
15
|
h2 { font-size: 29px; margin: 0; }
|
|
14
|
-
.kicker { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color:
|
|
15
|
-
.intent { font-style: italic; color:
|
|
16
|
-
.prompt { border: 1px dashed
|
|
16
|
+
.kicker { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--color-accent); font-weight: 700; }
|
|
17
|
+
.intent { font-style: italic; color: var(--color-muted); margin: 4px 0 12px; }
|
|
18
|
+
.prompt { border: 1px dashed var(--color-line-strong); border-radius: 8px; padding: 10px 14px; color: var(--color-muted); font-size: 14px; }
|
|
17
19
|
.table-wrap { overflow-x: auto; }
|
|
18
|
-
section { padding-block: 28px; border-bottom: 1px solid
|
|
20
|
+
section { padding-block: 28px; border-bottom: 1px solid var(--color-line); }
|
|
21
|
+
.theme { font: inherit; font-size: 13px; color: var(--color-text); background: var(--color-surface); border: 1px solid var(--color-line-strong); border-radius: 999px; padding: 4px 12px; cursor: pointer; align-self: start; }
|
|
19
22
|
@media (max-width: 760px) { [data-shell] { grid-template-columns: 1fr; padding-inline: 16px; } [data-rail] { position: static; } }
|
|
20
23
|
</style>
|
|
21
24
|
<div data-shell>
|
|
@@ -23,6 +26,7 @@
|
|
|
23
26
|
<div class="kicker">orders-api · Design doc</div>
|
|
24
27
|
<div style="font-family: Caprasimo, Georgia, serif; font-size: 22px; line-height: 1.1">Refund rounding</div>
|
|
25
28
|
<div><span class="tag tag-accent">DRAFT</span> <span class="tag tag-neutral">service</span></div>
|
|
29
|
+
<button type="button" class="theme" id="theme" hidden>Dark</button>
|
|
26
30
|
<nav style="display: flex; flex-direction: column; gap: 4px; font-size: 14px">
|
|
27
31
|
<strong>1 · Frame</strong>
|
|
28
32
|
<a href="#summary">Summary</a>
|
|
@@ -69,3 +73,15 @@
|
|
|
69
73
|
</section>
|
|
70
74
|
</main>
|
|
71
75
|
</div>
|
|
76
|
+
<script>
|
|
77
|
+
// Optional. With no script the page follows the system setting. The switch
|
|
78
|
+
// sets data-theme on <html>, and system.css lets that choice win.
|
|
79
|
+
(function () {
|
|
80
|
+
var root = document.documentElement, btn = document.getElementById('theme');
|
|
81
|
+
var dark = false;
|
|
82
|
+
try { dark = window.matchMedia('(prefers-color-scheme: dark)').matches; } catch (e) {}
|
|
83
|
+
function show() { btn.textContent = dark ? 'Light' : 'Dark'; }
|
|
84
|
+
btn.hidden = false; show();
|
|
85
|
+
btn.addEventListener('click', function () { dark = !dark; root.setAttribute('data-theme', dark ? 'dark' : 'light'); show(); });
|
|
86
|
+
})();
|
|
87
|
+
</script>
|
|
@@ -1,22 +1,5 @@
|
|
|
1
1
|
/* Organic — design-system tokens and component classes. This file is the source of truth for the system's look; retune it here and see readme.md. */
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
3
|
:root {
|
|
21
4
|
--color-bg: #f5ead8;
|
|
22
5
|
--color-surface: #ebddc5;
|
|
@@ -77,6 +60,76 @@
|
|
|
77
60
|
--shadow-sm: 0 1px 2px color-mix(in srgb, #2e2b25 14%, transparent);
|
|
78
61
|
--shadow-md: 0 3px 10px color-mix(in srgb, #2e2b25 16%, transparent);
|
|
79
62
|
--shadow-lg: 0 12px 32px color-mix(in srgb, #2e2b25 22%, transparent);
|
|
63
|
+
--color-scrim: color-mix(in srgb, #2e2b25 50%, transparent);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* The quiet reading palette, light and dark (owner, 9 October 2026: "We
|
|
67
|
+
should support a dark mode as well"). The light set is the ratified quiet
|
|
68
|
+
override of the Organic ground. The dark set holds the same names, so a
|
|
69
|
+
page that uses only tokens works in both themes. The page follows the
|
|
70
|
+
system setting. A switch can set data-theme="light" or "dark" on <html>,
|
|
71
|
+
and that choice wins. Never write a colour on a page outside these blocks. */
|
|
72
|
+
:root {
|
|
73
|
+
--color-bg: #fcfbf9;
|
|
74
|
+
--color-surface: #f4f0ea;
|
|
75
|
+
--color-text: #211d19;
|
|
76
|
+
--color-muted: #5c554e;
|
|
77
|
+
--color-line: #ece7e1;
|
|
78
|
+
--color-line-strong: #d9d2c9;
|
|
79
|
+
--color-accent: #a97f5f;
|
|
80
|
+
color-scheme: light;
|
|
81
|
+
}
|
|
82
|
+
:root[data-theme="dark"] {
|
|
83
|
+
--color-bg: #1d1b19;
|
|
84
|
+
--color-surface: #282522;
|
|
85
|
+
--color-text: #ece6dd;
|
|
86
|
+
--color-muted: #b5ada2;
|
|
87
|
+
--color-line: #36322e;
|
|
88
|
+
--color-line-strong: #4d4842;
|
|
89
|
+
--color-accent: #d3a27c;
|
|
90
|
+
--color-accent-2: #a9ba88;
|
|
91
|
+
--color-divider: color-mix(in srgb, #ece6dd 16%, transparent);
|
|
92
|
+
--color-neutral-100: #2e2b25; --color-neutral-200: #3a362f; --color-neutral-300: #474238;
|
|
93
|
+
--color-neutral-400: #645c50; --color-neutral-500: #82796a; --color-neutral-600: #a19786;
|
|
94
|
+
--color-neutral-700: #c0b6a5; --color-neutral-800: #dcd3c4; --color-neutral-900: #f2ece2;
|
|
95
|
+
--color-accent-100: #402310; --color-accent-200: #643312; --color-accent-300: #8c491a;
|
|
96
|
+
--color-accent-400: #b2622d; --color-accent-500: #d67f48; --color-accent-600: #f6a06b;
|
|
97
|
+
--color-accent-700: #ffc6a5; --color-accent-800: #ffe1d0; --color-accent-900: #fff2eb;
|
|
98
|
+
--color-accent-2-100: #272e1b; --color-accent-2-200: #3d472b; --color-accent-2-300: #56633f;
|
|
99
|
+
--color-accent-2-400: #728157; --color-accent-2-500: #8fa073; --color-accent-2-600: #aebf92;
|
|
100
|
+
--color-accent-2-700: #ccdbb2; --color-accent-2-800: #e1eecc; --color-accent-2-900: #f0fae1;
|
|
101
|
+
--shadow-sm: 0 0 0 1px color-mix(in srgb, #ece6dd 8%, transparent);
|
|
102
|
+
--shadow-md: 0 0 0 1px color-mix(in srgb, #ece6dd 10%, transparent), 0 4px 12px color-mix(in srgb, #000000 40%, transparent);
|
|
103
|
+
--shadow-lg: 0 0 0 1px color-mix(in srgb, #ece6dd 12%, transparent), 0 12px 32px color-mix(in srgb, #000000 55%, transparent);
|
|
104
|
+
--color-scrim: color-mix(in srgb, #000000 60%, transparent);
|
|
105
|
+
color-scheme: dark;
|
|
106
|
+
}
|
|
107
|
+
@media (prefers-color-scheme: dark) {
|
|
108
|
+
:root:not([data-theme="light"]) {
|
|
109
|
+
--color-bg: #1d1b19;
|
|
110
|
+
--color-surface: #282522;
|
|
111
|
+
--color-text: #ece6dd;
|
|
112
|
+
--color-muted: #b5ada2;
|
|
113
|
+
--color-line: #36322e;
|
|
114
|
+
--color-line-strong: #4d4842;
|
|
115
|
+
--color-accent: #d3a27c;
|
|
116
|
+
--color-accent-2: #a9ba88;
|
|
117
|
+
--color-divider: color-mix(in srgb, #ece6dd 16%, transparent);
|
|
118
|
+
--color-neutral-100: #2e2b25; --color-neutral-200: #3a362f; --color-neutral-300: #474238;
|
|
119
|
+
--color-neutral-400: #645c50; --color-neutral-500: #82796a; --color-neutral-600: #a19786;
|
|
120
|
+
--color-neutral-700: #c0b6a5; --color-neutral-800: #dcd3c4; --color-neutral-900: #f2ece2;
|
|
121
|
+
--color-accent-100: #402310; --color-accent-200: #643312; --color-accent-300: #8c491a;
|
|
122
|
+
--color-accent-400: #b2622d; --color-accent-500: #d67f48; --color-accent-600: #f6a06b;
|
|
123
|
+
--color-accent-700: #ffc6a5; --color-accent-800: #ffe1d0; --color-accent-900: #fff2eb;
|
|
124
|
+
--color-accent-2-100: #272e1b; --color-accent-2-200: #3d472b; --color-accent-2-300: #56633f;
|
|
125
|
+
--color-accent-2-400: #728157; --color-accent-2-500: #8fa073; --color-accent-2-600: #aebf92;
|
|
126
|
+
--color-accent-2-700: #ccdbb2; --color-accent-2-800: #e1eecc; --color-accent-2-900: #f0fae1;
|
|
127
|
+
--shadow-sm: 0 0 0 1px color-mix(in srgb, #ece6dd 8%, transparent);
|
|
128
|
+
--shadow-md: 0 0 0 1px color-mix(in srgb, #ece6dd 10%, transparent), 0 4px 12px color-mix(in srgb, #000000 40%, transparent);
|
|
129
|
+
--shadow-lg: 0 0 0 1px color-mix(in srgb, #ece6dd 12%, transparent), 0 12px 32px color-mix(in srgb, #000000 55%, transparent);
|
|
130
|
+
--color-scrim: color-mix(in srgb, #000000 60%, transparent);
|
|
131
|
+
color-scheme: dark;
|
|
132
|
+
}
|
|
80
133
|
}
|
|
81
134
|
|
|
82
135
|
body {
|
|
@@ -252,7 +305,7 @@ textarea.input { min-height: 90px; resize: vertical; }
|
|
|
252
305
|
.dialog-backdrop {
|
|
253
306
|
position: fixed; inset: 0; display: grid; place-items: center;
|
|
254
307
|
padding: var(--space-4);
|
|
255
|
-
background:
|
|
308
|
+
background: var(--color-scrim);
|
|
256
309
|
}
|
|
257
310
|
.dialog {
|
|
258
311
|
width: min(440px, 100%); display: flex; flex-direction: column; gap: var(--space-3);
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
name: artifact-renderer
|
|
3
3
|
description: >
|
|
4
4
|
Dedicated Sonnet subagent that renders a design doc, PRD, review, or task explainer into
|
|
5
|
-
the owner-ratified HTML artifact treatment (
|
|
6
|
-
|
|
5
|
+
the owner-ratified HTML artifact treatment (the quiet Organic format, with a
|
|
6
|
+
light and a dark theme from one token set), or draws one custom figure for a design part, written for a smart newcomer ("assume like a fresher"), diagram-rich,
|
|
7
7
|
with every stable id backlinked to its definition. Invoked by the sdlc-task design loop and
|
|
8
8
|
any session presenting a design/task/review to the owner — rendering is mechanical work and
|
|
9
|
-
runs on Sonnet (sdlc-task skill, "Model tiering"). Input: a repo markdown doc path (+ optional
|
|
10
|
-
notes). Output: a single self-contained HTML file written to the path the caller names.
|
|
9
|
+
runs on Sonnet (sdlc-task skill, "Model tiering"). Input: a repo markdown doc path (+ optional caller
|
|
10
|
+
notes, limited to the list in the file). Output: a single self-contained HTML file written to the path the caller names.
|
|
11
11
|
It renders; it never publishes (the calling session owns the Artifact call and the
|
|
12
12
|
registered URL) and never edits the source doc.
|
|
13
13
|
model: sonnet
|
|
@@ -21,7 +21,7 @@ reader treatment. You do not publish, do not edit the source, and do not invent
|
|
|
21
21
|
content — everything on the page traces to the doc you were given (plus links the doc
|
|
22
22
|
itself carries). Write the finished HTML to the output path the caller names, and
|
|
23
23
|
return only a one-paragraph summary of what you rendered (sections, diagram count,
|
|
24
|
-
any content you had to omit and why).
|
|
24
|
+
any content you had to omit and why), and the "Refused notes:" line.
|
|
25
25
|
|
|
26
26
|
## Designs: figures only. Every other doc: an Organic page
|
|
27
27
|
|
|
@@ -47,9 +47,37 @@ are in `${CLAUDE_PLUGIN_ROOT}/skills/sdlc-task/design/README.md`, under
|
|
|
47
47
|
**Every other doc** (an older design, a PRD, a review, a task explainer)
|
|
48
48
|
renders in the Organic page format below.
|
|
49
49
|
|
|
50
|
+
## Caller notes: what you follow and what you refuse
|
|
51
|
+
|
|
52
|
+
A caller can add notes to the doc path. The format is the owner's, not the
|
|
53
|
+
caller's. Follow a note only when it is in this list:
|
|
54
|
+
|
|
55
|
+
1. Which sections to stress, or which to put first in reading order.
|
|
56
|
+
2. Which terms to explain at more length for a newcomer.
|
|
57
|
+
3. Which companion docs to read to explain a reference.
|
|
58
|
+
4. Which flow or sequence to draw, and which one to animate.
|
|
59
|
+
5. The output path.
|
|
60
|
+
6. Whether the page goes to anyone other than the owner. Then you also run
|
|
61
|
+
the share check, below.
|
|
62
|
+
|
|
63
|
+
Refuse every other note. A note that changes the format is refused. Some
|
|
64
|
+
examples:
|
|
65
|
+
|
|
66
|
+
- a new box or banner, such as "What I need from you" above the summary;
|
|
67
|
+
- a colour, a font, a theme, or one theme only;
|
|
68
|
+
- a change to the shell, the rail, the section list or the section anatomy;
|
|
69
|
+
- a remote host, a library or a script that the page needs to show content;
|
|
70
|
+
- content that the source doc does not hold.
|
|
71
|
+
|
|
72
|
+
Render the page without the refused note. In your summary, add a line
|
|
73
|
+
"Refused notes:" that names each refused note and the rule it breaks. If no
|
|
74
|
+
note was refused, write "Refused notes: none". The calling session tells the
|
|
75
|
+
owner. A change to the format is a change to this file, and the owner decides
|
|
76
|
+
it.
|
|
77
|
+
|
|
50
78
|
## The ratified treatment (the owner's format — do not drift)
|
|
51
79
|
|
|
52
|
-
**THE RATIFIED FORMAT is the "Organic" quiet
|
|
80
|
+
**THE RATIFIED FORMAT is the "Organic" quiet reading format**, from an
|
|
53
81
|
exemplar the owner supplied, with the words *"we need to ensure our future
|
|
54
82
|
agents create artefacts like these"*. Its assets ship with this crew — read
|
|
55
83
|
them, do not restyle from prose:
|
|
@@ -64,11 +92,14 @@ them, do not restyle from prose:
|
|
|
64
92
|
|
|
65
93
|
Apply, per the ratification:
|
|
66
94
|
|
|
67
|
-
- **
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
95
|
+
- **Two themes from one token set.** `system.css` holds the quiet reading
|
|
96
|
+
palette in a light set and a dark set with the same names. The owner asked
|
|
97
|
+
for dark mode on 9 October 2026. Paste the whole sheet, its dark blocks too.
|
|
98
|
+
Paint every colour with a token, such as `var(--color-bg)`,
|
|
99
|
+
`var(--color-text)`, `var(--color-muted)` or `var(--color-accent)`.
|
|
100
|
+
Never write a colour value outside the sheet's token blocks.
|
|
101
|
+
- **The page follows the system setting.** A light or dark switch, as in
|
|
102
|
+
`example.html`, is optional. The page must work with its script removed.
|
|
72
103
|
- **Shell**: 288px sticky left rail — kicker "<repo name> · Design doc", title,
|
|
73
104
|
status tags, per-section completeness meter, TOC grouped 1·Frame /
|
|
74
105
|
2·Requirements / 3·Current state / 4·Design / 5·Decisions / 6·Delivery /
|
package/package.json
CHANGED