koishi-plugin-group-analysis-mx 1.0.1

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 (94) hide show
  1. package/lib/config.d.ts +53 -0
  2. package/lib/config.d.ts.map +1 -0
  3. package/lib/config.js +376 -0
  4. package/lib/config.js.map +1 -0
  5. package/lib/cron.d.ts +8 -0
  6. package/lib/cron.d.ts.map +1 -0
  7. package/lib/cron.js +62 -0
  8. package/lib/cron.js.map +1 -0
  9. package/lib/index.d.ts +6 -0
  10. package/lib/index.d.ts.map +1 -0
  11. package/lib/index.js +51 -0
  12. package/lib/index.js.map +1 -0
  13. package/lib/onebot/cqcode.d.ts +14 -0
  14. package/lib/onebot/cqcode.d.ts.map +1 -0
  15. package/lib/onebot/cqcode.js +92 -0
  16. package/lib/onebot/cqcode.js.map +1 -0
  17. package/lib/plugin.d.ts +4 -0
  18. package/lib/plugin.d.ts.map +1 -0
  19. package/lib/plugin.js +41 -0
  20. package/lib/plugin.js.map +1 -0
  21. package/lib/plugins/command.d.ts +9 -0
  22. package/lib/plugins/command.d.ts.map +1 -0
  23. package/lib/plugins/command.js +196 -0
  24. package/lib/plugins/command.js.map +1 -0
  25. package/lib/service/analysis.d.ts +48 -0
  26. package/lib/service/analysis.d.ts.map +1 -0
  27. package/lib/service/analysis.js +714 -0
  28. package/lib/service/analysis.js.map +1 -0
  29. package/lib/service/llm.d.ts +43 -0
  30. package/lib/service/llm.d.ts.map +1 -0
  31. package/lib/service/llm.js +160 -0
  32. package/lib/service/llm.js.map +1 -0
  33. package/lib/service/message.d.ts +55 -0
  34. package/lib/service/message.d.ts.map +1 -0
  35. package/lib/service/message.js +527 -0
  36. package/lib/service/message.js.map +1 -0
  37. package/lib/service/renderer.d.ts +23 -0
  38. package/lib/service/renderer.d.ts.map +1 -0
  39. package/lib/service/renderer.js +298 -0
  40. package/lib/service/renderer.js.map +1 -0
  41. package/lib/skins/anime.d.ts +19 -0
  42. package/lib/skins/anime.d.ts.map +1 -0
  43. package/lib/skins/anime.js +138 -0
  44. package/lib/skins/anime.js.map +1 -0
  45. package/lib/skins/art.d.ts +19 -0
  46. package/lib/skins/art.d.ts.map +1 -0
  47. package/lib/skins/art.js +146 -0
  48. package/lib/skins/art.js.map +1 -0
  49. package/lib/skins/index.d.ts +50 -0
  50. package/lib/skins/index.d.ts.map +1 -0
  51. package/lib/skins/index.js +84 -0
  52. package/lib/skins/index.js.map +1 -0
  53. package/lib/skins/md3.d.ts +19 -0
  54. package/lib/skins/md3.d.ts.map +1 -0
  55. package/lib/skins/md3.js +147 -0
  56. package/lib/skins/md3.js.map +1 -0
  57. package/lib/skins/newspaper.d.ts +19 -0
  58. package/lib/skins/newspaper.d.ts.map +1 -0
  59. package/lib/skins/newspaper.js +141 -0
  60. package/lib/skins/newspaper.js.map +1 -0
  61. package/lib/skins/scrapbook.d.ts +20 -0
  62. package/lib/skins/scrapbook.d.ts.map +1 -0
  63. package/lib/skins/scrapbook.js +207 -0
  64. package/lib/skins/scrapbook.js.map +1 -0
  65. package/lib/skins/types.d.ts +69 -0
  66. package/lib/skins/types.d.ts.map +1 -0
  67. package/lib/skins/types.js +12 -0
  68. package/lib/skins/types.js.map +1 -0
  69. package/lib/types.d.ts +170 -0
  70. package/lib/types.d.ts.map +1 -0
  71. package/lib/types.js +3 -0
  72. package/lib/types.js.map +1 -0
  73. package/lib/utils.d.ts +55 -0
  74. package/lib/utils.d.ts.map +1 -0
  75. package/lib/utils.js +334 -0
  76. package/lib/utils.js.map +1 -0
  77. package/package.json +48 -0
  78. package/resources/anime/css/template_group.css +470 -0
  79. package/resources/anime/images/decoration_br.svg +19 -0
  80. package/resources/anime/images/decoration_tl.svg +24 -0
  81. package/resources/anime/template_group.html +108 -0
  82. package/resources/anime/template_user.html +99 -0
  83. package/resources/art/css/template_group.css +484 -0
  84. package/resources/art/template_group.html +77 -0
  85. package/resources/art/template_user.html +63 -0
  86. package/resources/md3/css/template_group.css +880 -0
  87. package/resources/md3/template_group.html +189 -0
  88. package/resources/md3/template_user.html +175 -0
  89. package/resources/newspaper/css/template_group.css +568 -0
  90. package/resources/newspaper/template_group.html +133 -0
  91. package/resources/newspaper/template_user.html +119 -0
  92. package/resources/scrapbook/css/style.css +1094 -0
  93. package/resources/scrapbook/template_group.html +115 -0
  94. package/resources/scrapbook/template_user.html +119 -0
