koishi-plugin-rocom 1.0.13 → 1.0.17

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 (36) hide show
  1. package/lib/atlas-service.d.ts +33 -0
  2. package/lib/atlas-service.js +439 -0
  3. package/lib/client.d.ts +19 -0
  4. package/lib/client.js +101 -1
  5. package/lib/commands/account.js +1 -0
  6. package/lib/commands/merchant.js +11 -2
  7. package/lib/commands/query.js +141 -9
  8. package/lib/commands/tools.js +104 -0
  9. package/lib/commands/wiki.js +167 -6
  10. package/lib/egg-service.d.ts +2 -0
  11. package/lib/egg-service.js +50 -15
  12. package/lib/index.d.ts +5 -0
  13. package/lib/index.js +3153 -188
  14. package/lib/pet-data-service.d.ts +62 -0
  15. package/lib/pet-data-service.js +468 -0
  16. package/lib/render-templates/pet-data/index.html +172 -0
  17. package/lib/render-templates/pet-data/style.css +553 -0
  18. package/lib/render-templates/wiki/detail/index.html +84 -0
  19. package/lib/render-templates/wiki/list/index.html +84 -0
  20. package/lib/render-templates/wiki/menu/index.html +65 -0
  21. package/lib/render-templates/wiki/pet/index.html +158 -0
  22. package/lib/render-templates/wiki/pet/style.css +393 -0
  23. package/lib/render-templates/wiki/shared/style.css +431 -0
  24. package/lib/render-templates/wiki/skill/index.html +79 -0
  25. package/lib/render-templates/wiki/skill/style.css +233 -0
  26. package/lib/render-templates/wiki/suggestions/index.html +84 -0
  27. package/lib/render.js +37 -8
  28. package/lib/types.d.ts +9 -1
  29. package/lib/user.d.ts +23 -1
  30. package/lib/user.js +32 -1
  31. package/lib/wiki-catalog.d.ts +19 -0
  32. package/lib/wiki-catalog.js +124 -0
  33. package/lib/wiki-service.d.ts +220 -0
  34. package/lib/wiki-service.js +1463 -0
  35. package/package.json +1 -1
  36. package/readme.md +4 -5
