koishi-plugin-rocom 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 (157) hide show
  1. package/lib/client.d.ts +53 -0
  2. package/lib/client.js +473 -0
  3. package/lib/commands/account.d.ts +5 -0
  4. package/lib/commands/account.js +205 -0
  5. package/lib/commands/admin.d.ts +2 -0
  6. package/lib/commands/admin.js +117 -0
  7. package/lib/commands/egg.d.ts +2 -0
  8. package/lib/commands/egg.js +196 -0
  9. package/lib/commands/merchant.d.ts +2 -0
  10. package/lib/commands/merchant.js +242 -0
  11. package/lib/commands/query.d.ts +2 -0
  12. package/lib/commands/query.js +1264 -0
  13. package/lib/commands/wiki.d.ts +2 -0
  14. package/lib/commands/wiki.js +11 -0
  15. package/lib/egg-service.d.ts +229 -0
  16. package/lib/egg-service.js +705 -0
  17. package/lib/index.d.ts +24 -0
  18. package/lib/index.js +3746 -0
  19. package/lib/render-templates/bind-list/index.html +51 -0
  20. package/lib/render-templates/bind-list/style.css +178 -0
  21. package/lib/render-templates/exchange-hall/css/_@astro-renderers.0KDkAyVb.css +1 -0
  22. package/lib/render-templates/exchange-hall/css/index.B3tv56V6.css +1 -0
  23. package/lib/render-templates/exchange-hall/css/index.D2LGPudy.css +1 -0
  24. package/lib/render-templates/exchange-hall/extracted.css +393 -0
  25. package/lib/render-templates/exchange-hall/index.html +99 -0
  26. package/lib/render-templates/exchange-hall/style.css +267 -0
  27. package/lib/render-templates/friendship/index.html +58 -0
  28. package/lib/render-templates/friendship/style.css +182 -0
  29. package/lib/render-templates/home/data/home_item_list.json +122 -0
  30. package/lib/render-templates/home/img/home_icon/100604.png +0 -0
  31. package/lib/render-templates/home/img/home_icon/100604_1.png +0 -0
  32. package/lib/render-templates/home/img/home_icon/100604_2.png +0 -0
  33. package/lib/render-templates/home/img/home_icon/100605.png +0 -0
  34. package/lib/render-templates/home/img/home_icon/100605_1.png +0 -0
  35. package/lib/render-templates/home/img/home_icon/100605_2.png +0 -0
  36. package/lib/render-templates/home/img/home_icon/100606.png +0 -0
  37. package/lib/render-templates/home/img/home_icon/100606_1.png +0 -0
  38. package/lib/render-templates/home/img/home_icon/100606_2.png +0 -0
  39. package/lib/render-templates/home/img/home_icon/100607.png +0 -0
  40. package/lib/render-templates/home/img/home_icon/100607_1.png +0 -0
  41. package/lib/render-templates/home/img/home_icon/100607_2.png +0 -0
  42. package/lib/render-templates/home/img/home_icon/100608.png +0 -0
  43. package/lib/render-templates/home/img/home_icon/100608_1.png +0 -0
  44. package/lib/render-templates/home/img/home_icon/100608_2.png +0 -0
  45. package/lib/render-templates/home/img/home_icon/100622.png +0 -0
  46. package/lib/render-templates/home/img/home_icon/100622_1.png +0 -0
  47. package/lib/render-templates/home/img/home_icon/100622_2.png +0 -0
  48. package/lib/render-templates/home/img/home_icon/100623.png +0 -0
  49. package/lib/render-templates/home/img/home_icon/100623_1.png +0 -0
  50. package/lib/render-templates/home/img/home_icon/100623_2.png +0 -0
  51. package/lib/render-templates/home/img/home_icon/100624.png +0 -0
  52. package/lib/render-templates/home/img/home_icon/100624_1.png +0 -0
  53. package/lib/render-templates/home/img/home_icon/100624_2.png +0 -0
  54. package/lib/render-templates/home/img/home_icon/100627.png +0 -0
  55. package/lib/render-templates/home/img/home_icon/100627_1.png +0 -0
  56. package/lib/render-templates/home/img/home_icon/100627_2.png +0 -0
  57. package/lib/render-templates/home/img/home_icon/100684.png +0 -0
  58. package/lib/render-templates/home/img/home_icon/100684_1.png +0 -0
  59. package/lib/render-templates/home/img/home_icon/100684_2.png +0 -0
  60. package/lib/render-templates/home/img/home_icon/100686.png +0 -0
  61. package/lib/render-templates/home/img/home_icon/100686_1.png +0 -0
  62. package/lib/render-templates/home/img/home_icon/100686_2.png +0 -0
  63. package/lib/render-templates/home/img/home_icon/100687.png +0 -0
  64. package/lib/render-templates/home/img/home_icon/100687_1.png +0 -0
  65. package/lib/render-templates/home/img/home_icon/100687_2.png +0 -0
  66. package/lib/render-templates/home/img/home_icon/100689.png +0 -0
  67. package/lib/render-templates/home/img/home_icon/100689_1.png +0 -0
  68. package/lib/render-templates/home/img/home_icon/100689_2.png +0 -0
  69. package/lib/render-templates/home/img/home_icon/100690.png +0 -0
  70. package/lib/render-templates/home/img/home_icon/100690_1.png +0 -0
  71. package/lib/render-templates/home/img/home_icon/100690_2.png +0 -0
  72. package/lib/render-templates/home/img/home_icon/100691.png +0 -0
  73. package/lib/render-templates/home/img/home_icon/100691_1.png +0 -0
  74. package/lib/render-templates/home/img/home_icon/100691_2.png +0 -0
  75. package/lib/render-templates/home/img/home_icon/100692.png +0 -0
  76. package/lib/render-templates/home/img/home_icon/100692_1.png +0 -0
  77. package/lib/render-templates/home/img/home_icon/100692_2.png +0 -0
  78. package/lib/render-templates/home/img/home_icon/100693.png +0 -0
  79. package/lib/render-templates/home/img/home_icon/100693_1.png +0 -0
  80. package/lib/render-templates/home/img/home_icon/100693_2.png +0 -0
  81. package/lib/render-templates/home/img/home_icon/100694.png +0 -0
  82. package/lib/render-templates/home/img/home_icon/100694_1.png +0 -0
  83. package/lib/render-templates/home/img/home_icon/100694_2.png +0 -0
  84. package/lib/render-templates/home/img/home_icon/100706.png +0 -0
  85. package/lib/render-templates/home/img/home_icon/100706_1.png +0 -0
  86. package/lib/render-templates/home/img/home_icon/100706_2.png +0 -0
  87. package/lib/render-templates/home/img/home_icon/100751.png +0 -0
  88. package/lib/render-templates/home/img/home_icon/100751_1.png +0 -0
  89. package/lib/render-templates/home/img/home_icon/100751_2.png +0 -0
  90. package/lib/render-templates/home/img/home_icon/100755.png +0 -0
  91. package/lib/render-templates/home/img/home_icon/100755_1.png +0 -0
  92. package/lib/render-templates/home/img/home_icon/100755_2.png +0 -0
  93. package/lib/render-templates/home/img/home_icon/100762.png +0 -0
  94. package/lib/render-templates/home/img/home_icon/100762_1.png +0 -0
  95. package/lib/render-templates/home/img/home_icon/100762_2.png +0 -0
  96. package/lib/render-templates/home/img/home_icon/100764.png +0 -0
  97. package/lib/render-templates/home/img/home_icon/100764_1.png +0 -0
  98. package/lib/render-templates/home/img/home_icon/100764_2.png +0 -0
  99. package/lib/render-templates/home/img/home_icon/100869.png +0 -0
  100. package/lib/render-templates/home/img/home_icon/100869_1.png +0 -0
  101. package/lib/render-templates/home/img/home_icon/100869_2.png +0 -0
  102. package/lib/render-templates/home/img/img_HomeVisit_Icon1.png +0 -0
  103. package/lib/render-templates/home/img/img_LevelReward_Bg2.png +0 -0
  104. package/lib/render-templates/home/index.html +139 -0
  105. package/lib/render-templates/home/style.css +537 -0
  106. package/lib/render-templates/ingame-shop/index.html +87 -0
  107. package/lib/render-templates/ingame-shop/style.css +220 -0
  108. package/lib/render-templates/inspect/index.html +47 -0
  109. package/lib/render-templates/inspect/style.css +149 -0
  110. package/lib/render-templates/lineup/index.html +77 -0
  111. package/lib/render-templates/lineup/style.css +255 -0
  112. package/lib/render-templates/lineup-detail/index.html +63 -0
  113. package/lib/render-templates/lineup-detail/style.css +218 -0
  114. package/lib/render-templates/menu/index.html +36 -0
  115. package/lib/render-templates/menu/style.css +126 -0
  116. package/lib/render-templates/package/index.html +115 -0
  117. package/lib/render-templates/package/style.css +352 -0
  118. package/lib/render-templates/personal-card/index.html +292 -0
  119. package/lib/render-templates/personal-card/style.css +2114 -0
  120. package/lib/render-templates/pet-wiki/index.html +118 -0
  121. package/lib/render-templates/pet-wiki/style.css +382 -0
  122. package/lib/render-templates/player-search/index.html +60 -0
  123. package/lib/render-templates/player-search/style.css +192 -0
  124. package/lib/render-templates/record/index.html +86 -0
  125. package/lib/render-templates/record/style.css +322 -0
  126. package/lib/render-templates/searcheggs/Pets.json +104328 -0
  127. package/lib/render-templates/searcheggs/candidates.html +52 -0
  128. package/lib/render-templates/searcheggs/eggs.py +599 -0
  129. package/lib/render-templates/searcheggs/index.html +198 -0
  130. package/lib/render-templates/searcheggs/pair.html +81 -0
  131. package/lib/render-templates/searcheggs/size.html +82 -0
  132. package/lib/render-templates/searcheggs/style.css +586 -0
  133. package/lib/render-templates/searcheggs/want.html +63 -0
  134. package/lib/render-templates/skill-wiki/index.html +68 -0
  135. package/lib/render-templates/skill-wiki/style.css +182 -0
  136. package/lib/render-templates/student/index.html +95 -0
  137. package/lib/render-templates/student/style.css +255 -0
  138. package/lib/render-templates/student-perks/index.html +78 -0
  139. package/lib/render-templates/student-perks/style.css +238 -0
  140. package/lib/render-templates/student-state/index.html +52 -0
  141. package/lib/render-templates/student-state/style.css +157 -0
  142. package/lib/render-templates/yuanxing-shangren/index.html +371 -0
  143. package/lib/render-templates/yuanxing-shangren/style.css +371 -0
  144. package/lib/render.d.ts +11 -0
  145. package/lib/render.js +226 -0
  146. package/lib/role-token.d.ts +27 -0
  147. package/lib/role-token.js +137 -0
  148. package/lib/send-image.d.ts +3 -0
  149. package/lib/send-image.js +135 -0
  150. package/lib/subscription-send.d.ts +8 -0
  151. package/lib/subscription-send.js +48 -0
  152. package/lib/types.d.ts +32 -0
  153. package/lib/types.js +2 -0
  154. package/lib/user.d.ts +67 -0
  155. package/lib/user.js +176 -0
  156. package/package.json +58 -0
  157. package/readme.md +575 -0
