@gobing-ai/knowledge-kit 0.0.37 → 0.1.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.
Files changed (157) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/dist/board/collect/index.css +654 -16
  3. package/dist/board/collect/index.js +191 -64
  4. package/dist/board/daily-voice/index.css +679 -12
  5. package/dist/board/daily-voice/index.js +185 -66
  6. package/dist/board/itc/index.css +679 -13
  7. package/dist/board/itc/index.js +188 -66
  8. package/dist/index.js +2864 -139
  9. package/package.json +3 -2
  10. package/plugins/generations/content-gen/dist/index.js +158 -12
  11. package/plugins/generations/core-facts-gen/dist/index.js +158 -12
  12. package/plugins/generations/daily-article-gen/dist/index.js +158 -12
  13. package/plugins/generations/dailynews-gen/dist/index.js +158 -12
  14. package/plugins/generations/episode-plan-gen/dist/index.js +158 -12
  15. package/plugins/generations/gemini-tts/README.md +4 -3
  16. package/plugins/generations/gemini-tts/dist/index.js +158 -12
  17. package/plugins/generations/image-gen/dist/index.js +158 -12
  18. package/plugins/generations/news-report-gen/dist/index.js +158 -12
  19. package/plugins/generations/omni-voice-gen/README.md +15 -4
  20. package/plugins/generations/omni-voice-gen/profiles.json +1 -2
  21. package/plugins/generations/voice-gen/dist/index.js +158 -12
  22. package/plugins/generations/voxcpm-tts/README.md +21 -1
  23. package/plugins/generations/voxcpm-tts/dist/index.js +173 -13
  24. package/plugins/generations/voxcpm-tts/scripts/audit-speaker-consistency.py +109 -0
  25. package/plugins/generations/voxcpm-tts/src/voxcpm-client.ts +28 -1
  26. package/plugins/ingestions/aihot-ingest/dist/index.js +158 -12
  27. package/plugins/ingestions/horizon-ingest/dist/index.js +158 -12
  28. package/plugins/ingestions/last30days-ingest/dist/index.js +158 -12
  29. package/plugins/ingestions/web-search/dist/index.js +158 -12
  30. package/plugins/kk/commands/workflow-run.md +56 -18
  31. package/plugins/kk/decisions/kk-itc.yaml +46 -0
  32. package/plugins/kk/decisions/kk-seo-keyword.yaml +57 -0
  33. package/plugins/kk/decisions/kk-seo-page.yaml +230 -0
  34. package/plugins/kk/decisions/kk-seo-pair.yaml +21 -0
  35. package/plugins/kk/decisions/kk-seo-site.yaml +90 -0
  36. package/plugins/kk/plugin.json +1 -1
  37. package/plugins/kk/publish-presets/chinese-article.json +14 -0
  38. package/plugins/kk/publish-presets/technical-article.json +14 -0
  39. package/plugins/kk/references/smart-seo-attribution.md +85 -0
  40. package/plugins/kk/scripts/daily-stages.ts +42 -2
  41. package/plugins/kk/scripts/itc-stages.ts +25 -118
  42. package/plugins/kk/scripts/kk-workflow-stages.ts +38 -1
  43. package/plugins/kk/scripts/seo-decisions.ts +477 -0
  44. package/plugins/kk/scripts/seo-enrich.ts +728 -0
  45. package/plugins/kk/scripts/seo-facts.ts +610 -0
  46. package/plugins/kk/scripts/seo-fetch.ts +766 -0
  47. package/plugins/kk/scripts/seo-report.ts +460 -0
  48. package/plugins/kk/scripts/seo-rules.ts +1882 -0
  49. package/plugins/kk/scripts/seo-stages.ts +1044 -0
  50. package/plugins/kk/skills/article-adapt/SKILL.md +2 -2
  51. package/plugins/kk/skills/smart-seo/SKILL.md +183 -0
  52. package/plugins/kk/skills/smart-seo/references/method.md +126 -0
  53. package/plugins/kk/skills/smart-seo/references/narrative.md +125 -0
  54. package/plugins/kk/skills/smart-seo/references/operations.md +202 -0
  55. package/plugins/kk/skills/smart-seo/references/seo-geo-sources.md +90 -0
  56. package/plugins/kk/workflows/feature-verification.yaml +28 -24
  57. package/plugins/kk/workflows/kk-daily-ai-voice2.yaml +85 -17
  58. package/plugins/kk/workflows/kk-itc-author.yaml +406 -0
  59. package/plugins/kk/workflows/kk-itc.yaml +208 -682
  60. package/plugins/kk/workflows/kk-smart-seo.yaml +251 -0
  61. package/plugins/publishings/bilibili-pub/dist/index.js +21782 -0
  62. package/plugins/publishings/bilibili-pub/dist/profile-check.js +20410 -0
  63. package/plugins/publishings/bilibili-pub/package.json +20 -0
  64. package/plugins/publishings/bilibili-pub/plugin.json +12 -0
  65. package/plugins/publishings/bilibili-pub/src/flow.ts +1296 -0
  66. package/plugins/publishings/bilibili-pub/src/index.ts +139 -0
  67. package/plugins/publishings/bilibili-pub/src/profile-check.ts +19 -0
  68. package/plugins/publishings/bilibili-pub/src/selectors.ts +222 -0
  69. package/plugins/publishings/bilibili-pub/tsconfig.json +4 -0
  70. package/plugins/publishings/cnblogs-pub/dist/index.js +21383 -0
  71. package/plugins/publishings/cnblogs-pub/dist/profile-check.js +20412 -0
  72. package/plugins/publishings/cnblogs-pub/package.json +19 -0
  73. package/plugins/publishings/cnblogs-pub/plugin.json +12 -0
  74. package/plugins/publishings/cnblogs-pub/src/flow.ts +708 -0
  75. package/plugins/publishings/cnblogs-pub/src/index.ts +172 -0
  76. package/plugins/publishings/cnblogs-pub/src/profile-check.ts +24 -0
  77. package/plugins/publishings/cnblogs-pub/src/selectors.ts +104 -0
  78. package/plugins/publishings/cnblogs-pub/tsconfig.json +4 -0
  79. package/plugins/publishings/csdn-pub/dist/index.js +21552 -0
  80. package/plugins/publishings/csdn-pub/dist/profile-check.js +20963 -0
  81. package/plugins/publishings/csdn-pub/package.json +19 -0
  82. package/plugins/publishings/csdn-pub/plugin.json +12 -0
  83. package/plugins/publishings/csdn-pub/src/index.ts +1178 -0
  84. package/plugins/publishings/csdn-pub/src/profile-check.ts +23 -0
  85. package/plugins/publishings/csdn-pub/tsconfig.json +4 -0
  86. package/plugins/publishings/emdash-pub/dist/index.js +158 -12
  87. package/plugins/publishings/emdash-pub/plugin.json +22 -1
  88. package/plugins/publishings/infoq-pub/dist/index.js +160 -12
  89. package/plugins/publishings/infoq-pub/dist/profile-check.js +160 -12
  90. package/plugins/publishings/infoq-pub/plugin.json +21 -0
  91. package/plugins/publishings/jike-pub/dist/index.js +21379 -0
  92. package/plugins/publishings/jike-pub/dist/profile-check.js +20951 -0
  93. package/plugins/publishings/jike-pub/package.json +19 -0
  94. package/plugins/publishings/jike-pub/plugin.json +12 -0
  95. package/plugins/publishings/jike-pub/src/index.ts +800 -0
  96. package/plugins/publishings/jike-pub/src/profile-check.ts +21 -0
  97. package/plugins/publishings/jike-pub/tsconfig.json +4 -0
  98. package/plugins/publishings/juejin-pub/dist/index.js +160 -12
  99. package/plugins/publishings/juejin-pub/dist/profile-check.js +160 -12
  100. package/plugins/publishings/juejin-pub/plugin.json +21 -0
  101. package/plugins/publishings/medium-pub/dist/index.js +158 -12
  102. package/plugins/publishings/medium-pub/plugin.json +22 -1
  103. package/plugins/publishings/podcast-pub/dist/index.js +158 -12
  104. package/plugins/publishings/qiita-pub/dist/index.js +158 -12
  105. package/plugins/publishings/qiita-pub/plugin.json +24 -1
  106. package/plugins/publishings/shipinhao-pub/dist/index.js +21715 -0
  107. package/plugins/publishings/shipinhao-pub/dist/profile-check.js +20431 -0
  108. package/plugins/publishings/shipinhao-pub/package.json +19 -0
  109. package/plugins/publishings/shipinhao-pub/plugin.json +12 -0
  110. package/plugins/publishings/shipinhao-pub/src/flow.ts +1323 -0
  111. package/plugins/publishings/shipinhao-pub/src/index.ts +173 -0
  112. package/plugins/publishings/shipinhao-pub/src/profile-check.ts +25 -0
  113. package/plugins/publishings/shipinhao-pub/src/selectors.ts +241 -0
  114. package/plugins/publishings/shipinhao-pub/tsconfig.json +4 -0
  115. package/plugins/publishings/sspai-pub/dist/index.js +21371 -0
  116. package/plugins/publishings/sspai-pub/dist/profile-check.js +20414 -0
  117. package/plugins/publishings/sspai-pub/package.json +19 -0
  118. package/plugins/publishings/sspai-pub/plugin.json +12 -0
  119. package/plugins/publishings/sspai-pub/src/flow.ts +624 -0
  120. package/plugins/publishings/sspai-pub/src/index.ts +167 -0
  121. package/plugins/publishings/sspai-pub/src/profile-check.ts +25 -0
  122. package/plugins/publishings/sspai-pub/src/selectors.ts +122 -0
  123. package/plugins/publishings/sspai-pub/tsconfig.json +4 -0
  124. package/plugins/publishings/substack-pub/dist/index.js +160 -12
  125. package/plugins/publishings/substack-pub/dist/profile-check.js +160 -12
  126. package/plugins/publishings/substack-pub/plugin.json +21 -0
  127. package/plugins/publishings/surfdash-pub/dist/index.js +158 -12
  128. package/plugins/publishings/surfdash-pub/plugin.json +22 -1
  129. package/plugins/publishings/threads-pub/dist/index.js +158 -12
  130. package/plugins/publishings/wechatmp-pub/dist/index.js +1669 -502
  131. package/plugins/publishings/wechatmp-pub/dist/profile-check.js +204 -21
  132. package/plugins/publishings/wechatmp-pub/plugin.json +32 -0
  133. package/plugins/publishings/wechatmp-pub/src/cgi-draft.ts +540 -0
  134. package/plugins/publishings/wechatmp-pub/src/cgi-media.ts +380 -0
  135. package/plugins/publishings/wechatmp-pub/src/cgi.ts +485 -0
  136. package/plugins/publishings/wechatmp-pub/src/flow.ts +104 -0
  137. package/plugins/publishings/weibo-pub/dist/index.js +160 -12
  138. package/plugins/publishings/weibo-pub/dist/profile-check.js +160 -12
  139. package/plugins/publishings/weibo-pub/plugin.json +35 -0
  140. package/plugins/publishings/x-pub/dist/index.js +160 -12
  141. package/plugins/publishings/x-pub/dist/profile-check.js +160 -12
  142. package/plugins/publishings/x-pub/plugin.json +40 -0
  143. package/plugins/publishings/xhs-pub/dist/index.js +160 -12
  144. package/plugins/publishings/xhs-pub/dist/profile-check.js +160 -12
  145. package/plugins/publishings/xhs-pub/plugin.json +37 -0
  146. package/plugins/publishings/xiaoyuzhou-pub/dist/index.js +21491 -0
  147. package/plugins/publishings/xiaoyuzhou-pub/dist/profile-check.js +20417 -0
  148. package/plugins/publishings/xiaoyuzhou-pub/package.json +19 -0
  149. package/plugins/publishings/xiaoyuzhou-pub/plugin.json +12 -0
  150. package/plugins/publishings/xiaoyuzhou-pub/src/flow.ts +826 -0
  151. package/plugins/publishings/xiaoyuzhou-pub/src/index.ts +174 -0
  152. package/plugins/publishings/xiaoyuzhou-pub/src/profile-check.ts +26 -0
  153. package/plugins/publishings/xiaoyuzhou-pub/src/selectors.ts +125 -0
  154. package/plugins/publishings/xiaoyuzhou-pub/tsconfig.json +4 -0
  155. package/plugins/publishings/zenn-pub/dist/index.js +158 -12
  156. package/plugins/publishings/zenn-pub/plugin.json +22 -1
  157. package/plugins/generations/omni-voice-gen/voices/robin-news.wav +0 -0
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "plugins": [
8
8
  {
9
- "version": "0.0.37",
9
+ "version": "0.1.0",
10
10
  "name": "kk",
11
11
  "source": "./plugins/kk",
12
12
  "description": "knowledge-kit — a set of toolkit for knowledge management"
@@ -1,42 +1,680 @@
1
+ /**
2
+ * Shared stylesheet for the KK Board modules (`kk-collect`, `kk-daily-ai-voice2`, `kk-itc`).
3
+ *
4
+ * Consumes only the host Board's `spur-*` design tokens (Tailwind v4 theme custom properties
5
+ * that flip with the host's `data-theme`), so the contributed pages match the native modules
6
+ * in both light and dark themes. Never hardcode colors here: any color outside the token set
7
+ * breaks the theme the host is currently rendering.
8
+ */
9
+
10
+ /* ── Base Container ────────────────────────────────────────────────────── */
11
+
1
12
  .kk-board {
2
- display: block;
3
- color: inherit;
13
+ display: flex;
14
+ flex-direction: column;
15
+ gap: 1rem;
16
+ padding: 1rem 1.25rem 2rem;
17
+ color: var(--color-spur-text);
4
18
  font: inherit;
19
+ box-sizing: border-box;
20
+ width: 100%;
21
+ }
22
+
23
+ .kk-board code,
24
+ .kk-board pre {
25
+ font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);
26
+ font-size: 0.8125rem;
27
+ }
28
+
29
+ .kk-board a {
30
+ color: var(--color-spur-accent);
31
+ text-decoration: none;
32
+ transition: opacity 0.15s ease;
33
+ }
34
+
35
+ .kk-board a:hover {
36
+ text-decoration: underline;
37
+ opacity: 0.9;
38
+ }
39
+
40
+ /* ── Top Header Toolbar ────────────────────────────────────────────────── */
41
+
42
+ .kk-board-header {
43
+ display: flex;
44
+ flex-wrap: wrap;
45
+ justify-content: space-between;
46
+ align-items: center;
47
+ gap: 1rem;
48
+ padding-bottom: 0.875rem;
49
+ border-bottom: 1px solid var(--color-spur-border);
5
50
  }
51
+
52
+ .kk-board-header-left {
53
+ display: flex;
54
+ flex-direction: column;
55
+ gap: 0.25rem;
56
+ }
57
+
58
+ .kk-board-header-title-row {
59
+ display: flex;
60
+ align-items: center;
61
+ gap: 0.75rem;
62
+ }
63
+
6
64
  .kk-board-header h1 {
7
- margin: 0 0 0.25rem;
8
- font-size: 1.25rem;
65
+ margin: 0;
66
+ font-size: 1.375rem;
67
+ line-height: 1.75rem;
68
+ font-weight: 700;
69
+ letter-spacing: -0.02em;
70
+ color: var(--color-spur-text);
9
71
  }
10
- .kk-board-tabs {
72
+
73
+ .kk-board-header p {
74
+ margin: 0;
75
+ font-size: 0.8125rem;
76
+ color: var(--color-spur-text-muted);
77
+ }
78
+
79
+ .kk-board-header-right {
11
80
  display: flex;
81
+ align-items: center;
12
82
  flex-wrap: wrap;
13
- gap: 0.5rem;
14
- margin: 0.75rem 0;
83
+ gap: 0.625rem;
84
+ }
85
+
86
+ /* ── Filterable Run Selector Dropdown ──────────────────────────────────── */
87
+
88
+ .kk-board-run-filter-group {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ gap: 0.375rem;
92
+ padding: 0.25rem 0.375rem;
93
+ background: var(--color-spur-surface-2);
94
+ border: 1px solid var(--color-spur-border);
95
+ border-radius: 0.5rem;
96
+ }
97
+
98
+ .kk-board-run-filter-input {
99
+ width: 110px;
100
+ padding: 0.25rem 0.5rem;
101
+ font-size: 0.8125rem;
102
+ color: var(--color-spur-text);
103
+ background: var(--color-spur-surface);
104
+ border: 1px solid var(--color-spur-border);
105
+ border-radius: 0.375rem;
106
+ outline: none;
107
+ transition:
108
+ width 0.2s ease,
109
+ border-color 0.2s ease;
110
+ }
111
+
112
+ .kk-board-run-filter-input:focus {
113
+ width: 150px;
114
+ border-color: var(--color-spur-accent);
115
+ }
116
+
117
+ .kk-board-run-filter-input::placeholder {
118
+ color: var(--color-spur-text-faint);
119
+ }
120
+
121
+ .kk-board-run-selector {
122
+ display: inline-flex;
123
+ align-items: center;
124
+ gap: 0.375rem;
125
+ font-size: 0.8125rem;
126
+ font-weight: 500;
127
+ color: var(--color-spur-text-muted);
128
+ }
129
+
130
+ .kk-board-run-selector select {
131
+ max-width: 280px;
132
+ padding: 0.3125rem 0.625rem;
133
+ font-size: 0.8125rem;
134
+ font-family: inherit;
135
+ color: var(--color-spur-text);
136
+ background: var(--color-spur-surface);
137
+ border: 1px solid var(--color-spur-border);
138
+ border-radius: 0.375rem;
139
+ cursor: pointer;
140
+ outline: none;
141
+ transition: border-color 0.15s ease;
15
142
  }
143
+
144
+ .kk-board-run-selector select:focus {
145
+ border-color: var(--color-spur-accent);
146
+ }
147
+
148
+ /* ── Action Buttons ────────────────────────────────────────────────────── */
149
+
150
+ .kk-btn-action {
151
+ display: inline-flex;
152
+ align-items: center;
153
+ gap: 0.375rem;
154
+ padding: 0.375rem 0.75rem;
155
+ font-size: 0.8125rem;
156
+ font-weight: 500;
157
+ color: var(--color-spur-text);
158
+ background: var(--color-spur-surface-2);
159
+ border: 1px solid var(--color-spur-border);
160
+ border-radius: 0.5rem;
161
+ cursor: pointer;
162
+ text-decoration: none;
163
+ transition: all 0.15s ease;
164
+ }
165
+
166
+ .kk-btn-action:hover {
167
+ color: var(--color-spur-accent);
168
+ border-color: var(--color-spur-accent);
169
+ background: var(--color-spur-surface);
170
+ text-decoration: none;
171
+ }
172
+
173
+ .kk-board-header button,
174
+ .kk-board > button {
175
+ margin: 0;
176
+ padding: 0.375rem 0.75rem;
177
+ font-size: 0.8125rem;
178
+ font-weight: 500;
179
+ color: var(--color-spur-text);
180
+ background: var(--color-spur-surface-2);
181
+ border: 1px solid var(--color-spur-border);
182
+ border-radius: 0.5rem;
183
+ cursor: pointer;
184
+ transition: all 0.15s ease;
185
+ }
186
+
187
+ .kk-board-header button:hover,
188
+ .kk-board > button:hover {
189
+ color: var(--color-spur-accent);
190
+ border-color: var(--color-spur-accent);
191
+ background: var(--color-spur-surface);
192
+ }
193
+
194
+ /* ── Segmented Control Tabs ────────────────────────────────────────────── */
195
+
196
+ .kk-board-tabs {
197
+ display: inline-flex;
198
+ align-self: flex-start;
199
+ flex-wrap: wrap;
200
+ gap: 0.25rem;
201
+ padding: 0.25rem;
202
+ background: var(--color-spur-surface-2);
203
+ border: 1px solid var(--color-spur-border);
204
+ border-radius: 0.625rem;
205
+ }
206
+
207
+ .kk-board-tabs button {
208
+ padding: 0.375rem 0.875rem;
209
+ font-size: 0.8125rem;
210
+ font-weight: 500;
211
+ color: var(--color-spur-text-muted);
212
+ background: transparent;
213
+ border: 0;
214
+ border-radius: 0.45rem;
215
+ cursor: pointer;
216
+ transition:
217
+ color 0.15s ease,
218
+ background 0.15s ease;
219
+ }
220
+
221
+ .kk-board-tabs button:hover {
222
+ color: var(--color-spur-text);
223
+ background: var(--color-spur-surface-3, rgba(255, 255, 255, 0.05));
224
+ }
225
+
16
226
  .kk-board-tabs button[aria-current="page"] {
227
+ font-weight: 600;
228
+ color: #ffffff;
229
+ background: var(--color-spur-accent);
230
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
231
+ }
232
+
233
+ /* ── KPI Stat Cards ────────────────────────────────────────────────────── */
234
+
235
+ .kk-stat-grid {
236
+ display: grid;
237
+ grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
238
+ gap: 0.75rem;
239
+ width: 100%;
240
+ }
241
+
242
+ .kk-stat-card {
243
+ display: flex;
244
+ flex-direction: column;
245
+ gap: 0.25rem;
246
+ padding: 0.875rem 1rem;
247
+ background: var(--color-spur-surface);
248
+ border: 1px solid var(--color-spur-border);
249
+ border-radius: 0.625rem;
250
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
251
+ transition: border-color 0.15s ease;
252
+ }
253
+
254
+ .kk-stat-card:hover {
255
+ border-color: var(--color-spur-accent);
256
+ }
257
+
258
+ .kk-stat-label {
259
+ font-size: 0.75rem;
260
+ font-weight: 600;
261
+ text-transform: uppercase;
262
+ letter-spacing: 0.04em;
263
+ color: var(--color-spur-text-muted);
264
+ }
265
+
266
+ .kk-stat-value {
267
+ font-size: 1.5rem;
17
268
  font-weight: 700;
18
- text-decoration: underline;
269
+ line-height: 1.2;
270
+ color: var(--color-spur-text);
271
+ }
272
+
273
+ .kk-stat-sub {
274
+ font-size: 0.75rem;
275
+ color: var(--color-spur-text-faint);
276
+ }
277
+
278
+ /* ── Status Pills / Badges ─────────────────────────────────────────────── */
279
+
280
+ .kk-badge {
281
+ display: inline-flex;
282
+ align-items: center;
283
+ gap: 0.3125rem;
284
+ padding: 0.15rem 0.5rem;
285
+ font-size: 0.75rem;
286
+ font-weight: 600;
287
+ border-radius: 9999px;
288
+ line-height: 1;
19
289
  }
290
+
291
+ .kk-badge-success {
292
+ color: var(--color-spur-success);
293
+ background: rgba(34, 197, 94, 0.12);
294
+ border: 1px solid rgba(34, 197, 94, 0.25);
295
+ }
296
+
297
+ .kk-badge-failed {
298
+ color: var(--color-spur-error);
299
+ background: rgba(239, 68, 68, 0.12);
300
+ border: 1px solid rgba(239, 68, 68, 0.25);
301
+ }
302
+
303
+ .kk-badge-running {
304
+ color: var(--color-spur-accent);
305
+ background: rgba(59, 130, 246, 0.12);
306
+ border: 1px solid rgba(59, 130, 246, 0.25);
307
+ }
308
+
309
+ .kk-badge-draft,
310
+ .kk-badge-warning {
311
+ color: var(--color-spur-warning);
312
+ background: rgba(245, 158, 11, 0.12);
313
+ border: 1px solid rgba(245, 158, 11, 0.25);
314
+ }
315
+
316
+ .kk-badge-neutral {
317
+ color: var(--color-spur-text-muted);
318
+ background: var(--color-spur-surface-2);
319
+ border: 1px solid var(--color-spur-border);
320
+ }
321
+
322
+ /* ── Content Card & Panels ─────────────────────────────────────────────── */
323
+
324
+ .kk-card {
325
+ background: var(--color-spur-surface);
326
+ border: 1px solid var(--color-spur-border);
327
+ border-radius: 0.75rem;
328
+ padding: 1.125rem;
329
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
330
+ }
331
+
332
+ .kk-card-header {
333
+ display: flex;
334
+ justify-content: space-between;
335
+ align-items: center;
336
+ margin-bottom: 0.875rem;
337
+ padding-bottom: 0.625rem;
338
+ border-bottom: 1px solid var(--color-spur-border);
339
+ }
340
+
341
+ .kk-card-header h2,
342
+ .kk-card-header h3 {
343
+ margin: 0;
344
+ font-size: 0.9375rem;
345
+ font-weight: 600;
346
+ color: var(--color-spur-text);
347
+ }
348
+
349
+ /* Backwards compatibility for existing panels */
350
+ .kk-board-facts,
351
+ .kk-board-config,
352
+ .kk-board-results,
353
+ .kk-board-progress,
354
+ .kk-board-empty {
355
+ margin: 0.5rem 0;
356
+ padding: 1rem 1.125rem;
357
+ background: var(--color-spur-surface);
358
+ border: 1px solid var(--color-spur-border);
359
+ border-radius: 0.625rem;
360
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
361
+ }
362
+
20
363
  .kk-board-facts div,
21
364
  .kk-board-config div {
22
365
  display: flex;
23
- gap: 0.5rem;
366
+ align-items: center;
367
+ justify-content: space-between;
368
+ padding: 0.45rem 0;
369
+ }
370
+
371
+ .kk-board-facts div + div,
372
+ .kk-board-config div + div {
373
+ border-top: 1px solid var(--color-spur-border);
24
374
  }
375
+
25
376
  .kk-board-facts dt,
26
377
  .kk-board-config dt {
27
378
  min-width: 12rem;
379
+ font-size: 0.8125rem;
380
+ font-weight: 500;
381
+ color: var(--color-spur-text-muted);
382
+ }
383
+
384
+ .kk-board-facts dd,
385
+ .kk-board-config dd {
386
+ margin: 0;
387
+ font-size: 0.875rem;
388
+ font-weight: 600;
389
+ color: var(--color-spur-text);
390
+ }
391
+
392
+ .kk-board-results section + section {
393
+ margin-top: 1rem;
394
+ padding-top: 0.75rem;
395
+ border-top: 1px solid var(--color-spur-border);
396
+ }
397
+
398
+ .kk-board-results h2 {
399
+ margin: 0.25rem 0 0.5rem;
400
+ font-size: 0.9375rem;
401
+ font-weight: 600;
402
+ }
403
+
404
+ .kk-board-progress {
405
+ list-style-position: inside;
406
+ font-size: 0.875rem;
407
+ line-height: 1.6;
408
+ }
409
+
410
+ .kk-board-empty {
411
+ color: var(--color-spur-text-muted);
412
+ text-align: center;
413
+ padding: 2.5rem 1rem;
414
+ }
415
+
416
+ /* ── Modern Data Tables ────────────────────────────────────────────────── */
417
+
418
+ .kk-table-container {
419
+ overflow-x: auto;
420
+ border: 1px solid var(--color-spur-border);
421
+ border-radius: 0.625rem;
422
+ background: var(--color-spur-surface);
423
+ }
424
+
425
+ .kk-table {
426
+ width: 100%;
427
+ border-collapse: collapse;
428
+ font-size: 0.8125rem;
429
+ text-align: left;
430
+ }
431
+
432
+ .kk-table th {
433
+ padding: 0.625rem 0.875rem;
434
+ background: var(--color-spur-surface-2);
435
+ font-weight: 600;
436
+ color: var(--color-spur-text-muted);
437
+ border-bottom: 1px solid var(--color-spur-border);
438
+ }
439
+
440
+ .kk-table td {
441
+ padding: 0.625rem 0.875rem;
442
+ border-bottom: 1px solid var(--color-spur-border);
443
+ color: var(--color-spur-text);
444
+ }
445
+
446
+ .kk-table tr:last-child td {
447
+ border-bottom: 0;
448
+ }
449
+
450
+ .kk-table tr:hover td {
451
+ background: var(--color-spur-surface-2);
452
+ }
453
+
454
+ /* ── Distribution Channel Matrix ───────────────────────────────────────── */
455
+
456
+ .kk-channel-grid {
457
+ display: grid;
458
+ grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
459
+ gap: 0.75rem;
460
+ width: 100%;
461
+ }
462
+
463
+ .kk-channel-card {
464
+ display: flex;
465
+ flex-direction: column;
466
+ justify-content: space-between;
467
+ padding: 0.875rem 1rem;
468
+ background: var(--color-spur-surface-2);
469
+ border: 1px solid var(--color-spur-border);
470
+ border-radius: 0.625rem;
471
+ gap: 0.5rem;
472
+ transition:
473
+ transform 0.15s ease,
474
+ border-color 0.15s ease;
475
+ }
476
+
477
+ .kk-channel-card:hover {
478
+ border-color: var(--color-spur-accent);
479
+ }
480
+
481
+ .kk-channel-top {
482
+ display: flex;
483
+ justify-content: space-between;
484
+ align-items: center;
485
+ }
486
+
487
+ .kk-channel-name {
488
+ font-size: 0.875rem;
28
489
  font-weight: 600;
490
+ color: var(--color-spur-text);
29
491
  }
492
+
493
+ .kk-channel-detail {
494
+ font-size: 0.75rem;
495
+ color: var(--color-spur-text-muted);
496
+ word-break: break-word;
497
+ }
498
+
499
+ /* ── Hero Audio Player Studio ──────────────────────────────────────────── */
500
+
501
+ .kk-audio-studio-card {
502
+ display: flex;
503
+ flex-wrap: wrap;
504
+ gap: 1.25rem;
505
+ padding: 1.25rem;
506
+ background: var(--color-spur-surface);
507
+ border: 1px solid var(--color-spur-border);
508
+ border-radius: 0.75rem;
509
+ align-items: center;
510
+ }
511
+
512
+ .kk-audio-studio-cover {
513
+ width: 120px;
514
+ height: 120px;
515
+ border-radius: 0.5rem;
516
+ object-fit: cover;
517
+ border: 1px solid var(--color-spur-border);
518
+ flex-shrink: 0;
519
+ }
520
+
521
+ .kk-audio-studio-info {
522
+ flex: 1;
523
+ min-width: 250px;
524
+ display: flex;
525
+ flex-direction: column;
526
+ gap: 0.5rem;
527
+ }
528
+
529
+ .kk-audio-studio-title {
530
+ font-size: 1.125rem;
531
+ font-weight: 700;
532
+ color: var(--color-spur-text);
533
+ margin: 0;
534
+ }
535
+
536
+ .kk-audio-player-row {
537
+ display: flex;
538
+ align-items: center;
539
+ gap: 0.75rem;
540
+ flex-wrap: wrap;
541
+ }
542
+
543
+ .kk-audio-player-row audio {
544
+ flex: 1;
545
+ min-width: 240px;
546
+ height: 38px;
547
+ border-radius: 9999px;
548
+ }
549
+
550
+ /* ── Asset Gallery Grid ────────────────────────────────────────────────── */
551
+
552
+ .kk-asset-grid {
553
+ display: grid;
554
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
555
+ gap: 0.875rem;
556
+ width: 100%;
557
+ }
558
+
559
+ .kk-asset-card {
560
+ display: flex;
561
+ flex-direction: column;
562
+ background: var(--color-spur-surface-2);
563
+ border: 1px solid var(--color-spur-border);
564
+ border-radius: 0.625rem;
565
+ overflow: hidden;
566
+ transition: border-color 0.15s ease;
567
+ }
568
+
569
+ .kk-asset-card:hover {
570
+ border-color: var(--color-spur-accent);
571
+ }
572
+
573
+ .kk-asset-img {
574
+ width: 100%;
575
+ aspect-ratio: 1 / 1;
576
+ object-fit: cover;
577
+ background: var(--color-spur-surface);
578
+ }
579
+
580
+ .kk-asset-info {
581
+ padding: 0.625rem 0.75rem;
582
+ display: flex;
583
+ justify-content: space-between;
584
+ align-items: center;
585
+ font-size: 0.8125rem;
586
+ }
587
+
588
+ /* ── Split Studio (Script & Article) ───────────────────────────────────── */
589
+
590
+ .kk-split-studio {
591
+ display: grid;
592
+ grid-template-columns: 1fr 1fr;
593
+ gap: 1rem;
594
+ width: 100%;
595
+ }
596
+
597
+ @media (max-width: 900px) {
598
+ .kk-split-studio {
599
+ grid-template-columns: 1fr;
600
+ }
601
+ }
602
+
603
+ .kk-pane {
604
+ display: flex;
605
+ flex-direction: column;
606
+ gap: 0.75rem;
607
+ padding: 1rem;
608
+ background: var(--color-spur-surface);
609
+ border: 1px solid var(--color-spur-border);
610
+ border-radius: 0.625rem;
611
+ max-height: 650px;
612
+ overflow-y: auto;
613
+ }
614
+
615
+ .kk-pane-header {
616
+ display: flex;
617
+ justify-content: space-between;
618
+ align-items: center;
619
+ padding-bottom: 0.5rem;
620
+ border-bottom: 1px solid var(--color-spur-border);
621
+ }
622
+
623
+ .kk-pane-title {
624
+ font-size: 0.9375rem;
625
+ font-weight: 600;
626
+ color: var(--color-spur-text);
627
+ margin: 0;
628
+ }
629
+
630
+ /* ── Prose & Preview Styling ───────────────────────────────────────────── */
631
+
632
+ .kk-prose {
633
+ font-size: 0.875rem;
634
+ line-height: 1.65;
635
+ color: var(--color-spur-text);
636
+ }
637
+
638
+ .kk-prose h1,
639
+ .kk-prose h2,
640
+ .kk-prose h3 {
641
+ margin: 1rem 0 0.5rem;
642
+ color: var(--color-spur-text);
643
+ }
644
+
645
+ .kk-prose p {
646
+ margin: 0.5rem 0;
647
+ }
648
+
649
+ .kk-prose pre {
650
+ padding: 0.75rem 1rem;
651
+ background: var(--color-spur-surface-2);
652
+ border: 1px solid var(--color-spur-border);
653
+ border-radius: 0.5rem;
654
+ overflow-x: auto;
655
+ font-size: 0.8125rem;
656
+ line-height: 1.5;
657
+ }
658
+
659
+ /* ── Diagnostics & Footnotes ───────────────────────────────────────────── */
660
+
30
661
  .kk-board-state {
31
- opacity: 0.75;
32
662
  font-size: 0.85em;
663
+ color: var(--color-spur-text-muted);
33
664
  }
665
+
34
666
  .kk-board-diagnostic {
35
- color: #a1260d;
667
+ margin: 0.5rem 0;
668
+ padding: 0.625rem 0.875rem;
669
+ font-size: 0.8125rem;
670
+ color: var(--color-spur-error);
671
+ background: rgba(239, 68, 68, 0.08);
672
+ border: 1px solid rgba(239, 68, 68, 0.25);
673
+ border-radius: 0.5rem;
36
674
  }
37
- .kk-board-artifacts {
38
- padding-left: 1.25rem;
39
- }
40
- .kk-board-empty {
41
- margin: 1rem 0;
675
+
676
+ .kk-board-footnote {
677
+ margin: 0.75rem 0;
678
+ font-size: 0.75rem;
679
+ color: var(--color-spur-text-faint);
42
680
  }