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,1094 @@
1
+ /* 卡通手账调色板 */
2
+ :root {
3
+ --bg-paper: #fdfbf7;
4
+ --ink-primary: #5d4037;
5
+ /* 像铅笔/墨水的深褐色 */
6
+ --ink-secondary: #8d6e63;
7
+
8
+ --color-yellow: #fff9c4;
9
+ --color-pink: #ffccbc;
10
+ --color-blue: #b3e5fc;
11
+ --color-green: #c8e6c9;
12
+ --color-purple: #e1bee7;
13
+
14
+ --accent-orange: #ff7043;
15
+
16
+ /* MBTI 专属高对比色 */
17
+ --mbti-bg: #ede7f6;
18
+ --mbti-border: #9575cd;
19
+ --mbti-text: #512da8;
20
+
21
+ /* 称号专属色 */
22
+ --title-bg: #fffde7;
23
+ --title-border: #ffb74d;
24
+ --title-text: #bf360c;
25
+
26
+ --font-title: 'ZCOOL KuaiLe', cursive;
27
+ /* 标题字体 */
28
+ --font-hand: 'Patrick Hand', "KaiTi", "STKaiti", serif;
29
+ /* 手写体 */
30
+ --font-body: 'Noto Sans SC', sans-serif;
31
+ /* 正文体 */
32
+ }
33
+
34
+ * {
35
+ margin: 0;
36
+ padding: 0;
37
+ box-sizing: border-box;
38
+ }
39
+
40
+ body {
41
+ font-family: var(--font-body);
42
+ color: var(--ink-primary);
43
+ background-color: var(--bg-paper);
44
+ /* 点阵纸背景纹理 */
45
+ background-image: radial-gradient(#ddd 2px, transparent 2px);
46
+ background-size: 20px 20px;
47
+ min-height: 100vh;
48
+ padding: 40px 20px;
49
+ line-height: 1.6;
50
+ }
51
+
52
+ /* SVG 图标通用样式 */
53
+ .doodle {
54
+ width: 1em;
55
+ height: 1em;
56
+ fill: currentColor;
57
+ display: inline-block;
58
+ vertical-align: middle;
59
+ }
60
+
61
+ .container {
62
+ max-width: 1000px;
63
+ margin: 0 auto;
64
+ position: relative;
65
+ background: #fff;
66
+ border: 2px solid var(--ink-primary);
67
+ border-radius: 20px;
68
+ padding: 40px;
69
+ /* Stacked "Paper" Effect: Blue Shadow -> Pink Shadow -> Soft Drop Shadow */
70
+ box-shadow:
71
+ 8px 8px 0 var(--color-blue),
72
+ 16px 16px 0 var(--color-pink),
73
+ 0 20px 40px rgba(0, 0, 0, 0.1);
74
+ }
75
+
76
+ /* Stitching Effect */
77
+ .container::before {
78
+ content: "";
79
+ position: absolute;
80
+ top: 12px;
81
+ bottom: 12px;
82
+ left: 12px;
83
+ right: 12px;
84
+ border: 2px dashed var(--ink-secondary);
85
+ border-radius: 15px;
86
+ pointer-events: none;
87
+ opacity: 0.5;
88
+ }
89
+
90
+ /* ==================== 1. 头部设计 ==================== */
91
+ .header {
92
+ text-align: center;
93
+ margin-bottom: 50px;
94
+ position: relative;
95
+ padding-top: 20px;
96
+ }
97
+
98
+ .title-sticker {
99
+ display: inline-block;
100
+ background: #fff;
101
+ padding: 20px 60px;
102
+ border: 3px dashed var(--ink-primary);
103
+ border-radius: 15px;
104
+ box-shadow: 5px 5px 0 var(--color-blue);
105
+ transform: rotate(-2deg);
106
+ position: relative;
107
+ }
108
+
109
+ .title-sticker h1 {
110
+ font-family: var(--font-title);
111
+ font-size: 3.2rem;
112
+ color: var(--accent-orange);
113
+ margin: 0;
114
+ -webkit-text-stroke: 1px var(--ink-primary);
115
+ }
116
+
117
+ .date-badge {
118
+ position: absolute;
119
+ bottom: -15px;
120
+ right: -20px;
121
+ background: var(--color-yellow);
122
+ padding: 5px 15px;
123
+ font-family: var(--font-hand);
124
+ font-size: 1.2rem;
125
+ box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.1);
126
+ transform: rotate(5deg);
127
+ border: 1px solid var(--ink-primary);
128
+ }
129
+
130
+ .tape {
131
+ position: absolute;
132
+ top: -15px;
133
+ left: 50%;
134
+ transform: translateX(-50%);
135
+ width: 120px;
136
+ height: 25px;
137
+ background: rgba(255, 171, 145, 0.7);
138
+ opacity: 0.8;
139
+ mask-image: radial-gradient(circle at 5px, transparent 4px, black 5px);
140
+ mask-size: 10px 100%;
141
+ mask-repeat: repeat-x;
142
+ }
143
+
144
+ /* ==================== 2. 统计邮票 ==================== */
145
+ .stats-wrapper {
146
+ display: flex;
147
+ gap: 25px;
148
+ margin-bottom: 40px;
149
+ align-items: stretch;
150
+ }
151
+
152
+ .stats-grid {
153
+ flex: 2;
154
+ display: grid;
155
+ grid-template-columns: repeat(2, 1fr);
156
+ grid-template-rows: repeat(2, 1fr);
157
+ gap: 20px;
158
+ }
159
+
160
+ .stamp {
161
+ width: 100%;
162
+ height: 100%;
163
+ background: #fff;
164
+ padding: 15px;
165
+ box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.1);
166
+ border: 2px solid var(--ink-primary);
167
+ border-radius: 12px;
168
+ position: relative;
169
+ display: flex;
170
+ flex-direction: column;
171
+ align-items: center;
172
+ justify-content: center;
173
+ transition: transform 0.2s;
174
+ }
175
+
176
+ /* 装饰性背景纹理 */
177
+ .stamp::after {
178
+ content: "";
179
+ position: absolute;
180
+ top: 5px;
181
+ bottom: 5px;
182
+ left: 5px;
183
+ right: 5px;
184
+ border: 1px dotted #e0e0e0;
185
+ border-radius: 8px;
186
+ pointer-events: none;
187
+ }
188
+
189
+ .stamp:hover {
190
+ transform: translateY(-2px);
191
+ }
192
+
193
+ .stamp-inner {
194
+ text-align: center;
195
+ z-index: 1;
196
+ }
197
+
198
+ .stamp-num {
199
+ font-family: var(--font-title);
200
+ font-size: 1.8rem;
201
+ color: var(--accent-orange);
202
+ line-height: 1;
203
+ margin: 5px 0;
204
+ }
205
+
206
+ .stamp-label {
207
+ font-family: var(--font-hand);
208
+ font-size: 1rem;
209
+ color: var(--ink-secondary);
210
+ }
211
+
212
+ /* ==================== 布局容器 ==================== */
213
+ .grid-layout {
214
+ display: grid;
215
+ grid-template-columns: repeat(12, 1fr);
216
+ gap: 30px;
217
+ }
218
+
219
+ .section-title {
220
+ font-family: var(--font-title);
221
+ font-size: 1.5rem;
222
+ margin-bottom: 15px;
223
+ display: flex;
224
+ align-items: center;
225
+ gap: 8px;
226
+ }
227
+
228
+ .section-title .doodle {
229
+ color: var(--accent-orange);
230
+ font-size: 1.3em;
231
+ }
232
+
233
+ /* ==================== 3. 活跃时段 (Highlight) ==================== */
234
+ .highlight-section {
235
+ flex: 1;
236
+ background: var(--color-yellow);
237
+ padding: 20px;
238
+ border: 2px solid var(--ink-primary);
239
+ border-radius: 20px;
240
+ box-shadow: 6px 6px 0 var(--color-pink);
241
+ display: flex;
242
+ flex-direction: column;
243
+ align-items: center;
244
+ justify-content: center;
245
+ text-align: center;
246
+ position: relative;
247
+ background-image: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.2) 10px, transparent 10px, transparent 20px);
248
+ }
249
+
250
+ .tape-top {
251
+ width: 60px;
252
+ height: 20px;
253
+ background: rgba(255, 255, 255, 0.5);
254
+ position: absolute;
255
+ top: -10px;
256
+ left: 50%;
257
+ transform: translateX(-50%);
258
+ }
259
+
260
+ .time-big {
261
+ font-family: var(--font-title);
262
+ font-size: 2.5rem;
263
+ color: var(--ink-primary);
264
+ margin: 10px 0;
265
+ }
266
+
267
+ .time-desc {
268
+ font-family: var(--font-hand);
269
+ color: var(--ink-secondary);
270
+ font-size: 1.5rem;
271
+ }
272
+
273
+ /* ==================== 4. 24H 活跃图表 (横向底部) ==================== */
274
+ .chart-section-bottom {
275
+ margin-top: 40px;
276
+ padding: 20px;
277
+ background: #fff;
278
+ border: 2px solid var(--ink-primary);
279
+ border-radius: 12px;
280
+ /* Soft shadow + line border look */
281
+ box-shadow: 5px 5px 0 var(--color-purple);
282
+ position: relative;
283
+ /* Graph paper background */
284
+ background-image: linear-gradient(rgba(0, 0, 0, 0.05) 1px, transparent 1px),
285
+ linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, transparent 1px);
286
+ background-size: 20px 20px;
287
+ }
288
+
289
+ .chart-header {
290
+ font-family: var(--font-title);
291
+ font-size: 1.4rem;
292
+ color: var(--ink-primary);
293
+ margin-bottom: 20px;
294
+ display: flex;
295
+ align-items: center;
296
+ gap: 10px;
297
+ }
298
+
299
+ .chart-container-horizontal {
300
+ display: flex;
301
+ align-items: flex-end;
302
+ justify-content: space-between;
303
+ height: 180px;
304
+ /* Chart height */
305
+ padding-bottom: 5px;
306
+ gap: 4px;
307
+ }
308
+
309
+ .chart-column {
310
+ flex: 1;
311
+ display: flex;
312
+ flex-direction: column;
313
+ align-items: center;
314
+ justify-content: flex-end;
315
+ height: 100%;
316
+ position: relative;
317
+ }
318
+
319
+ .bar-value-top {
320
+ font-family: var(--font-hand);
321
+ font-size: 0.8rem;
322
+ color: var(--ink-secondary);
323
+ margin-bottom: 4px;
324
+ opacity: 0;
325
+ /* Hide by default to avoid clutter, or show only if > 0 */
326
+ }
327
+
328
+ /* Show value if needed, or maybe only for peaks */
329
+ .chart-column:hover .bar-value-top,
330
+ .chart-column.show-value .bar-value-top {
331
+ opacity: 1;
332
+ }
333
+
334
+ .bar-vertical {
335
+ width: 60%;
336
+ min-width: 6px;
337
+ max-width: 14px;
338
+ border: 1px solid var(--ink-primary);
339
+ border-bottom: none;
340
+ border-top-left-radius: 4px;
341
+ border-top-right-radius: 4px;
342
+ background-color: var(--color-blue);
343
+ /* Crayon-like texture overlay */
344
+ background-image: url("data:image/svg+xml,%3Csvg width='4' height='4' viewBox='0 0 4 4' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 4L4 0' stroke='rgba(0,0,0,0.1)' stroke-width='1'/%3E%3C/svg%3E");
345
+ transition: height 0.5s ease;
346
+ }
347
+
348
+ .bar-label-x {
349
+ margin-top: 6px;
350
+ font-family: var(--font-hand);
351
+ font-size: 0.75rem;
352
+ color: var(--ink-primary);
353
+ transform: rotate(-45deg);
354
+ transform-origin: center top;
355
+ white-space: nowrap;
356
+ }
357
+
358
+ /* ==================== 5. 话题列表 ==================== */
359
+ .topic-section {
360
+ grid-column: span 12;
361
+ background: #fff;
362
+ padding: 30px 30px 30px 50px;
363
+ border: 1px solid #ddd;
364
+ background-image: repeating-linear-gradient(transparent, transparent 39px, #b2ebf2 39px, #b2ebf2 40px);
365
+ line-height: 40px;
366
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.03);
367
+ position: relative;
368
+ }
369
+
370
+ .paper-holes {
371
+ position: absolute;
372
+ left: 15px;
373
+ top: 0;
374
+ bottom: 0;
375
+ width: 20px;
376
+ display: flex;
377
+ flex-direction: column;
378
+ justify-content: space-evenly;
379
+ }
380
+
381
+ .hole {
382
+ width: 12px;
383
+ height: 12px;
384
+ background: var(--bg-paper);
385
+ border-radius: 50%;
386
+ box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.1);
387
+ }
388
+
389
+ .topic-item {
390
+ display: flex;
391
+ align-items: flex-start;
392
+ margin-bottom: 0;
393
+ padding-top: 4px;
394
+ }
395
+
396
+ .check-box {
397
+ width: 20px;
398
+ height: 20px;
399
+ border: 2px solid var(--ink-primary);
400
+ margin-right: 15px;
401
+ margin-top: 8px;
402
+ display: flex;
403
+ align-items: center;
404
+ justify-content: center;
405
+ background: #fff;
406
+ flex-shrink: 0;
407
+ }
408
+
409
+ .check-tick {
410
+ width: 14px;
411
+ height: 14px;
412
+ background: var(--accent-orange);
413
+ clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
414
+ }
415
+
416
+ .topic-content {
417
+ line-height: 1.5;
418
+ padding-top: 6px;
419
+ flex: 1;
420
+ }
421
+
422
+ .topic-title {
423
+ font-family: var(--font-title);
424
+ font-size: 1.5rem;
425
+ margin-right: 10px;
426
+ background: linear-gradient(transparent 60%, var(--color-pink) 60%);
427
+ display: inline-block;
428
+ }
429
+
430
+ .topic-detail {
431
+ font-family: var(--font-hand);
432
+ color: #666;
433
+ font-size: 1.2rem;
434
+ margin-top: 8px;
435
+ line-height: 1.4;
436
+ }
437
+
438
+ /* ==================== 6. 群友画像 ==================== */
439
+ .user-section {
440
+ grid-column: span 12;
441
+ margin-top: 20px;
442
+ }
443
+
444
+ .masonry-grid {
445
+ column-count: 2;
446
+ column-gap: 25px;
447
+ }
448
+
449
+ .user-card {
450
+ break-inside: avoid;
451
+ background: #fff;
452
+ border: 2px solid var(--ink-primary);
453
+ border-radius: 16px;
454
+ padding: 24px;
455
+ margin-bottom: 30px;
456
+ /* Muted Blue-Grey Shadow */
457
+ box-shadow: 6px 6px 0 rgba(70, 80, 100, 0.15), 6px 6px 0 1px var(--ink-primary);
458
+ position: relative;
459
+ display: flex;
460
+ flex-direction: column;
461
+ transition: transform 0.2s;
462
+ /* Very subtle grain */
463
+ background-color: #fff;
464
+ background-image: url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E");
465
+ }
466
+
467
+ .user-card:hover {
468
+ transform: translateY(-4px) rotate(1deg);
469
+ z-index: 5;
470
+ box-shadow: 8px 8px 0 rgba(0, 0, 0, 0.15), 8px 8px 0 2px var(--ink-primary);
471
+ }
472
+
473
+ .card-tape {
474
+ position: absolute;
475
+ top: -12px;
476
+ left: 50%;
477
+ transform: translateX(-50%) rotate(-2deg);
478
+ width: 80px;
479
+ height: 24px;
480
+ background: rgba(255, 255, 255, 0.4);
481
+ /* Fallback */
482
+ background-color: var(--color-blue);
483
+ opacity: 0.8;
484
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
485
+ /* Jagged edges for tape look */
486
+ mask-image: linear-gradient(135deg, transparent 5px, black 0) top left, linear-gradient(-135deg, transparent 5px, black 0) top right, linear-gradient(45deg, transparent 5px, black 0) bottom left, linear-gradient(-45deg, transparent 5px, black 0) bottom right;
487
+ mask-size: 51% 51%;
488
+ mask-repeat: no-repeat;
489
+ -webkit-mask-image: radial-gradient(circle at 2px 2px, transparent 2px, black 2.5px);
490
+ -webkit-mask-size: 100% 100%;
491
+ border-left: 2px dashed rgba(255, 255, 255, 0.3);
492
+ border-right: 2px dashed rgba(255, 255, 255, 0.3);
493
+ }
494
+
495
+ .user-card:nth-child(2n) .card-tape {
496
+ background-color: var(--color-pink);
497
+ transform: translateX(-50%) rotate(3deg);
498
+ }
499
+
500
+ .user-card:nth-child(3n) .card-tape {
501
+ background-color: var(--color-green);
502
+ transform: translateX(-50%) rotate(-1deg);
503
+ }
504
+
505
+ .user-header {
506
+ display: flex;
507
+ align-items: flex-start;
508
+ gap: 15px;
509
+ margin-bottom: 15px;
510
+ border-bottom: 2px dashed #f0f0f0;
511
+ padding-bottom: 15px;
512
+ }
513
+
514
+ .u-avatar {
515
+ width: 60px;
516
+ height: 60px;
517
+ border-radius: 50%;
518
+ border: 2px solid var(--ink-primary);
519
+ background: #eee;
520
+ flex-shrink: 0;
521
+ overflow: hidden;
522
+ display: flex;
523
+ align-items: center;
524
+ justify-content: center;
525
+ color: #aaa;
526
+ }
527
+
528
+ .u-info {
529
+ flex: 1;
530
+ min-width: 0;
531
+ display: flex;
532
+ flex-direction: column;
533
+ gap: 6px;
534
+ }
535
+
536
+ .u-name {
537
+ font-family: var(--font-title);
538
+ font-size: 1.25rem;
539
+ line-height: 1.2;
540
+ word-break: break-all;
541
+ overflow-wrap: break-word;
542
+ }
543
+
544
+ .badges {
545
+ display: flex;
546
+ flex-wrap: wrap;
547
+ gap: 8px;
548
+ }
549
+
550
+ .badge {
551
+ font-size: 0.85rem;
552
+ padding: 2px 8px;
553
+ border-radius: 6px;
554
+ font-family: var(--font-hand);
555
+ white-space: nowrap;
556
+ box-shadow: 1px 1px 0 rgba(0, 0, 0, 0.1);
557
+ display: flex;
558
+ align-items: center;
559
+ }
560
+
561
+ .badge.title {
562
+ background: var(--title-bg);
563
+ color: var(--title-text);
564
+ border: 1px solid var(--title-border);
565
+ }
566
+
567
+ .badge.mbti {
568
+ background: var(--mbti-bg);
569
+ color: var(--mbti-text);
570
+ border: 1px solid var(--mbti-border);
571
+ font-weight: bold;
572
+ letter-spacing: 0.5px;
573
+ }
574
+
575
+ .u-reason {
576
+ font-family: var(--font-hand);
577
+ font-size: 1.05rem;
578
+ color: #444;
579
+ line-height: 1.6;
580
+
581
+ /* Quote Block Style */
582
+ background: #f8fbff;
583
+ border-left: 4px solid var(--color-blue);
584
+ padding: 12px 15px;
585
+ margin-top: 15px;
586
+ border-radius: 4px;
587
+ position: relative;
588
+ word-break: break-all;
589
+ overflow-wrap: break-word;
590
+ }
591
+
592
+ /* ==================== 7. 每日回响 ==================== */
593
+ .quotes-section {
594
+ grid-column: span 12;
595
+ display: flex;
596
+ flex-direction: column;
597
+ gap: 35px;
598
+ margin-top: 20px;
599
+ }
600
+
601
+ .quote-wrapper {
602
+ display: flex;
603
+ flex-direction: column;
604
+ width: 100%;
605
+ max-width: 90%;
606
+ position: relative;
607
+ }
608
+
609
+ .q-flex-container {
610
+ display: flex;
611
+ gap: 15px;
612
+ align-items: flex-start;
613
+ }
614
+
615
+ .q-user-col {
616
+ display: flex;
617
+ flex-direction: column;
618
+ align-items: center;
619
+ flex-shrink: 0;
620
+ width: 70px;
621
+ }
622
+
623
+ .q-avatar-box {
624
+ position: relative;
625
+ margin-bottom: 5px;
626
+ }
627
+
628
+ .q-avatar {
629
+ width: 60px;
630
+ height: 60px;
631
+ border-radius: 50%;
632
+ border: 3px solid #fff;
633
+ background: #fff;
634
+ object-fit: cover;
635
+ box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.1);
636
+ }
637
+
638
+ /* Left/Odd: Blue Shadow */
639
+ .quote-wrapper:nth-child(odd) .q-avatar {
640
+ box-shadow: 0 0 0 2px var(--color-blue);
641
+ }
642
+
643
+ /* Right/Even: Orange Shadow */
644
+ .quote-wrapper:nth-child(even) .q-avatar {
645
+ box-shadow: 0 0 0 2px var(--accent-orange);
646
+ }
647
+
648
+ .q-content-col {
649
+ flex: 1;
650
+ display: flex;
651
+ flex-direction: column;
652
+ min-width: 0;
653
+ align-items: flex-start;
654
+ }
655
+
656
+ .q-sender-name {
657
+ font-family: var(--font-hand);
658
+ font-size: 1.25rem;
659
+ color: var(--ink-primary);
660
+ margin-bottom: 2px;
661
+ margin-left: 10px;
662
+ line-height: 1.2;
663
+ position: relative;
664
+ display: inline-block;
665
+ }
666
+
667
+ /* Underline Element */
668
+ .q-sender-name::after {
669
+ content: "";
670
+ display: block;
671
+ width: 100%;
672
+ height: 4px;
673
+ background: var(--color-blue);
674
+ opacity: 0.4;
675
+ border-radius: 2px;
676
+ margin-top: -6px;
677
+ }
678
+
679
+ /* Right-aligned layout for even items */
680
+ .quote-wrapper:nth-child(even) {
681
+ align-self: flex-end;
682
+ align-items: flex-end;
683
+ }
684
+
685
+ .quote-wrapper:nth-child(even) .q-flex-container {
686
+ flex-direction: row-reverse;
687
+ }
688
+
689
+ .quote-wrapper:nth-child(even) .q-content-col {
690
+ align-items: flex-end;
691
+ }
692
+
693
+ .quote-wrapper:nth-child(even) .q-sender-name {
694
+ margin-left: 0;
695
+ margin-right: 15px;
696
+ text-align: right;
697
+ }
698
+
699
+ .quote-wrapper:nth-child(even) .q-sender-name::after {
700
+ background: var(--accent-orange);
701
+ }
702
+
703
+ .q-bubble {
704
+ background: #fff;
705
+ border: 2px solid var(--ink-primary);
706
+ padding: 15px 25px;
707
+ border-radius: 20px;
708
+ box-shadow: 4px 4px 0 var(--color-blue);
709
+ position: relative;
710
+ z-index: 2;
711
+ width: fit-content;
712
+ max-width: 100%;
713
+ }
714
+
715
+ .quote-wrapper:nth-child(odd) .q-bubble {
716
+ border-top-left-radius: 4px;
717
+ }
718
+
719
+ .quote-wrapper:nth-child(even) .q-bubble {
720
+ border-top-right-radius: 4px;
721
+ border-bottom-right-radius: 20px;
722
+ background: var(--color-yellow);
723
+ box-shadow: -4px 4px 0 var(--color-pink);
724
+ text-align: right;
725
+ border-bottom-left-radius: 20px;
726
+ }
727
+
728
+ .q-content {
729
+ font-family: var(--font-title);
730
+ font-size: 1.3rem;
731
+ line-height: 1.4;
732
+ margin-bottom: 5px;
733
+ position: relative;
734
+ }
735
+
736
+ .q-quote-mark {
737
+ display: none;
738
+ }
739
+
740
+ .q-analysis-note {
741
+ background: #fffde7;
742
+ padding: 10px 15px;
743
+ font-size: 0.9rem;
744
+ color: #666;
745
+ width: fit-content;
746
+ max-width: 100%;
747
+ margin-top: -5px;
748
+ box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1);
749
+ border: 1px solid #ddd;
750
+ position: relative;
751
+ z-index: 1;
752
+ font-family: var(--font-body);
753
+ line-height: 1.5;
754
+ border-radius: 0 0 10px 10px;
755
+ }
756
+
757
+ .quote-wrapper:nth-child(odd) .q-analysis-note {
758
+ transform: rotate(-1deg) translateX(10px);
759
+ border-radius: 0 0 10px 10px;
760
+ }
761
+
762
+ .quote-wrapper:nth-child(even) .q-analysis-note {
763
+ transform: rotate(1deg) translateX(-10px);
764
+ text-align: left;
765
+ background: #f3e5f5;
766
+ border-radius: 0 0 10px 10px;
767
+ }
768
+
769
+ .note-label {
770
+ font-weight: bold;
771
+ color: var(--accent-orange);
772
+ display: block;
773
+ margin-bottom: 4px;
774
+ font-family: var(--font-title);
775
+ }
776
+
777
+ /* Footer */
778
+ .footer {
779
+ margin-top: 60px;
780
+ text-align: center;
781
+ font-family: var(--font-hand);
782
+ color: var(--ink-secondary);
783
+ border-top: 2px dashed var(--ink-secondary);
784
+ padding-top: 20px;
785
+ font-size: 1.05rem;
786
+ opacity: 0.8;
787
+ }
788
+
789
+ @media (max-width: 768px) {
790
+ .grid-layout {
791
+ display: flex;
792
+ flex-direction: column;
793
+ }
794
+
795
+ .masonry-grid {
796
+ column-count: 1;
797
+ }
798
+
799
+ .stamp {
800
+ width: 100%;
801
+ }
802
+
803
+ .quote-wrapper {
804
+ max-width: 100%;
805
+ }
806
+ }
807
+
808
+ /* ==================== 8. 用户画像特定样式 (User Persona) ==================== */
809
+
810
+ /* Header Area */
811
+ .persona-header {
812
+ display: flex;
813
+ gap: 40px;
814
+ margin-bottom: 30px;
815
+ align-items: center;
816
+ }
817
+
818
+ .polaroid-wrapper {
819
+ position: relative;
820
+ transform: rotate(-3deg);
821
+ flex-shrink: 0;
822
+ }
823
+
824
+ .polaroid {
825
+ background: #fff;
826
+ padding: 15px 15px 40px 15px;
827
+ box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.15);
828
+ border: 1px solid #ddd;
829
+ }
830
+
831
+ .polaroid-inner {
832
+ width: 150px;
833
+ height: 150px;
834
+ overflow: hidden;
835
+ background: #eee;
836
+ border: 1px solid #bbb;
837
+ }
838
+
839
+ .polaroid-inner img {
840
+ width: 100%;
841
+ height: 100%;
842
+ object-fit: cover;
843
+ }
844
+
845
+ .tape-corner {
846
+ position: absolute;
847
+ top: -15px;
848
+ left: 35%;
849
+ width: 50px;
850
+ height: 25px;
851
+ background: rgba(255, 235, 59, 0.6);
852
+ transform: rotate(-5deg);
853
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
854
+ /* mask tape edges */
855
+ mask-image: linear-gradient(135deg, transparent 2px, black 0) top left, linear-gradient(-135deg, transparent 2px, black 0) top right, linear-gradient(45deg, transparent 2px, black 0) bottom left, linear-gradient(-45deg, transparent 2px, black 0) bottom right;
856
+ mask-size: 51% 51%;
857
+ mask-repeat: no-repeat;
858
+ }
859
+
860
+ .header-info {
861
+ flex: 1;
862
+ }
863
+
864
+ .persona-username {
865
+ font-family: var(--font-title);
866
+ font-size: 2.8rem;
867
+ color: var(--ink-primary);
868
+ margin-bottom: 5px;
869
+ line-height: 1.2;
870
+ }
871
+
872
+ .analysis-date {
873
+ font-family: var(--font-hand);
874
+ font-size: 1.1rem;
875
+ color: #999;
876
+ margin-bottom: 20px;
877
+ }
878
+
879
+ .summary-note-wrapper {
880
+ position: relative;
881
+ padding-left: 10px;
882
+ }
883
+
884
+ .sticky-note {
885
+ background: var(--color-yellow);
886
+ padding: 20px 25px;
887
+ box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.1);
888
+ transform: rotate(1deg);
889
+ font-family: var(--font-hand);
890
+ font-size: 1.2rem;
891
+ color: var(--ink-primary);
892
+ position: relative;
893
+ max-width: 90%;
894
+ }
895
+
896
+ .sticky-note::after {
897
+ content: "";
898
+ position: absolute;
899
+ bottom: 0;
900
+ right: 0;
901
+ width: 30px;
902
+ height: 30px;
903
+ background: linear-gradient(135deg, transparent 50%, rgba(0, 0, 0, 0.05) 50%);
904
+ }
905
+
906
+ .pin {
907
+ position: absolute;
908
+ top: -10px;
909
+ left: 50%;
910
+ transform: translateX(-50%);
911
+ width: 16px;
912
+ height: 16px;
913
+ background: var(--accent-orange);
914
+ border-radius: 50%;
915
+ box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.2);
916
+ z-index: 2;
917
+ }
918
+
919
+ .pin::after {
920
+ content: "";
921
+ position: absolute;
922
+ top: 4px;
923
+ left: 4px;
924
+ width: 4px;
925
+ height: 4px;
926
+ background: rgba(255, 255, 255, 0.6);
927
+ border-radius: 50%;
928
+ }
929
+
930
+ .divider-dashed {
931
+ border-top: 3px dashed var(--ink-secondary);
932
+ opacity: 0.3;
933
+ margin: 40px 0;
934
+ }
935
+
936
+ /* Traits & Interests */
937
+ .tags-section {
938
+ display: flex;
939
+ gap: 40px;
940
+ margin-bottom: 40px;
941
+ }
942
+
943
+ .tag-group {
944
+ flex: 1;
945
+ }
946
+
947
+ .section-label {
948
+ font-family: var(--font-title);
949
+ font-size: 1.4rem;
950
+ margin-bottom: 15px;
951
+ display: flex;
952
+ align-items: center;
953
+ gap: 8px;
954
+ color: var(--ink-primary);
955
+ }
956
+
957
+ .tags-container {
958
+ display: flex;
959
+ flex-wrap: wrap;
960
+ gap: 12px;
961
+ }
962
+
963
+ .washi-tape-tag {
964
+ background: #fff;
965
+ padding: 8px 16px;
966
+ font-family: var(--font-hand);
967
+ font-size: 1.1rem;
968
+ position: relative;
969
+ box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.1);
970
+ /* Pattern */
971
+ background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.03) 5px, rgba(0, 0, 0, 0.03) 10px);
972
+ }
973
+
974
+ /* Tape ends effect using clip-path for jagged edges */
975
+ .washi-tape-tag {
976
+ clip-path: polygon(5px 0, 100% 0, calc(100% - 5px) 100%, 0 100%);
977
+ }
978
+
979
+ /* Color variations */
980
+ .washi-tape-tag.c1 {
981
+ background-color: var(--color-blue);
982
+ }
983
+
984
+ .washi-tape-tag.c2 {
985
+ background-color: var(--color-pink);
986
+ }
987
+
988
+ .washi-tape-tag.c3 {
989
+ background-color: var(--color-green);
990
+ }
991
+
992
+ .washi-tape-tag.c4 {
993
+ background-color: var(--color-purple);
994
+ }
995
+
996
+ /* Communication Style */
997
+ .notebook-paper {
998
+ background: #fff;
999
+ border: 1px solid #ddd;
1000
+ /* Background lines geometry */
1001
+ background-image: linear-gradient(transparent 35px, #b3e5fc 35px);
1002
+ background-size: 100% 36px;
1003
+ background-attachment: local;
1004
+
1005
+ box-shadow: 3px 3px 0 rgba(0, 0, 0, 0.05);
1006
+ margin-bottom: 40px;
1007
+ position: relative;
1008
+
1009
+ /* Reset container properties to avoid phantom space */
1010
+ padding: 0;
1011
+ white-space: normal;
1012
+ }
1013
+
1014
+ .notebook-paper p {
1015
+ margin: 0;
1016
+ /* Geometry Sync */
1017
+ line-height: 36px;
1018
+ font-family: var(--font-hand);
1019
+ font-size: 1.2rem;
1020
+ color: #444;
1021
+
1022
+ /* Padding to align first baseline and provide side spacing */
1023
+ /* 8px top aligns text baseline to the 35px underline */
1024
+ padding: 8px 30px 10px 30px;
1025
+
1026
+ /* Preserve exact text formatting including newlines */
1027
+ white-space: pre-wrap;
1028
+ }
1029
+
1030
+
1031
+
1032
+ /* Evidence Board */
1033
+ .evidence-section {
1034
+ background: #f4ecdf;
1035
+ /* Cork color */
1036
+ padding: 30px;
1037
+ border: 8px solid #a1887f;
1038
+ border-radius: 4px;
1039
+ box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.1);
1040
+ position: relative;
1041
+ }
1042
+
1043
+ .corkboard-grid {
1044
+ column-count: 2;
1045
+ column-gap: 20px;
1046
+ }
1047
+
1048
+ .evidence-card-pin {
1049
+ break-inside: avoid;
1050
+ background: #fff;
1051
+ padding: 20px;
1052
+ margin-bottom: 20px;
1053
+ box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.2);
1054
+ font-family: var(--font-body);
1055
+ font-size: 0.95rem;
1056
+ line-height: 1.5;
1057
+ position: relative;
1058
+ transform: rotate(var(--rot));
1059
+ }
1060
+
1061
+ .evidence-card-pin::before {
1062
+ content: "";
1063
+ position: absolute;
1064
+ top: -8px;
1065
+ left: 50%;
1066
+ transform: translateX(-50%);
1067
+ width: 12px;
1068
+ height: 12px;
1069
+ background: #f44336;
1070
+ /* Red pin */
1071
+ border-radius: 50%;
1072
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
1073
+ z-index: 5;
1074
+ }
1075
+
1076
+ @media (max-width: 600px) {
1077
+ .persona-header {
1078
+ flex-direction: column;
1079
+ text-align: center;
1080
+ }
1081
+
1082
+ .polaroid-wrapper {
1083
+ transform: rotate(0);
1084
+ }
1085
+
1086
+ .tags-section {
1087
+ flex-direction: column;
1088
+ gap: 20px;
1089
+ }
1090
+
1091
+ .corkboard-grid {
1092
+ column-count: 1;
1093
+ }
1094
+ }