@drunkcoding/agents-and-skills 0.0.45 → 0.0.46

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 (107) hide show
  1. package/.claude-plugin/marketplace.json +2 -47
  2. package/README.md +3 -6
  3. package/package.json +4 -1
  4. package/plugins/multica-tool/.claude-plugin/plugin.json +1 -1
  5. package/plugins/multica-tool/scripts/lib.mjs +53 -4
  6. package/plugins/multica-tool/scripts/multica-export.mjs +135 -32
  7. package/plugins/multica-tool/scripts/multica-import.mjs +192 -17
  8. package/plugins/multica-tool/skills/export/SKILL.md +84 -14
  9. package/plugins/multica-tool/skills/import/SKILL.md +22 -7
  10. package/plugins/multica-tool/skills/sync/SKILL.md +1 -1
  11. package/plugins/plugin-validator/.claude-plugin/plugin.json +1 -1
  12. package/plugins/html-effectiveness/.claude-plugin/plugin.json +0 -17
  13. package/plugins/html-effectiveness/README.md +0 -28
  14. package/plugins/html-effectiveness/agents/report-builder.md +0 -66
  15. package/plugins/html-effectiveness/assets/base.css +0 -51
  16. package/plugins/html-effectiveness/assets/base.js +0 -11
  17. package/plugins/html-effectiveness/assets/charts.js +0 -1
  18. package/plugins/html-effectiveness/assets/components.css +0 -10
  19. package/plugins/html-effectiveness/commands/html-report.md +0 -13
  20. package/plugins/html-effectiveness/docs/template-gallery.md +0 -28
  21. package/plugins/html-effectiveness/package.json +0 -6
  22. package/plugins/html-effectiveness/scripts/_tmp.js +0 -37
  23. package/plugins/html-effectiveness/scripts/catalog.js +0 -47
  24. package/plugins/html-effectiveness/scripts/extract.js +0 -104
  25. package/plugins/html-effectiveness/scripts/mustache.js +0 -90
  26. package/plugins/html-effectiveness/scripts/render.js +0 -176
  27. package/plugins/html-effectiveness/skills/html-effectiveness/SKILL.md +0 -94
  28. package/plugins/html-effectiveness/templates/01-exploration-code-approaches.html.tmpl +0 -400
  29. package/plugins/html-effectiveness/templates/02-exploration-visual-designs.html.tmpl +0 -456
  30. package/plugins/html-effectiveness/templates/03-code-review-pr.html.tmpl +0 -581
  31. package/plugins/html-effectiveness/templates/04-code-understanding.html.tmpl +0 -443
  32. package/plugins/html-effectiveness/templates/05-design-system.html.tmpl +0 -578
  33. package/plugins/html-effectiveness/templates/06-component-variants.html.tmpl +0 -557
  34. package/plugins/html-effectiveness/templates/07-prototype-animation.html.tmpl +0 -417
  35. package/plugins/html-effectiveness/templates/08-prototype-interaction.html.tmpl +0 -363
  36. package/plugins/html-effectiveness/templates/09-slide-deck.html.tmpl +0 -535
  37. package/plugins/html-effectiveness/templates/10-svg-illustrations.html.tmpl +0 -444
  38. package/plugins/html-effectiveness/templates/11-status-report.html.tmpl +0 -152
  39. package/plugins/html-effectiveness/templates/12-incident-report.html.tmpl +0 -547
  40. package/plugins/html-effectiveness/templates/13-flowchart-diagram.html.tmpl +0 -361
  41. package/plugins/html-effectiveness/templates/14-research-feature-explainer.html.tmpl +0 -348
  42. package/plugins/html-effectiveness/templates/15-research-concept-explainer.html.tmpl +0 -334
  43. package/plugins/html-effectiveness/templates/16-implementation-plan.html.tmpl +0 -657
  44. package/plugins/html-effectiveness/templates/17-pr-writeup.html.tmpl +0 -553
  45. package/plugins/html-effectiveness/templates/18-editor-triage-board.html.tmpl +0 -541
  46. package/plugins/html-effectiveness/templates/19-editor-feature-flags.html.tmpl +0 -627
  47. package/plugins/html-effectiveness/templates/20-editor-prompt-tuner.html.tmpl +0 -687
  48. package/plugins/html-effectiveness/templates/manifest.json +0 -441
  49. package/plugins/team-share/.claude-plugin/plugin.json +0 -18
  50. package/plugins/team-share/README.md +0 -46
  51. package/plugins/team-share/agents/team-share.md +0 -53
  52. package/plugins/team-share/commands/team-share.md +0 -4
  53. package/plugins/team-share/skills/claude-config/SKILL.md +0 -143
  54. package/plugins/team-share/skills/codegraph-setup/SKILL.md +0 -81
  55. package/plugins/team-share/skills/understand-setup/SKILL.md +0 -115
  56. package/plugins/tech-graph/.claude-plugin/plugin.json +0 -17
  57. package/plugins/tech-graph/README.md +0 -66
  58. package/plugins/tech-graph/agents/tech-graph.md +0 -97
  59. package/plugins/tech-graph/commands/tech-graph.md +0 -13
  60. package/plugins/tech-graph/scripts/check-deps.sh +0 -55
  61. package/plugins/tech-graph/skills/tech-graph/LICENSE +0 -21
  62. package/plugins/tech-graph/skills/tech-graph/README.md +0 -555
  63. package/plugins/tech-graph/skills/tech-graph/README.zh.md +0 -514
  64. package/plugins/tech-graph/skills/tech-graph/SKILL.md +0 -263
  65. package/plugins/tech-graph/skills/tech-graph/agents/openai.yaml +0 -4
  66. package/plugins/tech-graph/skills/tech-graph/assets/samples/sample-style1-flat.png +0 -0
  67. package/plugins/tech-graph/skills/tech-graph/assets/samples/sample-style2-dark.png +0 -0
  68. package/plugins/tech-graph/skills/tech-graph/assets/samples/sample-style3-blueprint.png +0 -0
  69. package/plugins/tech-graph/skills/tech-graph/assets/samples/sample-style4-notion.png +0 -0
  70. package/plugins/tech-graph/skills/tech-graph/assets/samples/sample-style5-glass.png +0 -0
  71. package/plugins/tech-graph/skills/tech-graph/assets/samples/sample-style6-claude.png +0 -0
  72. package/plugins/tech-graph/skills/tech-graph/assets/samples/sample-style7-openai.png +0 -0
  73. package/plugins/tech-graph/skills/tech-graph/fixtures/agent-memory-types-style4.json +0 -181
  74. package/plugins/tech-graph/skills/tech-graph/fixtures/api-flow-style7.json +0 -40
  75. package/plugins/tech-graph/skills/tech-graph/fixtures/mem0-style1.json +0 -297
  76. package/plugins/tech-graph/skills/tech-graph/fixtures/microservices-style3.json +0 -64
  77. package/plugins/tech-graph/skills/tech-graph/fixtures/multi-agent-style5.json +0 -45
  78. package/plugins/tech-graph/skills/tech-graph/fixtures/system-architecture-style6.json +0 -48
  79. package/plugins/tech-graph/skills/tech-graph/fixtures/tool-call-style2.json +0 -182
  80. package/plugins/tech-graph/skills/tech-graph/package.json +0 -42
  81. package/plugins/tech-graph/skills/tech-graph/references/diagram-types.md +0 -171
  82. package/plugins/tech-graph/skills/tech-graph/references/icons.md +0 -406
  83. package/plugins/tech-graph/skills/tech-graph/references/style-1-flat-icon.md +0 -108
  84. package/plugins/tech-graph/skills/tech-graph/references/style-2-dark-terminal.md +0 -107
  85. package/plugins/tech-graph/skills/tech-graph/references/style-3-blueprint.md +0 -113
  86. package/plugins/tech-graph/skills/tech-graph/references/style-4-notion-clean.md +0 -95
  87. package/plugins/tech-graph/skills/tech-graph/references/style-5-glassmorphism.md +0 -125
  88. package/plugins/tech-graph/skills/tech-graph/references/style-6-claude-official.md +0 -209
  89. package/plugins/tech-graph/skills/tech-graph/references/style-7-openai.md +0 -215
  90. package/plugins/tech-graph/skills/tech-graph/references/style-diagram-matrix.md +0 -135
  91. package/plugins/tech-graph/skills/tech-graph/references/svg-layout-best-practices.md +0 -100
  92. package/plugins/tech-graph/skills/tech-graph/references/svg-to-png.md +0 -115
  93. package/plugins/tech-graph/skills/tech-graph/scripts/README.md +0 -269
  94. package/plugins/tech-graph/skills/tech-graph/scripts/generate-diagram.sh +0 -181
  95. package/plugins/tech-graph/skills/tech-graph/scripts/generate-from-template.py +0 -1587
  96. package/plugins/tech-graph/skills/tech-graph/scripts/test-all-styles.sh +0 -143
  97. package/plugins/tech-graph/skills/tech-graph/scripts/validate-svg.sh +0 -306
  98. package/plugins/tech-graph/skills/tech-graph/templates/agent-architecture.svg +0 -28
  99. package/plugins/tech-graph/skills/tech-graph/templates/architecture.svg +0 -23
  100. package/plugins/tech-graph/skills/tech-graph/templates/comparison-matrix.svg +0 -14
  101. package/plugins/tech-graph/skills/tech-graph/templates/data-flow.svg +0 -28
  102. package/plugins/tech-graph/skills/tech-graph/templates/er-diagram.svg +0 -21
  103. package/plugins/tech-graph/skills/tech-graph/templates/flowchart.svg +0 -21
  104. package/plugins/tech-graph/skills/tech-graph/templates/sequence.svg +0 -20
  105. package/plugins/tech-graph/skills/tech-graph/templates/state-machine.svg +0 -20
  106. package/plugins/tech-graph/skills/tech-graph/templates/timeline.svg +0 -19
  107. package/plugins/tech-graph/skills/tech-graph/templates/use-case.svg +0 -21
