@anglefeint/astro-theme 0.1.18 → 0.1.20

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