@taloswork/ose-shared 0.1.7 → 0.1.9

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 (166) hide show
  1. package/package.json +3 -3
  2. package/skills/cozy-static-svg/SKILL.md +76 -0
  3. package/skills/cozy-static-svg/references/approved-preview.png +0 -0
  4. package/skills/cozy-static-svg/references/cross-platform.md +73 -0
  5. package/skills/cozy-static-svg/references/moon_keeps_watch.svg +229 -0
  6. package/skills/cozy-static-svg/references/style-anchor.md +271 -0
  7. package/skills/cozy-static-svg/scripts/artkit.py +321 -0
  8. package/skills/cozy-static-svg/scripts/to_png.py +333 -0
  9. package/skills/diagram-design/SKILL.md +568 -0
  10. package/skills/diagram-design/assets/example-architecture-dark.html +182 -0
  11. package/skills/diagram-design/assets/example-architecture-full.html +194 -0
  12. package/skills/diagram-design/assets/example-architecture.html +183 -0
  13. package/skills/diagram-design/assets/example-bar-dark.html +129 -0
  14. package/skills/diagram-design/assets/example-bar-full.html +105 -0
  15. package/skills/diagram-design/assets/example-bar.html +129 -0
  16. package/skills/diagram-design/assets/example-data-flow-dark.html +143 -0
  17. package/skills/diagram-design/assets/example-data-flow-full.html +185 -0
  18. package/skills/diagram-design/assets/example-data-flow.html +143 -0
  19. package/skills/diagram-design/assets/example-datalake-dark.html +243 -0
  20. package/skills/diagram-design/assets/example-datalake-full.html +248 -0
  21. package/skills/diagram-design/assets/example-datalake.html +269 -0
  22. package/skills/diagram-design/assets/example-dp-integration-dark.html +80 -0
  23. package/skills/diagram-design/assets/example-dp-integration-full.html +90 -0
  24. package/skills/diagram-design/assets/example-dp-integration.html +80 -0
  25. package/skills/diagram-design/assets/example-dp-security-matrix-dark.html +31 -0
  26. package/skills/diagram-design/assets/example-dp-security-matrix-full.html +32 -0
  27. package/skills/diagram-design/assets/example-dp-security-matrix.html +88 -0
  28. package/skills/diagram-design/assets/example-er-dark.html +202 -0
  29. package/skills/diagram-design/assets/example-er-full.html +205 -0
  30. package/skills/diagram-design/assets/example-er.html +202 -0
  31. package/skills/diagram-design/assets/example-flowchart-dark.html +156 -0
  32. package/skills/diagram-design/assets/example-flowchart-full.html +159 -0
  33. package/skills/diagram-design/assets/example-flowchart.html +156 -0
  34. package/skills/diagram-design/assets/example-gantt-dark.html +137 -0
  35. package/skills/diagram-design/assets/example-gantt-full.html +127 -0
  36. package/skills/diagram-design/assets/example-gantt.html +137 -0
  37. package/skills/diagram-design/assets/example-high-level-dark.html +251 -0
  38. package/skills/diagram-design/assets/example-high-level-full.html +247 -0
  39. package/skills/diagram-design/assets/example-high-level-vertical-dark.html +274 -0
  40. package/skills/diagram-design/assets/example-high-level-vertical-full.html +252 -0
  41. package/skills/diagram-design/assets/example-high-level-vertical.html +325 -0
  42. package/skills/diagram-design/assets/example-high-level.html +301 -0
  43. package/skills/diagram-design/assets/example-import-drawio.html +185 -0
  44. package/skills/diagram-design/assets/example-import-mermaid.html +70 -0
  45. package/skills/diagram-design/assets/example-it-state-dark.html +90 -0
  46. package/skills/diagram-design/assets/example-it-state-full.html +69 -0
  47. package/skills/diagram-design/assets/example-it-state.html +128 -0
  48. package/skills/diagram-design/assets/example-layers-dark.html +123 -0
  49. package/skills/diagram-design/assets/example-layers-full.html +126 -0
  50. package/skills/diagram-design/assets/example-layers.html +123 -0
  51. package/skills/diagram-design/assets/example-line-dark.html +111 -0
  52. package/skills/diagram-design/assets/example-line-full.html +105 -0
  53. package/skills/diagram-design/assets/example-line.html +111 -0
  54. package/skills/diagram-design/assets/example-loop-dark.html +100 -0
  55. package/skills/diagram-design/assets/example-loop-full.html +137 -0
  56. package/skills/diagram-design/assets/example-loop-terminal.html +347 -0
  57. package/skills/diagram-design/assets/example-loop.html +100 -0
  58. package/skills/diagram-design/assets/example-medallion-dark.html +159 -0
  59. package/skills/diagram-design/assets/example-medallion-full.html +201 -0
  60. package/skills/diagram-design/assets/example-medallion.html +159 -0
  61. package/skills/diagram-design/assets/example-nested-dark.html +132 -0
  62. package/skills/diagram-design/assets/example-nested-full.html +135 -0
  63. package/skills/diagram-design/assets/example-nested.html +136 -0
  64. package/skills/diagram-design/assets/example-org-chart-dark.html +45 -0
  65. package/skills/diagram-design/assets/example-org-chart-full.html +45 -0
  66. package/skills/diagram-design/assets/example-org-chart.html +45 -0
  67. package/skills/diagram-design/assets/example-paved-road-animated.html +546 -0
  68. package/skills/diagram-design/assets/example-policy-trace-animated.html +490 -0
  69. package/skills/diagram-design/assets/example-process-dark.html +64 -0
  70. package/skills/diagram-design/assets/example-process-full.html +74 -0
  71. package/skills/diagram-design/assets/example-process.html +64 -0
  72. package/skills/diagram-design/assets/example-pyramid-dark.html +119 -0
  73. package/skills/diagram-design/assets/example-pyramid-full.html +122 -0
  74. package/skills/diagram-design/assets/example-pyramid.html +119 -0
  75. package/skills/diagram-design/assets/example-quadrant-consultant.html +166 -0
  76. package/skills/diagram-design/assets/example-quadrant-dark.html +135 -0
  77. package/skills/diagram-design/assets/example-quadrant-full.html +138 -0
  78. package/skills/diagram-design/assets/example-quadrant.html +135 -0
  79. package/skills/diagram-design/assets/example-queue-animated.html +577 -0
  80. package/skills/diagram-design/assets/example-radar-dark.html +139 -0
  81. package/skills/diagram-design/assets/example-radar-full.html +135 -0
  82. package/skills/diagram-design/assets/example-radar.html +139 -0
  83. package/skills/diagram-design/assets/example-scatter-dark.html +141 -0
  84. package/skills/diagram-design/assets/example-scatter-full.html +116 -0
  85. package/skills/diagram-design/assets/example-scatter.html +141 -0
  86. package/skills/diagram-design/assets/example-sequence-dark.html +222 -0
  87. package/skills/diagram-design/assets/example-sequence-full.html +388 -0
  88. package/skills/diagram-design/assets/example-sequence-oauth-dark.html +188 -0
  89. package/skills/diagram-design/assets/example-sequence-oauth-full.html +350 -0
  90. package/skills/diagram-design/assets/example-sequence-oauth.html +227 -0
  91. package/skills/diagram-design/assets/example-sequence.html +222 -0
  92. package/skills/diagram-design/assets/example-state-dark.html +147 -0
  93. package/skills/diagram-design/assets/example-state-full.html +150 -0
  94. package/skills/diagram-design/assets/example-state.html +147 -0
  95. package/skills/diagram-design/assets/example-swimlane-dark.html +172 -0
  96. package/skills/diagram-design/assets/example-swimlane-full.html +175 -0
  97. package/skills/diagram-design/assets/example-swimlane.html +172 -0
  98. package/skills/diagram-design/assets/example-timeline-dark.html +135 -0
  99. package/skills/diagram-design/assets/example-timeline-full.html +138 -0
  100. package/skills/diagram-design/assets/example-timeline.html +135 -0
  101. package/skills/diagram-design/assets/example-tree-dark.html +173 -0
  102. package/skills/diagram-design/assets/example-tree-full.html +176 -0
  103. package/skills/diagram-design/assets/example-tree.html +173 -0
  104. package/skills/diagram-design/assets/example-venn-dark.html +132 -0
  105. package/skills/diagram-design/assets/example-venn-full.html +135 -0
  106. package/skills/diagram-design/assets/example-venn.html +110 -0
  107. package/skills/diagram-design/assets/icons.html +230 -0
  108. package/skills/diagram-design/assets/index.html +369 -0
  109. package/skills/diagram-design/assets/template-dark.html +85 -0
  110. package/skills/diagram-design/assets/template-full.html +413 -0
  111. package/skills/diagram-design/assets/template-motion.html +434 -0
  112. package/skills/diagram-design/assets/template-terminal.html +173 -0
  113. package/skills/diagram-design/assets/template.html +86 -0
  114. package/skills/diagram-design/references/animation.md +141 -0
  115. package/skills/diagram-design/references/export.md +136 -0
  116. package/skills/diagram-design/references/import-drawio.md +171 -0
  117. package/skills/diagram-design/references/import-mermaid.md +126 -0
  118. package/skills/diagram-design/references/onboarding.md +297 -0
  119. package/skills/diagram-design/references/output-spec.md +181 -0
  120. package/skills/diagram-design/references/primitive-annotation.md +36 -0
  121. package/skills/diagram-design/references/primitive-icons.md +827 -0
  122. package/skills/diagram-design/references/primitive-sketchy.md +43 -0
  123. package/skills/diagram-design/references/primitive-terminal.md +76 -0
  124. package/skills/diagram-design/references/semantic-patterns.md +122 -0
  125. package/skills/diagram-design/references/style-guide.md +139 -0
  126. package/skills/diagram-design/references/type-architecture.md +78 -0
  127. package/skills/diagram-design/references/type-bar.md +48 -0
  128. package/skills/diagram-design/references/type-data-flow.md +374 -0
  129. package/skills/diagram-design/references/type-dp-integration.md +410 -0
  130. package/skills/diagram-design/references/type-dp-security-matrix.md +379 -0
  131. package/skills/diagram-design/references/type-er.md +23 -0
  132. package/skills/diagram-design/references/type-flowchart.md +23 -0
  133. package/skills/diagram-design/references/type-gantt.md +45 -0
  134. package/skills/diagram-design/references/type-high-level.md +458 -0
  135. package/skills/diagram-design/references/type-it-state.md +470 -0
  136. package/skills/diagram-design/references/type-layers.md +26 -0
  137. package/skills/diagram-design/references/type-line.md +44 -0
  138. package/skills/diagram-design/references/type-loop.md +223 -0
  139. package/skills/diagram-design/references/type-medallion.md +356 -0
  140. package/skills/diagram-design/references/type-nested.md +22 -0
  141. package/skills/diagram-design/references/type-org-chart.md +44 -0
  142. package/skills/diagram-design/references/type-process.md +495 -0
  143. package/skills/diagram-design/references/type-pyramid.md +33 -0
  144. package/skills/diagram-design/references/type-quadrant.md +81 -0
  145. package/skills/diagram-design/references/type-radar.md +80 -0
  146. package/skills/diagram-design/references/type-scatter.md +39 -0
  147. package/skills/diagram-design/references/type-sequence.md +130 -0
  148. package/skills/diagram-design/references/type-state.md +21 -0
  149. package/skills/diagram-design/references/type-swimlane.md +20 -0
  150. package/skills/diagram-design/references/type-timeline.md +20 -0
  151. package/skills/diagram-design/references/type-tree.md +24 -0
  152. package/skills/diagram-design/references/type-venn.md +26 -0
  153. package/skills/diagram-design/scripts/drawio_extract.py +856 -0
  154. package/skills/diagram-design/scripts/mermaid_extract.py +1285 -0
  155. package/skills/diagram-design/scripts/self_check.py +389 -0
  156. package/skills/document/bin/doc-gen.cjs +3 -6
  157. package/skills/document/bin/html2pptx.cjs +17 -9
  158. package/skills/document/bin/pptx-clone.cjs +41 -30
  159. package/skills/document/bin/pptx-embed-fonts.cjs +6 -2
  160. package/skills/document/bin/pptx-slide.cjs +46 -50
  161. package/skills/document/content-pipeline.md +54 -5
  162. package/skills/document/layouts/README.md +8 -0
  163. package/skills/document/layouts/blocks-2x2.tpl +19 -9
  164. package/skills/document/layouts/cards-3.tpl +1 -1
  165. package/skills/document/layouts/org-tree.tpl +1 -1
  166. package/skills/document/layouts/steps-vertical.tpl +1 -1