@@ -0,0 +1,880 @@
1
+ @import url('https://fonts.googleapis.com/css?family=Noto+Sans+SC');
2
+ @import url('https://fonts.googleapis.com/css?family=Noto+Color+Emoji');
3
+
4
+ @font-face {
5
+ font-family: Torus;
6
+ font-weight: 400;
7
+ src: url(https://gcore.jsdelivr.net/gh/ppy/osu-web/resources/fonts/torus/Torus-Regular.otf);
8
+ }
9
+
10
+ @font-face {
11
+ font-family: Torus;
12
+ font-weight: 600;
13
+ src: url(https://gcore.jsdelivr.net/gh/ppy/osu-web/resources/fonts/torus/Torus-SemiBold.otf);
14
+ }
15
+
16
+ @font-face {
17
+ font-family: Torus;
18
+ font-weight: 700;
19
+ src: url(https://gcore.jsdelivr.net/gh/ppy/osu-web/resources/fonts/torus/Torus-Bold.otf);
20
+ }
21
+
22
+ @font-face {
23
+ font-family: Torus;
24
+ font-weight: 900;
25
+ src: url(https://gcore.jsdelivr.net/gh/ppy/osu-web/resources/fonts/torus/Torus-Heavy.otf);
26
+ }
27
+
28
+ :root {
29
+ /* Light Theme Colors */
30
+ --light-primary: #6750a4;
31
+ --light-on-primary: #ffffff;
32
+ --light-primary-container: #eaddff;
33
+ --light-on-primary-container: #21005d;
34
+
35
+ --light-secondary: #625b71;
36
+ --light-on-secondary: #ffffff;
37
+ --light-secondary-container: #e8def8;
38
+ --light-on-secondary-container: #1d192b;
39
+
40
+ --light-tertiary: #7d5260;
41
+ --light-on-tertiary: #ffffff;
42
+ --light-tertiary-container: #ffd8e4;
43
+ --light-on-tertiary-container: #31111d;
44
+
45
+ --light-error: #b3261e;
46
+ --light-on-error: #ffffff;
47
+ --light-error-container: #f9dedc;
48
+ --light-on-error-container: #410e0b;
49
+
50
+ --light-background: #fffbfe;
51
+ --light-on-background: #1c1b1f;
52
+
53
+ --light-surface: #fffbfe;
54
+ --light-on-surface: #1c1b1f;
55
+ --light-surface-dim: #ded8e1;
56
+ --light-surface-bright: #fffbfe;
57
+
58
+ --light-surface-variant: #e7e0ec;
59
+ --light-on-surface-variant: #49454f;
60
+
61
+ --light-outline: #79747e;
62
+ --light-outline-variant: #cac4d0;
63
+
64
+ --light-surface-container-lowest: #ffffff;
65
+ --light-surface-container-low: #f7f2fa;
66
+ --light-surface-container: #f3edf7;
67
+ --light-surface-container-high: #ece6f0;
68
+ --light-surface-container-highest: #e6e0e9;
69
+
70
+ --light-inverse-surface: #313033;
71
+ --light-inverse-on-surface: #f4eff4;
72
+ --light-inverse-primary: #d0bcff;
73
+
74
+ --light-scrim: #000000;
75
+ --light-shadow: #000000;
76
+
77
+ /* Dark Theme Colors */
78
+ --dark-primary: #d0bcff;
79
+ --dark-on-primary: #381e72;
80
+ --dark-primary-container: #4f378b;
81
+ --dark-on-primary-container: #eaddff;
82
+
83
+ --dark-secondary: #ccc2dc;
84
+ --dark-on-secondary: #332d41;
85
+ --dark-secondary-container: #4a4458;
86
+ --dark-on-secondary-container: #e8def8;
87
+
88
+ --dark-tertiary: #efb8c8;
89
+ --dark-on-tertiary: #492532;
90
+ --dark-tertiary-container: #633b48;
91
+ --dark-on-tertiary-container: #ffd8e4;
92
+
93
+ --dark-error: #f2b8b5;
94
+ --dark-on-error: #601410;
95
+ --dark-error-container: #8c1d18;
96
+ --dark-on-error-container: #f9dedc;
97
+
98
+ --dark-background: #1c1b1f;
99
+ --dark-on-background: #e6e1e5;
100
+
101
+ --dark-surface: #1c1b1f;
102
+ --dark-on-surface: #e6e1e5;
103
+ --dark-surface-dim: #1c1b1f;
104
+ --dark-surface-bright: #3b383e;
105
+
106
+ --dark-surface-variant: #49454f;
107
+ --dark-on-surface-variant: #cac4d0;
108
+
109
+ --dark-outline: #938f99;
110
+ --dark-outline-variant: #49454f;
111
+
112
+ --dark-surface-container-lowest: #0f0d13;
113
+ --dark-surface-container-low: #1d1b20;
114
+ --dark-surface-container: #211f26;
115
+ --dark-surface-container-high: #2b2930;
116
+ --dark-surface-container-highest: #36343b;
117
+
118
+ --dark-inverse-surface: #e6e1e5;
119
+ --dark-inverse-on-surface: #313033;
120
+ --dark-inverse-primary: #6750a4;
121
+
122
+ --dark-scrim: #000000;
123
+ --dark-shadow: #000000;
124
+ }
125
+
126
+ * {
127
+ margin: 0;
128
+ padding: 0;
129
+ box-sizing: border-box;
130
+ }
131
+
132
+ body {
133
+ font-family: 'Torus', 'Noto Color Emoji', 'Noto Sans SC', sans-serif;
134
+ background-color: var(--surface);
135
+ color: var(--on-surface);
136
+ margin: 0;
137
+ padding: 0;
138
+ line-height: 1.5;
139
+ display: flex;
140
+ justify-content: center;
141
+ min-height: 100vh;
142
+ }
143
+
144
+ body.light-theme {
145
+ --primary: var(--dynamic-primary, var(--light-primary));
146
+ --on-primary: var(--dynamic-on-primary, var(--light-on-primary));
147
+ --primary-container: var(
148
+ --dynamic-primary-container,
149
+ var(--light-primary-container)
150
+ );
151
+ --on-primary-container: var(
152
+ --dynamic-on-primary-container,
153
+ var(--light-on-primary-container)
154
+ );
155
+
156
+ --secondary: var(--dynamic-secondary, var(--light-secondary));
157
+ --on-secondary: var(--dynamic-on-secondary, var(--light-on-secondary));
158
+ --secondary-container: var(
159
+ --dynamic-secondary-container,
160
+ var(--light-secondary-container)
161
+ );
162
+ --on-secondary-container: var(
163
+ --dynamic-on-secondary-container,
164
+ var(--light-on-secondary-container)
165
+ );
166
+
167
+ --tertiary: var(--dynamic-tertiary, var(--light-tertiary));
168
+ --on-tertiary: var(--dynamic-on-tertiary, var(--light-on-tertiary));
169
+ --tertiary-container: var(
170
+ --dynamic-tertiary-container,
171
+ var(--light-tertiary-container)
172
+ );
173
+ --on-tertiary-container: var(
174
+ --dynamic-on-tertiary-container,
175
+ var(--light-on-tertiary-container)
176
+ );
177
+
178
+ --error: var(--dynamic-error, var(--light-error));
179
+ --on-error: var(--dynamic-on-error, var(--light-on-error));
180
+ --error-container: var(
181
+ --dynamic-error-container,
182
+ var(--light-error-container)
183
+ );
184
+ --on-error-container: var(
185
+ --dynamic-on-error-container,
186
+ var(--light-on-error-container)
187
+ );
188
+
189
+ --background: var(--dynamic-background, var(--light-background));
190
+ --on-background: var(--dynamic-on-background, var(--light-on-background));
191
+
192
+ --surface: var(--dynamic-surface, var(--light-surface));
193
+ --on-surface: var(--dynamic-on-surface, var(--light-on-surface));
194
+ --surface-dim: var(--dynamic-surface-dim, var(--light-surface-dim));
195
+ --surface-bright: var(
196
+ --dynamic-surface-bright,
197
+ var(--light-surface-bright)
198
+ );
199
+
200
+ --surface-variant: var(
201
+ --dynamic-surface-variant,
202
+ var(--light-surface-variant)
203
+ );
204
+ --on-surface-variant: var(
205
+ --dynamic-on-surface-variant,
206
+ var(--light-on-surface-variant)
207
+ );
208
+
209
+ --outline: var(--dynamic-outline, var(--light-outline));
210
+ --outline-variant: var(
211
+ --dynamic-outline-variant,
212
+ var(--light-outline-variant)
213
+ );
214
+
215
+ --surface-container-lowest: var(
216
+ --dynamic-surface-container-lowest,
217
+ var(--light-surface-container-lowest)
218
+ );
219
+ --surface-container-low: var(
220
+ --dynamic-surface-container-low,
221
+ var(--light-surface-container-low)
222
+ );
223
+ --surface-container: var(
224
+ --dynamic-surface-container,
225
+ var(--light-surface-container)
226
+ );
227
+ --surface-container-high: var(
228
+ --dynamic-surface-container-high,
229
+ var(--light-surface-container-high)
230
+ );
231
+ --surface-container-highest: var(
232
+ --dynamic-surface-container-highest,
233
+ var(--light-surface-container-highest)
234
+ );
235
+
236
+ --inverse-surface: var(
237
+ --dynamic-inverse-surface,
238
+ var(--light-inverse-surface)
239
+ );
240
+ --inverse-on-surface: var(
241
+ --dynamic-inverse-on-surface,
242
+ var(--light-inverse-on-surface)
243
+ );
244
+ --inverse-primary: var(
245
+ --dynamic-inverse-primary,
246
+ var(--light-inverse-primary)
247
+ );
248
+
249
+ --scrim: var(--dynamic-scrim, var(--light-scrim));
250
+ --shadow: var(--dynamic-shadow, var(--light-shadow));
251
+ }
252
+
253
+ body.dark-theme {
254
+ --primary: var(--dynamic-primary, var(--dark-primary));
255
+ --on-primary: var(--dynamic-on-primary, var(--dark-on-primary));
256
+ --primary-container: var(
257
+ --dynamic-primary-container,
258
+ var(--dark-primary-container)
259
+ );
260
+ --on-primary-container: var(
261
+ --dynamic-on-primary-container,
262
+ var(--dark-on-primary-container)
263
+ );
264
+
265
+ --secondary: var(--dynamic-secondary, var(--dark-secondary));
266
+ --on-secondary: var(--dynamic-on-secondary, var(--dark-on-secondary));
267
+ --secondary-container: var(
268
+ --dynamic-secondary-container,
269
+ var(--dark-secondary-container)
270
+ );
271
+ --on-secondary-container: var(
272
+ --dynamic-on-secondary-container,
273
+ var(--dark-on-secondary-container)
274
+ );
275
+
276
+ --tertiary: var(--dynamic-tertiary, var(--dark-tertiary));
277
+ --on-tertiary: var(--dynamic-on-tertiary, var(--dark-on-tertiary));
278
+ --tertiary-container: var(
279
+ --dynamic-tertiary-container,
280
+ var(--dark-tertiary-container)
281
+ );
282
+ --on-tertiary-container: var(
283
+ --dynamic-on-tertiary-container,
284
+ var(--dark-on-tertiary-container)
285
+ );
286
+
287
+ --error: var(--dynamic-error, var(--dark-error));
288
+ --on-error: var(--dynamic-on-error, var(--dark-on-error));
289
+ --error-container: var(
290
+ --dynamic-error-container,
291
+ var(--dark-error-container)
292
+ );
293
+ --on-error-container: var(
294
+ --dynamic-on-error-container,
295
+ var(--dark-on-error-container)
296
+ );
297
+
298
+ --background: var(--dynamic-background, var(--dark-background));
299
+ --on-background: var(--dynamic-on-background, var(--dark-on-background));
300
+
301
+ --surface: var(--dynamic-surface, var(--dark-surface));
302
+ --on-surface: var(--dynamic-on-surface, var(--dark-on-surface));
303
+ --surface-dim: var(--dynamic-surface-dim, var(--dark-surface-dim));
304
+ --surface-bright: var(--dynamic-surface-bright, var(--dark-surface-bright));
305
+
306
+ --surface-variant: var(
307
+ --dynamic-surface-variant,
308
+ var(--dark-surface-variant)
309
+ );
310
+ --on-surface-variant: var(
311
+ --dynamic-on-surface-variant,
312
+ var(--dark-on-surface-variant)
313
+ );
314
+
315
+ --outline: var(--dynamic-outline, var(--dark-outline));
316
+ --outline-variant: var(
317
+ --dynamic-outline-variant,
318
+ var(--dark-outline-variant)
319
+ );
320
+
321
+ --surface-container-lowest: var(
322
+ --dynamic-surface-container-lowest,
323
+ var(--dark-surface-container-lowest)
324
+ );
325
+ --surface-container-low: var(
326
+ --dynamic-surface-container-low,
327
+ var(--dark-surface-container-low)
328
+ );
329
+ --surface-container: var(
330
+ --dynamic-surface-container,
331
+ var(--dark-surface-container)
332
+ );
333
+ --surface-container-high: var(
334
+ --dynamic-surface-container-high,
335
+ var(--dark-surface-container-high)
336
+ );
337
+ --surface-container-highest: var(
338
+ --dynamic-surface-container-highest,
339
+ var(--dark-surface-container-highest)
340
+ );
341
+
342
+ --inverse-surface: var(
343
+ --dynamic-inverse-surface,
344
+ var(--dark-inverse-surface)
345
+ );
346
+ --inverse-on-surface: var(
347
+ --dynamic-inverse-on-surface,
348
+ var(--dark-inverse-on-surface)
349
+ );
350
+ --inverse-primary: var(
351
+ --dynamic-inverse-primary,
352
+ var(--dark-inverse-primary)
353
+ );
354
+
355
+ --scrim: var(--dynamic-scrim, var(--dark-scrim));
356
+ --shadow: var(--dynamic-shadow, var(--dark-shadow));
357
+ }
358
+
359
+ .container {
360
+ width: 900px;
361
+ padding: 16px;
362
+ }
363
+
364
+ .header {
365
+ text-align: center;
366
+ padding: 24px 0;
367
+ margin-bottom: 24px;
368
+ }
369
+
370
+ .header h1 {
371
+ font-size: 34px;
372
+ font-weight: 700;
373
+ color: var(--on-surface);
374
+ margin: 0 0 8px 0;
375
+ }
376
+
377
+ .header .sub-title {
378
+ font-size: 18px;
379
+ color: var(--on-surface-variant);
380
+ }
381
+
382
+ /* 基础组件样式 */
383
+ .card {
384
+ background-color: var(--surface-container);
385
+ border-radius: 16px;
386
+ padding: 16px;
387
+ }
388
+
389
+ .card-elevated {
390
+ background-color: var(--surface-container-high);
391
+ border-radius: 16px;
392
+ padding: 16px;
393
+ }
394
+
395
+ .stat-card {
396
+ background-color: var(--surface-container-high);
397
+ border-radius: 16px;
398
+ padding: 16px;
399
+ text-align: center;
400
+ }
401
+
402
+ .summary {
403
+ display: grid;
404
+ grid-template-columns: repeat(4, 1fr);
405
+ gap: 12px;
406
+ margin-bottom: 24px;
407
+ }
408
+
409
+ /* 统计卡片 - 使用 primary-container 强调重要性 */
410
+ .summary-item {
411
+ background-color: var(--surface-container);
412
+ padding: 20px 16px;
413
+ border-radius: 20px;
414
+ text-align: center;
415
+ }
416
+
417
+ .summary-item .label {
418
+ font-size: 16px;
419
+ color: var(--primary);
420
+ margin-bottom: 8px;
421
+ text-transform: uppercase;
422
+ letter-spacing: 0.5px;
423
+ opacity: 0.8;
424
+ }
425
+
426
+ .summary-item .value {
427
+ font-size: 30px;
428
+ font-weight: 700;
429
+ color: var(--primary);
430
+ }
431
+
432
+ .section-title {
433
+ font-size: 26px;
434
+ font-weight: 600;
435
+ margin-top: 24px;
436
+ margin-bottom: 12px;
437
+ color: var(--on-surface);
438
+ display: flex;
439
+ align-items: center;
440
+ gap: 8px;
441
+ padding-left: 4px;
442
+ }
443
+
444
+ .card-grid {
445
+ display: grid;
446
+ gap: 12px;
447
+ margin-bottom: 24px;
448
+ }
449
+
450
+ /* 群友称号和龙王榜使用 2 列布局 */
451
+ .card-grid.two-columns {
452
+ grid-template-columns: repeat(2, 1fr);
453
+ }
454
+
455
+ /* 用户统计卡片和称号卡片 - 使用 surface-container-high 保持中性 */
456
+ .user-stat-card {
457
+ display: flex;
458
+ align-items: center;
459
+ padding: 16px;
460
+ background: var(--surface-container-high);
461
+ border-radius: 16px;
462
+ }
463
+
464
+ .title-card {
465
+ display: flex;
466
+ align-items: flex-start;
467
+ padding: 16px;
468
+ background: var(--surface-container-high);
469
+ border-radius: 16px;
470
+ }
471
+
472
+ .avatar {
473
+ width: 56px;
474
+ height: 56px;
475
+ border-radius: 50%;
476
+ margin-right: 16px;
477
+ flex-shrink: 0;
478
+ object-fit: cover;
479
+ }
480
+
481
+ .user-details,
482
+ .title-details {
483
+ flex-grow: 1;
484
+ }
485
+
486
+ .nickname {
487
+ font-size: 20px;
488
+ font-weight: 600;
489
+ color: var(--on-surface);
490
+ margin-bottom: 8px;
491
+ }
492
+
493
+ .stats-grid {
494
+ display: grid;
495
+ grid-template-columns: 1fr 1fr;
496
+ gap: 6px 16px;
497
+ font-size: 18px;
498
+ color: var(--on-surface);
499
+ }
500
+
501
+ .stats-grid strong {
502
+ color: var(--primary);
503
+ font-weight: 600;
504
+ }
505
+
506
+ .title-badge {
507
+ font-size: 20px;
508
+ font-weight: 600;
509
+ color: var(--primary);
510
+ margin-bottom: 6px;
511
+ }
512
+
513
+ .title-reason {
514
+ font-size: 18px;
515
+ color: var(--on-surface);
516
+ line-height: 1.6;
517
+ }
518
+
519
+ /* 热门话题卡片 - 使用 secondary-container */
520
+ .topic-card {
521
+ background: var(--surface-container-high);
522
+ padding: 16px;
523
+ border-radius: 16px;
524
+ margin-bottom: 12px;
525
+ }
526
+
527
+ .topic-title {
528
+ font-weight: 600;
529
+ font-size: 22px;
530
+ margin-bottom: 10px;
531
+ color: var(--on-surface);
532
+ }
533
+
534
+ .topic-contributors {
535
+ font-size: 16px;
536
+ color: var(--on-surface-variant);
537
+ margin-bottom: 12px;
538
+ opacity: 0.8;
539
+ }
540
+
541
+ .topic-detail {
542
+ font-size: 18px;
543
+ color: var(--on-surface-variant);
544
+ line-height: 1.7;
545
+ opacity: 0.9;
546
+ }
547
+
548
+ /* 圣经语录卡片 - 使用 secondary-container */
549
+ .quote-card {
550
+ background: var(--surface-container-high);
551
+ padding: 16px;
552
+ border-radius: 16px;
553
+ margin-bottom: 12px;
554
+ }
555
+
556
+ .quote-content {
557
+ font-weight: 600;
558
+ font-size: 22px;
559
+ margin-bottom: 10px;
560
+ color: var(--on-surface);
561
+ font-style: normal;
562
+ background: transparent;
563
+ padding: 0;
564
+ border-radius: 0;
565
+ border-left: 0;
566
+ }
567
+
568
+ .quote-sender {
569
+ font-size: 16px;
570
+ color: var(--on-surface-variant);
571
+ margin-bottom: 12px;
572
+ opacity: 0.8;
573
+ }
574
+
575
+ .quote-reason {
576
+ font-size: 18px;
577
+ color: var(--on-surface-variant);
578
+ line-height: 1.7;
579
+ opacity: 0.9;
580
+ }
581
+
582
+ .quote-footer {
583
+ margin-top: 12px;
584
+ padding-top: 12px;
585
+ border-top: 1px solid var(--outline-variant);
586
+ }
587
+
588
+ .empty-state {
589
+ padding: 32px;
590
+ text-align: center;
591
+ color: var(--on-surface-variant);
592
+ background: var(--surface-container);
593
+ border-radius: 16px;
594
+ font-size: 18px;
595
+ }
596
+
597
+ .activity-chart-container {
598
+ margin-top: 16px;
599
+ }
600
+
601
+ /* 活动图表容器 - 使用 primary-container */
602
+ .activity-chart {
603
+ display: flex;
604
+ align-items: flex-end;
605
+ gap: 4px;
606
+ height: 200px;
607
+ background: var(--surface-container);
608
+ border-radius: 20px;
609
+ padding: 24px 16px 16px;
610
+ }
611
+
612
+ .activity-bar {
613
+ flex: 1;
614
+ display: flex;
615
+ flex-direction: column;
616
+ align-items: center;
617
+ justify-content: flex-end;
618
+ min-width: 0;
619
+ height: 100%;
620
+ }
621
+
622
+ .activity-bar-bar {
623
+ width: 100%;
624
+ max-width: 24px;
625
+ background: linear-gradient(to top, var(--primary), var(--secondary));
626
+ border-radius: 8px 8px 0 0;
627
+ transition: all 0.3s ease;
628
+ }
629
+
630
+ .activity-bar:hover .activity-bar-bar {
631
+ opacity: 0.8;
632
+ transform: translateY(-3px);
633
+ }
634
+
635
+ .activity-bar-count {
636
+ font-size: 15px;
637
+ color: var(--primary);
638
+ font-weight: 700;
639
+ margin-bottom: 6px;
640
+ opacity: 1;
641
+ }
642
+
643
+ .activity-bar-label {
644
+ font-size: 15px;
645
+ margin-top: 10px;
646
+ color: var(--primary);
647
+ white-space: nowrap;
648
+ opacity: 0.8;
649
+ }
650
+
651
+ .chart-legend {
652
+ text-align: center;
653
+ margin-top: 12px;
654
+ font-size: 17px;
655
+ color: var(--on-surface-variant);
656
+ }
657
+
658
+ footer {
659
+ text-align: center;
660
+ margin-top: 32px;
661
+ margin-bottom: 16px;
662
+ color: var(--on-surface-variant);
663
+ font-size: 16px;
664
+ padding-top: 16px;
665
+ border-top: 1px solid var(--outline-variant);
666
+ }
667
+
668
+ /* 隐藏的图片用于动态取色 */
669
+ #dynamic-color-source {
670
+ display: none;
671
+ }
672
+
673
+ /* User Persona Specific Styles */
674
+ .user-header {
675
+ margin-bottom: 24px;
676
+ }
677
+
678
+ .avatar-large {
679
+ width: 128px;
680
+ height: 128px;
681
+ border-radius: 50%;
682
+ margin-bottom: 12px;
683
+ object-fit: cover;
684
+ }
685
+
686
+ /* 用户画像摘要 - 使用 secondary-container */
687
+ .persona-summary {
688
+ background: var(--surface-container);
689
+ border-radius: 16px;
690
+ padding: 16px;
691
+ font-size: 18px;
692
+ line-height: 1.6;
693
+ color: var(--on-surface-variant);
694
+ margin-bottom: 24px;
695
+ }
696
+
697
+ .tag-container {
698
+ display: flex;
699
+ flex-wrap: wrap;
700
+ gap: 10px;
701
+ margin-bottom: 25px;
702
+ }
703
+
704
+ .tag {
705
+ background: var(--secondary-container);
706
+ color: var(--on-secondary-container);
707
+ padding: 6px 12px;
708
+ border-radius: 8px;
709
+ font-size: 16px;
710
+ font-weight: 500;
711
+ }
712
+
713
+ /* 沟通风格块 - 使用 secondary-container */
714
+ .persona-block {
715
+ background: var(--surface-container);
716
+ padding: 16px;
717
+ border-radius: 16px;
718
+ font-size: 18px;
719
+ line-height: 1.6;
720
+ color: var(--on-surface-variant);
721
+ }
722
+
723
+ .persona-block p {
724
+ margin: 0;
725
+ }
726
+
727
+ .persona-block ul {
728
+ margin: 0;
729
+ padding-left: 20px;
730
+ }
731
+
732
+ .persona-block.evidence ul {
733
+ color: var(--on-surface-variant);
734
+ font-size: 17px;
735
+ list-style-type: none;
736
+ padding-left: 0;
737
+ }
738
+
739
+ .persona-block.evidence li {
740
+ border-left: 3px solid var(--primary);
741
+ padding-left: 15px;
742
+ margin-bottom: 15px !important;
743
+ }
744
+
745
+ .persona-block.evidence .evidence-quote {
746
+ color: var(--on-surface);
747
+ font-weight: 500;
748
+ line-height: 1.6;
749
+ }
750
+
751
+ .persona-block.evidence .evidence-meta {
752
+ color: var(--on-surface-variant);
753
+ font-size: 16px;
754
+ margin-top: 4px;
755
+ }
756
+
757
+ .persona-block li {
758
+ margin-bottom: 8px;
759
+ }
760
+
761
+ .persona-block li:last-child {
762
+ margin-bottom: 0;
763
+ }
764
+
765
+ /* 事实依据卡片 - 使用 secondary-container */
766
+ .card.outlined-card {
767
+ background: var(--surface-container);
768
+ border-radius: 12px;
769
+ padding: 12px 16px;
770
+ margin-bottom: 12px;
771
+ }
772
+
773
+ .card.outlined-card p {
774
+ margin: 0;
775
+ color: var(--on-surface-variant);
776
+ line-height: 1.6;
777
+ font-size: 18px;
778
+ }
779
+
780
+ .chip {
781
+ display: inline-block;
782
+ background: var(--secondary-container);
783
+ color: var(--on-secondary-container);
784
+ padding: 4px 10px;
785
+ border-radius: 8px;
786
+ font-size: 16px;
787
+ font-weight: 500;
788
+ }
789
+
790
+ /*
791
+ * Material Design 3 颜色使用规范
792
+ *
793
+ * Surface 系列 - 背景和容器层级:
794
+ * - surface: 页面主背景
795
+ * - surface-dim: 暗色表面变体
796
+ * - surface-bright: 亮色表面变体
797
+ * - surface-container-lowest: 最低层级容器
798
+ * - surface-container-low: 低层级容器
799
+ * - surface-container: 标准容器(默认卡片)
800
+ * - surface-container-high: 高层级容器(强调卡片,如统计卡)
801
+ * - surface-container-highest: 最高层级容器(特殊强调)
802
+ *
803
+ * 文本颜色:
804
+ * - on-surface: 主要文本(在 surface 上)
805
+ * - on-surface-variant: 次要文本(在 surface 上)
806
+ * - on-background: 背景上的文本
807
+ *
808
+ * Primary 强调色系统:
809
+ * - primary: 主要强调色(按钮、重点元素)
810
+ * - on-primary: primary 上的文本
811
+ * - primary-container: primary 容器背景
812
+ * - on-primary-container: primary 容器上的文本
813
+ *
814
+ * Secondary 次要色系统:
815
+ * - secondary: 次要强调色
816
+ * - on-secondary: secondary 上的文本
817
+ * - secondary-container: 次要容器(如标签、芯片)
818
+ * - on-secondary-container: 次要容器上的文本
819
+ *
820
+ * Tertiary 第三色系统:
821
+ * - tertiary: 第三强调色
822
+ * - on-tertiary: tertiary 上的文本
823
+ * - tertiary-container: 第三容器
824
+ * - on-tertiary-container: 第三容器上的文本
825
+ *
826
+ * Error 错误色系统:
827
+ * - error: 错误/警告色
828
+ * - on-error: error 上的文本
829
+ * - error-container: 错误容器
830
+ * - on-error-container: 错误容器上的文本
831
+ *
832
+ * Inverse 反色系统(用于高对比场景):
833
+ * - inverse-surface: 反转表面色
834
+ * - inverse-on-surface: 反转表面上的文本
835
+ * - inverse-primary: 反转主色
836
+ *
837
+ * 分隔和边框:
838
+ * - outline: 主要边框
839
+ * - outline-variant: 次要边框/分隔线
840
+ *
841
+ * 阴影和遮罩:
842
+ * - scrim: 遮罩层(半透明黑色)
843
+ * - shadow: 阴影(通常为黑色)
844
+ *
845
+ * 动态颜色优先级:
846
+ * 所有颜色都优先使用 --dynamic-* 变量(从图片提取),
847
+ * 如果动态颜色不可用,则回退到静态的 --light-* 或 --dark-* 变量
848
+ *
849
+ * ===== 本项目颜色使用策略 =====
850
+ *
851
+ * 1. 统计数据卡片 (.summary-item)
852
+ * - 背景: primary-container
853
+ * - 文本: on-primary-container
854
+ * - 用途: 突出重要的数据统计
855
+ *
856
+ * 2. 活动图表 (.activity-chart)
857
+ * - 背景: primary-container
858
+ * - 柱状图: primary → secondary 渐变
859
+ * - 文本: on-primary-container
860
+ * - 用途: 数据可视化
861
+ *
862
+ * 3. 所有内容卡片 (secondary-container)
863
+ * - .persona-summary - 用户画像摘要
864
+ * - .persona-block - 沟通风格块
865
+ * - .topic-card - 热门话题卡片
866
+ * - .quote-card - 圣经语录卡片
867
+ * - .card.outlined-card - 事实依据卡片
868
+ * - .tag, .chip - 标签/芯片
869
+ * - 文本: on-secondary-container
870
+ * - 用途: 统一的内容展示,保持视觉一致性
871
+ *
872
+ * 4. 用户统计/称号卡片 (.user-stat-card, .title-card)
873
+ * - 背景: surface-container-high
874
+ * - 文本: on-surface
875
+ * - 用途: 中性列表项
876
+ *
877
+ * 5. 标题文本 (.section-title)
878
+ * - 颜色: on-surface
879
+ * - 用途: 保持简洁,不过度强调
880
+ */