@anglefeint/astro-theme 0.1.18 → 0.1.19

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.
@@ -0,0 +1 @@
1
+ /* AI background layer: reserved for backdrop/ambient effects. */
@@ -0,0 +1,249 @@
1
+ /* AI base layer: page chrome variables and foundational surfaces. */
2
+ /* AI theme styles extracted from global.css */
3
+ body.ai-page header .ai-scanlines,
4
+ body.ai-page footer .ai-scanlines {
5
+ position: absolute;
6
+ inset: 0;
7
+ contain: layout paint;
8
+ z-index: 1;
9
+ background: repeating-linear-gradient(
10
+ 0deg,
11
+ transparent,
12
+ transparent 2px,
13
+ rgba(0, 0, 0, 0.55) 2px,
14
+ rgba(0, 0, 0, 0.55) 4px
15
+ );
16
+ pointer-events: none;
17
+ opacity: 0.78;
18
+ transition: opacity 0.3s ease;
19
+ }
20
+ body.ai-page header .ai-scanlines::after,
21
+ body.ai-page footer .ai-scanlines::after {
22
+ content: "";
23
+ position: absolute;
24
+ inset: 0;
25
+ background: repeating-linear-gradient(
26
+ 0deg,
27
+ transparent,
28
+ transparent 1px,
29
+ rgba(0, 0, 0, 0.12) 1px,
30
+ rgba(0, 0, 0, 0.12) 2px
31
+ );
32
+ pointer-events: none;
33
+ opacity: 0.8;
34
+ }
35
+ body.ai-page header:hover .ai-scanlines,
36
+ body.ai-page footer:hover .ai-scanlines {
37
+ opacity: 0;
38
+ }
39
+ /* ========== 点线网络 漂浮浮动 文章页 (body.ai-page) ========== */
40
+ body.ai-page {
41
+ background: #03060c !important;
42
+ background-image: none !important;
43
+ min-height: 100vh;
44
+ --chrome-bg: rgba(14, 10, 16, 0.72);
45
+ --chrome-border: rgba(255, 106, 132, 0.14);
46
+ --chrome-link: rgba(214, 243, 255, 0.92);
47
+ --chrome-link-hover: rgba(255, 168, 188, 0.98);
48
+ --chrome-active: rgba(132, 214, 255, 0.92);
49
+ --chrome-text-muted: rgba(178, 220, 238, 0.7);
50
+ }
51
+ /* 终端式滚动条 */
52
+ body.ai-page {
53
+ scrollbar-width: thin;
54
+ scrollbar-color: rgba(255, 106, 132, 0.48) transparent;
55
+ }
56
+ body.ai-page::-webkit-scrollbar {
57
+ width: 6px;
58
+ }
59
+ body.ai-page::-webkit-scrollbar-track {
60
+ background: transparent;
61
+ }
62
+ body.ai-page::-webkit-scrollbar-thumb {
63
+ background: rgba(255, 106, 132, 0.34);
64
+ border-radius: 3px;
65
+ }
66
+ body.ai-page::-webkit-scrollbar-thumb:hover {
67
+ background: rgba(255, 120, 152, 0.58);
68
+ box-shadow: 0 0 8px rgba(255, 106, 132, 0.4);
69
+ }
70
+ body.ai-page::-webkit-scrollbar-thumb {
71
+ box-shadow: 0 0 6px rgba(255, 106, 132, 0.26);
72
+ }
73
+ .ai-bg {
74
+ position: fixed;
75
+ inset: 0;
76
+ z-index: 0;
77
+ pointer-events: none;
78
+ overflow: hidden;
79
+ }
80
+ .ai-glow {
81
+ position: absolute;
82
+ inset: 0;
83
+ background: linear-gradient(
84
+ 140deg,
85
+ #05060b 0%,
86
+ #0b1322 24%,
87
+ #0f1d2f 46%,
88
+ #221018 72%,
89
+ #13070f 100%
90
+ );
91
+ }
92
+ .ai-glow-shift {
93
+ animation: ai-glow-shift 25s ease-in-out infinite;
94
+ }
95
+ @keyframes ai-glow-shift {
96
+ 0%,
97
+ 100% {
98
+ filter: brightness(1) saturate(1);
99
+ }
100
+ 33% {
101
+ filter: brightness(1.02) saturate(1.1) hue-rotate(5deg);
102
+ }
103
+ 66% {
104
+ filter: brightness(0.99) saturate(1.05) hue-rotate(-3deg);
105
+ }
106
+ }
107
+ /* 柔和光晕:中心径向青蓝光 */
108
+ .ai-haze {
109
+ position: absolute;
110
+ inset: 0;
111
+ background: radial-gradient(
112
+ ellipse 92% 72% at 50% 38%,
113
+ rgba(122, 212, 252, 0.08) 0%,
114
+ rgba(255, 90, 120, 0.06) 34%,
115
+ transparent 65%
116
+ );
117
+ animation: ai-haze-drift 18s ease-in-out infinite alternate;
118
+ pointer-events: none;
119
+ }
120
+ @keyframes ai-haze-drift {
121
+ 0% {
122
+ opacity: 0.8;
123
+ transform: translate(2%, 1%) scale(1.02);
124
+ }
125
+ 100% {
126
+ opacity: 1;
127
+ transform: translate(-2%, -1%) scale(0.98);
128
+ }
129
+ }
130
+ /* 边缘暗角 */
131
+ .ai-vignette {
132
+ position: absolute;
133
+ inset: 0;
134
+ background: radial-gradient(
135
+ ellipse 75% 75% at 50% 50%,
136
+ transparent 45%,
137
+ rgba(0, 0, 0, 0.25) 100%
138
+ );
139
+ pointer-events: none;
140
+ }
141
+ .ai-stripe {
142
+ position: absolute;
143
+ inset: 0;
144
+ opacity: 0.06;
145
+ background: repeating-linear-gradient(
146
+ 90deg,
147
+ transparent,
148
+ transparent 1px,
149
+ rgba(196, 232, 255, 0.28) 1px,
150
+ rgba(196, 232, 255, 0.28) 2px
151
+ );
152
+ }
153
+ /* 噪点层 */
154
+ .ai-noise {
155
+ position: absolute;
156
+ inset: 0;
157
+ opacity: 0.04;
158
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
159
+ pointer-events: none;
160
+ }
161
+ /* 六边形网格 */
162
+ .ai-hex-grid {
163
+ position: absolute;
164
+ inset: 0;
165
+ opacity: 0.11;
166
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='56' height='49'%3E%3Cpath d='M28 0L56 14.5v29L28 49L0 43.5v-29z' fill='none' stroke='rgba(255,112,140,0.42)' stroke-width='0.5'/%3E%3Cpath d='M0 14.5L28 29v14.5' fill='none' stroke='rgba(162,220,255,0.32)' stroke-width='0.4'/%3E%3C/svg%3E");
167
+ background-size: 56px 49px;
168
+ pointer-events: none;
169
+ }
170
+ /* 思维流粒子 */
171
+ .ai-thought-particles {
172
+ position: absolute;
173
+ inset: 0;
174
+ pointer-events: none;
175
+ overflow: hidden;
176
+ }
177
+ .ai-particle {
178
+ position: absolute;
179
+ left: var(--x, 50%);
180
+ top: var(--y, 50%);
181
+ width: 4px;
182
+ height: 4px;
183
+ background: rgba(255, 138, 158, 0.6);
184
+ border-radius: 50%;
185
+ box-shadow: 0 0 10px rgba(255, 110, 136, 0.36);
186
+ animation: ai-particle-float var(--d, 4s) ease-in-out infinite;
187
+ animation-delay: calc(var(--i, 0) * -0.3s);
188
+ }
189
+ .ai-particle:nth-child(3n) {
190
+ width: 6px;
191
+ height: 6px;
192
+ background: rgba(168, 224, 255, 0.56);
193
+ box-shadow: 0 0 12px rgba(124, 206, 255, 0.34);
194
+ }
195
+ .ai-particle:nth-child(5n) {
196
+ width: 2px;
197
+ height: 2px;
198
+ background: rgba(182, 255, 218, 0.62);
199
+ box-shadow: 0 0 8px rgba(182, 255, 218, 0.28);
200
+ }
201
+ @keyframes ai-particle-float {
202
+ 0%,
203
+ 100% {
204
+ transform: translate(0, 0) scale(1);
205
+ opacity: 0.5;
206
+ }
207
+ 25% {
208
+ transform: translate(8px, -12px) scale(1.2);
209
+ opacity: 0.8;
210
+ }
211
+ 50% {
212
+ transform: translate(-6px, 6px) scale(0.9);
213
+ opacity: 0.6;
214
+ }
215
+ 75% {
216
+ transform: translate(4px, 8px) scale(1.1);
217
+ opacity: 0.7;
218
+ }
219
+ }
220
+ .ai-network-canvas {
221
+ position: absolute;
222
+ inset: -8%;
223
+ width: 116%;
224
+ height: 116%;
225
+ opacity: 1;
226
+ pointer-events: none;
227
+ filter: brightness(1.28) saturate(1.08);
228
+ animation: ai-drift 25s ease-in-out infinite;
229
+ }
230
+ @keyframes ai-drift {
231
+ 0%,
232
+ 100% {
233
+ transform: translate(0, 0) scale(1);
234
+ }
235
+ 25% {
236
+ transform: translate(1.2%, 0.6%) scale(1.008);
237
+ }
238
+ 50% {
239
+ transform: translate(-0.8%, 1%) scale(0.995);
240
+ }
241
+ 75% {
242
+ transform: translate(0.5%, -0.8%) scale(1.005);
243
+ }
244
+ }
245
+ body.ai-page .ai-content,
246
+ body.ai-page footer {
247
+ position: relative;
248
+ z-index: 10;
249
+ }
@@ -0,0 +1,396 @@
1
+ /* AI controls/state layer: progress, interactions, and motion effects. */
2
+ /* ========== 新增 AI 风格特效 ========== */
3
+ /* 复古块状光标(正文末尾) */
4
+ .ai-block-cursor {
5
+ display: inline-block;
6
+ width: 0.6em;
7
+ height: 1.1em;
8
+ background: rgba(150, 226, 255, 0.94);
9
+ margin-left: 2px;
10
+ vertical-align: text-bottom;
11
+ animation: ai-block-cursor-blink 1s step-end infinite;
12
+ }
13
+ @keyframes ai-block-cursor-blink {
14
+ 0%,
15
+ 50% {
16
+ opacity: 1;
17
+ }
18
+ 51%,
19
+ 100% {
20
+ opacity: 0;
21
+ }
22
+ }
23
+ /* 阅读进度条(紫色,更醒目) */
24
+ .ai-read-progress {
25
+ position: fixed;
26
+ top: 0;
27
+ left: 0;
28
+ height: 4px;
29
+ width: calc(var(--read-progress, 0) * 100%);
30
+ background: linear-gradient(
31
+ 90deg,
32
+ rgba(132, 214, 255, 0.92),
33
+ rgba(94, 196, 255, 0.94)
34
+ );
35
+ box-shadow: 0 0 14px rgba(104, 204, 255, 0.45);
36
+ z-index: 100;
37
+ transition: width 0.08s ease-out;
38
+ }
39
+ /* 鼠标跟随光斑 */
40
+ .ai-mouse-glow {
41
+ position: fixed;
42
+ width: 300px;
43
+ height: 300px;
44
+ left: calc(var(--mouse-x, -9999px) - 150px);
45
+ top: calc(var(--mouse-y, -9999px) - 150px);
46
+ background: radial-gradient(
47
+ circle,
48
+ rgba(124, 210, 248, 0.1) 0%,
49
+ transparent 70%
50
+ );
51
+ pointer-events: none;
52
+ z-index: 1;
53
+ transition: opacity 0.3s;
54
+ }
55
+ body.ai-page:not(:hover) .ai-mouse-glow {
56
+ opacity: 0.5;
57
+ }
58
+ /* 深度模糊:上下边缘虚化 */
59
+ .ai-depth-blur {
60
+ position: fixed;
61
+ inset: 0;
62
+ pointer-events: none;
63
+ z-index: 15;
64
+ mask-image: linear-gradient(
65
+ to bottom,
66
+ transparent 0%,
67
+ black 15%,
68
+ black 85%,
69
+ transparent 100%
70
+ );
71
+ -webkit-mask-image: linear-gradient(
72
+ to bottom,
73
+ transparent 0%,
74
+ black 15%,
75
+ black 85%,
76
+ transparent 100%
77
+ );
78
+ backdrop-filter: blur(0);
79
+ transition: backdrop-filter 0.3s;
80
+ }
81
+ .ai-depth-blur::before {
82
+ content: "";
83
+ position: absolute;
84
+ inset: 0;
85
+ background: transparent;
86
+ backdrop-filter: blur(2px);
87
+ -webkit-backdrop-filter: blur(2px);
88
+ mask-image: linear-gradient(
89
+ to bottom,
90
+ black 0%,
91
+ transparent 12%,
92
+ transparent 88%,
93
+ black 100%
94
+ );
95
+ -webkit-mask-image: linear-gradient(
96
+ to bottom,
97
+ black 0%,
98
+ transparent 12%,
99
+ transparent 88%,
100
+ black 100%
101
+ );
102
+ }
103
+ /* 思考中三连点 */
104
+ .ai-thinking-dots {
105
+ position: fixed;
106
+ bottom: 2rem;
107
+ right: 2rem;
108
+ display: flex;
109
+ gap: 6px;
110
+ z-index: 50;
111
+ opacity: 1;
112
+ animation: ai-thinking-fade 0.8s ease-out 1.2s forwards;
113
+ }
114
+ .ai-thinking-dots span {
115
+ width: 6px;
116
+ height: 6px;
117
+ background: rgba(150, 226, 255, 0.82);
118
+ border-radius: 50%;
119
+ animation: ai-dot-pulse 0.8s ease-in-out infinite;
120
+ }
121
+ .ai-thinking-dots span:nth-child(2) {
122
+ animation-delay: 0.15s;
123
+ }
124
+ .ai-thinking-dots span:nth-child(3) {
125
+ animation-delay: 0.3s;
126
+ }
127
+ @keyframes ai-thinking-fade {
128
+ to {
129
+ opacity: 0;
130
+ visibility: hidden;
131
+ }
132
+ }
133
+ @keyframes ai-dot-pulse {
134
+ 0%,
135
+ 100% {
136
+ opacity: 0.4;
137
+ transform: scale(0.8);
138
+ }
139
+ 50% {
140
+ opacity: 1;
141
+ transform: scale(1.2);
142
+ }
143
+ }
144
+ /* 故障效果:链接/代码块 hover 极轻微 RGB 分离 */
145
+ body.ai-page .ai-content .prose a:hover {
146
+ animation: ai-glitch-link 0.4s ease-out;
147
+ }
148
+ body.ai-page .ai-content .prose pre:hover {
149
+ animation: ai-glitch-pre 0.35s ease-out;
150
+ }
151
+ @keyframes ai-glitch-link {
152
+ 0%,
153
+ 100% {
154
+ text-shadow:
155
+ 0 0 10px rgba(100, 255, 220, 0.6),
156
+ 0 0 20px rgba(120, 180, 255, 0.3);
157
+ }
158
+ 20% {
159
+ text-shadow:
160
+ -0.5px 0 rgba(88, 176, 236, 0.4),
161
+ 0.5px 0 rgba(100, 255, 220, 0.4);
162
+ }
163
+ 40% {
164
+ text-shadow:
165
+ 0.5px 0 rgba(88, 176, 236, 0.3),
166
+ -0.5px 0 rgba(100, 255, 220, 0.3);
167
+ }
168
+ 60% {
169
+ text-shadow:
170
+ 0 0 10px rgba(100, 255, 220, 0.6),
171
+ 0 0 20px rgba(120, 180, 255, 0.3);
172
+ }
173
+ }
174
+ @keyframes ai-glitch-pre {
175
+ 0%,
176
+ 100% {
177
+ box-shadow:
178
+ inset 0 0 30px rgba(0, 40, 80, 0.3),
179
+ 0 0 20px rgba(100, 220, 255, 0.06);
180
+ }
181
+ 30% {
182
+ box-shadow:
183
+ inset 0 0 30px rgba(0, 40, 80, 0.3),
184
+ -1px 0 rgba(84, 170, 230, 0.15),
185
+ 1px 0 rgba(80, 255, 200, 0.15);
186
+ }
187
+ }
188
+ /* 悬浮预览卡 */
189
+ body.ai-page .ai-content .prose a.ai-link-preview {
190
+ position: relative;
191
+ }
192
+ body.ai-page .ai-content .prose a.ai-link-preview::after {
193
+ content: attr(data-preview);
194
+ position: absolute;
195
+ bottom: 100%;
196
+ left: 50%;
197
+ transform: translateX(-50%) translateY(-8px);
198
+ padding: 6px 12px;
199
+ background: rgba(6, 14, 24, 0.95);
200
+ border: 1px solid rgba(100, 255, 180, 0.3);
201
+ border-radius: 6px;
202
+ font-size: 0.75em;
203
+ color: rgba(180, 255, 220, 0.9);
204
+ white-space: nowrap;
205
+ opacity: 0;
206
+ pointer-events: none;
207
+ transition:
208
+ opacity 0.2s,
209
+ transform 0.2s;
210
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
211
+ }
212
+ body.ai-page .ai-content .prose a.ai-link-preview:hover::after {
213
+ opacity: 1;
214
+ transform: translateX(-50%) translateY(-12px);
215
+ }
216
+ /* 时间戳日志风格 */
217
+ .ai-log-date {
218
+ font-family: ui-monospace, monospace;
219
+ font-size: 0.85em;
220
+ }
221
+ .ai-log-label {
222
+ color: rgba(100, 255, 180, 0.7);
223
+ margin-right: 0.25em;
224
+ }
225
+
226
+ /* ========== AI 时代氛围增强 ========== */
227
+ /* 元信息终端化 */
228
+ .ai-meta-terminal {
229
+ font-family: ui-monospace, monospace;
230
+ font-size: 0.78em;
231
+ color: rgba(180, 224, 246, 0.84);
232
+ margin-bottom: 0.62em;
233
+ letter-spacing: 0.04em;
234
+ }
235
+ .ai-system-row {
236
+ display: flex;
237
+ flex-wrap: wrap;
238
+ gap: 0.45rem;
239
+ margin-bottom: 0.55rem;
240
+ }
241
+ .ai-system-chip {
242
+ font-family: ui-monospace, monospace;
243
+ font-size: 0.68em;
244
+ color: rgba(186, 232, 252, 0.94);
245
+ background: rgba(8, 18, 30, 0.82);
246
+ border: 1px solid rgba(126, 192, 224, 0.34);
247
+ border-radius: 5px;
248
+ padding: 0.16rem 0.5rem;
249
+ letter-spacing: 0.08em;
250
+ text-transform: uppercase;
251
+ }
252
+ /* 提示词式标题 */
253
+ .ai-prompt-line {
254
+ font-size: 0.86em;
255
+ color: rgba(154, 218, 246, 0.8);
256
+ margin-bottom: 0.4em;
257
+ }
258
+ .ai-prompt-topic {
259
+ color: rgba(188, 232, 252, 0.88);
260
+ font-style: normal;
261
+ }
262
+ /* 对话气泡 / Response 区域 */
263
+ .ai-response-wrap {
264
+ position: relative;
265
+ border: 1px solid rgba(152, 222, 255, 0.2);
266
+ background: linear-gradient(
267
+ 180deg,
268
+ rgba(10, 16, 28, 0.54),
269
+ rgba(16, 8, 16, 0.4)
270
+ );
271
+ border-radius: 8px;
272
+ padding: 0.75rem 0.9rem 0.45rem;
273
+ box-shadow:
274
+ inset 0 0 0 1px rgba(138, 206, 238, 0.12),
275
+ 0 8px 26px rgba(0, 0, 0, 0.32);
276
+ }
277
+ .ai-response-header {
278
+ display: flex;
279
+ align-items: center;
280
+ gap: 0.6em;
281
+ margin-bottom: 0.8em;
282
+ }
283
+ .ai-response-avatar {
284
+ width: 28px;
285
+ height: 28px;
286
+ border-radius: 50%;
287
+ background: linear-gradient(
288
+ 145deg,
289
+ rgba(118, 204, 244, 0.62),
290
+ rgba(132, 214, 255, 0.42)
291
+ );
292
+ border: 1px solid rgba(136, 208, 242, 0.42);
293
+ box-shadow:
294
+ 0 0 0 2px rgba(10, 18, 28, 0.64),
295
+ 0 0 14px rgba(124, 206, 246, 0.32);
296
+ }
297
+ .ai-response-label {
298
+ font-size: 0.8em;
299
+ color: rgba(170, 226, 250, 0.92);
300
+ font-weight: 600;
301
+ letter-spacing: 0.08em;
302
+ text-transform: uppercase;
303
+ }
304
+ .ai-response-meta {
305
+ margin-left: auto;
306
+ display: flex;
307
+ flex-wrap: wrap;
308
+ gap: 0.85rem;
309
+ font-family: ui-monospace, monospace;
310
+ font-size: 0.68em;
311
+ color: rgba(188, 226, 248, 0.76);
312
+ }
313
+ .ai-response-meta strong {
314
+ color: rgba(194, 236, 252, 0.96);
315
+ font-weight: 600;
316
+ }
317
+ /* 字数/Token 角落 */
318
+ .ai-stats-corner {
319
+ position: absolute;
320
+ top: 0.5em;
321
+ right: 1em;
322
+ font-family: ui-monospace, monospace;
323
+ font-size: 0.7em;
324
+ color: rgba(176, 218, 240, 0.58);
325
+ }
326
+ .ai-model-id {
327
+ color: rgba(158, 218, 246, 0.82);
328
+ }
329
+ /* Regenerate 按钮 */
330
+ .ai-regenerate {
331
+ display: block;
332
+ margin: 2em auto 0;
333
+ padding: 0.5em 1.2em;
334
+ font-size: 0.85em;
335
+ font-family: ui-monospace, monospace;
336
+ color: rgba(188, 234, 252, 0.94);
337
+ background: rgba(10, 18, 28, 0.68);
338
+ border: 1px solid rgba(126, 192, 224, 0.34);
339
+ border-radius: 4px;
340
+ cursor: pointer;
341
+ transition: all 0.2s ease;
342
+ }
343
+ .ai-regenerate:hover:not(:disabled) {
344
+ background: rgba(126, 192, 224, 0.12);
345
+ box-shadow: 0 0 14px rgba(124, 206, 246, 0.24);
346
+ }
347
+ .ai-regenerate:disabled {
348
+ opacity: 0.6;
349
+ cursor: not-allowed;
350
+ }
351
+ .ai-regenerating {
352
+ pointer-events: none;
353
+ }
354
+ .ai-regenerate-flash {
355
+ animation: ai-flash 0.6s ease-out;
356
+ }
357
+ @keyframes ai-flash {
358
+ 0% {
359
+ opacity: 0.3;
360
+ }
361
+ 100% {
362
+ opacity: 1;
363
+ }
364
+ }
365
+ /* 首字放大 */
366
+ body.ai-page
367
+ .ai-content
368
+ .prose
369
+ .ai-prose-body
370
+ > p:first-of-type::first-letter {
371
+ float: left;
372
+ font-size: 3.2em;
373
+ line-height: 0.9;
374
+ margin-right: 0.1em;
375
+ color: rgba(160, 226, 252, 0.94);
376
+ text-shadow: 0 0 22px rgba(124, 206, 246, 0.3);
377
+ }
378
+ /* 段落滚动浮现 */
379
+ .ai-prose-body p,
380
+ .ai-prose-body h2,
381
+ .ai-prose-body h3,
382
+ .ai-prose-body pre,
383
+ .ai-prose-body blockquote,
384
+ .ai-prose-body ul,
385
+ .ai-prose-body ol {
386
+ opacity: 0;
387
+ transform: translateY(12px);
388
+ transition:
389
+ opacity 0.5s ease,
390
+ transform 0.5s ease;
391
+ }
392
+ .ai-prose-body .ai-para-visible {
393
+ opacity: 1;
394
+ transform: translateY(0);
395
+ }
396
+
@@ -0,0 +1 @@
1
+ /* AI hero layer: reserved for hero/monitor-specific style rules. */