@anglefeint/astro-theme 0.1.2 → 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.
@@ -170,1698 +170,3 @@ hr {
170
170
  white-space: nowrap;
171
171
  }
172
172
 
173
- /* ========== Blade Runner 博客列表页 (body.cyber-page) ========== */
174
- body.cyber-page {
175
- background: #090b12 !important;
176
- background-image: none !important;
177
- background-size: auto !important;
178
- min-height: 100vh !important;
179
- --chrome-bg: rgba(7, 13, 24, 0.72);
180
- --chrome-border: rgba(112, 196, 255, 0.2);
181
- --chrome-link: rgba(196, 226, 255, 0.92);
182
- --chrome-link-hover: rgba(232, 206, 245, 0.98);
183
- --chrome-active: rgba(228, 158, 224, 0.9);
184
- --chrome-text-muted: rgba(156, 188, 224, 0.76);
185
- }
186
- body.cyber-page::before {
187
- content: "";
188
- position: fixed;
189
- inset: 0;
190
- z-index: -1;
191
- background: linear-gradient(
192
- 180deg,
193
- #05070b 0%,
194
- #090c14 20%,
195
- #111a2d 52%,
196
- #090c14 80%,
197
- #05070b 100%
198
- );
199
- }
200
- body.cyber-page::after {
201
- content: "";
202
- position: fixed;
203
- inset: 0;
204
- z-index: -1;
205
- background:
206
- radial-gradient(
207
- ellipse 82% 52% at 50% 18%,
208
- rgba(110, 186, 255, 0.14) 0%,
209
- transparent 50%
210
- ),
211
- radial-gradient(
212
- ellipse 62% 42% at 82% 78%,
213
- rgba(255, 132, 88, 0.06) 0%,
214
- transparent 40%
215
- ),
216
- radial-gradient(
217
- ellipse 52% 37% at 20% 62%,
218
- rgba(226, 150, 214, 0.06) 0%,
219
- transparent 45%
220
- );
221
- animation: cyber-fog-drift 20s ease-in-out infinite alternate;
222
- pointer-events: none;
223
- }
224
- @keyframes cyber-fog-drift {
225
- 0% {
226
- opacity: 0.7;
227
- transform: translate(-2%, -1%);
228
- }
229
- 100% {
230
- opacity: 1;
231
- transform: translate(2%, 1%);
232
- }
233
- }
234
- body.cyber-page .cyber-rain {
235
- position: fixed;
236
- inset: 0;
237
- pointer-events: none;
238
- z-index: 6;
239
- overflow: hidden;
240
- contain: layout paint;
241
- }
242
- /* Blade Runner: 雨滴 - 白色中脏脏的感觉,非琥珀也非冷青 */
243
- body.cyber-page .cyber-rain-drop {
244
- position: absolute;
245
- top: -20px;
246
- width: 6px;
247
- height: 38px;
248
- clip-path: polygon(1.5px 0, 4.5px 0, 6px 100%, 0 100%);
249
- will-change: transform;
250
- background: linear-gradient(
251
- to bottom,
252
- transparent 0%,
253
- rgba(210, 208, 198, 0.38) 40%,
254
- rgba(195, 190, 182, 0.52) 70%,
255
- transparent 100%
256
- );
257
- animation: cyber-rain-fall linear infinite;
258
- }
259
- @keyframes cyber-rain-fall {
260
- to {
261
- transform: translateY(100vh);
262
- }
263
- }
264
- /* Mesh-page: scanlines only on header and footer; fade on hover */
265
- body.ai-page header .ai-scanlines,
266
- body.ai-page footer .ai-scanlines {
267
- position: absolute;
268
- inset: 0;
269
- contain: layout paint;
270
- z-index: 1;
271
- background: repeating-linear-gradient(
272
- 0deg,
273
- transparent,
274
- transparent 2px,
275
- rgba(0, 0, 0, 0.55) 2px,
276
- rgba(0, 0, 0, 0.55) 4px
277
- );
278
- pointer-events: none;
279
- opacity: 0.78;
280
- transition: opacity 0.3s ease;
281
- }
282
- body.ai-page header .ai-scanlines::after,
283
- body.ai-page footer .ai-scanlines::after {
284
- content: "";
285
- position: absolute;
286
- inset: 0;
287
- background: repeating-linear-gradient(
288
- 0deg,
289
- transparent,
290
- transparent 1px,
291
- rgba(0, 0, 0, 0.12) 1px,
292
- rgba(0, 0, 0, 0.12) 2px
293
- );
294
- pointer-events: none;
295
- opacity: 0.8;
296
- }
297
- body.ai-page header:hover .ai-scanlines,
298
- body.ai-page footer:hover .ai-scanlines {
299
- opacity: 0;
300
- }
301
- body.cyber-page .cyber-spotlight {
302
- position: fixed;
303
- top: 0;
304
- left: 0;
305
- width: calc(hypot(100vw, 100vh) * 1.3 / 1.41421356);
306
- height: calc(hypot(100vw, 100vh) * 1.3 / 1.41421356);
307
- pointer-events: none;
308
- z-index: 5;
309
- contain: layout paint;
310
- }
311
- body.cyber-page .cyber-spotlight-tl {
312
- position: absolute;
313
- inset: 0;
314
- transform-origin: 0 0;
315
- background: conic-gradient(
316
- from 180deg at 0 0,
317
- transparent 0deg 302deg,
318
- rgba(120, 192, 255, 0.18) 304deg,
319
- rgba(96, 182, 255, 0.32) 307deg,
320
- rgba(206, 234, 255, 0.92) 310deg,
321
- rgba(96, 182, 255, 0.32) 313deg,
322
- rgba(120, 192, 255, 0.18) 316deg,
323
- transparent 319deg 360deg
324
- );
325
- animation: cyber-spotlight-sweep-tl 12s ease-in-out infinite;
326
- }
327
- body.cyber-page .cyber-spotlight-tr {
328
- position: absolute;
329
- inset: 0;
330
- transform-origin: 100% 0;
331
- background: conic-gradient(
332
- from 180deg at 100% 0,
333
- transparent 0deg 33deg,
334
- rgba(120, 192, 255, 0.18) 35deg,
335
- rgba(96, 182, 255, 0.32) 38deg,
336
- rgba(206, 234, 255, 0.92) 41deg,
337
- rgba(96, 182, 255, 0.32) 44deg,
338
- rgba(120, 192, 255, 0.18) 47deg,
339
- transparent 50deg 360deg
340
- );
341
- animation: cyber-spotlight-sweep-tr 24s ease-in-out infinite;
342
- animation-delay: -1.5s;
343
- }
344
- @keyframes cyber-spotlight-sweep-tl {
345
- 0% {
346
- transform: rotate(50deg);
347
- }
348
- 50% {
349
- transform: rotate(-50deg);
350
- }
351
- 100% {
352
- transform: rotate(50deg);
353
- }
354
- }
355
- @keyframes cyber-spotlight-sweep-tr {
356
- 0%,
357
- 100% {
358
- transform: rotate(-60deg);
359
- }
360
- 50% {
361
- transform: rotate(60deg);
362
- }
363
- }
364
- body.cyber-page .cyber-flicker {
365
- position: fixed;
366
- inset: 0;
367
- contain: layout paint;
368
- background:
369
- radial-gradient(
370
- ellipse 25% 30% at 85% 20%,
371
- rgba(255, 146, 96, 0.18) 0%,
372
- transparent 55%
373
- ),
374
- radial-gradient(
375
- ellipse 20% 24% at 20% 68%,
376
- rgba(96, 182, 255, 0.28) 0%,
377
- transparent 55%
378
- ),
379
- radial-gradient(
380
- ellipse 28% 35% at 70% 85%,
381
- rgba(224, 146, 212, 0.2) 0%,
382
- transparent 55%
383
- );
384
- animation: cyber-neon-flicker-glow 6s ease-in-out infinite;
385
- pointer-events: none;
386
- z-index: 0;
387
- }
388
- @keyframes cyber-neon-flicker-glow {
389
- 0%,
390
- 100% {
391
- opacity: 0.8;
392
- }
393
- 25% {
394
- opacity: 1;
395
- }
396
- 50% {
397
- opacity: 0.5;
398
- }
399
- 75% {
400
- opacity: 0.95;
401
- }
402
- }
403
- body.cyber-page .cyber-haze {
404
- position: fixed;
405
- inset: 0;
406
- contain: layout paint;
407
- background:
408
- radial-gradient(
409
- ellipse 100% 80% at 50% 50%,
410
- rgba(52, 84, 128, 0.08) 0%,
411
- transparent 60%
412
- ),
413
- radial-gradient(
414
- ellipse 40% 30% at 30% 30%,
415
- rgba(224, 144, 208, 0.05) 0%,
416
- transparent 50%
417
- ),
418
- radial-gradient(
419
- ellipse 35% 25% at 70% 70%,
420
- rgba(255, 134, 92, 0.04) 0%,
421
- transparent 50%
422
- );
423
- animation: cyber-haze-drift 20s ease-in-out infinite alternate;
424
- pointer-events: none;
425
- z-index: 1;
426
- }
427
- @keyframes cyber-haze-drift {
428
- 0% {
429
- opacity: 0.5;
430
- transform: translate(3%, 2%) scale(1.05);
431
- }
432
- 100% {
433
- opacity: 1;
434
- transform: translate(-3%, -2%) scale(0.95);
435
- }
436
- }
437
- body.cyber-page .cyber-vignette {
438
- position: fixed;
439
- inset: 0;
440
- contain: layout paint;
441
- background: radial-gradient(
442
- ellipse 80% 80% at 50% 50%,
443
- transparent 40%,
444
- rgba(0, 0, 0, 0.4) 100%
445
- );
446
- pointer-events: none;
447
- z-index: 3;
448
- }
449
- body.cyber-page .cyber-rain-drop--thin {
450
- width: 4px;
451
- height: 28px;
452
- clip-path: polygon(0.5px 0, 3.5px 0, 4px 100%, 0 100%);
453
- }
454
- body.cyber-page .cyber-rain-drop--fog {
455
- opacity: 0.15;
456
- filter: blur(0.5px);
457
- }
458
- body.cyber-page .cyber-rain-drop--skew {
459
- animation-name: cyber-rain-fall-skew;
460
- }
461
- @keyframes cyber-rain-fall-skew {
462
- to {
463
- transform: skewX(-3deg) translateY(100vh);
464
- }
465
- }
466
- body.cyber-page .cyber-dust {
467
- position: fixed;
468
- inset: 0;
469
- pointer-events: none;
470
- z-index: 2;
471
- overflow: hidden;
472
- contain: layout paint;
473
- }
474
- body.cyber-page .cyber-dust-particle {
475
- position: absolute;
476
- border-radius: 50%;
477
- will-change: transform;
478
- background: rgba(176, 216, 248, 0.68);
479
- box-shadow:
480
- 0 0 10px rgba(126, 196, 255, 0.35),
481
- 0 0 20px rgba(214, 146, 210, 0.16);
482
- animation: cyber-dust-float linear infinite;
483
- }
484
- @keyframes cyber-dust-float {
485
- 0% {
486
- transform: translate(0, 0) scale(1);
487
- opacity: 0.7;
488
- }
489
- 25% {
490
- transform: translate(15px, -8px) scale(1.1);
491
- opacity: 0.95;
492
- }
493
- 50% {
494
- transform: translate(-10px, -20px) scale(0.9);
495
- opacity: 0.8;
496
- }
497
- 75% {
498
- transform: translate(8px, -15px) scale(1.05);
499
- opacity: 0.9;
500
- }
501
- 100% {
502
- transform: translate(0, -30px) scale(1);
503
- opacity: 0.7;
504
- }
505
- }
506
- body.page-home header {
507
- position: fixed;
508
- top: 0;
509
- left: 0;
510
- right: 0;
511
- z-index: 100;
512
- backdrop-filter: blur(3px);
513
- -webkit-backdrop-filter: blur(3px);
514
- }
515
- body.cyber-page header {
516
- position: fixed;
517
- top: 0;
518
- left: 0;
519
- right: 0;
520
- z-index: 6;
521
- backdrop-filter: blur(3px);
522
- -webkit-backdrop-filter: blur(3px);
523
- }
524
- body.cyber-page main {
525
- position: relative;
526
- z-index: 5;
527
- width: 960px;
528
- padding-top: calc(3em + 56px);
529
- }
530
- body.cyber-page .title,
531
- body.cyber-page .date {
532
- color: rgba(202, 228, 255, 0.93);
533
- }
534
- body.cyber-page .date {
535
- color: rgba(150, 186, 228, 0.68);
536
- }
537
- body.cyber-page ul {
538
- display: flex;
539
- flex-wrap: wrap;
540
- gap: 2rem;
541
- list-style: none;
542
- margin: 0;
543
- padding: 0;
544
- }
545
- body.cyber-page ul li {
546
- width: calc(50% - 1rem);
547
- }
548
- body.cyber-page ul li * {
549
- text-decoration: none;
550
- }
551
- body.cyber-page ul li:first-child {
552
- width: 100%;
553
- margin-bottom: 1rem;
554
- text-align: center;
555
- }
556
- body.cyber-page ul li:first-child img {
557
- width: 100%;
558
- }
559
- body.cyber-page ul li:first-child .title {
560
- font-size: 2.369rem;
561
- }
562
- body.cyber-page ul li a {
563
- display: block;
564
- position: relative;
565
- padding: 1rem;
566
- border-radius: 4px;
567
- border: 1px solid rgba(116, 194, 255, 0.24);
568
- box-shadow:
569
- 0 0 6px rgba(100, 182, 255, 0.1),
570
- 0 0 16px rgba(88, 164, 240, 0.07),
571
- inset 0 0 8px rgba(224, 146, 210, 0.03);
572
- transition:
573
- border-color 0.2s,
574
- box-shadow 0.3s;
575
- }
576
- body.cyber-page ul li a:hover {
577
- border-color: rgba(124, 204, 255, 0.62);
578
- box-shadow:
579
- 0 0 10px rgba(112, 196, 255, 0.3),
580
- 0 0 24px rgba(214, 146, 210, 0.2),
581
- inset 0 0 18px rgba(136, 204, 255, 0.08);
582
- animation: cyber-neon-flicker 0.45s ease-in-out infinite;
583
- }
584
- @keyframes cyber-neon-flicker {
585
- 0%,
586
- 100% {
587
- box-shadow:
588
- 0 0 10px rgba(112, 196, 255, 0.3),
589
- 0 0 24px rgba(214, 146, 210, 0.2),
590
- inset 0 0 18px rgba(136, 204, 255, 0.08);
591
- }
592
- 50% {
593
- box-shadow:
594
- 0 0 7px rgba(112, 196, 255, 0.22),
595
- 0 0 15px rgba(214, 146, 210, 0.14),
596
- inset 0 0 10px rgba(136, 204, 255, 0.06);
597
- }
598
- }
599
- body.cyber-page ul li a:hover .title {
600
- animation: cyber-glitch 0.3s ease-in-out;
601
- color: rgb(212, 236, 255);
602
- text-shadow:
603
- 0 0 10px rgba(120, 200, 255, 0.62),
604
- 0 0 22px rgba(222, 150, 214, 0.3),
605
- 0 0 34px rgba(90, 170, 240, 0.2);
606
- }
607
- @keyframes cyber-glitch {
608
- 0% {
609
- transform: translate(0);
610
- text-shadow: 0 0 8px rgba(120, 200, 255, 0.55);
611
- }
612
- 20% {
613
- transform: translate(-2px, 2px);
614
- text-shadow:
615
- 2px 0 rgba(224, 150, 214, 0.55),
616
- -2px 0 rgba(120, 202, 255, 0.5);
617
- }
618
- 40% {
619
- transform: translate(2px, -2px);
620
- text-shadow:
621
- -2px 0 rgba(120, 202, 255, 0.5),
622
- 2px 0 rgba(224, 150, 214, 0.55);
623
- }
624
- 60% {
625
- transform: translate(-1px, 1px);
626
- }
627
- 80% {
628
- transform: translate(1px, -1px);
629
- }
630
- 100% {
631
- transform: translate(0);
632
- text-shadow: 0 0 8px rgba(120, 200, 255, 0.55);
633
- }
634
- }
635
- body.cyber-page ul li a:hover .date {
636
- color: rgba(196, 226, 255, 0.95);
637
- text-shadow:
638
- 0 0 10px rgba(120, 194, 255, 0.45),
639
- 0 0 20px rgba(218, 148, 210, 0.26);
640
- }
641
- body.cyber-page .img-wrapper {
642
- position: relative;
643
- margin-bottom: 0.5rem;
644
- border-radius: 4px;
645
- overflow: hidden;
646
- }
647
- /* 水平扫线 - 日式樱花+赛博蓝 */
648
- body.cyber-page .img-wrapper::before {
649
- content: "";
650
- position: absolute;
651
- left: 0;
652
- right: 0;
653
- top: -20px;
654
- height: 10px;
655
- z-index: 3;
656
- background: linear-gradient(
657
- 90deg,
658
- transparent,
659
- rgba(255, 182, 228, 0.74),
660
- rgba(234, 148, 214, 0.88),
661
- rgba(170, 200, 255, 0.9),
662
- rgba(234, 148, 214, 0.88),
663
- rgba(255, 182, 228, 0.74),
664
- transparent
665
- );
666
- box-shadow:
667
- 0 0 24px rgba(232, 150, 214, 0.62),
668
- 0 0 48px rgba(110, 182, 255, 0.32);
669
- pointer-events: none;
670
- transition: top 1.2s linear;
671
- }
672
- body.cyber-page ul li a:hover .img-wrapper::before {
673
- top: 100%;
674
- }
675
- body.cyber-page .img-wrapper::after {
676
- content: "";
677
- position: absolute;
678
- inset: 0;
679
- z-index: 2;
680
- box-shadow:
681
- inset 0 0 25px rgba(108, 190, 255, 0.16),
682
- inset 0 0 50px rgba(224, 148, 212, 0.1);
683
- pointer-events: none;
684
- opacity: 0;
685
- transition: opacity 0.4s ease;
686
- }
687
- body.cyber-page ul li a:hover .img-wrapper::after {
688
- opacity: 1;
689
- }
690
- body.cyber-page ul li img {
691
- display: block;
692
- width: 100%;
693
- height: auto;
694
- filter: saturate(0.75) contrast(1.05) brightness(0.88) sepia(0.15)
695
- hue-rotate(-2deg);
696
- transition:
697
- filter 0.3s,
698
- box-shadow 0.3s;
699
- }
700
- body.cyber-page ul li a:hover img {
701
- filter: saturate(0.88) contrast(1.11) brightness(0.94) sepia(0.08)
702
- hue-rotate(-6deg);
703
- box-shadow:
704
- 0 0 15px rgba(116, 194, 255, 0.22),
705
- 0 0 30px rgba(224, 148, 212, 0.2);
706
- }
707
- body.cyber-page .title {
708
- margin: 0;
709
- line-height: 1;
710
- transition:
711
- color 0.2s,
712
- text-shadow 0.2s;
713
- }
714
- body.cyber-page .date {
715
- margin: 0;
716
- transition:
717
- color 0.2s,
718
- text-shadow 0.2s;
719
- }
720
- /* BR2049: Las Vegas/baseline 橙色光晕点缀 */
721
- body.cyber-page footer {
722
- box-shadow:
723
- 0 -4px 42px rgba(104, 182, 255, 0.14),
724
- 0 -4px 36px rgba(224, 146, 210, 0.16);
725
- }
726
- /* BR2049: 页面加载时轻微 glitch,可察觉但不抢眼 */
727
- body.cyber-page .cyber-load-glitch {
728
- position: fixed;
729
- inset: 0;
730
- z-index: 9999;
731
- pointer-events: none;
732
- background: linear-gradient(
733
- 90deg,
734
- rgba(226, 146, 210, 0.1) 0%,
735
- transparent 45%,
736
- transparent 55%,
737
- rgba(104, 182, 255, 0.12) 100%
738
- );
739
- mix-blend-mode: screen;
740
- opacity: 0;
741
- animation: cyber-load-glitch 12s ease-out 0.5s infinite;
742
- }
743
- @keyframes cyber-load-glitch {
744
- /* 每 8 秒一周期:前 6.5s 静默,后 1.5s 执行 glitch */
745
- 0%,
746
- 81%,
747
- 100% {
748
- opacity: 0;
749
- transform: translateX(0);
750
- }
751
- 83% {
752
- opacity: 1;
753
- transform: translateX(-3px);
754
- }
755
- 86% {
756
- opacity: 0.9;
757
- transform: translateX(3px);
758
- }
759
- 90% {
760
- opacity: 0.5;
761
- transform: translateX(-2px);
762
- }
763
- }
764
- @media (max-width: 720px) {
765
- body.cyber-page main {
766
- padding-top: calc(1em + 56px);
767
- }
768
- body.cyber-page ul {
769
- gap: 0.5em;
770
- }
771
- body.cyber-page ul li {
772
- width: 100%;
773
- text-align: center;
774
- }
775
- body.cyber-page ul li:first-child {
776
- margin-bottom: 0;
777
- }
778
- body.cyber-page ul li:first-child .title {
779
- font-size: 1.563em;
780
- }
781
- /* 移动端减少特效,减轻 GPU 压力 */
782
- body.cyber-page .cyber-rain-drop:nth-child(2n) {
783
- display: none;
784
- }
785
- body.cyber-page .cyber-dust-particle:nth-child(2n) {
786
- display: none;
787
- }
788
- body.cyber-page .cyber-flicker {
789
- animation-duration: 8s;
790
- }
791
- }
792
-
793
- /* ========== 点线网络 漂浮浮动 文章页 (body.ai-page) ========== */
794
- body.ai-page {
795
- background: #03060c !important;
796
- background-image: none !important;
797
- min-height: 100vh;
798
- --chrome-bg: rgba(14, 10, 16, 0.72);
799
- --chrome-border: rgba(255, 106, 132, 0.14);
800
- --chrome-link: rgba(214, 243, 255, 0.92);
801
- --chrome-link-hover: rgba(255, 168, 188, 0.98);
802
- --chrome-active: rgba(132, 214, 255, 0.92);
803
- --chrome-text-muted: rgba(178, 220, 238, 0.7);
804
- }
805
- /* 终端式滚动条 */
806
- body.ai-page {
807
- scrollbar-width: thin;
808
- scrollbar-color: rgba(255, 106, 132, 0.48) transparent;
809
- }
810
- body.ai-page::-webkit-scrollbar {
811
- width: 6px;
812
- }
813
- body.ai-page::-webkit-scrollbar-track {
814
- background: transparent;
815
- }
816
- body.ai-page::-webkit-scrollbar-thumb {
817
- background: rgba(255, 106, 132, 0.34);
818
- border-radius: 3px;
819
- }
820
- body.ai-page::-webkit-scrollbar-thumb:hover {
821
- background: rgba(255, 120, 152, 0.58);
822
- box-shadow: 0 0 8px rgba(255, 106, 132, 0.4);
823
- }
824
- body.ai-page::-webkit-scrollbar-thumb {
825
- box-shadow: 0 0 6px rgba(255, 106, 132, 0.26);
826
- }
827
- .ai-bg {
828
- position: fixed;
829
- inset: 0;
830
- z-index: 0;
831
- pointer-events: none;
832
- overflow: hidden;
833
- }
834
- .ai-glow {
835
- position: absolute;
836
- inset: 0;
837
- background: linear-gradient(
838
- 140deg,
839
- #05060b 0%,
840
- #0b1322 24%,
841
- #0f1d2f 46%,
842
- #221018 72%,
843
- #13070f 100%
844
- );
845
- }
846
- .ai-glow-shift {
847
- animation: ai-glow-shift 25s ease-in-out infinite;
848
- }
849
- @keyframes ai-glow-shift {
850
- 0%,
851
- 100% {
852
- filter: brightness(1) saturate(1);
853
- }
854
- 33% {
855
- filter: brightness(1.02) saturate(1.1) hue-rotate(5deg);
856
- }
857
- 66% {
858
- filter: brightness(0.99) saturate(1.05) hue-rotate(-3deg);
859
- }
860
- }
861
- /* 柔和光晕:中心径向青蓝光 */
862
- .ai-haze {
863
- position: absolute;
864
- inset: 0;
865
- background: radial-gradient(
866
- ellipse 92% 72% at 50% 38%,
867
- rgba(122, 212, 252, 0.08) 0%,
868
- rgba(255, 90, 120, 0.06) 34%,
869
- transparent 65%
870
- );
871
- animation: ai-haze-drift 18s ease-in-out infinite alternate;
872
- pointer-events: none;
873
- }
874
- @keyframes ai-haze-drift {
875
- 0% {
876
- opacity: 0.8;
877
- transform: translate(2%, 1%) scale(1.02);
878
- }
879
- 100% {
880
- opacity: 1;
881
- transform: translate(-2%, -1%) scale(0.98);
882
- }
883
- }
884
- /* 边缘暗角 */
885
- .ai-vignette {
886
- position: absolute;
887
- inset: 0;
888
- background: radial-gradient(
889
- ellipse 75% 75% at 50% 50%,
890
- transparent 45%,
891
- rgba(0, 0, 0, 0.25) 100%
892
- );
893
- pointer-events: none;
894
- }
895
- .ai-stripe {
896
- position: absolute;
897
- inset: 0;
898
- opacity: 0.06;
899
- background: repeating-linear-gradient(
900
- 90deg,
901
- transparent,
902
- transparent 1px,
903
- rgba(196, 232, 255, 0.28) 1px,
904
- rgba(196, 232, 255, 0.28) 2px
905
- );
906
- }
907
- /* 噪点层 */
908
- .ai-noise {
909
- position: absolute;
910
- inset: 0;
911
- opacity: 0.04;
912
- 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");
913
- pointer-events: none;
914
- }
915
- /* 六边形网格 */
916
- .ai-hex-grid {
917
- position: absolute;
918
- inset: 0;
919
- opacity: 0.11;
920
- 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");
921
- background-size: 56px 49px;
922
- pointer-events: none;
923
- }
924
- /* 思维流粒子 */
925
- .ai-thought-particles {
926
- position: absolute;
927
- inset: 0;
928
- pointer-events: none;
929
- overflow: hidden;
930
- }
931
- .ai-particle {
932
- position: absolute;
933
- left: var(--x, 50%);
934
- top: var(--y, 50%);
935
- width: 4px;
936
- height: 4px;
937
- background: rgba(255, 138, 158, 0.6);
938
- border-radius: 50%;
939
- box-shadow: 0 0 10px rgba(255, 110, 136, 0.36);
940
- animation: ai-particle-float var(--d, 4s) ease-in-out infinite;
941
- animation-delay: calc(var(--i, 0) * -0.3s);
942
- }
943
- .ai-particle:nth-child(3n) {
944
- width: 6px;
945
- height: 6px;
946
- background: rgba(168, 224, 255, 0.56);
947
- box-shadow: 0 0 12px rgba(124, 206, 255, 0.34);
948
- }
949
- .ai-particle:nth-child(5n) {
950
- width: 2px;
951
- height: 2px;
952
- background: rgba(182, 255, 218, 0.62);
953
- box-shadow: 0 0 8px rgba(182, 255, 218, 0.28);
954
- }
955
- @keyframes ai-particle-float {
956
- 0%,
957
- 100% {
958
- transform: translate(0, 0) scale(1);
959
- opacity: 0.5;
960
- }
961
- 25% {
962
- transform: translate(8px, -12px) scale(1.2);
963
- opacity: 0.8;
964
- }
965
- 50% {
966
- transform: translate(-6px, 6px) scale(0.9);
967
- opacity: 0.6;
968
- }
969
- 75% {
970
- transform: translate(4px, 8px) scale(1.1);
971
- opacity: 0.7;
972
- }
973
- }
974
- .ai-network {
975
- position: absolute;
976
- inset: -8%;
977
- width: 116%;
978
- height: 116%;
979
- opacity: 1;
980
- filter: brightness(1.28) saturate(1.08);
981
- animation: ai-drift 25s ease-in-out infinite;
982
- }
983
- @keyframes ai-drift {
984
- 0%,
985
- 100% {
986
- transform: translate(0, 0) scale(1);
987
- }
988
- 25% {
989
- transform: translate(1.2%, 0.6%) scale(1.008);
990
- }
991
- 50% {
992
- transform: translate(-0.8%, 1%) scale(0.995);
993
- }
994
- 75% {
995
- transform: translate(0.5%, -0.8%) scale(1.005);
996
- }
997
- }
998
- .ai-network .ai-dots circle {
999
- transform-origin: center;
1000
- animation:
1001
- ai-dot-float 8s ease-in-out infinite,
1002
- ai-dot-breathe 5s ease-in-out infinite;
1003
- }
1004
- .ai-network .ai-dots circle:nth-child(odd) {
1005
- animation-delay: -3s;
1006
- }
1007
- .ai-network .ai-dots circle:nth-child(3n) {
1008
- animation-delay: -5s;
1009
- }
1010
- .ai-network .ai-dots circle:nth-child(5n) {
1011
- animation-duration: 10s;
1012
- }
1013
- .ai-network .ai-dots circle:nth-child(4n) {
1014
- animation-delay: -1s;
1015
- }
1016
- .ai-network .ai-lines line {
1017
- stroke-dasharray: 6 12;
1018
- animation: ai-line-pulse 4s linear infinite;
1019
- }
1020
- .ai-network .ai-lines line:nth-child(odd) {
1021
- animation-delay: -2s;
1022
- }
1023
- @keyframes ai-line-pulse {
1024
- to {
1025
- stroke-dashoffset: -18;
1026
- }
1027
- }
1028
- @keyframes ai-dot-float {
1029
- 0%,
1030
- 100% {
1031
- transform: translate(0, 0);
1032
- }
1033
- 33% {
1034
- transform: translate(1.5px, -2px);
1035
- }
1036
- 66% {
1037
- transform: translate(-1px, 1.5px);
1038
- }
1039
- }
1040
- @keyframes ai-dot-breathe {
1041
- 0%,
1042
- 100% {
1043
- opacity: 1;
1044
- }
1045
- 50% {
1046
- opacity: 0.75;
1047
- }
1048
- }
1049
- body.ai-page .ai-content,
1050
- body.ai-page footer {
1051
- position: relative;
1052
- z-index: 10;
1053
- }
1054
- /* GPU 风格:散热鳍片 + PCB 底 + 金属边框 */
1055
- body.ai-page .ai-content .prose {
1056
- position: relative;
1057
- background:
1058
- repeating-linear-gradient(
1059
- 90deg,
1060
- transparent 0,
1061
- transparent 19px,
1062
- rgba(50, 90, 70, 0.03) 19px,
1063
- rgba(50, 90, 70, 0.03) 20px
1064
- ),
1065
- repeating-linear-gradient(
1066
- 180deg,
1067
- transparent 0,
1068
- transparent 2px,
1069
- rgba(55, 65, 80, 0.14) 2px,
1070
- rgba(55, 65, 80, 0.14) 4px
1071
- ),
1072
- linear-gradient(135deg, rgba(14, 18, 24, 0.97) 0%, rgba(10, 14, 20, 0.95) 50%, rgba(6, 10, 16, 0.97) 100%),
1073
- radial-gradient(
1074
- ellipse 80% 50% at 50% 0%,
1075
- rgba(70, 110, 150, 0.06),
1076
- transparent 60%
1077
- );
1078
- backdrop-filter: blur(16px) saturate(1.1);
1079
- -webkit-backdrop-filter: blur(16px) saturate(1.1);
1080
- border-radius: 8px;
1081
- padding: 2em;
1082
- border: 1px solid rgba(140, 155, 175, 0.35);
1083
- box-shadow:
1084
- 0 0 60px rgba(0, 0, 0, 0.5),
1085
- inset 0 1px 0 rgba(200, 210, 225, 0.12),
1086
- inset 0 -1px 0 rgba(40, 50, 65, 0.4),
1087
- inset 0 0 0 1px rgba(100, 120, 150, 0.15);
1088
- animation: ai-breathe 6s ease-in-out infinite;
1089
- }
1090
- /* 呼吸式微动 */
1091
- @keyframes ai-breathe {
1092
- 0%,
1093
- 100% {
1094
- opacity: 1;
1095
- transform: scale(1);
1096
- }
1097
- 50% {
1098
- opacity: 0.98;
1099
- transform: scale(1.001);
1100
- }
1101
- }
1102
- /* 加载扫描线 */
1103
- .ai-load-scan {
1104
- position: fixed;
1105
- left: 0;
1106
- right: 0;
1107
- height: 2px;
1108
- background: linear-gradient(
1109
- 90deg,
1110
- transparent,
1111
- rgba(100, 255, 180, 0.6),
1112
- rgba(120, 180, 255, 0.6),
1113
- transparent
1114
- );
1115
- box-shadow: 0 0 12px rgba(100, 255, 180, 0.5);
1116
- animation: ai-scan 0.8s ease-out forwards;
1117
- pointer-events: none;
1118
- z-index: 20;
1119
- }
1120
- @keyframes ai-scan {
1121
- 0% {
1122
- top: 0;
1123
- opacity: 1;
1124
- }
1125
- 100% {
1126
- top: 100vh;
1127
- opacity: 0.2;
1128
- }
1129
- }
1130
- /* 文章区域渐显 */
1131
- .ai-article {
1132
- animation: ai-article-in 0.6s ease-out forwards;
1133
- opacity: 0;
1134
- }
1135
- @keyframes ai-article-in {
1136
- to {
1137
- opacity: 1;
1138
- }
1139
- }
1140
- .ai-title {
1141
- animation: ai-title-in 0.5s ease-out 0.15s forwards;
1142
- opacity: 0;
1143
- }
1144
- @keyframes ai-title-in {
1145
- to {
1146
- opacity: 1;
1147
- }
1148
- }
1149
- .ai-prose-body {
1150
- animation: ai-prose-in 0.6s ease-out 0.35s forwards;
1151
- opacity: 0;
1152
- }
1153
- @keyframes ai-prose-in {
1154
- to {
1155
- opacity: 1;
1156
- }
1157
- }
1158
- /* 标题/正文区光晕 */
1159
- body.ai-page .ai-content .prose .ai-title {
1160
- text-shadow:
1161
- 0 0 20px rgba(132, 214, 255, 0.18),
1162
- 0 0 36px rgba(160, 224, 255, 0.16);
1163
- }
1164
- body.ai-page .ai-content .prose .ai-prose-body {
1165
- box-shadow: inset 0 0 80px rgba(124, 206, 255, 0.035);
1166
- }
1167
- /* GPU 金属边框:铝银质感 */
1168
- body.ai-page .ai-content .prose::before {
1169
- content: "";
1170
- position: absolute;
1171
- inset: -1px;
1172
- border-radius: inherit;
1173
- padding: 1px;
1174
- background: linear-gradient(
1175
- 135deg,
1176
- rgba(200, 210, 225, 0.4) 0%,
1177
- rgba(140, 155, 180, 0.25) 25%,
1178
- rgba(100, 115, 140, 0.2) 50%,
1179
- rgba(140, 155, 180, 0.28) 75%,
1180
- rgba(180, 195, 215, 0.35) 100%
1181
- );
1182
- -webkit-mask:
1183
- linear-gradient(#fff 0 0) content-box,
1184
- linear-gradient(#fff 0 0);
1185
- mask:
1186
- linear-gradient(#fff 0 0) content-box,
1187
- linear-gradient(#fff 0 0);
1188
- -webkit-mask-composite: xor;
1189
- mask-composite: exclude;
1190
- pointer-events: none;
1191
- transition: opacity 0.3s ease;
1192
- }
1193
- body.ai-page .ai-content .prose:hover::before {
1194
- opacity: 1.3;
1195
- }
1196
- /* 链接 hover 光晕/脉冲 */
1197
- body.ai-page .ai-content .prose a {
1198
- text-decoration: none;
1199
- padding: 0 2px;
1200
- border-radius: 2px;
1201
- transition:
1202
- box-shadow 0.25s ease,
1203
- text-shadow 0.25s ease,
1204
- color 0.25s ease;
1205
- }
1206
- body.ai-page .ai-content .prose a:hover {
1207
- box-shadow:
1208
- 0 0 12px rgba(140, 210, 242, 0.4),
1209
- 0 0 24px rgba(132, 214, 255, 0.28);
1210
- text-shadow:
1211
- 0 0 10px rgba(162, 222, 248, 0.56),
1212
- 0 0 20px rgba(138, 214, 255, 0.3);
1213
- color: rgba(190, 236, 255, 0.98);
1214
- }
1215
- /* 代码块:输出窗口风格 */
1216
- body.ai-page .ai-content .prose code {
1217
- background: rgba(10, 18, 30, 0.72);
1218
- border: 1px solid rgba(126, 192, 224, 0.26);
1219
- color: rgba(196, 232, 248, 0.92);
1220
- }
1221
- body.ai-page .ai-content .prose pre {
1222
- background: rgba(8, 12, 22, 0.88);
1223
- border: 1px solid rgba(142, 218, 255, 0.2);
1224
- box-shadow:
1225
- inset 0 0 34px rgba(14, 34, 54, 0.44),
1226
- 0 0 20px rgba(132, 214, 255, 0.08),
1227
- 0 0 0 1px rgba(146, 214, 244, 0.14);
1228
- border-radius: 6px;
1229
- overflow: hidden;
1230
- }
1231
- body.ai-page .ai-content .prose pre code {
1232
- background: transparent;
1233
- border: none;
1234
- color: inherit;
1235
- }
1236
- /* 引用块:输出窗口风格 + 命令提示符 */
1237
- body.ai-page .ai-content .prose blockquote {
1238
- position: relative;
1239
- background: rgba(12, 18, 30, 0.64);
1240
- border: 1px solid rgba(126, 192, 224, 0.22);
1241
- border-left: 3px solid rgba(146, 214, 244, 0.56);
1242
- padding: 1em 1.25em 1em 2.5em;
1243
- border-radius: 4px;
1244
- box-shadow:
1245
- 0 0 16px rgba(136, 206, 238, 0.1),
1246
- inset 0 0 20px rgba(8, 28, 44, 0.26);
1247
- }
1248
- body.ai-page .ai-content .prose blockquote::before {
1249
- content: ">";
1250
- position: absolute;
1251
- left: 0.6em;
1252
- top: 1em;
1253
- color: rgba(156, 220, 246, 0.8);
1254
- font-family: monospace;
1255
- font-weight: bold;
1256
- }
1257
- /* 代码块命令提示符 */
1258
- body.ai-page .ai-content .prose pre {
1259
- position: relative;
1260
- padding-left: 2.5em;
1261
- padding-top: 2.2em;
1262
- }
1263
- body.ai-page .ai-content .prose pre::before {
1264
- content: "● ● ● runtime";
1265
- position: absolute;
1266
- left: 1em;
1267
- top: 0.9em;
1268
- color: rgba(168, 226, 248, 0.72);
1269
- font-family: monospace;
1270
- font-size: 0.72em;
1271
- text-transform: uppercase;
1272
- letter-spacing: 0.12em;
1273
- text-shadow: 0 0 8px rgba(124, 206, 246, 0.28);
1274
- }
1275
- body.ai-page .ai-content .prose pre::after {
1276
- content: "";
1277
- position: absolute;
1278
- inset: 0;
1279
- pointer-events: none;
1280
- background: linear-gradient(
1281
- 110deg,
1282
- rgba(132, 214, 255, 0) 0%,
1283
- rgba(132, 214, 255, 0.18) 48%,
1284
- rgba(132, 214, 255, 0) 100%
1285
- );
1286
- transform: translateX(-130%);
1287
- transition: transform 0.5s ease;
1288
- }
1289
- body.ai-page .ai-content .prose pre:hover::after {
1290
- transform: translateX(130%);
1291
- }
1292
- body.ai-page .ai-content .prose blockquote::after {
1293
- content: "reference";
1294
- position: absolute;
1295
- right: 1em;
1296
- top: 0.9em;
1297
- color: rgba(172, 230, 252, 0.64);
1298
- font-family: ui-monospace, monospace;
1299
- font-size: 0.66em;
1300
- letter-spacing: 0.06em;
1301
- text-transform: uppercase;
1302
- }
1303
- body.ai-page header {
1304
- position: fixed;
1305
- top: 0;
1306
- left: 0;
1307
- right: 0;
1308
- z-index: 11;
1309
- backdrop-filter: blur(3px);
1310
- -webkit-backdrop-filter: blur(3px);
1311
- }
1312
- body.ai-page .ai-content {
1313
- padding-top: calc(3em + 56px);
1314
- }
1315
- @media (max-width: 720px) {
1316
- body.ai-page .ai-content {
1317
- padding-top: calc(1em + 56px);
1318
- }
1319
- }
1320
- /* ========== 新增 AI 风格特效 ========== */
1321
- /* 复古块状光标(正文末尾) */
1322
- .ai-block-cursor {
1323
- display: inline-block;
1324
- width: 0.6em;
1325
- height: 1.1em;
1326
- background: rgba(150, 226, 255, 0.94);
1327
- margin-left: 2px;
1328
- vertical-align: text-bottom;
1329
- animation: ai-block-cursor-blink 1s step-end infinite;
1330
- }
1331
- @keyframes ai-block-cursor-blink {
1332
- 0%,
1333
- 50% {
1334
- opacity: 1;
1335
- }
1336
- 51%,
1337
- 100% {
1338
- opacity: 0;
1339
- }
1340
- }
1341
- /* 阅读进度条(紫色,更醒目) */
1342
- .ai-read-progress {
1343
- position: fixed;
1344
- top: 0;
1345
- left: 0;
1346
- height: 4px;
1347
- width: calc(var(--read-progress, 0) * 100%);
1348
- background: linear-gradient(
1349
- 90deg,
1350
- rgba(132, 214, 255, 0.92),
1351
- rgba(94, 196, 255, 0.94)
1352
- );
1353
- box-shadow: 0 0 14px rgba(104, 204, 255, 0.45);
1354
- z-index: 100;
1355
- transition: width 0.08s ease-out;
1356
- }
1357
- /* 鼠标跟随光斑 */
1358
- .ai-mouse-glow {
1359
- position: fixed;
1360
- width: 300px;
1361
- height: 300px;
1362
- left: calc(var(--mouse-x, -9999px) - 150px);
1363
- top: calc(var(--mouse-y, -9999px) - 150px);
1364
- background: radial-gradient(
1365
- circle,
1366
- rgba(124, 210, 248, 0.1) 0%,
1367
- transparent 70%
1368
- );
1369
- pointer-events: none;
1370
- z-index: 1;
1371
- transition: opacity 0.3s;
1372
- }
1373
- body.ai-page:not(:hover) .ai-mouse-glow {
1374
- opacity: 0.5;
1375
- }
1376
- /* 深度模糊:上下边缘虚化 */
1377
- .ai-depth-blur {
1378
- position: fixed;
1379
- inset: 0;
1380
- pointer-events: none;
1381
- z-index: 15;
1382
- mask-image: linear-gradient(
1383
- to bottom,
1384
- transparent 0%,
1385
- black 15%,
1386
- black 85%,
1387
- transparent 100%
1388
- );
1389
- -webkit-mask-image: linear-gradient(
1390
- to bottom,
1391
- transparent 0%,
1392
- black 15%,
1393
- black 85%,
1394
- transparent 100%
1395
- );
1396
- backdrop-filter: blur(0);
1397
- transition: backdrop-filter 0.3s;
1398
- }
1399
- .ai-depth-blur::before {
1400
- content: "";
1401
- position: absolute;
1402
- inset: 0;
1403
- background: transparent;
1404
- backdrop-filter: blur(2px);
1405
- -webkit-backdrop-filter: blur(2px);
1406
- mask-image: linear-gradient(
1407
- to bottom,
1408
- black 0%,
1409
- transparent 12%,
1410
- transparent 88%,
1411
- black 100%
1412
- );
1413
- -webkit-mask-image: linear-gradient(
1414
- to bottom,
1415
- black 0%,
1416
- transparent 12%,
1417
- transparent 88%,
1418
- black 100%
1419
- );
1420
- }
1421
- /* 思考中三连点 */
1422
- .ai-thinking-dots {
1423
- position: fixed;
1424
- bottom: 2rem;
1425
- right: 2rem;
1426
- display: flex;
1427
- gap: 6px;
1428
- z-index: 50;
1429
- opacity: 1;
1430
- animation: ai-thinking-fade 0.8s ease-out 1.2s forwards;
1431
- }
1432
- .ai-thinking-dots span {
1433
- width: 6px;
1434
- height: 6px;
1435
- background: rgba(150, 226, 255, 0.82);
1436
- border-radius: 50%;
1437
- animation: ai-dot-pulse 0.8s ease-in-out infinite;
1438
- }
1439
- .ai-thinking-dots span:nth-child(2) {
1440
- animation-delay: 0.15s;
1441
- }
1442
- .ai-thinking-dots span:nth-child(3) {
1443
- animation-delay: 0.3s;
1444
- }
1445
- @keyframes ai-thinking-fade {
1446
- to {
1447
- opacity: 0;
1448
- visibility: hidden;
1449
- }
1450
- }
1451
- @keyframes ai-dot-pulse {
1452
- 0%,
1453
- 100% {
1454
- opacity: 0.4;
1455
- transform: scale(0.8);
1456
- }
1457
- 50% {
1458
- opacity: 1;
1459
- transform: scale(1.2);
1460
- }
1461
- }
1462
- /* 故障效果:链接/代码块 hover 极轻微 RGB 分离 */
1463
- body.ai-page .ai-content .prose a:hover {
1464
- animation: ai-glitch-link 0.4s ease-out;
1465
- }
1466
- body.ai-page .ai-content .prose pre:hover {
1467
- animation: ai-glitch-pre 0.35s ease-out;
1468
- }
1469
- @keyframes ai-glitch-link {
1470
- 0%,
1471
- 100% {
1472
- text-shadow:
1473
- 0 0 10px rgba(100, 255, 220, 0.6),
1474
- 0 0 20px rgba(120, 180, 255, 0.3);
1475
- }
1476
- 20% {
1477
- text-shadow:
1478
- -0.5px 0 rgba(88, 176, 236, 0.4),
1479
- 0.5px 0 rgba(100, 255, 220, 0.4);
1480
- }
1481
- 40% {
1482
- text-shadow:
1483
- 0.5px 0 rgba(88, 176, 236, 0.3),
1484
- -0.5px 0 rgba(100, 255, 220, 0.3);
1485
- }
1486
- 60% {
1487
- text-shadow:
1488
- 0 0 10px rgba(100, 255, 220, 0.6),
1489
- 0 0 20px rgba(120, 180, 255, 0.3);
1490
- }
1491
- }
1492
- @keyframes ai-glitch-pre {
1493
- 0%,
1494
- 100% {
1495
- box-shadow:
1496
- inset 0 0 30px rgba(0, 40, 80, 0.3),
1497
- 0 0 20px rgba(100, 220, 255, 0.06);
1498
- }
1499
- 30% {
1500
- box-shadow:
1501
- inset 0 0 30px rgba(0, 40, 80, 0.3),
1502
- -1px 0 rgba(84, 170, 230, 0.15),
1503
- 1px 0 rgba(80, 255, 200, 0.15);
1504
- }
1505
- }
1506
- /* 悬浮预览卡 */
1507
- body.ai-page .ai-content .prose a.ai-link-preview {
1508
- position: relative;
1509
- }
1510
- body.ai-page .ai-content .prose a.ai-link-preview::after {
1511
- content: attr(data-preview);
1512
- position: absolute;
1513
- bottom: 100%;
1514
- left: 50%;
1515
- transform: translateX(-50%) translateY(-8px);
1516
- padding: 6px 12px;
1517
- background: rgba(6, 14, 24, 0.95);
1518
- border: 1px solid rgba(100, 255, 180, 0.3);
1519
- border-radius: 6px;
1520
- font-size: 0.75em;
1521
- color: rgba(180, 255, 220, 0.9);
1522
- white-space: nowrap;
1523
- opacity: 0;
1524
- pointer-events: none;
1525
- transition:
1526
- opacity 0.2s,
1527
- transform 0.2s;
1528
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
1529
- }
1530
- body.ai-page .ai-content .prose a.ai-link-preview:hover::after {
1531
- opacity: 1;
1532
- transform: translateX(-50%) translateY(-12px);
1533
- }
1534
- /* 时间戳日志风格 */
1535
- .ai-log-date {
1536
- font-family: ui-monospace, monospace;
1537
- font-size: 0.85em;
1538
- }
1539
- .ai-log-label {
1540
- color: rgba(100, 255, 180, 0.7);
1541
- margin-right: 0.25em;
1542
- }
1543
-
1544
- /* ========== AI 时代氛围增强 ========== */
1545
- /* 元信息终端化 */
1546
- .ai-meta-terminal {
1547
- font-family: ui-monospace, monospace;
1548
- font-size: 0.78em;
1549
- color: rgba(180, 224, 246, 0.84);
1550
- margin-bottom: 0.62em;
1551
- letter-spacing: 0.04em;
1552
- }
1553
- .ai-system-row {
1554
- display: flex;
1555
- flex-wrap: wrap;
1556
- gap: 0.45rem;
1557
- margin-bottom: 0.55rem;
1558
- }
1559
- .ai-system-chip {
1560
- font-family: ui-monospace, monospace;
1561
- font-size: 0.68em;
1562
- color: rgba(186, 232, 252, 0.94);
1563
- background: rgba(8, 18, 30, 0.82);
1564
- border: 1px solid rgba(126, 192, 224, 0.34);
1565
- border-radius: 5px;
1566
- padding: 0.16rem 0.5rem;
1567
- letter-spacing: 0.08em;
1568
- text-transform: uppercase;
1569
- }
1570
- /* 提示词式标题 */
1571
- .ai-prompt-line {
1572
- font-size: 0.86em;
1573
- color: rgba(154, 218, 246, 0.8);
1574
- margin-bottom: 0.4em;
1575
- }
1576
- .ai-prompt-topic {
1577
- color: rgba(188, 232, 252, 0.88);
1578
- font-style: normal;
1579
- }
1580
- /* 对话气泡 / Response 区域 */
1581
- .ai-response-wrap {
1582
- position: relative;
1583
- border: 1px solid rgba(152, 222, 255, 0.2);
1584
- background: linear-gradient(
1585
- 180deg,
1586
- rgba(10, 16, 28, 0.54),
1587
- rgba(16, 8, 16, 0.4)
1588
- );
1589
- border-radius: 8px;
1590
- padding: 0.75rem 0.9rem 0.45rem;
1591
- box-shadow:
1592
- inset 0 0 0 1px rgba(138, 206, 238, 0.12),
1593
- 0 8px 26px rgba(0, 0, 0, 0.32);
1594
- }
1595
- .ai-response-header {
1596
- display: flex;
1597
- align-items: center;
1598
- gap: 0.6em;
1599
- margin-bottom: 0.8em;
1600
- }
1601
- .ai-response-avatar {
1602
- width: 28px;
1603
- height: 28px;
1604
- border-radius: 50%;
1605
- background: linear-gradient(
1606
- 145deg,
1607
- rgba(118, 204, 244, 0.62),
1608
- rgba(132, 214, 255, 0.42)
1609
- );
1610
- border: 1px solid rgba(136, 208, 242, 0.42);
1611
- box-shadow:
1612
- 0 0 0 2px rgba(10, 18, 28, 0.64),
1613
- 0 0 14px rgba(124, 206, 246, 0.32);
1614
- }
1615
- .ai-response-label {
1616
- font-size: 0.8em;
1617
- color: rgba(170, 226, 250, 0.92);
1618
- font-weight: 600;
1619
- letter-spacing: 0.08em;
1620
- text-transform: uppercase;
1621
- }
1622
- .ai-response-meta {
1623
- margin-left: auto;
1624
- display: flex;
1625
- flex-wrap: wrap;
1626
- gap: 0.85rem;
1627
- font-family: ui-monospace, monospace;
1628
- font-size: 0.68em;
1629
- color: rgba(188, 226, 248, 0.76);
1630
- }
1631
- .ai-response-meta strong {
1632
- color: rgba(194, 236, 252, 0.96);
1633
- font-weight: 600;
1634
- }
1635
- /* 字数/Token 角落 */
1636
- .ai-stats-corner {
1637
- position: absolute;
1638
- top: 0.5em;
1639
- right: 1em;
1640
- font-family: ui-monospace, monospace;
1641
- font-size: 0.7em;
1642
- color: rgba(176, 218, 240, 0.58);
1643
- }
1644
- .ai-model-id {
1645
- color: rgba(158, 218, 246, 0.82);
1646
- }
1647
- /* Regenerate 按钮 */
1648
- .ai-regenerate {
1649
- display: block;
1650
- margin: 2em auto 0;
1651
- padding: 0.5em 1.2em;
1652
- font-size: 0.85em;
1653
- font-family: ui-monospace, monospace;
1654
- color: rgba(188, 234, 252, 0.94);
1655
- background: rgba(10, 18, 28, 0.68);
1656
- border: 1px solid rgba(126, 192, 224, 0.34);
1657
- border-radius: 4px;
1658
- cursor: pointer;
1659
- transition: all 0.2s ease;
1660
- }
1661
- .ai-regenerate:hover:not(:disabled) {
1662
- background: rgba(126, 192, 224, 0.12);
1663
- box-shadow: 0 0 14px rgba(124, 206, 246, 0.24);
1664
- }
1665
- .ai-regenerate:disabled {
1666
- opacity: 0.6;
1667
- cursor: not-allowed;
1668
- }
1669
- .ai-regenerating {
1670
- pointer-events: none;
1671
- }
1672
- .ai-regenerate-flash {
1673
- animation: ai-flash 0.6s ease-out;
1674
- }
1675
- @keyframes ai-flash {
1676
- 0% {
1677
- opacity: 0.3;
1678
- }
1679
- 100% {
1680
- opacity: 1;
1681
- }
1682
- }
1683
- /* 首字放大 */
1684
- body.ai-page
1685
- .ai-content
1686
- .prose
1687
- .ai-prose-body
1688
- > p:first-of-type::first-letter {
1689
- float: left;
1690
- font-size: 3.2em;
1691
- line-height: 0.9;
1692
- margin-right: 0.1em;
1693
- color: rgba(160, 226, 252, 0.94);
1694
- text-shadow: 0 0 22px rgba(124, 206, 246, 0.3);
1695
- }
1696
- /* 段落滚动浮现 */
1697
- .ai-prose-body p,
1698
- .ai-prose-body h2,
1699
- .ai-prose-body h3,
1700
- .ai-prose-body pre,
1701
- .ai-prose-body blockquote,
1702
- .ai-prose-body ul,
1703
- .ai-prose-body ol {
1704
- opacity: 0;
1705
- transform: translateY(12px);
1706
- transition:
1707
- opacity 0.5s ease,
1708
- transform 0.5s ease;
1709
- }
1710
- .ai-prose-body .ai-para-visible {
1711
- opacity: 1;
1712
- transform: translateY(0);
1713
- }
1714
-
1715
- /* ========== 相关文章 + 返回博客 ========== */
1716
- .ai-related {
1717
- width: 720px;
1718
- max-width: calc(100% - 2em);
1719
- margin: 2.5rem auto 1.5rem;
1720
- }
1721
- .ai-related-title {
1722
- font-size: 0.9em;
1723
- color: rgba(172, 228, 252, 0.88);
1724
- margin-bottom: 1rem;
1725
- font-weight: 500;
1726
- }
1727
- .ai-related-grid {
1728
- display: grid;
1729
- grid-template-columns: repeat(3, 1fr);
1730
- gap: 1rem;
1731
- }
1732
- @media (max-width: 780px) {
1733
- .ai-related-grid {
1734
- grid-template-columns: 1fr;
1735
- }
1736
- }
1737
- .ai-related-card {
1738
- display: block;
1739
- background: rgba(12, 10, 20, 0.7);
1740
- border: 1px solid rgba(126, 192, 224, 0.24);
1741
- border-radius: 6px;
1742
- overflow: hidden;
1743
- text-decoration: none;
1744
- color: inherit;
1745
- transition:
1746
- transform 0.2s ease,
1747
- box-shadow 0.2s ease,
1748
- border-color 0.2s ease;
1749
- }
1750
- .ai-related-card:hover {
1751
- transform: translateY(-3px);
1752
- box-shadow: 0 0 24px rgba(124, 206, 246, 0.2);
1753
- border-color: rgba(172, 228, 255, 0.34);
1754
- }
1755
- .ai-related-img {
1756
- aspect-ratio: 16/9;
1757
- overflow: hidden;
1758
- }
1759
- .ai-related-img img {
1760
- width: 100%;
1761
- height: 100%;
1762
- object-fit: cover;
1763
- }
1764
- .ai-related-placeholder {
1765
- aspect-ratio: 16/9;
1766
- background: linear-gradient(
1767
- 135deg,
1768
- rgba(22, 8, 16, 0.9),
1769
- rgba(14, 24, 42, 0.8)
1770
- );
1771
- border-bottom: 1px solid rgba(126, 192, 224, 0.22);
1772
- display: flex;
1773
- align-items: center;
1774
- justify-content: center;
1775
- }
1776
- .ai-related-placeholder span {
1777
- font-size: 2em;
1778
- color: rgba(168, 222, 246, 0.62);
1779
- font-weight: 600;
1780
- }
1781
- .ai-related-card-title {
1782
- padding: 0.75rem 1rem 0.25rem;
1783
- font-size: 0.95em;
1784
- margin: 0;
1785
- color: rgba(220, 245, 255, 0.95);
1786
- }
1787
- .ai-related-card-date {
1788
- padding: 0 1rem 0.75rem;
1789
- font-size: 0.75em;
1790
- color: rgba(176, 216, 238, 0.66);
1791
- margin: 0;
1792
- }
1793
- .ai-back-to-blog {
1794
- width: 720px;
1795
- max-width: calc(100% - 2em);
1796
- margin: 0 auto 2.5rem;
1797
- }
1798
- .ai-back-to-blog a {
1799
- display: inline-flex;
1800
- align-items: center;
1801
- gap: 0.5rem;
1802
- font-family: ui-monospace, monospace;
1803
- font-size: 0.9em;
1804
- color: rgba(188, 226, 248, 0.84);
1805
- text-decoration: none;
1806
- padding: 0.5rem 0;
1807
- transition:
1808
- color 0.2s ease,
1809
- text-shadow 0.2s ease;
1810
- }
1811
- .ai-back-to-blog a:hover {
1812
- color: rgba(188, 236, 255, 0.98);
1813
- text-shadow: 0 0 12px rgba(124, 206, 246, 0.3);
1814
- }
1815
- .ai-back-prompt {
1816
- color: rgba(154, 218, 246, 0.78);
1817
- }
1818
-
1819
- /* 回到顶部按钮:芯片电路图风格 */
1820
- .ai-back-to-top {
1821
- position: fixed;
1822
- /* 文章宽 720px 居中时,右半边空隙中心 = (100vw - 720px)/2 + 720px + (100vw - 720px)/4 = 75vw + 180px */
1823
- left: calc(75vw + 180px);
1824
- top: 68%;
1825
- transform: translate(-50%, calc(-50% + 8px));
1826
- z-index: 50;
1827
- width: 44px;
1828
- height: 44px;
1829
- padding: 0;
1830
- border: 1px solid rgba(126, 192, 224, 0.44);
1831
- border-radius: 10px;
1832
- background:
1833
- 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"),
1834
- linear-gradient(180deg, rgba(12, 22, 36, 0.95), rgba(8, 16, 28, 0.98));
1835
- background-size: 100% 100%, 100% 100%;
1836
- background-position: 0 0, 0 0;
1837
- color: rgba(190, 236, 255, 0.95);
1838
- font-size: 1.35em;
1839
- cursor: pointer;
1840
- opacity: 0;
1841
- transition:
1842
- opacity 0.25s ease,
1843
- transform 0.25s ease,
1844
- border-color 0.2s,
1845
- box-shadow 0.2s;
1846
- backdrop-filter: blur(10px);
1847
- box-shadow: 0 0 20px rgba(124, 206, 246, 0.18);
1848
- }
1849
- .ai-back-to-top.visible {
1850
- opacity: 1;
1851
- transform: translate(-50%, -50%);
1852
- }
1853
- .ai-back-to-top:hover {
1854
- border-color: rgba(162, 222, 248, 0.72);
1855
- box-shadow: 0 0 24px rgba(124, 206, 246, 0.36);
1856
- }
1857
- @media (max-width: 840px) {
1858
- /* 视口较窄时右侧空隙太小,改回贴右 */
1859
- .ai-back-to-top {
1860
- left: auto;
1861
- right: 1rem;
1862
- transform: translateY(calc(-50% + 8px));
1863
- }
1864
- .ai-back-to-top.visible {
1865
- transform: translateY(-50%);
1866
- }
1867
- }