@@ -0,0 +1,369 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Diagram Design · Gallery</title>
7
+ <link
8
+ href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Geist:wght@400;500;600&family=Geist+Mono:wght@400;500;600&display=swap"
9
+ rel="stylesheet"
10
+ />
11
+ <style>
12
+ *,
13
+ *::before,
14
+ *::after {
15
+ box-sizing: border-box;
16
+ margin: 0;
17
+ padding: 0;
18
+ }
19
+ :root {
20
+ --paper: #f5f4ed;
21
+ --paper-2: #efeee5;
22
+ --ink: #0b0d0b;
23
+ --muted: #52534e;
24
+ --soft: #65655c;
25
+ --rule: rgba(11, 13, 11, 0.12);
26
+ --rule-strong: rgba(11, 13, 11, 0.25);
27
+ --accent: #f7591f;
28
+ --sans: "Geist", system-ui, sans-serif;
29
+ --serif: "Instrument Serif", serif;
30
+ --mono: "Geist Mono", ui-monospace, monospace;
31
+ }
32
+ html,
33
+ body {
34
+ height: 100%;
35
+ }
36
+ body {
37
+ font-family: var(--sans);
38
+ background: var(--paper);
39
+ color: var(--ink);
40
+ display: flex;
41
+ flex-direction: column;
42
+ overflow: hidden;
43
+ }
44
+
45
+ .topbar {
46
+ padding: 1rem 1.25rem 0.625rem;
47
+ border-bottom: 1px solid var(--rule);
48
+ flex: 0 0 auto;
49
+ }
50
+ .title-row {
51
+ display: flex;
52
+ align-items: baseline;
53
+ justify-content: space-between;
54
+ margin-bottom: 0.75rem;
55
+ gap: 1rem;
56
+ }
57
+ .title-row h1 {
58
+ font-family: var(--serif);
59
+ font-size: 1.5rem;
60
+ font-weight: 400;
61
+ letter-spacing: -0.01em;
62
+ line-height: 1;
63
+ }
64
+ .title-row .meta {
65
+ font-family: var(--mono);
66
+ font-size: 0.66rem;
67
+ letter-spacing: 0.18em;
68
+ text-transform: uppercase;
69
+ color: var(--muted);
70
+ }
71
+ .title-row .open-raw {
72
+ font-family: var(--mono);
73
+ font-size: 0.66rem;
74
+ letter-spacing: 0.06em;
75
+ color: var(--muted);
76
+ text-decoration: none;
77
+ padding: 0.3rem 0.625rem;
78
+ border: 1px solid var(--rule);
79
+ border-radius: 4px;
80
+ transition:
81
+ color 0.15s,
82
+ border-color 0.15s;
83
+ }
84
+ .open-raw:hover {
85
+ color: var(--accent);
86
+ border-color: var(--accent);
87
+ }
88
+
89
+ .tabs {
90
+ display: flex;
91
+ flex-wrap: wrap;
92
+ gap: 0.375rem;
93
+ margin-bottom: 0.5rem;
94
+ }
95
+ .tabs.variants {
96
+ margin-bottom: 0;
97
+ padding-top: 0.5rem;
98
+ border-top: 1px solid var(--rule);
99
+ }
100
+ .tab {
101
+ font-family: var(--sans);
102
+ font-size: 0.8125rem;
103
+ font-weight: 500;
104
+ padding: 0.375rem 0.75rem;
105
+ background: transparent;
106
+ color: var(--muted);
107
+ border: 1px solid var(--rule);
108
+ border-radius: 4px;
109
+ cursor: pointer;
110
+ transition: all 0.12s;
111
+ letter-spacing: -0.005em;
112
+ }
113
+ .tab:hover {
114
+ color: var(--ink);
115
+ border-color: var(--rule-strong);
116
+ }
117
+ .tab:disabled {
118
+ opacity: 0.35;
119
+ cursor: not-allowed;
120
+ }
121
+ .tab.active {
122
+ background: var(--ink);
123
+ color: var(--paper);
124
+ border-color: var(--ink);
125
+ }
126
+ .tab .eyebrow {
127
+ display: inline-block;
128
+ margin-right: 0.25rem;
129
+ font-family: var(--mono);
130
+ font-size: 0.56rem;
131
+ letter-spacing: 0.12em;
132
+ text-transform: uppercase;
133
+ color: inherit;
134
+ opacity: 0.5;
135
+ }
136
+ .tab.new::after {
137
+ content: "NEW";
138
+ display: inline-block;
139
+ margin-left: 0.35rem;
140
+ font-family: var(--mono);
141
+ font-size: 0.54rem;
142
+ letter-spacing: 0.12em;
143
+ color: var(--accent);
144
+ vertical-align: 1px;
145
+ }
146
+ .tab.active.new::after {
147
+ color: var(--paper);
148
+ }
149
+
150
+ main {
151
+ flex: 1 1 auto;
152
+ position: relative;
153
+ background: var(--paper-2);
154
+ overflow: hidden;
155
+ }
156
+ iframe {
157
+ position: absolute;
158
+ inset: 0;
159
+ width: 100%;
160
+ height: 100%;
161
+ border: 0;
162
+ background: var(--paper);
163
+ display: block;
164
+ }
165
+ </style>
166
+ </head>
167
+ <body>
168
+ <header class="topbar">
169
+ <div class="title-row">
170
+ <h1>
171
+ Diagram Design
172
+ <span
173
+ class="meta"
174
+ style="
175
+ font-family: var(--mono);
176
+ font-size: 0.66rem;
177
+ margin-left: 0.5rem;
178
+ "
179
+ >· gallery</span
180
+ >
181
+ </h1>
182
+ <div style="display: flex; gap: 0.5rem">
183
+ <a class="open-raw" href="icons.html" target="_blank" rel="noopener"
184
+ >icon library ↗</a
185
+ >
186
+ <a
187
+ class="open-raw"
188
+ id="open-raw"
189
+ href="#"
190
+ target="_blank"
191
+ rel="noopener"
192
+ >open in new tab ↗</a
193
+ >
194
+ </div>
195
+ </div>
196
+
197
+ <div class="tabs" id="type-tabs" role="tablist" aria-label="Diagram type">
198
+ <button class="tab active" data-type="architecture">
199
+ <span class="eyebrow">01</span>Architecture
200
+ </button>
201
+ <button class="tab" data-type="flowchart">
202
+ <span class="eyebrow">02</span>Flowchart
203
+ </button>
204
+ <button class="tab" data-type="sequence">
205
+ <span class="eyebrow">03</span>Sequence
206
+ </button>
207
+ <button class="tab" data-type="state">
208
+ <span class="eyebrow">04</span>State
209
+ </button>
210
+ <button class="tab" data-type="er">
211
+ <span class="eyebrow">05</span>ER
212
+ </button>
213
+ <button class="tab" data-type="timeline">
214
+ <span class="eyebrow">06</span>Timeline
215
+ </button>
216
+ <button class="tab" data-type="swimlane">
217
+ <span class="eyebrow">07</span>Swimlane
218
+ </button>
219
+ <button class="tab" data-type="quadrant">
220
+ <span class="eyebrow">08</span>Quadrant
221
+ </button>
222
+ <button class="tab new" data-type="nested">
223
+ <span class="eyebrow">09</span>Nested
224
+ </button>
225
+ <button class="tab new" data-type="tree">
226
+ <span class="eyebrow">10</span>Tree
227
+ </button>
228
+ <button class="tab new" data-type="org-chart">
229
+ <span class="eyebrow">11</span>Org chart
230
+ </button>
231
+ <button class="tab new" data-type="layers">
232
+ <span class="eyebrow">12</span>Layers
233
+ </button>
234
+ <button class="tab new" data-type="venn">
235
+ <span class="eyebrow">13</span>Venn
236
+ </button>
237
+ <button class="tab new" data-type="pyramid">
238
+ <span class="eyebrow">14</span>Pyramid
239
+ </button>
240
+ <button class="tab new" data-type="radar">
241
+ <span class="eyebrow">15</span>Radar
242
+ </button>
243
+ <button class="tab new" data-type="loop">
244
+ <span class="eyebrow">16</span>Loop
245
+ </button>
246
+ <button class="tab new" data-type="datalake">
247
+ <span class="eyebrow">17</span>Data lake
248
+ </button>
249
+ <button class="tab new" data-type="bar">
250
+ <span class="eyebrow">18</span>Bar
251
+ </button>
252
+ <button class="tab new" data-type="line">
253
+ <span class="eyebrow">19</span>Line
254
+ </button>
255
+ <button class="tab new" data-type="gantt">
256
+ <span class="eyebrow">20</span>Gantt
257
+ </button>
258
+ <button class="tab new" data-type="scatter">
259
+ <span class="eyebrow">21</span>Scatter
260
+ </button>
261
+ <button class="tab new" data-type="medallion">
262
+ <span class="eyebrow">22</span>Medallion
263
+ </button>
264
+ <button class="tab new" data-type="high-level">
265
+ <span class="eyebrow">23</span>High-Level
266
+ </button>
267
+ <button class="tab new" data-type="process">
268
+ <span class="eyebrow">24</span>Process
269
+ </button>
270
+ <button class="tab new" data-type="data-flow">
271
+ <span class="eyebrow">26</span>Data flow
272
+ </button>
273
+ <button class="tab new" data-type="dp-integration">
274
+ <span class="eyebrow">27</span>DP integration
275
+ </button>
276
+ <button class="tab new" data-type="high-level-vertical">
277
+ <span class="eyebrow">28</span>High-Level / Parametric
278
+ </button>
279
+ <button class="tab new" data-type="dp-security-matrix">
280
+ <span class="eyebrow">32</span>DP security matrix
281
+ </button>
282
+ <button class="tab new" data-type="it-state">
283
+ <span class="eyebrow">33</span>IT current-state
284
+ </button>
285
+ <button class="tab new" data-type="sequence-oauth">
286
+ <span class="eyebrow">34</span>Sequence · OAuth
287
+ </button>
288
+ <button class="tab new" data-type="import-drawio" data-single>
289
+ <span class="eyebrow">35</span>Import · draw.io
290
+ </button>
291
+ <button class="tab new" data-type="import-mermaid" data-single>
292
+ <span class="eyebrow">36</span>Import · Mermaid
293
+ </button>
294
+ <button class="tab new" data-type="quadrant-consultant" data-single>
295
+ <span class="eyebrow">37</span>Quadrant · consultant
296
+ </button>
297
+ <button class="tab new" data-type="loop-terminal" data-single>
298
+ <span class="eyebrow">38</span>Loop · terminal
299
+ </button>
300
+ <button class="tab new" data-type="policy-trace-animated" data-single>
301
+ <span class="eyebrow">39</span>Policy trace · animated
302
+ </button>
303
+ <button class="tab new" data-type="queue-animated" data-single>
304
+ <span class="eyebrow">40</span>Fan-in queue · animated
305
+ </button>
306
+ <button class="tab new" data-type="paved-road-animated" data-single>
307
+ <span class="eyebrow">41</span>Secure paved road · animated
308
+ </button>
309
+ </div>
310
+
311
+ <div
312
+ class="tabs variants"
313
+ id="variant-tabs"
314
+ role="tablist"
315
+ aria-label="Variant"
316
+ >
317
+ <button class="tab active" data-variant="">Minimal light</button>
318
+ <button class="tab" data-variant="-dark">Minimal dark</button>
319
+ <button class="tab" data-variant="-full">Full editorial</button>
320
+ </div>
321
+ </header>
322
+
323
+ <main>
324
+ <iframe
325
+ id="preview"
326
+ src="example-architecture.html"
327
+ title="Preview"
328
+ ></iframe>
329
+ </main>
330
+
331
+ <script>
332
+ const state = { type: "architecture", variant: "" };
333
+ const iframe = document.getElementById("preview");
334
+ const openRaw = document.getElementById("open-raw");
335
+
336
+ function update() {
337
+ const activeType = document.querySelector("#type-tabs .tab.active");
338
+ const single = activeType && activeType.hasAttribute("data-single");
339
+ const variantTabs = document.querySelectorAll("#variant-tabs .tab");
340
+ if (single) state.variant = "";
341
+ variantTabs.forEach((tab) => {
342
+ tab.disabled = single && tab.dataset.variant !== "";
343
+ tab.classList.toggle("active", tab.dataset.variant === state.variant);
344
+ });
345
+ const src = `example-${state.type}${state.variant}.html`;
346
+ iframe.src = src;
347
+ openRaw.href = src;
348
+ }
349
+
350
+ function bindTabs(containerId, key) {
351
+ const container = document.getElementById(containerId);
352
+ container.addEventListener("click", (e) => {
353
+ const btn = e.target.closest(".tab");
354
+ if (!btn) return;
355
+ container
356
+ .querySelectorAll(".tab")
357
+ .forEach((t) => t.classList.remove("active"));
358
+ btn.classList.add("active");
359
+ state[key] = btn.dataset[key];
360
+ update();
361
+ });
362
+ }
363
+
364
+ bindTabs("type-tabs", "type");
365
+ bindTabs("variant-tabs", "variant");
366
+ update();
367
+ </script>
368
+ </body>
369
+ </html>
@@ -0,0 +1,85 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Diagram</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Geist:wght@400;500;600&family=Geist+Mono:wght@400;500;600&display=swap" rel="stylesheet">
8
+ <style>
9
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
+ :root {
11
+ --color-paper: #2d3142; /* deep warm charcoal */
12
+ --color-ink: #f5f5f5; /* warm off-white */
13
+ --color-muted: #bfc0c0;
14
+ --color-accent: #f08a59;
15
+ --font-sans: 'Geist', system-ui, sans-serif;
16
+ --font-serif: 'Instrument Serif', serif;
17
+ --font-mono: 'Geist Mono', ui-monospace, monospace;
18
+ }
19
+
20
+ body {
21
+ font-family: var(--font-sans);
22
+ background: var(--color-paper);
23
+ color: var(--color-ink);
24
+ min-height: 100vh;
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ padding: 3rem 2rem;
29
+ }
30
+
31
+ .frame { max-width: 1200px; width: 100%; }
32
+
33
+ .eyebrow {
34
+ font-family: var(--font-mono);
35
+ font-size: 0.66rem;
36
+ font-weight: 500;
37
+ letter-spacing: 0.18em;
38
+ text-transform: uppercase;
39
+ color: var(--color-muted);
40
+ margin-bottom: 0.5rem;
41
+ }
42
+
43
+ h1 {
44
+ font-family: var(--font-serif);
45
+ font-size: clamp(1.5rem, 2.4vw + 0.75rem, 2rem);
46
+ font-weight: 400;
47
+ letter-spacing: -0.02em;
48
+ line-height: 1.15;
49
+ color: var(--color-ink);
50
+ margin-bottom: 1.5rem;
51
+ }
52
+
53
+ svg { width: 100%; min-width: 900px; display: block; }
54
+ </style>
55
+ </head>
56
+ <body>
57
+ <div class="frame">
58
+ <p class="eyebrow">[Type] · Diagram Design</p>
59
+ <h1>[Diagram title]</h1>
60
+
61
+ <!-- Replace [diagram-slug] with a unique slug for this diagram before export. -->
62
+ <svg viewBox="0 0 1000 600" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="[diagram-slug]-title [diagram-slug]-desc">
63
+ <title id="[diagram-slug]-title">[Diagram title]</title>
64
+ <desc id="[diagram-slug]-desc">[One sentence describing what the diagram shows]</desc>
65
+ <defs>
66
+ <marker id="arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#bfc0c0"/></marker>
67
+ <marker id="arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#f08a59"/></marker>
68
+ <marker id="arrow-link" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#6a95d8"/></marker>
69
+
70
+ <!-- OPTIONAL: dot-pattern background. Uncomment and add <rect fill="url(#dots)"/> after the paper rect to enable. -->
71
+ <!--
72
+ <pattern id="dots" width="22" height="22" patternUnits="userSpaceOnUse">
73
+ <circle cx="1" cy="1" r="0.9" fill="rgba(245,245,245,0.08)"/>
74
+ </pattern>
75
+ -->
76
+ </defs>
77
+
78
+ <rect width="100%" height="100%" fill="#2d3142"/>
79
+
80
+ <!-- Draw arrows first, then nodes. Replace with your content. -->
81
+
82
+ </svg>
83
+ </div>
84
+ </body>
85
+ </html>