@@ -0,0 +1,172 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=1320, initial-scale=1">
6
+ <link rel="stylesheet" href="{{_res_path}}render/pet-data/style.css">
7
+ <title>{{title}}</title>
8
+ </head>
9
+ <body>
10
+ <div class="pet-data-page page-section-main">
11
+ <header class="hero">
12
+ <div class="hero-copy">
13
+ <div class="eyebrow">{{subtitle}}</div>
14
+ <h1>{{title}}</h1>
15
+ <div class="hero-tags">
16
+ <span>{{playerName}}</span>
17
+ <span>UID {{uid}}</span>
18
+ <span>Lv.{{playerLevel}}</span>
19
+ <span>世界 {{worldLevel}}</span>
20
+ </div>
21
+ </div>
22
+ <div class="hero-status {{if isOnline}}online{{else}}offline{{/if}}">
23
+ <div class="status-label">目标状态</div>
24
+ <div class="status-value">{{onlineText}}</div>
25
+ <div class="status-mode">{{queryMode}}</div>
26
+ </div>
27
+ </header>
28
+
29
+ <section class="notice-row">
30
+ <div>{{notice}}</div>
31
+ <div>更新:{{updatedAt}}</div>
32
+ </section>
33
+
34
+ <section class="summary-grid">
35
+ {{each summaryCards card}}
36
+ <div class="summary-card">
37
+ <span>{{card.label}}</span>
38
+ <strong>{{card.value}}</strong>
39
+ </div>
40
+ {{/each}}
41
+ </section>
42
+
43
+ {{if pets && pets.length > 0}}
44
+ <main class="pet-list">
45
+ {{each pets pet}}
46
+ <article class="pet-card">
47
+ <div class="pet-overview">
48
+ <div class="portrait-tile">
49
+ <div class="portrait-badges">
50
+ <span>#{{pet.baseId}}</span>
51
+ <span>{{pet.variantText}}</span>
52
+ </div>
53
+ <div class="portrait-frame">
54
+ {{if pet.imageUrl}}
55
+ <img class="pet-image" src="{{pet.imageUrl}}" alt="{{pet.name}}" onerror="this.style.display='none'">
56
+ {{else}}
57
+ <div class="pet-image-empty">无图</div>
58
+ {{/if}}
59
+ {{if pet.variantText == "异色"}}
60
+ <img class="variant-icon" src="{{_res_path}}img/异色.png" alt="异色">
61
+ {{/if}}
62
+ {{if pet.variantText == "异色炫彩"}}
63
+ <img class="variant-icon" src="{{_res_path}}img/异色炫彩.png" alt="异色炫彩">
64
+ {{/if}}
65
+ {{if pet.variantText == "炫彩"}}
66
+ <img class="variant-icon" src="{{_res_path}}img/炫彩.png" alt="炫彩">
67
+ {{/if}}
68
+ </div>
69
+ </div>
70
+
71
+ <div class="overview-main">
72
+ <div class="pet-topline">
73
+ <div>
74
+ <div class="pet-name">{{pet.name}}</div>
75
+ {{if pet.defaultName}}
76
+ <div class="pet-subname">默认名:{{pet.defaultName}}</div>
77
+ {{/if}}
78
+ </div>
79
+ </div>
80
+
81
+ <div class="quick-grid">
82
+ {{each pet.cards card}}
83
+ <div class="quick-item {{card.className}}">
84
+ <span>{{card.label}}</span>
85
+ <strong>{{card.value}}</strong>
86
+ {{if card.hint}}
87
+ <em>{{card.hint}}</em>
88
+ {{/if}}
89
+ </div>
90
+ {{/each}}
91
+ </div>
92
+ </div>
93
+ </div>
94
+
95
+ <div class="detail-grid">
96
+ <section class="metrics-panel">
97
+ <div class="panel-title">六维</div>
98
+ <div class="metric-list">
99
+ {{each pet.attributes attr}}
100
+ <div class="metric-item">
101
+ <div class="metric-head">
102
+ <span>{{attr.label}}</span>
103
+ <strong>{{attr.value}}</strong>
104
+ <em>天赋 {{attr.talent}} / 种族 {{attr.race}}</em>
105
+ </div>
106
+ <div class="metric-track">
107
+ <div class="metric-fill" style="width: {{attr.percent}}%;"></div>
108
+ </div>
109
+ </div>
110
+ {{/each}}
111
+ </div>
112
+ </section>
113
+
114
+ <section class="skills-panel">
115
+ <div class="panel-title">技能</div>
116
+ {{if pet.skills && pet.skills.length > 0}}
117
+ <div class="skill-list">
118
+ {{each pet.skills skill}}
119
+ <div class="skill-row skill-{{skill.statusClass}}">
120
+ {{if skill.icon}}
121
+ <img class="skill-icon" src="{{skill.icon}}" alt="{{skill.name}}" onerror="this.style.display='none'">
122
+ {{else}}
123
+ <div class="skill-icon skill-icon-placeholder"></div>
124
+ {{/if}}
125
+ <div class="skill-main">
126
+ <div class="skill-name">{{skill.name}}</div>
127
+ <div class="skill-meta">
128
+ <span>{{skill.element}}</span>
129
+ <span>{{skill.type}}</span>
130
+ <span>威力 {{skill.power}}</span>
131
+ <span>消耗 {{skill.cost}}</span>
132
+ </div>
133
+ </div>
134
+ <div class="skill-side">
135
+ <strong>{{skill.status}}</strong>
136
+ <span>位 {{skill.pos}} · {{skill.unlock}}</span>
137
+ </div>
138
+ </div>
139
+ {{/each}}
140
+ </div>
141
+ {{else}}
142
+ <div class="empty-mini">暂无技能字段</div>
143
+ {{/if}}
144
+ </section>
145
+ </div>
146
+
147
+ <div class="catch-row">
148
+ {{each pet.catchItems item}}
149
+ <span>{{item.label}}:{{item.value}}</span>
150
+ {{/each}}
151
+ <span>特性:{{pet.specialityIds}}</span>
152
+ <span>关系:{{pet.relationshipType}}</span>
153
+ <span>来源:{{pet.npcIdSource}}</span>
154
+ </div>
155
+
156
+ {{if pet.errorText}}
157
+ <div class="error-text">{{pet.errorText}}</div>
158
+ {{/if}}
159
+ </article>
160
+ {{/each}}
161
+ </main>
162
+ {{else}}
163
+ <div class="empty-state">{{emptyText}}</div>
164
+ {{/if}}
165
+
166
+ <footer class="page-footer">
167
+ <span>{{commandHint}}</span>
168
+ <span>{{copyright}}</span>
169
+ </footer>
170
+ </div>
171
+ </body>
172
+ </html>
@@ -0,0 +1,553 @@
1
+ @font-face {
2
+ font-family: "rocom-pet-data";
3
+ src: url("../../ttf/HYWenHei-85W-1.ttf") format("truetype");
4
+ font-display: swap;
5
+ }
6
+
7
+ * {
8
+ box-sizing: border-box;
9
+ }
10
+
11
+ html,
12
+ body {
13
+ margin: 0;
14
+ padding: 26px;
15
+ display: inline-block;
16
+ background: #eef3ef;
17
+ color: #1f261f;
18
+ font-family: "rocom-pet-data", "Microsoft YaHei", "PingFang SC", sans-serif;
19
+ }
20
+
21
+ .pet-data-page {
22
+ width: 1320px;
23
+ min-height: 780px;
24
+ padding: 28px;
25
+ border-radius: 18px;
26
+ background:
27
+ linear-gradient(180deg, rgba(248, 246, 238, 0.92), rgba(241, 238, 226, 0.96)),
28
+ url("../../img/ercode-bg.D1ccSQKH.png") center / cover no-repeat;
29
+ box-shadow: 0 22px 48px rgba(40, 52, 42, 0.16);
30
+ }
31
+
32
+ .hero {
33
+ display: grid;
34
+ grid-template-columns: minmax(0, 1fr) 190px;
35
+ gap: 22px;
36
+ min-height: 124px;
37
+ padding: 22px 24px;
38
+ border-radius: 16px;
39
+ background:
40
+ linear-gradient(90deg, rgba(255, 195, 86, 0.96), rgba(244, 174, 72, 0.94)),
41
+ linear-gradient(135deg, rgba(62, 116, 107, 0.18), transparent 55%);
42
+ box-shadow: inset 0 -3px 0 rgba(101, 65, 14, 0.12);
43
+ }
44
+
45
+ .hero-copy {
46
+ min-width: 0;
47
+ }
48
+
49
+ .eyebrow {
50
+ color: rgba(40, 38, 28, 0.68);
51
+ font-size: 17px;
52
+ line-height: 1;
53
+ }
54
+
55
+ h1 {
56
+ margin: 7px 0 0;
57
+ color: #151813;
58
+ font-size: 46px;
59
+ line-height: 1;
60
+ }
61
+
62
+ .hero-tags,
63
+ .catch-row,
64
+ .skill-meta {
65
+ display: flex;
66
+ flex-wrap: wrap;
67
+ gap: 8px;
68
+ }
69
+
70
+ .hero-tags {
71
+ margin-top: 15px;
72
+ }
73
+
74
+ .hero-tags span,
75
+ .catch-row span,
76
+ .skill-meta span {
77
+ display: inline-flex;
78
+ align-items: center;
79
+ min-height: 28px;
80
+ padding: 5px 10px;
81
+ border-radius: 999px;
82
+ background: rgba(255, 255, 255, 0.58);
83
+ color: #514022;
84
+ font-size: 15px;
85
+ line-height: 1;
86
+ }
87
+
88
+ .hero-status {
89
+ display: grid;
90
+ align-content: center;
91
+ justify-items: end;
92
+ padding: 16px 18px;
93
+ border-radius: 14px;
94
+ background: rgba(255, 248, 228, 0.76);
95
+ border: 1px solid rgba(87, 66, 31, 0.10);
96
+ }
97
+
98
+ .hero-status.online {
99
+ box-shadow: inset 4px 0 0 #3e746b;
100
+ }
101
+
102
+ .hero-status.offline {
103
+ box-shadow: inset 4px 0 0 #b45c45;
104
+ }
105
+
106
+ .status-label,
107
+ .summary-card span,
108
+ .quick-item span {
109
+ color: #75664e;
110
+ font-size: 14px;
111
+ }
112
+
113
+ .status-value {
114
+ margin-top: 7px;
115
+ color: #151813;
116
+ font-size: 32px;
117
+ line-height: 1;
118
+ }
119
+
120
+ .status-mode {
121
+ margin-top: 9px;
122
+ color: #6a4d1a;
123
+ font-size: 15px;
124
+ }
125
+
126
+ .notice-row {
127
+ display: flex;
128
+ justify-content: space-between;
129
+ gap: 18px;
130
+ margin-top: 16px;
131
+ padding: 12px 16px;
132
+ border-radius: 12px;
133
+ background: rgba(255, 255, 255, 0.62);
134
+ color: #5f5a48;
135
+ font-size: 15px;
136
+ }
137
+
138
+ .summary-grid {
139
+ display: grid;
140
+ grid-template-columns: repeat(4, minmax(0, 1fr));
141
+ gap: 12px;
142
+ margin-top: 14px;
143
+ }
144
+
145
+ .summary-card {
146
+ min-height: 70px;
147
+ padding: 12px 16px;
148
+ border-radius: 12px;
149
+ background: rgba(255, 255, 255, 0.68);
150
+ border: 1px solid rgba(87, 66, 31, 0.08);
151
+ }
152
+
153
+ .summary-card strong {
154
+ display: block;
155
+ margin-top: 5px;
156
+ color: #151813;
157
+ font-size: 25px;
158
+ line-height: 1;
159
+ }
160
+
161
+ .pet-list {
162
+ display: grid;
163
+ gap: 16px;
164
+ margin-top: 18px;
165
+ }
166
+
167
+ .pet-card {
168
+ padding: 16px;
169
+ border-radius: 16px;
170
+ background: rgba(255, 255, 255, 0.70);
171
+ border: 1px solid rgba(81, 64, 35, 0.10);
172
+ box-shadow: 0 12px 28px rgba(52, 60, 46, 0.08);
173
+ }
174
+
175
+ .pet-overview {
176
+ display: grid;
177
+ grid-template-columns: 168px minmax(0, 1fr);
178
+ gap: 15px;
179
+ align-items: stretch;
180
+ }
181
+
182
+ .portrait-tile {
183
+ min-height: 166px;
184
+ border-radius: 13px;
185
+ overflow: hidden;
186
+ background:
187
+ linear-gradient(180deg, rgba(255, 219, 134, 0.58), rgba(255, 252, 244, 0.90) 58%, rgba(235, 243, 238, 0.72)),
188
+ radial-gradient(circle at 50% 45%, rgba(255, 194, 70, 0.38), transparent 54%);
189
+ border: 1px solid rgba(91, 70, 30, 0.08);
190
+ }
191
+
192
+ .portrait-badges {
193
+ position: relative;
194
+ z-index: 2;
195
+ display: flex;
196
+ justify-content: space-between;
197
+ gap: 6px;
198
+ padding: 9px 10px 0;
199
+ }
200
+
201
+ .portrait-badges span {
202
+ min-width: 0;
203
+ padding: 4px 8px;
204
+ border-radius: 999px;
205
+ background: rgba(255, 255, 255, 0.70);
206
+ color: #5b4320;
207
+ font-size: 13px;
208
+ line-height: 1;
209
+ white-space: nowrap;
210
+ }
211
+
212
+ .portrait-frame {
213
+ position: relative;
214
+ display: grid;
215
+ place-items: center;
216
+ height: 136px;
217
+ padding: 2px 10px 12px;
218
+ }
219
+
220
+ .pet-image {
221
+ max-width: 142px;
222
+ max-height: 124px;
223
+ object-fit: contain;
224
+ filter: drop-shadow(0 12px 12px rgba(63, 50, 29, 0.18));
225
+ }
226
+
227
+ .pet-image-empty {
228
+ color: #8f8069;
229
+ font-size: 16px;
230
+ }
231
+
232
+ .variant-icon {
233
+ position: absolute;
234
+ right: 9px;
235
+ top: 0;
236
+ width: 34px;
237
+ height: 34px;
238
+ object-fit: contain;
239
+ filter: drop-shadow(0 3px 4px rgba(80, 55, 17, 0.18));
240
+ }
241
+
242
+ .overview-main {
243
+ min-width: 0;
244
+ display: grid;
245
+ align-content: start;
246
+ }
247
+
248
+ .pet-topline {
249
+ display: flex;
250
+ justify-content: space-between;
251
+ gap: 16px;
252
+ }
253
+
254
+ .pet-name {
255
+ max-width: 820px;
256
+ overflow: hidden;
257
+ color: #151813;
258
+ font-size: 32px;
259
+ line-height: 1.08;
260
+ text-overflow: ellipsis;
261
+ white-space: nowrap;
262
+ }
263
+
264
+ .pet-subname {
265
+ margin-top: 4px;
266
+ color: #76664f;
267
+ font-size: 15px;
268
+ }
269
+
270
+ .quick-grid {
271
+ display: grid;
272
+ grid-template-columns: repeat(4, minmax(0, 1fr));
273
+ gap: 0;
274
+ overflow: hidden;
275
+ margin-top: 12px;
276
+ border: 1px solid rgba(91, 70, 30, 0.08);
277
+ border-radius: 12px;
278
+ background: rgba(255, 252, 244, 0.82);
279
+ }
280
+
281
+ .quick-item {
282
+ min-height: 58px;
283
+ padding: 9px 12px;
284
+ border-right: 1px solid rgba(91, 70, 30, 0.07);
285
+ border-bottom: 1px solid rgba(91, 70, 30, 0.07);
286
+ background: rgba(255, 255, 255, 0.34);
287
+ }
288
+
289
+ .quick-item:nth-child(4n) {
290
+ border-right: 0;
291
+ }
292
+
293
+ .quick-item:nth-last-child(-n+4) {
294
+ border-bottom: 0;
295
+ }
296
+
297
+ .quick-item.size-large {
298
+ background: rgba(255, 198, 95, 0.24);
299
+ box-shadow: inset 3px 0 0 #d98b1d;
300
+ }
301
+
302
+ .quick-item.size-small {
303
+ background: rgba(62, 116, 107, 0.14);
304
+ box-shadow: inset 3px 0 0 #3e746b;
305
+ }
306
+
307
+ .quick-item.voice-soft,
308
+ .quick-item.voice-rough {
309
+ background: rgba(31, 38, 31, 0.10);
310
+ box-shadow: inset 3px 0 0 #1f261f;
311
+ }
312
+
313
+ .quick-item strong {
314
+ display: block;
315
+ margin-top: 4px;
316
+ overflow: hidden;
317
+ color: #1f261f;
318
+ font-size: 17px;
319
+ line-height: 1.14;
320
+ text-overflow: ellipsis;
321
+ white-space: nowrap;
322
+ }
323
+
324
+ .quick-item.size-large strong {
325
+ color: #80500f;
326
+ }
327
+
328
+ .quick-item.size-small strong {
329
+ color: #2f5c54;
330
+ }
331
+
332
+ .quick-item.voice-soft strong,
333
+ .quick-item.voice-rough strong {
334
+ color: #1f261f;
335
+ }
336
+
337
+ .quick-item em {
338
+ display: block;
339
+ margin-top: 3px;
340
+ overflow: hidden;
341
+ color: #3e746b;
342
+ font-size: 11px;
343
+ font-style: normal;
344
+ line-height: 1.1;
345
+ text-overflow: ellipsis;
346
+ white-space: nowrap;
347
+ }
348
+
349
+ .detail-grid {
350
+ display: grid;
351
+ grid-template-columns: 0.82fr 1.18fr;
352
+ gap: 13px;
353
+ margin-top: 13px;
354
+ }
355
+
356
+ .metrics-panel,
357
+ .skills-panel {
358
+ min-height: 218px;
359
+ padding: 13px;
360
+ border-radius: 13px;
361
+ background: rgba(248, 246, 238, 0.82);
362
+ border: 1px solid rgba(81, 64, 35, 0.08);
363
+ }
364
+
365
+ .panel-title {
366
+ color: #1f261f;
367
+ font-size: 20px;
368
+ line-height: 1;
369
+ }
370
+
371
+ .metric-list {
372
+ display: grid;
373
+ gap: 8px;
374
+ margin-top: 11px;
375
+ }
376
+
377
+ .metric-item {
378
+ display: grid;
379
+ gap: 5px;
380
+ }
381
+
382
+ .metric-head {
383
+ display: grid;
384
+ grid-template-columns: 48px 46px minmax(0, 1fr);
385
+ align-items: baseline;
386
+ gap: 8px;
387
+ }
388
+
389
+ .metric-head span {
390
+ color: #657363;
391
+ font-size: 15px;
392
+ }
393
+
394
+ .metric-head strong {
395
+ color: #151813;
396
+ font-size: 19px;
397
+ line-height: 1;
398
+ }
399
+
400
+ .metric-head em {
401
+ overflow: hidden;
402
+ color: #7a6b52;
403
+ font-size: 13px;
404
+ font-style: normal;
405
+ text-overflow: ellipsis;
406
+ white-space: nowrap;
407
+ }
408
+
409
+ .metric-track {
410
+ height: 8px;
411
+ overflow: hidden;
412
+ border-radius: 999px;
413
+ background: rgba(62, 116, 107, 0.12);
414
+ }
415
+
416
+ .metric-fill {
417
+ height: 100%;
418
+ border-radius: inherit;
419
+ background: linear-gradient(90deg, #3e746b, #f0b24d);
420
+ }
421
+
422
+ .skill-list {
423
+ display: grid;
424
+ grid-template-columns: repeat(2, minmax(0, 1fr));
425
+ gap: 8px;
426
+ margin-top: 11px;
427
+ }
428
+
429
+ .skill-row {
430
+ display: grid;
431
+ grid-template-columns: 34px minmax(0, 1fr) 88px;
432
+ align-items: center;
433
+ gap: 9px;
434
+ min-height: 45px;
435
+ padding: 7px 8px;
436
+ border-radius: 11px;
437
+ background: rgba(255, 255, 255, 0.68);
438
+ border: 1px solid rgba(81, 64, 35, 0.06);
439
+ }
440
+
441
+ .skill-row.skill-equipped {
442
+ box-shadow: inset 3px 0 0 #3e746b;
443
+ }
444
+
445
+ .skill-row.skill-learned {
446
+ box-shadow: inset 3px 0 0 #c78a2d;
447
+ }
448
+
449
+ .skill-row.skill-locked {
450
+ opacity: 0.78;
451
+ }
452
+
453
+ .skill-icon {
454
+ width: 32px;
455
+ height: 32px;
456
+ object-fit: contain;
457
+ border-radius: 8px;
458
+ background: rgba(241, 238, 226, 0.88);
459
+ }
460
+
461
+ .skill-icon-placeholder {
462
+ background:
463
+ linear-gradient(135deg, rgba(62, 116, 107, 0.18), rgba(255, 255, 255, 0.72)),
464
+ rgba(241, 238, 226, 0.88);
465
+ }
466
+
467
+ .skill-main {
468
+ min-width: 0;
469
+ }
470
+
471
+ .skill-name {
472
+ overflow: hidden;
473
+ color: #151813;
474
+ font-size: 16px;
475
+ line-height: 1.05;
476
+ text-overflow: ellipsis;
477
+ white-space: nowrap;
478
+ }
479
+
480
+ .skill-meta {
481
+ gap: 4px;
482
+ margin-top: 4px;
483
+ }
484
+
485
+ .skill-meta span {
486
+ min-height: 19px;
487
+ padding: 3px 5px;
488
+ background: rgba(238, 243, 239, 0.82);
489
+ color: #536258;
490
+ font-size: 11px;
491
+ }
492
+
493
+ .skill-side {
494
+ display: grid;
495
+ justify-items: end;
496
+ gap: 4px;
497
+ }
498
+
499
+ .skill-side strong {
500
+ color: #2f4f47;
501
+ font-size: 13px;
502
+ }
503
+
504
+ .skill-side span {
505
+ color: #806f55;
506
+ font-size: 12px;
507
+ white-space: nowrap;
508
+ }
509
+
510
+ .empty-mini {
511
+ margin-top: 18px;
512
+ color: #8f8069;
513
+ font-size: 16px;
514
+ }
515
+
516
+ .catch-row {
517
+ margin-top: 12px;
518
+ }
519
+
520
+ .catch-row span {
521
+ background: rgba(255, 252, 244, 0.78);
522
+ }
523
+
524
+ .error-text {
525
+ margin-top: 12px;
526
+ padding: 10px 12px;
527
+ border-radius: 10px;
528
+ background: rgba(180, 92, 69, 0.12);
529
+ color: #983d27;
530
+ font-size: 15px;
531
+ }
532
+
533
+ .empty-state {
534
+ display: grid;
535
+ place-items: center;
536
+ min-height: 220px;
537
+ margin-top: 18px;
538
+ border-radius: 14px;
539
+ background: rgba(255, 255, 255, 0.62);
540
+ color: #786954;
541
+ font-size: 20px;
542
+ }
543
+
544
+ .page-footer {
545
+ display: flex;
546
+ justify-content: space-between;
547
+ gap: 16px;
548
+ margin-top: 16px;
549
+ padding-top: 14px;
550
+ border-top: 1px solid rgba(81, 64, 35, 0.12);
551
+ color: #6d624f;
552
+ font-size: 14px;
553
+ }