@@ -0,0 +1,220 @@
1
+ @font-face {
2
+ font-family: "rocom-shop";
3
+ src: url("../../ttf/HYWenHei-85W-1.ttf") format("truetype");
4
+ font-display: swap;
5
+ }
6
+
7
+ html,
8
+ body {
9
+ margin: 0;
10
+ padding: 26px;
11
+ background: #efe6d8;
12
+ display: inline-block;
13
+ font-family: "rocom-shop", "Microsoft YaHei", "PingFang SC", sans-serif;
14
+ }
15
+
16
+ .shop-page {
17
+ width: 1260px;
18
+ padding: 34px 36px 30px;
19
+ box-sizing: border-box;
20
+ border-radius: 28px;
21
+ color: #322618;
22
+ background:
23
+ linear-gradient(rgba(40, 29, 18, 0.10), rgba(40, 29, 18, 0.10)),
24
+ url("../../img/ercode-bg.D1ccSQKH.png") center/cover no-repeat;
25
+ }
26
+
27
+ .page-header {
28
+ padding-bottom: 18px;
29
+ border-bottom: 2px dashed rgba(141, 106, 68, 0.28);
30
+ }
31
+
32
+ .page-title {
33
+ font-size: 44px;
34
+ line-height: 1.1;
35
+ font-weight: 800;
36
+ }
37
+
38
+ .page-subtitle {
39
+ margin-top: 10px;
40
+ font-size: 22px;
41
+ line-height: 1.4;
42
+ color: #6d5944;
43
+ }
44
+
45
+ .hero-card,
46
+ .summary-card,
47
+ .panel-card,
48
+ .command-hint {
49
+ border: 1px solid rgba(141, 106, 68, 0.16);
50
+ border-radius: 20px;
51
+ background: rgba(255, 252, 247, 0.82);
52
+ box-shadow: 0 10px 26px rgba(83, 58, 35, 0.08);
53
+ }
54
+
55
+ .hero-card {
56
+ margin-top: 22px;
57
+ padding: 24px 26px;
58
+ background:
59
+ linear-gradient(135deg, rgba(237, 179, 89, 0.24), rgba(255, 251, 245, 0.88)),
60
+ rgba(255, 252, 247, 0.86);
61
+ }
62
+
63
+ .hero-title {
64
+ font-size: 20px;
65
+ color: #8b735b;
66
+ }
67
+
68
+ .hero-value {
69
+ margin-top: 8px;
70
+ font-size: 42px;
71
+ line-height: 1.15;
72
+ font-weight: 800;
73
+ color: #2e2418;
74
+ }
75
+
76
+ .hero-subvalue {
77
+ margin-top: 8px;
78
+ font-size: 22px;
79
+ color: #6d5944;
80
+ }
81
+
82
+ .summary-grid {
83
+ display: grid;
84
+ grid-template-columns: repeat(3, 1fr);
85
+ gap: 16px;
86
+ margin-top: 22px;
87
+ }
88
+
89
+ .summary-card {
90
+ padding: 18px 20px;
91
+ }
92
+
93
+ .summary-label {
94
+ font-size: 18px;
95
+ color: #8b735b;
96
+ }
97
+
98
+ .summary-value {
99
+ margin-top: 10px;
100
+ font-size: 30px;
101
+ line-height: 1.2;
102
+ font-weight: 800;
103
+ }
104
+
105
+ .panel-card {
106
+ margin-top: 18px;
107
+ padding: 20px;
108
+ }
109
+
110
+ .section-title {
111
+ margin-bottom: 14px;
112
+ font-size: 28px;
113
+ font-weight: 800;
114
+ }
115
+
116
+ .shop-grid {
117
+ display: grid;
118
+ grid-template-columns: repeat(2, 1fr);
119
+ gap: 14px;
120
+ }
121
+
122
+ .shop-card {
123
+ padding: 16px;
124
+ border-radius: 18px;
125
+ background: rgba(255,255,255,0.42);
126
+ border: 1px solid rgba(141, 106, 68, 0.10);
127
+ }
128
+
129
+ .shop-top {
130
+ display: grid;
131
+ grid-template-columns: 72px 1fr;
132
+ gap: 14px;
133
+ align-items: center;
134
+ }
135
+
136
+ .shop-icon-wrap {
137
+ width: 72px;
138
+ height: 72px;
139
+ border-radius: 16px;
140
+ background: rgba(230, 219, 203, 0.58);
141
+ display: flex;
142
+ align-items: center;
143
+ justify-content: center;
144
+ overflow: hidden;
145
+ }
146
+
147
+ .shop-icon {
148
+ width: 100%;
149
+ height: 100%;
150
+ object-fit: cover;
151
+ }
152
+
153
+ .shop-icon-fallback {
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: center;
157
+ font-size: 28px;
158
+ font-weight: 800;
159
+ color: #8b735b;
160
+ }
161
+
162
+ .shop-name {
163
+ font-size: 24px;
164
+ line-height: 1.2;
165
+ font-weight: 800;
166
+ }
167
+
168
+ .meta-list {
169
+ margin-top: 14px;
170
+ }
171
+
172
+ .meta-row,
173
+ .detail-row {
174
+ display: grid;
175
+ grid-template-columns: 180px 1fr;
176
+ gap: 12px;
177
+ padding: 10px 0;
178
+ border-bottom: 1px solid rgba(141, 106, 68, 0.10);
179
+ }
180
+
181
+ .meta-row:last-child,
182
+ .detail-row:last-child {
183
+ border-bottom: none;
184
+ }
185
+
186
+ .meta-label,
187
+ .detail-label {
188
+ font-size: 18px;
189
+ font-weight: 700;
190
+ color: #6d5944;
191
+ }
192
+
193
+ .meta-value,
194
+ .detail-value {
195
+ font-size: 18px;
196
+ color: #322618;
197
+ word-break: break-word;
198
+ }
199
+
200
+ .detail-card {
201
+ overflow: hidden;
202
+ border-radius: 18px;
203
+ background: rgba(255,255,255,0.42);
204
+ border: 1px solid rgba(141, 106, 68, 0.10);
205
+ padding: 0 16px;
206
+ }
207
+
208
+ .command-hint {
209
+ margin-top: 20px;
210
+ padding: 14px 18px;
211
+ font-size: 20px;
212
+ color: #6d5944;
213
+ }
214
+
215
+ .footer {
216
+ margin-top: 18px;
217
+ text-align: center;
218
+ font-size: 16px;
219
+ color: rgba(113, 93, 73, 0.88);
220
+ }
@@ -0,0 +1,47 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=1100, initial-scale=1">
6
+ <link rel="stylesheet" href="{{_res_path}}render/inspect/style.css">
7
+ </head>
8
+ <body>
9
+ <div class="inspect-page">
10
+ <div class="inspect-header">
11
+ <div class="inspect-title">{{title}}</div>
12
+ <div class="inspect-subtitle">{{subtitle}}</div>
13
+ </div>
14
+
15
+ {{if rows && rows.length}}
16
+ <div class="inspect-table">
17
+ {{each rows row}}
18
+ <div class="inspect-row level-{{row.level || 0}}">
19
+ <div class="inspect-label">{{row.label || row.field}}</div>
20
+ <div class="inspect-value">{{row.value}}</div>
21
+ </div>
22
+ {{/each}}
23
+ </div>
24
+ {{/if}}
25
+
26
+ {{if notes && notes.length}}
27
+ <div class="notes-card">
28
+ <div class="card-title">附加说明</div>
29
+ {{each notes note}}
30
+ <div class="note-item">{{note}}</div>
31
+ {{/each}}
32
+ </div>
33
+ {{/if}}
34
+
35
+ <div class="payload-card">
36
+ <div class="card-title">原始数据</div>
37
+ <pre class="payload-text">{{payload_text}}</pre>
38
+ </div>
39
+
40
+ {{if commandHint}}
41
+ <div class="command-hint">{{commandHint}}</div>
42
+ {{/if}}
43
+
44
+ <div class="footer">{{copyright}}</div>
45
+ </div>
46
+ </body>
47
+ </html>
@@ -0,0 +1,149 @@
1
+ @font-face {
2
+ font-family: "inspect-font";
3
+ src: url("../../ttf/HYWenHei-85W-1.ttf") format("truetype");
4
+ font-display: swap;
5
+ }
6
+
7
+ :root {
8
+ --bg-main: #faf4e8;
9
+ --bg-card: rgba(255, 255, 255, 0.72);
10
+ --bg-row: rgba(255, 255, 255, 0.5);
11
+ --text-main: #342719;
12
+ --text-sub: #7a6550;
13
+ --accent: #c97926;
14
+ --line: rgba(165, 128, 80, 0.22);
15
+ }
16
+
17
+ html,
18
+ body {
19
+ margin: 0;
20
+ padding: 30px;
21
+ background: #f4ecdf;
22
+ display: inline-block;
23
+ font-family: "inspect-font", "Microsoft YaHei", "PingFang SC", sans-serif;
24
+ }
25
+
26
+ .inspect-page {
27
+ width: 1120px;
28
+ padding: 34px 38px 30px;
29
+ background: url("../../img/ercode-bg.D1ccSQKH.png") no-repeat center center;
30
+ background-size: cover;
31
+ border-radius: 26px;
32
+ color: var(--text-main);
33
+ box-sizing: border-box;
34
+ }
35
+
36
+ .inspect-header {
37
+ margin-bottom: 22px;
38
+ padding-bottom: 18px;
39
+ border-bottom: 2px dashed rgba(165, 128, 80, 0.28);
40
+ }
41
+
42
+ .inspect-title {
43
+ font-size: 44px;
44
+ line-height: 1.1;
45
+ font-weight: 700;
46
+ color: #402d1b;
47
+ }
48
+
49
+ .inspect-subtitle {
50
+ margin-top: 8px;
51
+ font-size: 22px;
52
+ line-height: 1.3;
53
+ color: var(--text-sub);
54
+ }
55
+
56
+ .inspect-table,
57
+ .notes-card,
58
+ .payload-card {
59
+ background: var(--bg-card);
60
+ border: 1px solid var(--line);
61
+ border-radius: 20px;
62
+ overflow: hidden;
63
+ margin-bottom: 18px;
64
+ }
65
+
66
+ .inspect-row {
67
+ display: grid;
68
+ grid-template-columns: 300px 1fr;
69
+ gap: 18px;
70
+ padding: 16px 20px;
71
+ border-bottom: 1px solid rgba(165, 128, 80, 0.16);
72
+ background: var(--bg-row);
73
+ }
74
+
75
+ .inspect-row:last-child {
76
+ border-bottom: none;
77
+ }
78
+
79
+ .inspect-row.level-1 {
80
+ padding-left: 42px;
81
+ }
82
+
83
+ .inspect-row.level-2 {
84
+ padding-left: 64px;
85
+ }
86
+
87
+ .inspect-label {
88
+ font-size: 22px;
89
+ line-height: 1.35;
90
+ color: #6c553f;
91
+ font-weight: 600;
92
+ }
93
+
94
+ .inspect-value {
95
+ font-size: 22px;
96
+ line-height: 1.45;
97
+ color: var(--text-main);
98
+ word-break: break-word;
99
+ }
100
+
101
+ .card-title {
102
+ padding: 16px 20px 14px;
103
+ font-size: 24px;
104
+ line-height: 1.2;
105
+ font-weight: 700;
106
+ color: var(--accent);
107
+ border-bottom: 1px solid rgba(165, 128, 80, 0.16);
108
+ }
109
+
110
+ .note-item {
111
+ padding: 12px 20px;
112
+ font-size: 20px;
113
+ line-height: 1.5;
114
+ color: var(--text-sub);
115
+ border-bottom: 1px solid rgba(165, 128, 80, 0.1);
116
+ }
117
+
118
+ .note-item:last-child {
119
+ border-bottom: none;
120
+ }
121
+
122
+ .payload-text {
123
+ margin: 0;
124
+ padding: 18px 20px 22px;
125
+ font-size: 18px;
126
+ line-height: 1.55;
127
+ color: var(--text-main);
128
+ white-space: pre-wrap;
129
+ word-break: break-word;
130
+ font-family: Consolas, "Courier New", monospace;
131
+ }
132
+
133
+ .command-hint {
134
+ margin-top: 8px;
135
+ padding: 14px 18px;
136
+ border-radius: 16px;
137
+ background: rgba(255, 255, 255, 0.46);
138
+ border: 1px solid rgba(165, 128, 80, 0.16);
139
+ font-size: 20px;
140
+ line-height: 1.4;
141
+ color: var(--text-sub);
142
+ }
143
+
144
+ .footer {
145
+ margin-top: 18px;
146
+ text-align: center;
147
+ font-size: 16px;
148
+ color: rgba(122, 101, 80, 0.86);
149
+ }
@@ -0,0 +1,77 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=1280, initial-scale=1">
6
+ <link rel="stylesheet" href="{{_res_path}}render/lineup/style.css">
7
+ </head>
8
+ <body>
9
+ <div class="lineup-page">
10
+ <!-- Header -->
11
+ <div class="lineup-header">
12
+ <div class="header-title">阵容助手</div>
13
+ <div class="header-subtitle">{{if category}}{{category}}{{else}}热门推荐{{/if}}</div>
14
+ </div>
15
+
16
+ <!-- Lineup Grid -->
17
+ <div class="lineup-grid">
18
+ {{each lineups lineup index}}
19
+ <div class="lineup-card">
20
+ <!-- Card Header -->
21
+ <div class="card-header">
22
+ <div class="lineup-name">
23
+ <span class="lineup-icon">🔥</span>
24
+ {{lineup.name}}
25
+ </div>
26
+ <div class="lineup-tags">
27
+ {{each lineup.tags tag}}
28
+ <span class="tag">{{tag}}</span>
29
+ {{/each}}
30
+ </div>
31
+ </div>
32
+
33
+ <!-- Pet List -->
34
+ <div class="pet-list">
35
+ {{each lineup.pets pet}}
36
+ <div class="pet-card">
37
+ <div class="pet-avatar">
38
+ <img src="{{pet.pet_img_url}}" onerror="this.src='{{fallbackPetImage}}'">
39
+ </div>
40
+ <div class="pet-info">
41
+ <div class="pet-name">{{pet.pet_name}}</div>
42
+ <div class="skill-list">
43
+ {{each pet.skills_info skill}}
44
+ <img class="skill-icon" src="{{skill.skill_img_url}}" title="{{skill.skill_name}}" onerror="this.style.display='none'">
45
+ {{/each}}
46
+ </div>
47
+ </div>
48
+ </div>
49
+ {{/each}}
50
+ </div>
51
+
52
+ <!-- Card Footer -->
53
+ <div class="card-footer">
54
+ <div class="author-info">
55
+ <img class="author-avatar" src="{{lineup.author_avatar}}" onerror="this.src='data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 24 24\' fill=\'%23333\'%3E%3Ccircle cx=\'12\' cy=\'12\' r=\'12\'/%3E%3C/svg%3E'">
56
+ <div class="author-details">
57
+ <span class="author-name">{{lineup.author_name}}</span>
58
+ <span class="author-likes">👍 {{lineup.likes}}</span>
59
+ </div>
60
+ </div>
61
+ <div class="lineup-code-box">
62
+ <span class="lineup-code-label">阵容码:</span>
63
+ <span class="lineup-code">{{lineup.lineup_code}}</span>
64
+ </div>
65
+ </div>
66
+ </div>
67
+ {{/each}}
68
+ </div>
69
+
70
+ <!-- Footer -->
71
+ <div class="pagination-footer">
72
+ <span class="pagination-text">第 {{page_no}} 页 / 共 {{total_pages}} 页</span>
73
+ <span class="pagination-hint">{{commandHint}}</span>
74
+ </div>
75
+ </div>
76
+ </body>
77
+ </html>