@anglefeint/astro-theme 0.1.27 → 0.1.28

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anglefeint/astro-theme",
3
- "version": "0.1.27",
3
+ "version": "0.1.28",
4
4
  "type": "module",
5
5
  "description": "Anglefeint core theme package for Astro",
6
6
  "keywords": [
@@ -17,12 +17,13 @@ body.ai-page .ai-content .prose {
17
17
  rgba(55, 65, 80, 0.14) 2px,
18
18
  rgba(55, 65, 80, 0.14) 4px
19
19
  ),
20
- linear-gradient(135deg, rgba(14, 18, 24, 0.97) 0%, rgba(10, 14, 20, 0.95) 50%, rgba(6, 10, 16, 0.97) 100%),
21
- radial-gradient(
22
- ellipse 80% 50% at 50% 0%,
23
- rgba(70, 110, 150, 0.06),
24
- transparent 60%
25
- );
20
+ linear-gradient(
21
+ 135deg,
22
+ rgba(14, 18, 24, 0.97) 0%,
23
+ rgba(10, 14, 20, 0.95) 50%,
24
+ rgba(6, 10, 16, 0.97) 100%
25
+ ),
26
+ radial-gradient(ellipse 80% 50% at 50% 0%, rgba(70, 110, 150, 0.06), transparent 60%);
26
27
  backdrop-filter: blur(16px) saturate(1.1);
27
28
  -webkit-backdrop-filter: blur(16px) saturate(1.1);
28
29
  border-radius: 8px;
@@ -116,7 +117,7 @@ body.ai-page .ai-content .prose .ai-prose-body {
116
117
  }
117
118
  /* GPU 金属边框:铝银质感 */
118
119
  body.ai-page .ai-content .prose::before {
119
- content: "";
120
+ content: '';
120
121
  position: absolute;
121
122
  inset: -1px;
122
123
  border-radius: inherit;
@@ -145,14 +146,21 @@ body.ai-page .ai-content .prose:hover::before {
145
146
  }
146
147
  /* 链接 hover 光晕/脉冲 */
147
148
  body.ai-page .ai-content .prose a {
149
+ color: rgba(142, 220, 248, 0.96);
148
150
  text-decoration: none;
149
151
  padding: 0 2px;
150
152
  border-radius: 2px;
153
+ text-shadow:
154
+ 0 0 8px rgba(110, 198, 238, 0.24),
155
+ 0 0 16px rgba(95, 184, 226, 0.14);
151
156
  transition:
152
157
  box-shadow 0.25s ease,
153
158
  text-shadow 0.25s ease,
154
159
  color 0.25s ease;
155
160
  }
161
+ body.ai-page .ai-content .prose a:visited {
162
+ color: rgba(156, 210, 255, 0.94);
163
+ }
156
164
  body.ai-page .ai-content .prose a:hover {
157
165
  box-shadow:
158
166
  0 0 12px rgba(140, 210, 242, 0.4),
@@ -196,7 +204,7 @@ body.ai-page .ai-content .prose blockquote {
196
204
  inset 0 0 20px rgba(8, 28, 44, 0.26);
197
205
  }
198
206
  body.ai-page .ai-content .prose blockquote::before {
199
- content: ">";
207
+ content: '>';
200
208
  position: absolute;
201
209
  left: 0.6em;
202
210
  top: 1em;
@@ -211,7 +219,7 @@ body.ai-page .ai-content .prose pre {
211
219
  padding-top: 2.2em;
212
220
  }
213
221
  body.ai-page .ai-content .prose pre::before {
214
- content: "● ● ● runtime";
222
+ content: '● ● ● runtime';
215
223
  position: absolute;
216
224
  left: 1em;
217
225
  top: 0.9em;
@@ -223,7 +231,7 @@ body.ai-page .ai-content .prose pre::before {
223
231
  text-shadow: 0 0 8px rgba(124, 206, 246, 0.28);
224
232
  }
225
233
  body.ai-page .ai-content .prose pre::after {
226
- content: "";
234
+ content: '';
227
235
  position: absolute;
228
236
  inset: 0;
229
237
  pointer-events: none;
@@ -240,7 +248,7 @@ body.ai-page .ai-content .prose pre:hover::after {
240
248
  transform: translateX(130%);
241
249
  }
242
250
  body.ai-page .ai-content .prose blockquote::after {
243
- content: "reference";
251
+ content: 'reference';
244
252
  position: absolute;
245
253
  right: 1em;
246
254
  top: 0.9em;
@@ -2,9 +2,9 @@
2
2
  /* ========== Blade Runner 博客列表页 (body.cyber-page) ========== */
3
3
  body.cyber-page {
4
4
  background: #090b12 !important;
5
- background-image: none !important;
6
- background-size: auto !important;
7
- min-height: 100vh !important;
5
+ background-image: none !important;
6
+ background-size: auto !important;
7
+ min-height: 100vh !important;
8
8
  --chrome-bg: rgba(7, 13, 24, 0.72);
9
9
  --chrome-border: rgba(112, 196, 255, 0.2);
10
10
  --chrome-link: rgba(196, 226, 255, 0.92);
@@ -13,10 +13,10 @@ body.cyber-page {
13
13
  --chrome-text-muted: rgba(156, 188, 224, 0.76);
14
14
  }
15
15
  body.cyber-page::before {
16
- content: "";
17
- position: fixed;
18
- inset: 0;
19
- z-index: -1;
16
+ content: '';
17
+ position: fixed;
18
+ inset: 0;
19
+ z-index: -1;
20
20
  background: linear-gradient(
21
21
  180deg,
22
22
  #05070b 0%,
@@ -27,28 +27,16 @@ body.cyber-page::before {
27
27
  );
28
28
  }
29
29
  body.cyber-page::after {
30
- content: "";
31
- position: fixed;
32
- inset: 0;
33
- z-index: -1;
30
+ content: '';
31
+ position: fixed;
32
+ inset: 0;
33
+ z-index: -1;
34
34
  background:
35
- radial-gradient(
36
- ellipse 82% 52% at 50% 18%,
37
- rgba(110, 186, 255, 0.14) 0%,
38
- transparent 50%
39
- ),
40
- radial-gradient(
41
- ellipse 62% 42% at 82% 78%,
42
- rgba(255, 132, 88, 0.06) 0%,
43
- transparent 40%
44
- ),
45
- radial-gradient(
46
- ellipse 52% 37% at 20% 62%,
47
- rgba(226, 150, 214, 0.06) 0%,
48
- transparent 45%
49
- );
35
+ radial-gradient(ellipse 82% 52% at 50% 18%, rgba(110, 186, 255, 0.14) 0%, transparent 50%),
36
+ radial-gradient(ellipse 62% 42% at 82% 78%, rgba(255, 132, 88, 0.06) 0%, transparent 40%),
37
+ radial-gradient(ellipse 52% 37% at 20% 62%, rgba(226, 150, 214, 0.06) 0%, transparent 45%);
50
38
  animation: cyber-fog-drift 20s ease-in-out infinite alternate;
51
- pointer-events: none;
39
+ pointer-events: none;
52
40
  }
53
41
  @keyframes cyber-fog-drift {
54
42
  0% {
@@ -61,17 +49,17 @@ body.cyber-page::after {
61
49
  }
62
50
  }
63
51
  body.cyber-page .cyber-rain {
64
- position: fixed;
65
- inset: 0;
66
- pointer-events: none;
52
+ position: fixed;
53
+ inset: 0;
54
+ pointer-events: none;
67
55
  z-index: 6;
68
- overflow: hidden;
56
+ overflow: hidden;
69
57
  contain: layout paint;
70
58
  }
71
59
  /* Blade Runner: 雨滴 - 白色中脏脏的感觉,非琥珀也非冷青 */
72
60
  body.cyber-page .cyber-rain-drop {
73
- position: absolute;
74
- top: -20px;
61
+ position: absolute;
62
+ top: -20px;
75
63
  width: 6px;
76
64
  height: 38px;
77
65
  clip-path: polygon(1.5px 0, 4.5px 0, 6px 100%, 0 100%);
@@ -83,7 +71,7 @@ body.cyber-page .cyber-rain-drop {
83
71
  rgba(195, 190, 182, 0.52) 70%,
84
72
  transparent 100%
85
73
  );
86
- animation: cyber-rain-fall linear infinite;
74
+ animation: cyber-rain-fall linear infinite;
87
75
  }
88
76
  @keyframes cyber-rain-fall {
89
77
  to {
@@ -92,7 +80,7 @@ body.cyber-page .cyber-rain-drop {
92
80
  }
93
81
  /* AI page: scanlines only on header and footer; fade on hover */
94
82
  body.cyber-page .cyber-spotlight {
95
- position: fixed;
83
+ position: fixed;
96
84
  top: 0;
97
85
  left: 0;
98
86
  width: calc(hypot(100vw, 100vh) * 1.3 / 1.41421356);
@@ -103,7 +91,7 @@ body.cyber-page .cyber-spotlight {
103
91
  }
104
92
  body.cyber-page .cyber-spotlight-tl {
105
93
  position: absolute;
106
- inset: 0;
94
+ inset: 0;
107
95
  transform-origin: 0 0;
108
96
  background: conic-gradient(
109
97
  from 180deg at 0 0,
@@ -159,21 +147,9 @@ body.cyber-page .cyber-flicker {
159
147
  inset: 0;
160
148
  contain: layout paint;
161
149
  background:
162
- radial-gradient(
163
- ellipse 25% 30% at 85% 20%,
164
- rgba(255, 146, 96, 0.18) 0%,
165
- transparent 55%
166
- ),
167
- radial-gradient(
168
- ellipse 20% 24% at 20% 68%,
169
- rgba(96, 182, 255, 0.28) 0%,
170
- transparent 55%
171
- ),
172
- radial-gradient(
173
- ellipse 28% 35% at 70% 85%,
174
- rgba(224, 146, 212, 0.2) 0%,
175
- transparent 55%
176
- );
150
+ radial-gradient(ellipse 25% 30% at 85% 20%, rgba(255, 146, 96, 0.18) 0%, transparent 55%),
151
+ radial-gradient(ellipse 20% 24% at 20% 68%, rgba(96, 182, 255, 0.28) 0%, transparent 55%),
152
+ radial-gradient(ellipse 28% 35% at 70% 85%, rgba(224, 146, 212, 0.2) 0%, transparent 55%);
177
153
  animation: cyber-neon-flicker-glow 6s ease-in-out infinite;
178
154
  pointer-events: none;
179
155
  z-index: 0;
@@ -198,21 +174,9 @@ body.cyber-page .cyber-haze {
198
174
  inset: 0;
199
175
  contain: layout paint;
200
176
  background:
201
- radial-gradient(
202
- ellipse 100% 80% at 50% 50%,
203
- rgba(52, 84, 128, 0.08) 0%,
204
- transparent 60%
205
- ),
206
- radial-gradient(
207
- ellipse 40% 30% at 30% 30%,
208
- rgba(224, 144, 208, 0.05) 0%,
209
- transparent 50%
210
- ),
211
- radial-gradient(
212
- ellipse 35% 25% at 70% 70%,
213
- rgba(255, 134, 92, 0.04) 0%,
214
- transparent 50%
215
- );
177
+ radial-gradient(ellipse 100% 80% at 50% 50%, rgba(52, 84, 128, 0.08) 0%, transparent 60%),
178
+ radial-gradient(ellipse 40% 30% at 30% 30%, rgba(224, 144, 208, 0.05) 0%, transparent 50%),
179
+ radial-gradient(ellipse 35% 25% at 70% 70%, rgba(255, 134, 92, 0.04) 0%, transparent 50%);
216
180
  animation: cyber-haze-drift 20s ease-in-out infinite alternate;
217
181
  pointer-events: none;
218
182
  z-index: 1;
@@ -231,13 +195,9 @@ body.cyber-page .cyber-vignette {
231
195
  position: fixed;
232
196
  inset: 0;
233
197
  contain: layout paint;
234
- background: radial-gradient(
235
- ellipse 80% 80% at 50% 50%,
236
- transparent 40%,
237
- rgba(0, 0, 0, 0.4) 100%
238
- );
239
- pointer-events: none;
240
- z-index: 3;
198
+ background: radial-gradient(ellipse 80% 80% at 50% 50%, transparent 40%, rgba(0, 0, 0, 0.4) 100%);
199
+ pointer-events: none;
200
+ z-index: 3;
241
201
  }
242
202
  body.cyber-page .cyber-rain-drop--thin {
243
203
  width: 4px;
@@ -306,10 +266,10 @@ body.cyber-page header {
306
266
  -webkit-backdrop-filter: blur(3px);
307
267
  }
308
268
  body.cyber-page main {
309
- position: relative;
269
+ position: relative;
310
270
  z-index: 5;
311
- width: 960px;
312
- padding-top: calc(3em + 56px);
271
+ width: 960px;
272
+ padding-top: calc(3em + 56px);
313
273
  }
314
274
  body.cyber-page .title,
315
275
  body.cyber-page .date {
@@ -319,23 +279,23 @@ body.cyber-page .date {
319
279
  color: rgba(150, 186, 228, 0.68);
320
280
  }
321
281
  body.cyber-page ul {
322
- display: flex;
323
- flex-wrap: wrap;
324
- gap: 2rem;
325
- list-style: none;
326
- margin: 0;
327
- padding: 0;
282
+ display: flex;
283
+ flex-wrap: wrap;
284
+ gap: 2rem;
285
+ list-style: none;
286
+ margin: 0;
287
+ padding: 0;
328
288
  }
329
289
  body.cyber-page ul li {
330
- width: calc(50% - 1rem);
290
+ width: calc(50% - 1rem);
331
291
  }
332
292
  body.cyber-page ul li * {
333
- text-decoration: none;
293
+ text-decoration: none;
334
294
  }
335
295
  body.cyber-page ul li:first-child {
336
- width: 100%;
337
- margin-bottom: 1rem;
338
- text-align: center;
296
+ width: 100%;
297
+ margin-bottom: 1rem;
298
+ text-align: center;
339
299
  }
340
300
  body.cyber-page ul li:first-child img {
341
301
  width: 100%;
@@ -344,9 +304,9 @@ body.cyber-page ul li:first-child .title {
344
304
  font-size: 2.369rem;
345
305
  }
346
306
  body.cyber-page ul li a {
347
- display: block;
348
- position: relative;
349
- padding: 1rem;
307
+ display: block;
308
+ position: relative;
309
+ padding: 1rem;
350
310
  border-radius: 4px;
351
311
  border: 1px solid rgba(116, 194, 255, 0.24);
352
312
  box-shadow:
@@ -423,18 +383,18 @@ body.cyber-page ul li a:hover .date {
423
383
  0 0 20px rgba(218, 148, 210, 0.26);
424
384
  }
425
385
  body.cyber-page .img-wrapper {
426
- position: relative;
386
+ position: relative;
427
387
  margin-bottom: 0.5rem;
428
388
  border-radius: 4px;
429
- overflow: hidden;
389
+ overflow: hidden;
430
390
  }
431
391
  /* 水平扫线 - 日式樱花+赛博蓝 */
432
392
  body.cyber-page .img-wrapper::before {
433
- content: "";
434
- position: absolute;
435
- left: 0;
436
- right: 0;
437
- top: -20px;
393
+ content: '';
394
+ position: absolute;
395
+ left: 0;
396
+ right: 0;
397
+ top: -20px;
438
398
  height: 10px;
439
399
  z-index: 3;
440
400
  background: linear-gradient(
@@ -457,14 +417,14 @@ body.cyber-page ul li a:hover .img-wrapper::before {
457
417
  top: 100%;
458
418
  }
459
419
  body.cyber-page .img-wrapper::after {
460
- content: "";
420
+ content: '';
461
421
  position: absolute;
462
422
  inset: 0;
463
- z-index: 2;
423
+ z-index: 2;
464
424
  box-shadow:
465
425
  inset 0 0 25px rgba(108, 190, 255, 0.16),
466
426
  inset 0 0 50px rgba(224, 148, 212, 0.1);
467
- pointer-events: none;
427
+ pointer-events: none;
468
428
  opacity: 0;
469
429
  transition: opacity 0.4s ease;
470
430
  }
@@ -472,18 +432,16 @@ body.cyber-page ul li a:hover .img-wrapper::after {
472
432
  opacity: 1;
473
433
  }
474
434
  body.cyber-page ul li img {
475
- display: block;
476
- width: 100%;
477
- height: auto;
478
- filter: saturate(0.75) contrast(1.05) brightness(0.88) sepia(0.15)
479
- hue-rotate(-2deg);
435
+ display: block;
436
+ width: 100%;
437
+ height: auto;
438
+ filter: saturate(0.75) contrast(1.05) brightness(0.88) sepia(0.15) hue-rotate(-2deg);
480
439
  transition:
481
440
  filter 0.3s,
482
441
  box-shadow 0.3s;
483
442
  }
484
443
  body.cyber-page ul li a:hover img {
485
- filter: saturate(0.88) contrast(1.11) brightness(0.94) sepia(0.08)
486
- hue-rotate(-6deg);
444
+ filter: saturate(0.88) contrast(1.11) brightness(0.94) sepia(0.08) hue-rotate(-6deg);
487
445
  box-shadow:
488
446
  0 0 15px rgba(116, 194, 255, 0.22),
489
447
  0 0 30px rgba(224, 148, 212, 0.2);
@@ -491,7 +449,15 @@ body.cyber-page ul li a:hover img {
491
449
  body.cyber-page .title {
492
450
  margin: 0;
493
451
  font-size: 1.2rem;
494
- line-height: 1;
452
+ line-height: 1.2;
453
+ min-height: calc(1.2em * 2);
454
+ display: -webkit-box;
455
+ -webkit-line-clamp: 2;
456
+ line-clamp: 2;
457
+ -webkit-box-orient: vertical;
458
+ overflow: hidden;
459
+ text-overflow: ellipsis;
460
+ word-break: break-word;
495
461
  transition:
496
462
  color 0.2s,
497
463
  text-shadow 0.2s;