@@ -1,547 +0,0 @@
1
- <!--
2
- template: 12-incident-report
3
- upstream: 12-incident-report.html
4
- slots:
5
- title: string # replaces first <h1> innerHTML
6
- -->
7
- <nav class="toc">
8
- <div class="toc-title">On this page</div>
9
- <a href="#tldr">TL;DR</a>
10
- <a href="#timeline">Timeline</a>
11
- <a href="#root-cause">Root cause</a>
12
- <a href="#impact">Impact</a>
13
- <a href="#actions">Action items</a>
14
- </nav>
15
-
16
- <div class="page">
17
-
18
- <header>
19
- <div class="inc-id">INC-2025-0412</div>
20
- <h1>{{title}}</h1>
21
- <div class="meta-row">
22
- <span class="pill sev">SEV-2</span>
23
- <span class="pill resolved">Resolved</span>
24
- <span class="pill neutral"><span class="k">Duration</span> <span class="v">47 min</span></span>
25
- <span class="pill neutral"><span class="k">Detected</span> <span class="v">Apr 12 &middot; 14:07</span></span>
26
- <span class="pill neutral"><span class="k">Owner</span> <span class="v">Devon Park</span></span>
27
- </div>
28
- </header>
29
-
30
- <div class="tldr" id="tldr">
31
- <div class="tldr-label">TL;DR</div>
32
- <p>
33
- A config rollout lowered the database connection-pool limit on the
34
- <code>sync-worker</code> tier from 64 to 8, exhausting connections under
35
- normal afternoon load. The sync API returned 502s for roughly 21% of
36
- requests over 47 minutes. We mitigated by reverting the config and
37
- cycling the worker fleet; no data was lost.
38
- </p>
39
- </div>
40
-
41
- <!-- Timeline -->
42
- <section id="timeline">
43
- <h2>Timeline</h2>
44
- <hr class="rule">
45
- <div class="timeline">
46
-
47
- <div class="tl-entry">
48
- <span class="tl-dot"></span>
49
- <span class="tl-time">14:02</span>
50
- <div class="tl-body">
51
- Config change <code class="inline">cfg-9a12</code> promoted to
52
- production via the standard rollout pipeline.
53
- </div>
54
- </div>
55
-
56
- <div class="tl-entry">
57
- <span class="tl-dot impact"></span>
58
- <span class="tl-time">14:06</span>
59
- <div class="tl-body">
60
- <strong>Impact starts.</strong> Sync workers begin queueing on pool
61
- checkout; p95 latency climbs past 4s and the load balancer starts
62
- returning 502s.
63
- </div>
64
- </div>
65
-
66
- <div class="tl-entry">
67
- <span class="tl-dot"></span>
68
- <span class="tl-time">14:07</span>
69
- <div class="tl-body">
70
- Alert fires: <code class="inline">sync_5xx_rate &gt; 2%</code> for 60s.
71
- On-call (Devon) acknowledges.
72
- </div>
73
- </div>
74
-
75
- <div class="tl-entry">
76
- <span class="tl-dot"></span>
77
- <span class="tl-time">14:18</span>
78
- <div class="tl-body">
79
- Initial hypothesis is a bad deploy of the API service; last two
80
- application deploys are rolled back with no effect.
81
- </div>
82
- </div>
83
-
84
- <div class="tl-entry">
85
- <span class="tl-dot"></span>
86
- <span class="tl-time">14:31</span>
87
- <div class="tl-body">
88
- Mira joins and notices pool-wait saturation in the worker dashboard.
89
- Investigation pivots to infra config rather than app code.
90
- </div>
91
- </div>
92
-
93
- <div class="tl-entry">
94
- <span class="tl-dot mitigated"></span>
95
- <span class="tl-time">14:44</span>
96
- <div class="tl-body">
97
- <strong>Mitigated.</strong> <code class="inline">cfg-9a12</code>
98
- reverted; worker fleet cycled. 5xx rate drops below 0.2% within
99
- three minutes.
100
- </div>
101
- </div>
102
-
103
- <div class="tl-entry">
104
- <span class="tl-dot"></span>
105
- <span class="tl-time">14:49</span>
106
- <div class="tl-body">
107
- Monitors green for 5 minutes. Incident declared resolved; status
108
- page updated.
109
- </div>
110
- </div>
111
-
112
- </div>
113
- </section>
114
-
115
- <!-- Root cause -->
116
- <section id="root-cause">
117
- <h2>Root cause</h2>
118
- <hr class="rule">
119
- <p>
120
- PR <code class="inline">#4888</code> made connection-pool limits
121
- configurable per worker tier. The default for the new
122
- <code class="inline">sync-worker</code> key was meant to inherit the
123
- global value (64) but was hard-coded to 8 during a local test and
124
- committed. The config linter only validates type, not magnitude, so the
125
- change passed CI.
126
- </p>
127
- <p>
128
- Because config rollouts and code deploys go through separate pipelines,
129
- the on-call's first instinct &mdash; rolling back the most recent
130
- application deploys &mdash; had no effect and cost roughly 13 minutes of
131
- diagnosis time.
132
- </p>
133
-
134
- <div class="code-panel">
135
- <span class="path">infra/config/workers.yaml</span>
136
- <div class="diff-line ctx"> pool:</div>
137
- <div class="diff-line ctx"> global_max_connections: 64</div>
138
- <div class="diff-line ctx"> tiers:</div>
139
- <div class="diff-line del">- sync-worker: { max_connections: 64 }</div>
140
- <div class="diff-line add">+ sync-worker: { max_connections: 8 } # debug value, do not ship</div>
141
- <div class="diff-line ctx"> webhook-worker: { max_connections: 32 }</div>
142
- </div>
143
- </section>
144
-
145
- <!-- Impact -->
146
- <section id="impact">
147
- <h2>Impact</h2>
148
- <hr class="rule">
149
- <table class="impact">
150
- <tr>
151
- <th>Requests failed (502)</th>
152
- <td>~41,200</td>
153
- </tr>
154
- <tr>
155
- <th>Peak error rate</th>
156
- <td>21.4%</td>
157
- </tr>
158
- <tr>
159
- <th>Users affected</th>
160
- <td>~2,300 workspaces</td>
161
- </tr>
162
- <tr>
163
- <th>Data loss</th>
164
- <td>None &mdash; clients retried</td>
165
- </tr>
166
- <tr>
167
- <th>SLA breach</th>
168
- <td>No (within monthly budget)</td>
169
- </tr>
170
- </table>
171
- </section>
172
-
173
- <!-- Action items -->
174
- <section id="actions">
175
- <h2>Action items</h2>
176
- <hr class="rule">
177
- <div class="actions">
178
-
179
- <div class="ai-row done">
180
- <span class="ai-check"></span>
181
- <span class="ai-avatar" title="Devon Park">DP</span>
182
- <span class="ai-desc">Revert cfg-9a12 and restore pool limit to 64</span>
183
- <span class="ai-due">Apr 12</span>
184
- </div>
185
-
186
- <div class="ai-row">
187
- <span class="ai-check"></span>
188
- <span class="ai-avatar" title="Mira Okafor">MO</span>
189
- <span class="ai-desc">Add config-linter range check for <code class="inline">max_connections</code> (warn &lt; 32)</span>
190
- <span class="ai-due">Apr 18</span>
191
- </div>
192
-
193
- <div class="ai-row">
194
- <span class="ai-check"></span>
195
- <span class="ai-avatar" title="Sam Reyes">SR</span>
196
- <span class="ai-desc">Surface &ldquo;recent config rollouts&rdquo; alongside deploys in the on-call dashboard</span>
197
- <span class="ai-due">Apr 25</span>
198
- </div>
199
-
200
- <div class="ai-row">
201
- <span class="ai-check"></span>
202
- <span class="ai-avatar" title="Priya Anand">PA</span>
203
- <span class="ai-desc">Canary config changes to one worker AZ for 10 min before fleet-wide promote</span>
204
- <span class="ai-due">May 02</span>
205
- </div>
206
-
207
- </div>
208
- </section>
209
-
210
- <footer>
211
- Authored from on-call notes + alert history &middot; reviewed by Devon Park, Mira Okafor
212
- </footer>
213
-
214
- </div>
215
-
216
- <style>
217
- * { box-sizing: border-box; }
218
- .page {
219
- max-width: 820px;
220
- margin: 0 auto;
221
- }
222
- /* ---------- Header ---------- */
223
- header {
224
- margin-bottom: 32px;
225
- }
226
- .inc-id {
227
- font-family: var(--mono);
228
- font-size: 13px;
229
- color: var(--gray-500);
230
- letter-spacing: 0.02em;
231
- margin-bottom: 8px;
232
- }
233
- h1 {
234
- font-family: var(--serif);
235
- font-weight: 500;
236
- font-size: 36px;
237
- letter-spacing: -0.01em;
238
- margin: 0 0 18px;
239
- line-height: 1.2;
240
- }
241
- .meta-row {
242
- display: flex;
243
- flex-wrap: wrap;
244
- align-items: center;
245
- gap: 10px 12px;
246
- }
247
- .pill {
248
- display: inline-flex;
249
- align-items: baseline;
250
- gap: 6px;
251
- font-family: var(--sans);
252
- font-size: 12px;
253
- font-weight: 600;
254
- border-radius: 999px;
255
- padding: 5px 12px;
256
- line-height: 1;
257
- }
258
- .pill .k {
259
- font-weight: 400;
260
- opacity: 0.75;
261
- }
262
- .pill.sev {
263
- background: var(--clay);
264
- color: var(--white);
265
- letter-spacing: 0.03em;
266
- }
267
- .pill.resolved {
268
- background: var(--olive);
269
- color: var(--white);
270
- }
271
- .pill.neutral {
272
- background: var(--gray-100);
273
- color: var(--gray-700);
274
- border: var(--border);
275
- }
276
- .pill.neutral .v {
277
- font-family: var(--mono);
278
- }
279
- /* ---------- TL;DR ---------- */
280
- .tldr {
281
- background: var(--slate);
282
- color: var(--ivory);
283
- border-radius: var(--radius-panel);
284
- padding: 22px 26px;
285
- margin-bottom: 48px;
286
- }
287
- .tldr-label {
288
- font-family: var(--mono);
289
- font-size: 11px;
290
- text-transform: uppercase;
291
- letter-spacing: 0.1em;
292
- color: var(--oat);
293
- margin-bottom: 10px;
294
- }
295
- .tldr p {
296
- margin: 0;
297
- font-size: 15.5px;
298
- line-height: 1.65;
299
- }
300
- .tldr code {
301
- font-family: var(--mono);
302
- font-size: 13.5px;
303
- background: rgba(250, 249, 245, 0.12);
304
- padding: 1px 5px;
305
- border-radius: 4px;
306
- }
307
- /* ---------- Sections ---------- */
308
- section {
309
- margin-bottom: 52px;
310
- scroll-margin-top: 24px;
311
- }
312
- h2 {
313
- font-family: var(--serif);
314
- font-weight: 500;
315
- font-size: 24px;
316
- letter-spacing: -0.01em;
317
- margin: 0 0 6px;
318
- }
319
- hr.rule {
320
- border: none;
321
- border-top: 1px solid var(--gray-300);
322
- margin: 0 0 22px;
323
- }
324
- p { margin: 0 0 14px; }
325
- code.inline {
326
- font-family: var(--mono);
327
- font-size: 13px;
328
- background: var(--gray-100);
329
- padding: 1.5px 5px;
330
- border-radius: 4px;
331
- }
332
- /* ---------- Timeline ---------- */
333
- .timeline {
334
- position: relative;
335
- padding: 4px 0 4px 16px;
336
- }
337
- .timeline::before {
338
- content: "";
339
- position: absolute;
340
- left: 16px;
341
- top: 8px;
342
- bottom: 8px;
343
- width: 2px;
344
- background: var(--gray-300);
345
- }
346
- .tl-entry {
347
- position: relative;
348
- padding: 0 0 22px 28px;
349
- }
350
- .tl-entry:last-child {
351
- padding-bottom: 0;
352
- }
353
- .tl-dot {
354
- position: absolute;
355
- left: -5px;
356
- top: 6px;
357
- width: 12px;
358
- height: 12px;
359
- border-radius: 50%;
360
- background: var(--gray-500);
361
- border: 2px solid var(--ivory);
362
- box-sizing: content-box;
363
- }
364
- .tl-dot.impact { background: var(--clay); }
365
- .tl-dot.mitigated { background: var(--olive); }
366
- .tl-time {
367
- display: inline-block;
368
- font-family: var(--mono);
369
- font-size: 12px;
370
- color: var(--gray-700);
371
- background: var(--gray-100);
372
- border: 1px solid var(--gray-300);
373
- border-radius: 6px;
374
- padding: 2px 8px;
375
- margin-bottom: 6px;
376
- }
377
- .tl-body {
378
- font-size: 14px;
379
- color: var(--gray-700);
380
- }
381
- .tl-body strong {
382
- color: var(--slate);
383
- font-weight: 600;
384
- }
385
- /* ---------- Code diff ---------- */
386
- .code-panel {
387
- background: var(--slate);
388
- color: var(--gray-100);
389
- border-radius: var(--radius-panel);
390
- padding: 18px 20px;
391
- font-family: var(--mono);
392
- font-size: 13px;
393
- line-height: 1.7;
394
- overflow-x: auto;
395
- margin: 8px 0 4px;
396
- }
397
- .code-panel .path {
398
- color: var(--gray-500);
399
- font-size: 12px;
400
- margin-bottom: 10px;
401
- display: block;
402
- }
403
- .diff-line { white-space: pre; }
404
- .diff-line.ctx { color: var(--gray-300); }
405
- .diff-line.del { color: #E0897A; }
406
- .diff-line.add { color: #A3B88A; }
407
- /* ---------- Impact table ---------- */
408
- table.impact {
409
- width: 100%;
410
- max-width: 460px;
411
- border-collapse: separate;
412
- border-spacing: 0;
413
- background: var(--white);
414
- border: var(--border);
415
- border-radius: var(--radius-panel);
416
- overflow: hidden;
417
- }
418
- table.impact th,
419
- table.impact td {
420
- text-align: left;
421
- padding: 12px 18px;
422
- font-size: 14px;
423
- border-bottom: 1px solid var(--gray-100);
424
- }
425
- table.impact tr:last-child th,
426
- table.impact tr:last-child td {
427
- border-bottom: none;
428
- }
429
- table.impact th {
430
- font-weight: 400;
431
- color: var(--gray-500);
432
- width: 55%;
433
- }
434
- table.impact td {
435
- font-family: var(--mono);
436
- color: var(--slate);
437
- }
438
- /* ---------- Action items ---------- */
439
- .actions {
440
- background: var(--white);
441
- border: var(--border);
442
- border-radius: var(--radius-panel);
443
- overflow: hidden;
444
- }
445
- .ai-row {
446
- display: grid;
447
- grid-template-columns: 36px 36px 1fr 96px;
448
- align-items: center;
449
- gap: 14px;
450
- padding: 14px 18px;
451
- border-bottom: 1px solid var(--gray-100);
452
- }
453
- .ai-row:last-child { border-bottom: none; }
454
- .ai-check {
455
- width: 18px;
456
- height: 18px;
457
- border: 1.5px solid var(--gray-300);
458
- border-radius: 5px;
459
- background: var(--white);
460
- position: relative;
461
- }
462
- .ai-row.done .ai-check {
463
- background: var(--olive);
464
- border-color: var(--olive);
465
- }
466
- .ai-row.done .ai-check::after {
467
- content: "";
468
- position: absolute;
469
- left: 4px;
470
- top: 1px;
471
- width: 5px;
472
- height: 9px;
473
- border: solid var(--white);
474
- border-width: 0 2px 2px 0;
475
- transform: rotate(40deg);
476
- }
477
- .ai-row.done .ai-desc {
478
- color: var(--gray-500);
479
- text-decoration: line-through;
480
- text-decoration-color: var(--gray-300);
481
- }
482
- .ai-avatar {
483
- width: 30px;
484
- height: 30px;
485
- border-radius: 50%;
486
- background: var(--oat);
487
- color: var(--gray-700);
488
- font-size: 11px;
489
- font-weight: 600;
490
- display: flex;
491
- align-items: center;
492
- justify-content: center;
493
- letter-spacing: 0.02em;
494
- }
495
- .ai-desc {
496
- font-size: 14px;
497
- color: var(--slate);
498
- }
499
- .ai-due {
500
- font-family: var(--mono);
501
- font-size: 12px;
502
- color: var(--gray-500);
503
- text-align: right;
504
- }
505
- /* ---------- Fixed TOC ---------- */
506
- .toc {
507
- display: none;
508
- }
509
- @media (min-width: 1100px) {
510
- .toc {
511
- display: block;
512
- position: fixed;
513
- top: 72px;
514
- right: max(24px, calc(50vw - 410px - 200px));
515
- width: 170px;
516
- font-size: 13px;
517
- }
518
- .toc-title {
519
- font-family: var(--mono);
520
- font-size: 10px;
521
- text-transform: uppercase;
522
- letter-spacing: 0.1em;
523
- color: var(--gray-500);
524
- margin-bottom: 12px;
525
- }
526
- .toc a {
527
- display: block;
528
- color: var(--gray-500);
529
- text-decoration: none;
530
- padding: 5px 0 5px 12px;
531
- border-left: 1.5px solid var(--gray-300);
532
- line-height: 1.3;
533
- }
534
- .toc a:hover {
535
- color: var(--slate);
536
- border-left-color: var(--clay);
537
- }
538
- }
539
- footer {
540
- margin-top: 64px;
541
- padding-top: 20px;
542
- border-top: 1px solid var(--gray-300);
543
- font-family: var(--mono);
544
- font-size: 12px;
545
- color: var(--gray-500);
546
- }
547
- </style>