@anglefeint/astro-theme 0.1.3 → 0.1.4

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,1112 @@
1
+ /* AI theme styles extracted from global.css */
2
+ body.ai-page header .ai-scanlines,
3
+ body.ai-page footer .ai-scanlines {
4
+ position: absolute;
5
+ inset: 0;
6
+ contain: layout paint;
7
+ z-index: 1;
8
+ background: repeating-linear-gradient(
9
+ 0deg,
10
+ transparent,
11
+ transparent 2px,
12
+ rgba(0, 0, 0, 0.55) 2px,
13
+ rgba(0, 0, 0, 0.55) 4px
14
+ );
15
+ pointer-events: none;
16
+ opacity: 0.78;
17
+ transition: opacity 0.3s ease;
18
+ }
19
+ body.ai-page header .ai-scanlines::after,
20
+ body.ai-page footer .ai-scanlines::after {
21
+ content: "";
22
+ position: absolute;
23
+ inset: 0;
24
+ background: repeating-linear-gradient(
25
+ 0deg,
26
+ transparent,
27
+ transparent 1px,
28
+ rgba(0, 0, 0, 0.12) 1px,
29
+ rgba(0, 0, 0, 0.12) 2px
30
+ );
31
+ pointer-events: none;
32
+ opacity: 0.8;
33
+ }
34
+ body.ai-page header:hover .ai-scanlines,
35
+ body.ai-page footer:hover .ai-scanlines {
36
+ opacity: 0;
37
+ }
38
+ /* ========== 点线网络 漂浮浮动 文章页 (body.ai-page) ========== */
39
+ body.ai-page {
40
+ background: #03060c !important;
41
+ background-image: none !important;
42
+ min-height: 100vh;
43
+ --chrome-bg: rgba(14, 10, 16, 0.72);
44
+ --chrome-border: rgba(255, 106, 132, 0.14);
45
+ --chrome-link: rgba(214, 243, 255, 0.92);
46
+ --chrome-link-hover: rgba(255, 168, 188, 0.98);
47
+ --chrome-active: rgba(132, 214, 255, 0.92);
48
+ --chrome-text-muted: rgba(178, 220, 238, 0.7);
49
+ }
50
+ /* 终端式滚动条 */
51
+ body.ai-page {
52
+ scrollbar-width: thin;
53
+ scrollbar-color: rgba(255, 106, 132, 0.48) transparent;
54
+ }
55
+ body.ai-page::-webkit-scrollbar {
56
+ width: 6px;
57
+ }
58
+ body.ai-page::-webkit-scrollbar-track {
59
+ background: transparent;
60
+ }
61
+ body.ai-page::-webkit-scrollbar-thumb {
62
+ background: rgba(255, 106, 132, 0.34);
63
+ border-radius: 3px;
64
+ }
65
+ body.ai-page::-webkit-scrollbar-thumb:hover {
66
+ background: rgba(255, 120, 152, 0.58);
67
+ box-shadow: 0 0 8px rgba(255, 106, 132, 0.4);
68
+ }
69
+ body.ai-page::-webkit-scrollbar-thumb {
70
+ box-shadow: 0 0 6px rgba(255, 106, 132, 0.26);
71
+ }
72
+ .ai-bg {
73
+ position: fixed;
74
+ inset: 0;
75
+ z-index: 0;
76
+ pointer-events: none;
77
+ overflow: hidden;
78
+ }
79
+ .ai-glow {
80
+ position: absolute;
81
+ inset: 0;
82
+ background: linear-gradient(
83
+ 140deg,
84
+ #05060b 0%,
85
+ #0b1322 24%,
86
+ #0f1d2f 46%,
87
+ #221018 72%,
88
+ #13070f 100%
89
+ );
90
+ }
91
+ .ai-glow-shift {
92
+ animation: ai-glow-shift 25s ease-in-out infinite;
93
+ }
94
+ @keyframes ai-glow-shift {
95
+ 0%,
96
+ 100% {
97
+ filter: brightness(1) saturate(1);
98
+ }
99
+ 33% {
100
+ filter: brightness(1.02) saturate(1.1) hue-rotate(5deg);
101
+ }
102
+ 66% {
103
+ filter: brightness(0.99) saturate(1.05) hue-rotate(-3deg);
104
+ }
105
+ }
106
+ /* 柔和光晕:中心径向青蓝光 */
107
+ .ai-haze {
108
+ position: absolute;
109
+ inset: 0;
110
+ background: radial-gradient(
111
+ ellipse 92% 72% at 50% 38%,
112
+ rgba(122, 212, 252, 0.08) 0%,
113
+ rgba(255, 90, 120, 0.06) 34%,
114
+ transparent 65%
115
+ );
116
+ animation: ai-haze-drift 18s ease-in-out infinite alternate;
117
+ pointer-events: none;
118
+ }
119
+ @keyframes ai-haze-drift {
120
+ 0% {
121
+ opacity: 0.8;
122
+ transform: translate(2%, 1%) scale(1.02);
123
+ }
124
+ 100% {
125
+ opacity: 1;
126
+ transform: translate(-2%, -1%) scale(0.98);
127
+ }
128
+ }
129
+ /* 边缘暗角 */
130
+ .ai-vignette {
131
+ position: absolute;
132
+ inset: 0;
133
+ background: radial-gradient(
134
+ ellipse 75% 75% at 50% 50%,
135
+ transparent 45%,
136
+ rgba(0, 0, 0, 0.25) 100%
137
+ );
138
+ pointer-events: none;
139
+ }
140
+ .ai-stripe {
141
+ position: absolute;
142
+ inset: 0;
143
+ opacity: 0.06;
144
+ background: repeating-linear-gradient(
145
+ 90deg,
146
+ transparent,
147
+ transparent 1px,
148
+ rgba(196, 232, 255, 0.28) 1px,
149
+ rgba(196, 232, 255, 0.28) 2px
150
+ );
151
+ }
152
+ /* 噪点层 */
153
+ .ai-noise {
154
+ position: absolute;
155
+ inset: 0;
156
+ opacity: 0.04;
157
+ 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");
158
+ pointer-events: none;
159
+ }
160
+ /* 六边形网格 */
161
+ .ai-hex-grid {
162
+ position: absolute;
163
+ inset: 0;
164
+ opacity: 0.11;
165
+ 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");
166
+ background-size: 56px 49px;
167
+ pointer-events: none;
168
+ }
169
+ /* 思维流粒子 */
170
+ .ai-thought-particles {
171
+ position: absolute;
172
+ inset: 0;
173
+ pointer-events: none;
174
+ overflow: hidden;
175
+ }
176
+ .ai-particle {
177
+ position: absolute;
178
+ left: var(--x, 50%);
179
+ top: var(--y, 50%);
180
+ width: 4px;
181
+ height: 4px;
182
+ background: rgba(255, 138, 158, 0.6);
183
+ border-radius: 50%;
184
+ box-shadow: 0 0 10px rgba(255, 110, 136, 0.36);
185
+ animation: ai-particle-float var(--d, 4s) ease-in-out infinite;
186
+ animation-delay: calc(var(--i, 0) * -0.3s);
187
+ }
188
+ .ai-particle:nth-child(3n) {
189
+ width: 6px;
190
+ height: 6px;
191
+ background: rgba(168, 224, 255, 0.56);
192
+ box-shadow: 0 0 12px rgba(124, 206, 255, 0.34);
193
+ }
194
+ .ai-particle:nth-child(5n) {
195
+ width: 2px;
196
+ height: 2px;
197
+ background: rgba(182, 255, 218, 0.62);
198
+ box-shadow: 0 0 8px rgba(182, 255, 218, 0.28);
199
+ }
200
+ @keyframes ai-particle-float {
201
+ 0%,
202
+ 100% {
203
+ transform: translate(0, 0) scale(1);
204
+ opacity: 0.5;
205
+ }
206
+ 25% {
207
+ transform: translate(8px, -12px) scale(1.2);
208
+ opacity: 0.8;
209
+ }
210
+ 50% {
211
+ transform: translate(-6px, 6px) scale(0.9);
212
+ opacity: 0.6;
213
+ }
214
+ 75% {
215
+ transform: translate(4px, 8px) scale(1.1);
216
+ opacity: 0.7;
217
+ }
218
+ }
219
+ .ai-network {
220
+ position: absolute;
221
+ inset: -8%;
222
+ width: 116%;
223
+ height: 116%;
224
+ opacity: 1;
225
+ filter: brightness(1.28) saturate(1.08);
226
+ animation: ai-drift 25s ease-in-out infinite;
227
+ }
228
+ @keyframes ai-drift {
229
+ 0%,
230
+ 100% {
231
+ transform: translate(0, 0) scale(1);
232
+ }
233
+ 25% {
234
+ transform: translate(1.2%, 0.6%) scale(1.008);
235
+ }
236
+ 50% {
237
+ transform: translate(-0.8%, 1%) scale(0.995);
238
+ }
239
+ 75% {
240
+ transform: translate(0.5%, -0.8%) scale(1.005);
241
+ }
242
+ }
243
+ .ai-network .ai-dots circle {
244
+ transform-origin: center;
245
+ animation:
246
+ ai-dot-float 8s ease-in-out infinite,
247
+ ai-dot-breathe 5s ease-in-out infinite;
248
+ }
249
+ .ai-network .ai-dots circle:nth-child(odd) {
250
+ animation-delay: -3s;
251
+ }
252
+ .ai-network .ai-dots circle:nth-child(3n) {
253
+ animation-delay: -5s;
254
+ }
255
+ .ai-network .ai-dots circle:nth-child(5n) {
256
+ animation-duration: 10s;
257
+ }
258
+ .ai-network .ai-dots circle:nth-child(4n) {
259
+ animation-delay: -1s;
260
+ }
261
+ .ai-network .ai-lines line {
262
+ stroke-dasharray: 6 12;
263
+ animation: ai-line-pulse 4s linear infinite;
264
+ }
265
+ .ai-network .ai-lines line:nth-child(odd) {
266
+ animation-delay: -2s;
267
+ }
268
+ @keyframes ai-line-pulse {
269
+ to {
270
+ stroke-dashoffset: -18;
271
+ }
272
+ }
273
+ @keyframes ai-dot-float {
274
+ 0%,
275
+ 100% {
276
+ transform: translate(0, 0);
277
+ }
278
+ 33% {
279
+ transform: translate(1.5px, -2px);
280
+ }
281
+ 66% {
282
+ transform: translate(-1px, 1.5px);
283
+ }
284
+ }
285
+ @keyframes ai-dot-breathe {
286
+ 0%,
287
+ 100% {
288
+ opacity: 1;
289
+ }
290
+ 50% {
291
+ opacity: 0.75;
292
+ }
293
+ }
294
+ body.ai-page .ai-content,
295
+ body.ai-page footer {
296
+ position: relative;
297
+ z-index: 10;
298
+ }
299
+ /* GPU 风格:散热鳍片 + PCB 底 + 金属边框 */
300
+ body.ai-page .ai-content .prose {
301
+ position: relative;
302
+ background:
303
+ repeating-linear-gradient(
304
+ 90deg,
305
+ transparent 0,
306
+ transparent 19px,
307
+ rgba(50, 90, 70, 0.03) 19px,
308
+ rgba(50, 90, 70, 0.03) 20px
309
+ ),
310
+ repeating-linear-gradient(
311
+ 180deg,
312
+ transparent 0,
313
+ transparent 2px,
314
+ rgba(55, 65, 80, 0.14) 2px,
315
+ rgba(55, 65, 80, 0.14) 4px
316
+ ),
317
+ linear-gradient(135deg, rgba(14, 18, 24, 0.97) 0%, rgba(10, 14, 20, 0.95) 50%, rgba(6, 10, 16, 0.97) 100%),
318
+ radial-gradient(
319
+ ellipse 80% 50% at 50% 0%,
320
+ rgba(70, 110, 150, 0.06),
321
+ transparent 60%
322
+ );
323
+ backdrop-filter: blur(16px) saturate(1.1);
324
+ -webkit-backdrop-filter: blur(16px) saturate(1.1);
325
+ border-radius: 8px;
326
+ padding: 2em;
327
+ border: 1px solid rgba(140, 155, 175, 0.35);
328
+ box-shadow:
329
+ 0 0 60px rgba(0, 0, 0, 0.5),
330
+ inset 0 1px 0 rgba(200, 210, 225, 0.12),
331
+ inset 0 -1px 0 rgba(40, 50, 65, 0.4),
332
+ inset 0 0 0 1px rgba(100, 120, 150, 0.15);
333
+ animation: ai-breathe 6s ease-in-out infinite;
334
+ }
335
+ /* 呼吸式微动 */
336
+ @keyframes ai-breathe {
337
+ 0%,
338
+ 100% {
339
+ opacity: 1;
340
+ transform: scale(1);
341
+ }
342
+ 50% {
343
+ opacity: 0.98;
344
+ transform: scale(1.001);
345
+ }
346
+ }
347
+ /* 加载扫描线 */
348
+ .ai-load-scan {
349
+ position: fixed;
350
+ left: 0;
351
+ right: 0;
352
+ height: 2px;
353
+ background: linear-gradient(
354
+ 90deg,
355
+ transparent,
356
+ rgba(100, 255, 180, 0.6),
357
+ rgba(120, 180, 255, 0.6),
358
+ transparent
359
+ );
360
+ box-shadow: 0 0 12px rgba(100, 255, 180, 0.5);
361
+ animation: ai-scan 0.8s ease-out forwards;
362
+ pointer-events: none;
363
+ z-index: 20;
364
+ }
365
+ @keyframes ai-scan {
366
+ 0% {
367
+ top: 0;
368
+ opacity: 1;
369
+ }
370
+ 100% {
371
+ top: 100vh;
372
+ opacity: 0.2;
373
+ }
374
+ }
375
+ /* 文章区域渐显 */
376
+ .ai-article {
377
+ animation: ai-article-in 0.6s ease-out forwards;
378
+ opacity: 0;
379
+ }
380
+ @keyframes ai-article-in {
381
+ to {
382
+ opacity: 1;
383
+ }
384
+ }
385
+ .ai-title {
386
+ animation: ai-title-in 0.5s ease-out 0.15s forwards;
387
+ opacity: 0;
388
+ }
389
+ @keyframes ai-title-in {
390
+ to {
391
+ opacity: 1;
392
+ }
393
+ }
394
+ .ai-prose-body {
395
+ animation: ai-prose-in 0.6s ease-out 0.35s forwards;
396
+ opacity: 0;
397
+ }
398
+ @keyframes ai-prose-in {
399
+ to {
400
+ opacity: 1;
401
+ }
402
+ }
403
+ /* 标题/正文区光晕 */
404
+ body.ai-page .ai-content .prose .ai-title {
405
+ text-shadow:
406
+ 0 0 20px rgba(132, 214, 255, 0.18),
407
+ 0 0 36px rgba(160, 224, 255, 0.16);
408
+ }
409
+ body.ai-page .ai-content .prose .ai-prose-body {
410
+ box-shadow: inset 0 0 80px rgba(124, 206, 255, 0.035);
411
+ }
412
+ /* GPU 金属边框:铝银质感 */
413
+ body.ai-page .ai-content .prose::before {
414
+ content: "";
415
+ position: absolute;
416
+ inset: -1px;
417
+ border-radius: inherit;
418
+ padding: 1px;
419
+ background: linear-gradient(
420
+ 135deg,
421
+ rgba(200, 210, 225, 0.4) 0%,
422
+ rgba(140, 155, 180, 0.25) 25%,
423
+ rgba(100, 115, 140, 0.2) 50%,
424
+ rgba(140, 155, 180, 0.28) 75%,
425
+ rgba(180, 195, 215, 0.35) 100%
426
+ );
427
+ -webkit-mask:
428
+ linear-gradient(#fff 0 0) content-box,
429
+ linear-gradient(#fff 0 0);
430
+ mask:
431
+ linear-gradient(#fff 0 0) content-box,
432
+ linear-gradient(#fff 0 0);
433
+ -webkit-mask-composite: xor;
434
+ mask-composite: exclude;
435
+ pointer-events: none;
436
+ transition: opacity 0.3s ease;
437
+ }
438
+ body.ai-page .ai-content .prose:hover::before {
439
+ opacity: 1.3;
440
+ }
441
+ /* 链接 hover 光晕/脉冲 */
442
+ body.ai-page .ai-content .prose a {
443
+ text-decoration: none;
444
+ padding: 0 2px;
445
+ border-radius: 2px;
446
+ transition:
447
+ box-shadow 0.25s ease,
448
+ text-shadow 0.25s ease,
449
+ color 0.25s ease;
450
+ }
451
+ body.ai-page .ai-content .prose a:hover {
452
+ box-shadow:
453
+ 0 0 12px rgba(140, 210, 242, 0.4),
454
+ 0 0 24px rgba(132, 214, 255, 0.28);
455
+ text-shadow:
456
+ 0 0 10px rgba(162, 222, 248, 0.56),
457
+ 0 0 20px rgba(138, 214, 255, 0.3);
458
+ color: rgba(190, 236, 255, 0.98);
459
+ }
460
+ /* 代码块:输出窗口风格 */
461
+ body.ai-page .ai-content .prose code {
462
+ background: rgba(10, 18, 30, 0.72);
463
+ border: 1px solid rgba(126, 192, 224, 0.26);
464
+ color: rgba(196, 232, 248, 0.92);
465
+ }
466
+ body.ai-page .ai-content .prose pre {
467
+ background: rgba(8, 12, 22, 0.88);
468
+ border: 1px solid rgba(142, 218, 255, 0.2);
469
+ box-shadow:
470
+ inset 0 0 34px rgba(14, 34, 54, 0.44),
471
+ 0 0 20px rgba(132, 214, 255, 0.08),
472
+ 0 0 0 1px rgba(146, 214, 244, 0.14);
473
+ border-radius: 6px;
474
+ overflow: hidden;
475
+ }
476
+ body.ai-page .ai-content .prose pre code {
477
+ background: transparent;
478
+ border: none;
479
+ color: inherit;
480
+ }
481
+ /* 引用块:输出窗口风格 + 命令提示符 */
482
+ body.ai-page .ai-content .prose blockquote {
483
+ position: relative;
484
+ background: rgba(12, 18, 30, 0.64);
485
+ border: 1px solid rgba(126, 192, 224, 0.22);
486
+ border-left: 3px solid rgba(146, 214, 244, 0.56);
487
+ padding: 1em 1.25em 1em 2.5em;
488
+ border-radius: 4px;
489
+ box-shadow:
490
+ 0 0 16px rgba(136, 206, 238, 0.1),
491
+ inset 0 0 20px rgba(8, 28, 44, 0.26);
492
+ }
493
+ body.ai-page .ai-content .prose blockquote::before {
494
+ content: ">";
495
+ position: absolute;
496
+ left: 0.6em;
497
+ top: 1em;
498
+ color: rgba(156, 220, 246, 0.8);
499
+ font-family: monospace;
500
+ font-weight: bold;
501
+ }
502
+ /* 代码块命令提示符 */
503
+ body.ai-page .ai-content .prose pre {
504
+ position: relative;
505
+ padding-left: 2.5em;
506
+ padding-top: 2.2em;
507
+ }
508
+ body.ai-page .ai-content .prose pre::before {
509
+ content: "● ● ● runtime";
510
+ position: absolute;
511
+ left: 1em;
512
+ top: 0.9em;
513
+ color: rgba(168, 226, 248, 0.72);
514
+ font-family: monospace;
515
+ font-size: 0.72em;
516
+ text-transform: uppercase;
517
+ letter-spacing: 0.12em;
518
+ text-shadow: 0 0 8px rgba(124, 206, 246, 0.28);
519
+ }
520
+ body.ai-page .ai-content .prose pre::after {
521
+ content: "";
522
+ position: absolute;
523
+ inset: 0;
524
+ pointer-events: none;
525
+ background: linear-gradient(
526
+ 110deg,
527
+ rgba(132, 214, 255, 0) 0%,
528
+ rgba(132, 214, 255, 0.18) 48%,
529
+ rgba(132, 214, 255, 0) 100%
530
+ );
531
+ transform: translateX(-130%);
532
+ transition: transform 0.5s ease;
533
+ }
534
+ body.ai-page .ai-content .prose pre:hover::after {
535
+ transform: translateX(130%);
536
+ }
537
+ body.ai-page .ai-content .prose blockquote::after {
538
+ content: "reference";
539
+ position: absolute;
540
+ right: 1em;
541
+ top: 0.9em;
542
+ color: rgba(172, 230, 252, 0.64);
543
+ font-family: ui-monospace, monospace;
544
+ font-size: 0.66em;
545
+ letter-spacing: 0.06em;
546
+ text-transform: uppercase;
547
+ }
548
+ body.ai-page header {
549
+ position: fixed;
550
+ top: 0;
551
+ left: 0;
552
+ right: 0;
553
+ z-index: 11;
554
+ backdrop-filter: blur(3px);
555
+ -webkit-backdrop-filter: blur(3px);
556
+ }
557
+ body.ai-page .ai-content {
558
+ padding-top: calc(3em + 56px);
559
+ }
560
+ @media (max-width: 720px) {
561
+ body.ai-page .ai-content {
562
+ padding-top: calc(1em + 56px);
563
+ }
564
+ }
565
+ /* ========== 新增 AI 风格特效 ========== */
566
+ /* 复古块状光标(正文末尾) */
567
+ .ai-block-cursor {
568
+ display: inline-block;
569
+ width: 0.6em;
570
+ height: 1.1em;
571
+ background: rgba(150, 226, 255, 0.94);
572
+ margin-left: 2px;
573
+ vertical-align: text-bottom;
574
+ animation: ai-block-cursor-blink 1s step-end infinite;
575
+ }
576
+ @keyframes ai-block-cursor-blink {
577
+ 0%,
578
+ 50% {
579
+ opacity: 1;
580
+ }
581
+ 51%,
582
+ 100% {
583
+ opacity: 0;
584
+ }
585
+ }
586
+ /* 阅读进度条(紫色,更醒目) */
587
+ .ai-read-progress {
588
+ position: fixed;
589
+ top: 0;
590
+ left: 0;
591
+ height: 4px;
592
+ width: calc(var(--read-progress, 0) * 100%);
593
+ background: linear-gradient(
594
+ 90deg,
595
+ rgba(132, 214, 255, 0.92),
596
+ rgba(94, 196, 255, 0.94)
597
+ );
598
+ box-shadow: 0 0 14px rgba(104, 204, 255, 0.45);
599
+ z-index: 100;
600
+ transition: width 0.08s ease-out;
601
+ }
602
+ /* 鼠标跟随光斑 */
603
+ .ai-mouse-glow {
604
+ position: fixed;
605
+ width: 300px;
606
+ height: 300px;
607
+ left: calc(var(--mouse-x, -9999px) - 150px);
608
+ top: calc(var(--mouse-y, -9999px) - 150px);
609
+ background: radial-gradient(
610
+ circle,
611
+ rgba(124, 210, 248, 0.1) 0%,
612
+ transparent 70%
613
+ );
614
+ pointer-events: none;
615
+ z-index: 1;
616
+ transition: opacity 0.3s;
617
+ }
618
+ body.ai-page:not(:hover) .ai-mouse-glow {
619
+ opacity: 0.5;
620
+ }
621
+ /* 深度模糊:上下边缘虚化 */
622
+ .ai-depth-blur {
623
+ position: fixed;
624
+ inset: 0;
625
+ pointer-events: none;
626
+ z-index: 15;
627
+ mask-image: linear-gradient(
628
+ to bottom,
629
+ transparent 0%,
630
+ black 15%,
631
+ black 85%,
632
+ transparent 100%
633
+ );
634
+ -webkit-mask-image: linear-gradient(
635
+ to bottom,
636
+ transparent 0%,
637
+ black 15%,
638
+ black 85%,
639
+ transparent 100%
640
+ );
641
+ backdrop-filter: blur(0);
642
+ transition: backdrop-filter 0.3s;
643
+ }
644
+ .ai-depth-blur::before {
645
+ content: "";
646
+ position: absolute;
647
+ inset: 0;
648
+ background: transparent;
649
+ backdrop-filter: blur(2px);
650
+ -webkit-backdrop-filter: blur(2px);
651
+ mask-image: linear-gradient(
652
+ to bottom,
653
+ black 0%,
654
+ transparent 12%,
655
+ transparent 88%,
656
+ black 100%
657
+ );
658
+ -webkit-mask-image: linear-gradient(
659
+ to bottom,
660
+ black 0%,
661
+ transparent 12%,
662
+ transparent 88%,
663
+ black 100%
664
+ );
665
+ }
666
+ /* 思考中三连点 */
667
+ .ai-thinking-dots {
668
+ position: fixed;
669
+ bottom: 2rem;
670
+ right: 2rem;
671
+ display: flex;
672
+ gap: 6px;
673
+ z-index: 50;
674
+ opacity: 1;
675
+ animation: ai-thinking-fade 0.8s ease-out 1.2s forwards;
676
+ }
677
+ .ai-thinking-dots span {
678
+ width: 6px;
679
+ height: 6px;
680
+ background: rgba(150, 226, 255, 0.82);
681
+ border-radius: 50%;
682
+ animation: ai-dot-pulse 0.8s ease-in-out infinite;
683
+ }
684
+ .ai-thinking-dots span:nth-child(2) {
685
+ animation-delay: 0.15s;
686
+ }
687
+ .ai-thinking-dots span:nth-child(3) {
688
+ animation-delay: 0.3s;
689
+ }
690
+ @keyframes ai-thinking-fade {
691
+ to {
692
+ opacity: 0;
693
+ visibility: hidden;
694
+ }
695
+ }
696
+ @keyframes ai-dot-pulse {
697
+ 0%,
698
+ 100% {
699
+ opacity: 0.4;
700
+ transform: scale(0.8);
701
+ }
702
+ 50% {
703
+ opacity: 1;
704
+ transform: scale(1.2);
705
+ }
706
+ }
707
+ /* 故障效果:链接/代码块 hover 极轻微 RGB 分离 */
708
+ body.ai-page .ai-content .prose a:hover {
709
+ animation: ai-glitch-link 0.4s ease-out;
710
+ }
711
+ body.ai-page .ai-content .prose pre:hover {
712
+ animation: ai-glitch-pre 0.35s ease-out;
713
+ }
714
+ @keyframes ai-glitch-link {
715
+ 0%,
716
+ 100% {
717
+ text-shadow:
718
+ 0 0 10px rgba(100, 255, 220, 0.6),
719
+ 0 0 20px rgba(120, 180, 255, 0.3);
720
+ }
721
+ 20% {
722
+ text-shadow:
723
+ -0.5px 0 rgba(88, 176, 236, 0.4),
724
+ 0.5px 0 rgba(100, 255, 220, 0.4);
725
+ }
726
+ 40% {
727
+ text-shadow:
728
+ 0.5px 0 rgba(88, 176, 236, 0.3),
729
+ -0.5px 0 rgba(100, 255, 220, 0.3);
730
+ }
731
+ 60% {
732
+ text-shadow:
733
+ 0 0 10px rgba(100, 255, 220, 0.6),
734
+ 0 0 20px rgba(120, 180, 255, 0.3);
735
+ }
736
+ }
737
+ @keyframes ai-glitch-pre {
738
+ 0%,
739
+ 100% {
740
+ box-shadow:
741
+ inset 0 0 30px rgba(0, 40, 80, 0.3),
742
+ 0 0 20px rgba(100, 220, 255, 0.06);
743
+ }
744
+ 30% {
745
+ box-shadow:
746
+ inset 0 0 30px rgba(0, 40, 80, 0.3),
747
+ -1px 0 rgba(84, 170, 230, 0.15),
748
+ 1px 0 rgba(80, 255, 200, 0.15);
749
+ }
750
+ }
751
+ /* 悬浮预览卡 */
752
+ body.ai-page .ai-content .prose a.ai-link-preview {
753
+ position: relative;
754
+ }
755
+ body.ai-page .ai-content .prose a.ai-link-preview::after {
756
+ content: attr(data-preview);
757
+ position: absolute;
758
+ bottom: 100%;
759
+ left: 50%;
760
+ transform: translateX(-50%) translateY(-8px);
761
+ padding: 6px 12px;
762
+ background: rgba(6, 14, 24, 0.95);
763
+ border: 1px solid rgba(100, 255, 180, 0.3);
764
+ border-radius: 6px;
765
+ font-size: 0.75em;
766
+ color: rgba(180, 255, 220, 0.9);
767
+ white-space: nowrap;
768
+ opacity: 0;
769
+ pointer-events: none;
770
+ transition:
771
+ opacity 0.2s,
772
+ transform 0.2s;
773
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
774
+ }
775
+ body.ai-page .ai-content .prose a.ai-link-preview:hover::after {
776
+ opacity: 1;
777
+ transform: translateX(-50%) translateY(-12px);
778
+ }
779
+ /* 时间戳日志风格 */
780
+ .ai-log-date {
781
+ font-family: ui-monospace, monospace;
782
+ font-size: 0.85em;
783
+ }
784
+ .ai-log-label {
785
+ color: rgba(100, 255, 180, 0.7);
786
+ margin-right: 0.25em;
787
+ }
788
+
789
+ /* ========== AI 时代氛围增强 ========== */
790
+ /* 元信息终端化 */
791
+ .ai-meta-terminal {
792
+ font-family: ui-monospace, monospace;
793
+ font-size: 0.78em;
794
+ color: rgba(180, 224, 246, 0.84);
795
+ margin-bottom: 0.62em;
796
+ letter-spacing: 0.04em;
797
+ }
798
+ .ai-system-row {
799
+ display: flex;
800
+ flex-wrap: wrap;
801
+ gap: 0.45rem;
802
+ margin-bottom: 0.55rem;
803
+ }
804
+ .ai-system-chip {
805
+ font-family: ui-monospace, monospace;
806
+ font-size: 0.68em;
807
+ color: rgba(186, 232, 252, 0.94);
808
+ background: rgba(8, 18, 30, 0.82);
809
+ border: 1px solid rgba(126, 192, 224, 0.34);
810
+ border-radius: 5px;
811
+ padding: 0.16rem 0.5rem;
812
+ letter-spacing: 0.08em;
813
+ text-transform: uppercase;
814
+ }
815
+ /* 提示词式标题 */
816
+ .ai-prompt-line {
817
+ font-size: 0.86em;
818
+ color: rgba(154, 218, 246, 0.8);
819
+ margin-bottom: 0.4em;
820
+ }
821
+ .ai-prompt-topic {
822
+ color: rgba(188, 232, 252, 0.88);
823
+ font-style: normal;
824
+ }
825
+ /* 对话气泡 / Response 区域 */
826
+ .ai-response-wrap {
827
+ position: relative;
828
+ border: 1px solid rgba(152, 222, 255, 0.2);
829
+ background: linear-gradient(
830
+ 180deg,
831
+ rgba(10, 16, 28, 0.54),
832
+ rgba(16, 8, 16, 0.4)
833
+ );
834
+ border-radius: 8px;
835
+ padding: 0.75rem 0.9rem 0.45rem;
836
+ box-shadow:
837
+ inset 0 0 0 1px rgba(138, 206, 238, 0.12),
838
+ 0 8px 26px rgba(0, 0, 0, 0.32);
839
+ }
840
+ .ai-response-header {
841
+ display: flex;
842
+ align-items: center;
843
+ gap: 0.6em;
844
+ margin-bottom: 0.8em;
845
+ }
846
+ .ai-response-avatar {
847
+ width: 28px;
848
+ height: 28px;
849
+ border-radius: 50%;
850
+ background: linear-gradient(
851
+ 145deg,
852
+ rgba(118, 204, 244, 0.62),
853
+ rgba(132, 214, 255, 0.42)
854
+ );
855
+ border: 1px solid rgba(136, 208, 242, 0.42);
856
+ box-shadow:
857
+ 0 0 0 2px rgba(10, 18, 28, 0.64),
858
+ 0 0 14px rgba(124, 206, 246, 0.32);
859
+ }
860
+ .ai-response-label {
861
+ font-size: 0.8em;
862
+ color: rgba(170, 226, 250, 0.92);
863
+ font-weight: 600;
864
+ letter-spacing: 0.08em;
865
+ text-transform: uppercase;
866
+ }
867
+ .ai-response-meta {
868
+ margin-left: auto;
869
+ display: flex;
870
+ flex-wrap: wrap;
871
+ gap: 0.85rem;
872
+ font-family: ui-monospace, monospace;
873
+ font-size: 0.68em;
874
+ color: rgba(188, 226, 248, 0.76);
875
+ }
876
+ .ai-response-meta strong {
877
+ color: rgba(194, 236, 252, 0.96);
878
+ font-weight: 600;
879
+ }
880
+ /* 字数/Token 角落 */
881
+ .ai-stats-corner {
882
+ position: absolute;
883
+ top: 0.5em;
884
+ right: 1em;
885
+ font-family: ui-monospace, monospace;
886
+ font-size: 0.7em;
887
+ color: rgba(176, 218, 240, 0.58);
888
+ }
889
+ .ai-model-id {
890
+ color: rgba(158, 218, 246, 0.82);
891
+ }
892
+ /* Regenerate 按钮 */
893
+ .ai-regenerate {
894
+ display: block;
895
+ margin: 2em auto 0;
896
+ padding: 0.5em 1.2em;
897
+ font-size: 0.85em;
898
+ font-family: ui-monospace, monospace;
899
+ color: rgba(188, 234, 252, 0.94);
900
+ background: rgba(10, 18, 28, 0.68);
901
+ border: 1px solid rgba(126, 192, 224, 0.34);
902
+ border-radius: 4px;
903
+ cursor: pointer;
904
+ transition: all 0.2s ease;
905
+ }
906
+ .ai-regenerate:hover:not(:disabled) {
907
+ background: rgba(126, 192, 224, 0.12);
908
+ box-shadow: 0 0 14px rgba(124, 206, 246, 0.24);
909
+ }
910
+ .ai-regenerate:disabled {
911
+ opacity: 0.6;
912
+ cursor: not-allowed;
913
+ }
914
+ .ai-regenerating {
915
+ pointer-events: none;
916
+ }
917
+ .ai-regenerate-flash {
918
+ animation: ai-flash 0.6s ease-out;
919
+ }
920
+ @keyframes ai-flash {
921
+ 0% {
922
+ opacity: 0.3;
923
+ }
924
+ 100% {
925
+ opacity: 1;
926
+ }
927
+ }
928
+ /* 首字放大 */
929
+ body.ai-page
930
+ .ai-content
931
+ .prose
932
+ .ai-prose-body
933
+ > p:first-of-type::first-letter {
934
+ float: left;
935
+ font-size: 3.2em;
936
+ line-height: 0.9;
937
+ margin-right: 0.1em;
938
+ color: rgba(160, 226, 252, 0.94);
939
+ text-shadow: 0 0 22px rgba(124, 206, 246, 0.3);
940
+ }
941
+ /* 段落滚动浮现 */
942
+ .ai-prose-body p,
943
+ .ai-prose-body h2,
944
+ .ai-prose-body h3,
945
+ .ai-prose-body pre,
946
+ .ai-prose-body blockquote,
947
+ .ai-prose-body ul,
948
+ .ai-prose-body ol {
949
+ opacity: 0;
950
+ transform: translateY(12px);
951
+ transition:
952
+ opacity 0.5s ease,
953
+ transform 0.5s ease;
954
+ }
955
+ .ai-prose-body .ai-para-visible {
956
+ opacity: 1;
957
+ transform: translateY(0);
958
+ }
959
+
960
+ /* ========== 相关文章 + 返回博客 ========== */
961
+ .ai-related {
962
+ width: 720px;
963
+ max-width: calc(100% - 2em);
964
+ margin: 2.5rem auto 1.5rem;
965
+ }
966
+ .ai-related-title {
967
+ font-size: 0.9em;
968
+ color: rgba(172, 228, 252, 0.88);
969
+ margin-bottom: 1rem;
970
+ font-weight: 500;
971
+ }
972
+ .ai-related-grid {
973
+ display: grid;
974
+ grid-template-columns: repeat(3, 1fr);
975
+ gap: 1rem;
976
+ }
977
+ @media (max-width: 780px) {
978
+ .ai-related-grid {
979
+ grid-template-columns: 1fr;
980
+ }
981
+ }
982
+ .ai-related-card {
983
+ display: block;
984
+ background: rgba(12, 10, 20, 0.7);
985
+ border: 1px solid rgba(126, 192, 224, 0.24);
986
+ border-radius: 6px;
987
+ overflow: hidden;
988
+ text-decoration: none;
989
+ color: inherit;
990
+ transition:
991
+ transform 0.2s ease,
992
+ box-shadow 0.2s ease,
993
+ border-color 0.2s ease;
994
+ }
995
+ .ai-related-card:hover {
996
+ transform: translateY(-3px);
997
+ box-shadow: 0 0 24px rgba(124, 206, 246, 0.2);
998
+ border-color: rgba(172, 228, 255, 0.34);
999
+ }
1000
+ .ai-related-img {
1001
+ aspect-ratio: 16/9;
1002
+ overflow: hidden;
1003
+ }
1004
+ .ai-related-img img {
1005
+ width: 100%;
1006
+ height: 100%;
1007
+ object-fit: cover;
1008
+ }
1009
+ .ai-related-placeholder {
1010
+ aspect-ratio: 16/9;
1011
+ background: linear-gradient(
1012
+ 135deg,
1013
+ rgba(22, 8, 16, 0.9),
1014
+ rgba(14, 24, 42, 0.8)
1015
+ );
1016
+ border-bottom: 1px solid rgba(126, 192, 224, 0.22);
1017
+ display: flex;
1018
+ align-items: center;
1019
+ justify-content: center;
1020
+ }
1021
+ .ai-related-placeholder span {
1022
+ font-size: 2em;
1023
+ color: rgba(168, 222, 246, 0.62);
1024
+ font-weight: 600;
1025
+ }
1026
+ .ai-related-card-title {
1027
+ padding: 0.75rem 1rem 0.25rem;
1028
+ font-size: 0.95em;
1029
+ margin: 0;
1030
+ color: rgba(220, 245, 255, 0.95);
1031
+ }
1032
+ .ai-related-card-date {
1033
+ padding: 0 1rem 0.75rem;
1034
+ font-size: 0.75em;
1035
+ color: rgba(176, 216, 238, 0.66);
1036
+ margin: 0;
1037
+ }
1038
+ .ai-back-to-blog {
1039
+ width: 720px;
1040
+ max-width: calc(100% - 2em);
1041
+ margin: 0 auto 2.5rem;
1042
+ }
1043
+ .ai-back-to-blog a {
1044
+ display: inline-flex;
1045
+ align-items: center;
1046
+ gap: 0.5rem;
1047
+ font-family: ui-monospace, monospace;
1048
+ font-size: 0.9em;
1049
+ color: rgba(188, 226, 248, 0.84);
1050
+ text-decoration: none;
1051
+ padding: 0.5rem 0;
1052
+ transition:
1053
+ color 0.2s ease,
1054
+ text-shadow 0.2s ease;
1055
+ }
1056
+ .ai-back-to-blog a:hover {
1057
+ color: rgba(188, 236, 255, 0.98);
1058
+ text-shadow: 0 0 12px rgba(124, 206, 246, 0.3);
1059
+ }
1060
+ .ai-back-prompt {
1061
+ color: rgba(154, 218, 246, 0.78);
1062
+ }
1063
+
1064
+ /* 回到顶部按钮:芯片电路图风格 */
1065
+ .ai-back-to-top {
1066
+ position: fixed;
1067
+ /* 文章宽 720px 居中时,右半边空隙中心 = (100vw - 720px)/2 + 720px + (100vw - 720px)/4 = 75vw + 180px */
1068
+ left: calc(75vw + 180px);
1069
+ top: 68%;
1070
+ transform: translate(-50%, calc(-50% + 8px));
1071
+ z-index: 50;
1072
+ width: 44px;
1073
+ height: 44px;
1074
+ padding: 0;
1075
+ border: 1px solid rgba(126, 192, 224, 0.44);
1076
+ border-radius: 10px;
1077
+ background:
1078
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 44'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='rgba(80,160,220,0.5)'/%3E%3Cstop offset='1' stop-color='rgba(100,180,240,0.35)'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect x='6' y='6' width='32' height='32' rx='2' fill='none' stroke='url(%23g)' stroke-width='0.8'/%3E%3Cpath d='M6 8 Q6 6 8 6' fill='none' stroke='url(%23g)' stroke-width='0.8'/%3E%3Crect x='18' y='18' width='8' height='8' fill='rgba(124,206,246,0.08)' stroke='rgba(100,180,220,0.5)' stroke-width='0.6'/%3E%3Crect x='10' y='4' width='3' height='2' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='17' y='4' width='3' height='2' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='24' y='4' width='3' height='2' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='31' y='4' width='3' height='2' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='10' y='38' width='3' height='2' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='17' y='38' width='3' height='2' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='24' y='38' width='3' height='2' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='31' y='38' width='3' height='2' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='4' y='10' width='2' height='3' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='4' y='17' width='2' height='3' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='4' y='24' width='2' height='3' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='4' y='31' width='2' height='3' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='38' y='10' width='2' height='3' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='38' y='17' width='2' height='3' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='38' y='24' width='2' height='3' fill='rgba(100,180,220,0.5)'/%3E%3Crect x='38' y='31' width='2' height='3' fill='rgba(100,180,220,0.5)'/%3E%3Cline x1='12' y1='6' x2='12' y2='18' stroke='rgba(100,180,220,0.35)' stroke-width='0.5'/%3E%3Cline x1='19' y1='6' x2='19' y2='18' stroke='rgba(100,180,220,0.35)' stroke-width='0.5'/%3E%3Cline x1='26' y1='6' x2='26' y2='18' stroke='rgba(100,180,220,0.35)' stroke-width='0.5'/%3E%3Cline x1='33' y1='6' x2='33' y2='18' stroke='rgba(100,180,220,0.35)' stroke-width='0.5'/%3E%3Cline x1='6' y1='12' x2='18' y2='12' stroke='rgba(100,180,220,0.35)' stroke-width='0.5'/%3E%3Cline x1='6' y1='19' x2='18' y2='19' stroke='rgba(100,180,220,0.35)' stroke-width='0.5'/%3E%3Cline x1='26' y1='12' x2='38' y2='12' stroke='rgba(100,180,220,0.35)' stroke-width='0.5'/%3E%3Cline x1='26' y1='19' x2='38' y2='19' stroke='rgba(100,180,220,0.35)' stroke-width='0.5'/%3E%3C/svg%3E"),
1079
+ linear-gradient(180deg, rgba(12, 22, 36, 0.95), rgba(8, 16, 28, 0.98));
1080
+ background-size: 100% 100%, 100% 100%;
1081
+ background-position: 0 0, 0 0;
1082
+ color: rgba(190, 236, 255, 0.95);
1083
+ font-size: 1.35em;
1084
+ cursor: pointer;
1085
+ opacity: 0;
1086
+ transition:
1087
+ opacity 0.25s ease,
1088
+ transform 0.25s ease,
1089
+ border-color 0.2s,
1090
+ box-shadow 0.2s;
1091
+ backdrop-filter: blur(10px);
1092
+ box-shadow: 0 0 20px rgba(124, 206, 246, 0.18);
1093
+ }
1094
+ .ai-back-to-top.visible {
1095
+ opacity: 1;
1096
+ transform: translate(-50%, -50%);
1097
+ }
1098
+ .ai-back-to-top:hover {
1099
+ border-color: rgba(162, 222, 248, 0.72);
1100
+ box-shadow: 0 0 24px rgba(124, 206, 246, 0.36);
1101
+ }
1102
+ @media (max-width: 840px) {
1103
+ /* 视口较窄时右侧空隙太小,改回贴右 */
1104
+ .ai-back-to-top {
1105
+ left: auto;
1106
+ right: 1rem;
1107
+ transform: translateY(calc(-50% + 8px));
1108
+ }
1109
+ .ai-back-to-top.visible {
1110
+ transform: translateY(-50%);
1111
+ }
1112
+ }