@anglefeint/astro-theme 0.1.17 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,756 +1,8 @@
1
- body.hacker-page {
2
- background: #000 !important;
3
- background-image: none !important;
4
- color: rgba(255, 255, 255, 0.88);
5
- min-height: 100vh;
6
- scrollbar-width: thin;
7
- scrollbar-color: rgba(255, 255, 255, 0.25) transparent;
8
- /* header: Anonymous 黑白灰 + 黄点缀 */
9
- --chrome-bg: rgba(0, 0, 0, 0.42);
10
- --chrome-border: rgba(255, 255, 255, 0.2);
11
- --chrome-link: rgba(255, 255, 255, 0.9);
12
- --chrome-link-hover: rgba(0, 255, 100, 0.95);
13
- --chrome-active: rgba(255, 255, 255, 0.5);
14
- --chrome-text-muted: rgba(255, 255, 255, 0.5);
15
- }
16
- body.hacker-page::-webkit-scrollbar { width: 6px; }
17
- body.hacker-page::-webkit-scrollbar-track { background: transparent; }
18
- body.hacker-page::-webkit-scrollbar-thumb {
19
- background: rgba(255, 255, 255, 0.22);
20
- border-radius: 3px;
21
- }
22
- /* fixed header + content offset (mirrors ai-page in global.css) */
23
- body.hacker-page header {
24
- position: fixed;
25
- top: 0;
26
- left: 0;
27
- right: 0;
28
- z-index: 100;
29
- backdrop-filter: blur(3px);
30
- -webkit-backdrop-filter: blur(3px);
31
- }
32
- body.hacker-page .hacker-content {
33
- padding-top: calc(3em + 56px);
34
- }
35
- body.hacker-page .hacker-content,
36
- body.hacker-page footer {
37
- position: relative;
38
- z-index: 10;
39
- }
40
- /* footer: Anonymous 灰白 */
41
- body.hacker-page footer {
42
- --chrome-bg: rgba(0, 0, 0, 0.85);
43
- --chrome-border: rgba(255, 255, 255, 0.15);
44
- border-top-color: rgba(255, 255, 255, 0.15) !important;
45
- color: rgba(255, 255, 255, 0.55);
46
- }
47
- body.hacker-page footer a {
48
- color: rgba(255, 255, 255, 0.7) !important;
49
- }
50
- body.hacker-page footer a:hover {
51
- color: rgba(0, 255, 100, 0.9) !important;
52
- }
53
- @media (max-width: 720px) {
54
- body.hacker-page .hacker-content {
55
- padding-top: calc(1em + 56px);
56
- }
57
- }
58
- /* ── terminal background ── */
59
- .hacker-bg {
60
- position: fixed;
61
- inset: 0;
62
- z-index: 0;
63
- overflow: hidden;
64
- pointer-events: none;
65
- }
66
- .hacker-bg-canvas {
67
- position: absolute;
68
- inset: 0;
69
- width: 100%;
70
- height: 100%;
71
- }
72
- .hacker-scanlines {
73
- position: absolute;
74
- inset: 0;
75
- /* 浅色扫描线:在深色背景上可见,全屏 CRT 感 */
76
- background: repeating-linear-gradient(
77
- 180deg,
78
- transparent 0px,
79
- transparent 2px,
80
- rgba(255, 255, 255, 0.03) 2px,
81
- rgba(255, 255, 255, 0.03) 3px
82
- );
83
- pointer-events: none;
84
- }
85
- .hacker-vignette {
86
- position: absolute;
87
- inset: 0;
88
- background: radial-gradient(
89
- ellipse at center,
90
- transparent 50%,
91
- rgba(0, 0, 0, 0.5) 80%,
92
- rgba(0, 0, 0, 0.85) 100%
93
- );
94
- pointer-events: none;
95
- }
96
- .hacker-flicker {
97
- position: absolute;
98
- inset: 0;
99
- background: transparent;
100
- animation: hacker-flicker-anim 0.08s infinite;
101
- pointer-events: none;
102
- }
103
- @keyframes hacker-flicker-anim {
104
- 0% { background: rgba(255, 255, 255, 0.012); }
105
- 50% { background: transparent; }
106
- 100% { background: rgba(255, 255, 255, 0.005); }
107
- }
108
- .hacker-glow {
109
- position: absolute;
110
- inset: 0;
111
- box-shadow: inset 0 0 120px rgba(255, 255, 255, 0.03);
112
- pointer-events: none;
113
- }
114
- /* ── content ── */
115
- .hacker-content {
116
- position: relative;
117
- z-index: 10;
118
- }
119
- .hacker-content .prose {
120
- position: relative;
121
- background:
122
- linear-gradient(180deg, rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.92)),
123
- linear-gradient(180deg, rgba(30, 30, 30, 0.1), rgba(15, 15, 15, 0.15));
124
- border: 1px solid rgba(255, 255, 255, 0.2);
125
- border-radius: 8px;
126
- box-shadow:
127
- 0 0 0 1px rgba(255, 255, 255, 0.06),
128
- 0 16px 48px rgba(0, 0, 0, 0.6);
129
- }
130
- .about-shell {
131
- width: 720px;
132
- max-width: calc(100% - 2em);
133
- margin: 0 auto 2rem;
134
- }
135
- /* ── toast ── */
136
- .hacker-toast {
137
- position: fixed;
138
- right: 1rem;
139
- bottom: 1rem;
140
- z-index: 56;
141
- padding: 0.5rem 0.75rem;
142
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
143
- font-size: 0.7rem;
144
- letter-spacing: 0.08em;
145
- text-transform: uppercase;
146
- color: rgba(255, 255, 255, 0.95);
147
- background: rgba(0, 0, 0, 0.94);
148
- border: 1px solid rgba(255, 255, 255, 0.25);
149
- border-radius: 6px;
150
- box-shadow:
151
- 0 0 0 1px rgba(255, 255, 255, 0.08),
152
- 0 0 24px rgba(0, 255, 100, 0.12);
153
- opacity: 0;
154
- transform: translateY(8px);
155
- pointer-events: none;
156
- transition: opacity 0.18s ease, transform 0.18s ease;
157
- }
158
- .hacker-toast.visible {
159
- opacity: 1;
160
- transform: translateY(0);
161
- }
162
- /* ── progress bar ── */
163
- .hacker-progress {
164
- position: fixed;
165
- top: 0;
166
- left: 0;
167
- height: 3px;
168
- width: calc(var(--read-progress, 0) * 100%);
169
- background: linear-gradient(90deg, rgba(255, 255, 255, 0.6), rgba(0, 255, 100, 0.9));
170
- box-shadow: 0 0 12px rgba(0, 255, 100, 0.25);
171
- z-index: 100;
172
- pointer-events: none;
173
- }
174
- /* ── back to top ── */
175
- .hacker-back-to-top {
176
- position: fixed;
177
- right: 1.5rem;
178
- bottom: 3.5rem;
179
- width: 40px;
180
- height: 40px;
181
- border: 1px solid rgba(255, 255, 255, 0.25);
182
- border-radius: 8px;
183
- background: rgba(0, 0, 0, 0.88);
184
- color: rgba(255, 255, 255, 0.9);
185
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
186
- font-size: 1.1rem;
187
- cursor: pointer;
188
- z-index: 55;
189
- opacity: 0;
190
- transform: translateY(8px);
191
- transition: opacity 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
192
- pointer-events: none;
193
- box-shadow: 0 0 14px rgba(255, 255, 255, 0.08);
194
- }
195
- .hacker-back-to-top.visible {
196
- opacity: 1;
197
- transform: translateY(0);
198
- pointer-events: auto;
199
- }
200
- .hacker-back-to-top:hover {
201
- box-shadow: 0 0 20px rgba(0, 255, 100, 0.25);
202
- border-color: rgba(0, 255, 100, 0.5);
203
- color: rgba(0, 255, 100, 0.95);
204
- }
205
- /* ── title ── */
206
- .about-title {
207
- margin-bottom: 1.4rem;
208
- }
209
- .hacker-meta {
210
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
211
- font-size: 0.78em;
212
- color: rgba(255, 255, 255, 0.55);
213
- margin-bottom: 0.62em;
214
- letter-spacing: 0.04em;
215
- }
216
- .hacker-title-bar {
217
- position: relative;
218
- height: 3px;
219
- margin: 0.75rem 0 0.1rem;
220
- border-radius: 999px;
221
- overflow: hidden;
222
- background: linear-gradient(
223
- 90deg,
224
- rgba(255, 255, 255, 0.1),
225
- rgba(255, 255, 255, 0.2),
226
- rgba(255, 255, 255, 0.1)
227
- );
228
- box-shadow: 0 0 14px rgba(255, 255, 255, 0.1);
229
- }
230
- .hacker-title-bar::after {
231
- content: "";
232
- position: absolute;
233
- top: 0;
234
- bottom: 0;
235
- left: -35%;
236
- width: 35%;
237
- background: linear-gradient(
238
- 90deg,
239
- rgba(11, 15, 20, 0.4),
240
- rgba(255, 0, 51, 0.7),
241
- rgba(156, 163, 175, 0.6),
242
- rgba(11, 15, 20, 0.4)
243
- );
244
- animation: hacker-bar-sweep 3.8s linear infinite;
245
- }
246
- @keyframes hacker-bar-sweep {
247
- to { left: 100%; }
248
- }
249
- /* ── response panel: Anonymous 窗口风格 (白标题栏 + 黑内容区) ── */
250
- .hacker-response {
251
- border: 1px solid rgba(255, 255, 255, 0.25);
252
- background: #000;
253
- border-radius: 0;
254
- padding: 0;
255
- overflow: hidden;
256
- box-shadow:
257
- 0 0 0 1px rgba(255, 255, 255, 0.1),
258
- 0 8px 32px rgba(0, 0, 0, 0.6);
259
- }
260
- .hacker-response-header {
261
- display: flex;
262
- align-items: center;
263
- gap: 0.5em;
264
- padding: 0.5rem 0.9rem;
265
- background: #fff;
266
- border-bottom: 1px solid rgba(0, 0, 0, 0.15);
267
- }
268
- .hacker-window-dots {
269
- display: flex;
270
- gap: 6px;
271
- align-items: center;
272
- }
273
- .hacker-window-dots span {
274
- width: 10px;
275
- height: 10px;
276
- border-radius: 50%;
277
- flex-shrink: 0;
278
- }
279
- .hacker-window-dots span:nth-child(1) { background: #ff5f57; }
280
- .hacker-window-dots span:nth-child(2) { background: #febc2e; }
281
- .hacker-window-dots span:nth-child(3) { background: #28c840; }
282
- .hacker-response-label {
283
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
284
- font-size: 0.75em;
285
- color: #000;
286
- font-weight: 600;
287
- letter-spacing: 0.1em;
288
- text-transform: uppercase;
289
- }
290
- .hacker-body {
291
- padding: 1rem 0.9rem 1.2rem;
292
- background: #000;
293
- }
294
- /* ── prose body ── */
295
- .hacker-body p,
296
- .hacker-body h2,
297
- .hacker-body blockquote,
298
- .hacker-body .about-manifest {
299
- opacity: 0;
300
- transform: translateY(12px);
301
- transition: opacity 0.5s ease, transform 0.5s ease;
302
- }
303
- .hacker-body .hacker-visible {
304
- opacity: 1;
305
- transform: translateY(0);
306
- }
307
- .hacker-body a {
308
- color: rgba(255, 255, 255, 0.9);
309
- text-decoration-color: rgba(255, 255, 255, 0.35);
310
- }
311
- .hacker-body a:hover {
312
- color: rgba(0, 255, 100, 0.95);
313
- text-decoration-color: rgba(0, 255, 100, 0.6);
314
- }
315
- /* ── cursor ── */
316
- .hacker-cursor {
317
- display: inline-block;
318
- width: 0.6em;
319
- height: 1.1em;
320
- background: rgba(0, 255, 100, 0.9);
321
- margin-left: 2px;
322
- vertical-align: text-bottom;
323
- animation: hacker-cursor-blink 1s step-end infinite;
324
- }
325
- @keyframes hacker-cursor-blink {
326
- 0%, 50% { opacity: 1; }
327
- 51%, 100% { opacity: 0; }
328
- }
329
- /* ── section titles ── */
330
- .about-section-title {
331
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
332
- font-size: 0.78rem;
333
- letter-spacing: 0.12em;
334
- text-transform: uppercase;
335
- color: rgba(255, 255, 255, 0.82);
336
- margin: 1.7rem 0 0.45rem;
337
- }
338
- /* ── manifest box ── */
339
- .about-manifest {
340
- margin: 1rem 0 1.4rem;
341
- padding: 0.8rem 0.95rem;
342
- border: 1px solid rgba(255, 255, 255, 0.18);
343
- border-radius: 8px;
344
- background: rgba(0, 0, 0, 0.4);
345
- }
346
- .about-manifest ul {
347
- margin: 0;
348
- padding-left: 1.1rem;
349
- }
350
- .about-manifest li {
351
- margin: 0.38rem 0;
352
- }
353
- .about-manifest li::marker {
354
- color: rgba(255, 255, 255, 0.5);
355
- }
356
- /* ── signature ── */
357
- .about-signature {
358
- margin-top: 1.2rem;
359
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
360
- font-size: 0.8rem;
361
- color: rgba(255, 255, 255, 0.6);
362
- }
363
- /* ── regenerate ── */
364
- .hacker-regenerate {
365
- display: block;
366
- margin: 2em auto 0;
367
- padding: 0.5em 1.2em;
368
- font-size: 0.85em;
369
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
370
- color: rgba(255, 255, 255, 0.88);
371
- background: rgba(0, 0, 0, 0.68);
372
- border: 1px solid rgba(255, 255, 255, 0.25);
373
- border-radius: 4px;
374
- cursor: pointer;
375
- letter-spacing: 0.06em;
376
- text-transform: uppercase;
377
- transition: all 0.2s ease;
378
- }
379
- .hacker-regenerate:hover:not(:disabled) {
380
- color: rgba(0, 255, 100, 0.95);
381
- border-color: rgba(0, 255, 100, 0.4);
382
- background: rgba(0, 255, 100, 0.06);
383
- box-shadow: 0 0 14px rgba(0, 255, 100, 0.15);
384
- }
385
- /* ── prose container: Anonymous 全等宽 ── */
386
- .prose {
387
- width: 720px;
388
- max-width: calc(100% - 2em);
389
- margin: auto;
390
- padding: 1em;
391
- color: rgba(255, 255, 255, 0.88);
392
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
393
- font-size: 0.9rem;
394
- line-height: 1.6;
395
- }
396
- .prose p {
397
- color: rgba(255, 255, 255, 0.82);
398
- }
399
- .prose hr {
400
- border-color: rgba(255, 255, 255, 0.15);
401
- }
402
- .title {
403
- margin-bottom: 1em;
404
- padding: 1em 0;
405
- text-align: center;
406
- line-height: 1;
407
- }
408
- .title h1 {
409
- margin: 0 0 0.5em 0;
410
- color: rgba(255, 255, 255, 0.92);
411
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
412
- letter-spacing: 0.04em;
413
- }
414
- /* ── mouse glow (green) ── */
415
- .hacker-mouse-glow {
416
- position: fixed;
417
- width: 300px;
418
- height: 300px;
419
- left: calc(var(--mouse-x, -9999px) - 150px);
420
- top: calc(var(--mouse-y, -9999px) - 150px);
421
- background: radial-gradient(circle, rgba(255, 255, 255, 0.04) 0%, transparent 70%);
422
- pointer-events: none;
423
- z-index: 1;
424
- border-radius: 50%;
425
- }
426
- /* ── load scan ── */
427
- .hacker-load-scan {
428
- position: fixed;
429
- left: 0;
430
- right: 0;
431
- height: 2px;
432
- background: linear-gradient(90deg, rgba(11, 15, 20, 0.3), rgba(255, 0, 51, 0.7), rgba(156, 163, 175, 0.6), rgba(11, 15, 20, 0.3));
433
- box-shadow: 0 0 12px rgba(255, 0, 51, 0.4);
434
- animation: hacker-scan 0.8s ease-out forwards;
435
- pointer-events: none;
436
- z-index: 20;
437
- }
438
- @keyframes hacker-scan {
439
- 0% { top: 0; opacity: 1; }
440
- 100% { top: 100vh; opacity: 0.2; }
441
- }
442
- /* ── flash on regenerate ── */
443
- .hacker-flash {
444
- animation: hacker-flash-anim 0.3s ease-out;
445
- }
446
- @keyframes hacker-flash-anim {
447
- 0% { filter: brightness(2) saturate(0.5); }
448
- 100% { filter: none; }
449
- }
450
- /* ── 右侧文件夹 (Anonymous) ── */
451
- .hacker-sidebar {
452
- position: fixed;
453
- top: 20%;
454
- right: 1rem;
455
- z-index: 50;
456
- display: flex;
457
- flex-direction: column;
458
- gap: 0.6rem;
459
- }
460
- .hacker-folder {
461
- display: flex;
462
- align-items: center;
463
- gap: 0.5rem;
464
- padding: 0.4rem 0.6rem;
465
- background: rgba(0, 0, 0, 0.6);
466
- border: 1px solid rgba(255, 255, 255, 0.2);
467
- border-radius: 8px;
468
- cursor: pointer;
469
- transition: all 0.2s ease;
470
- text-decoration: none;
471
- color: rgba(255, 255, 255, 0.9);
472
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
473
- font-size: 0.72rem;
474
- letter-spacing: 0.06em;
475
- }
476
- .hacker-folder:hover {
477
- background: rgba(0, 0, 0, 0.85);
478
- border-color: rgba(0, 255, 100, 0.5);
479
- color: rgba(0, 255, 100, 0.95);
480
- box-shadow: 0 0 12px rgba(0, 255, 100, 0.15);
481
- }
482
- .hacker-folder-icon {
483
- width: 24px;
484
- height: 20px;
485
- flex-shrink: 0;
486
- opacity: 0.9;
487
- }
488
- /* ── 弹窗 (Anonymous 窗口) ── */
489
- .hacker-modal-overlay {
490
- position: fixed;
491
- inset: 0;
492
- z-index: 200;
493
- background: rgba(0, 0, 0, 0.7);
494
- backdrop-filter: blur(4px);
495
- display: none;
496
- align-items: center;
497
- justify-content: center;
498
- padding: 2rem;
499
- }
500
- .hacker-modal-overlay.open {
501
- display: flex;
502
- }
503
- .hacker-modal {
504
- width: min(420px, 100%);
505
- max-height: 80vh;
506
- }
507
- .hacker-modal.hacker-modal-wide {
508
- width: min(900px, calc(100vw - 2rem));
509
- overflow: visible;
510
- }
511
- .hacker-modal-header {
512
- display: flex;
513
- align-items: center;
514
- gap: 0.5rem;
515
- padding: 0.5rem 0.9rem;
516
- background: #fff;
517
- border-bottom: 1px solid rgba(0, 0, 0, 0.15);
518
- }
519
- .hacker-modal-dots {
520
- display: flex;
521
- gap: 6px;
522
- }
523
- .hacker-modal-dots span {
524
- width: 10px;
525
- height: 10px;
526
- border-radius: 50%;
527
- }
528
- .hacker-modal-dots span:nth-child(1) { background: #ff5f57; }
529
- .hacker-modal-dots span:nth-child(2) { background: #febc2e; }
530
- .hacker-modal-dots span:nth-child(3) { background: #28c840; }
531
- .hacker-modal-title {
532
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
533
- font-size: 0.75em;
534
- color: #000;
535
- font-weight: 600;
536
- letter-spacing: 0.1em;
537
- text-transform: uppercase;
538
- }
539
- .hacker-modal-close {
540
- margin-left: auto;
541
- width: 66px;
542
- height: 66px;
543
- border: none;
544
- background: rgba(0, 0, 0, 0.06);
545
- color: #000;
546
- display: flex;
547
- align-items: center;
548
- justify-content: center;
549
- cursor: pointer;
550
- opacity: 0.9;
551
- border-radius: 10px;
552
- }
553
- .hacker-modal-close .hacker-modal-close-icon {
554
- flex-shrink: 0;
555
- }
556
- .hacker-modal-close:hover {
557
- opacity: 1;
558
- background: rgba(0, 0, 0, 0.14);
559
- }
560
- .hacker-modal-body {
561
- padding: 1rem 0.9rem 1.2rem;
562
- color: rgba(255, 255, 255, 0.88);
563
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
564
- font-size: 0.82rem;
565
- line-height: 1.6;
566
- max-height: 60vh;
567
- overflow-y: auto;
568
- }
569
- .hacker-modal-body pre {
570
- margin: 0;
571
- white-space: pre-wrap;
572
- word-break: break-word;
573
- }
574
- /* DL Data: Downloading 进度条 (Anonymous 风格) */
575
- .hacker-modal-body.hacker-modal-download .modal-subtitle {
576
- font-size: 0.9em;
577
- color: rgba(255, 255, 255, 0.7);
578
- margin-bottom: 1rem;
579
- }
580
- .hacker-modal-progress {
581
- display: flex;
582
- gap: 2px;
583
- flex-wrap: wrap;
584
- margin-top: 0.5rem;
585
- }
586
- .hacker-modal-progress span {
587
- width: 10px;
588
- height: 12px;
589
- background: rgba(255, 255, 255, 0.2);
590
- transition: background 0.12s ease;
591
- }
592
- .hacker-modal-progress span.filled {
593
- background: rgba(255, 255, 255, 0.6);
594
- }
595
- /* All Scripts: 文件夹网格 */
596
- .hacker-modal-scripts {
597
- padding: 0.5rem 0;
598
- }
599
- .hacker-modal-scripts-path {
600
- font-size: 0.9em;
601
- color: rgba(255, 255, 255, 0.9);
602
- letter-spacing: 0.05em;
603
- margin-bottom: 1rem;
604
- border-bottom: 1px solid rgba(255, 255, 255, 0.15);
605
- padding-bottom: 0.5rem;
606
- }
607
- .hacker-modal-scripts-grid {
608
- display: grid;
609
- grid-template-columns: repeat(5, 1fr);
610
- gap: 1rem;
611
- }
612
- .hacker-script-folder {
613
- display: flex;
614
- flex-direction: column;
615
- align-items: center;
616
- gap: 0.5rem;
617
- padding: 0.6rem 0.4rem;
618
- background: rgba(255, 255, 255, 0.05);
619
- border: 1px solid rgba(255, 255, 255, 0.12);
620
- border-radius: 6px;
621
- color: rgba(255, 255, 255, 0.9);
622
- text-decoration: none;
623
- transition: all 0.15s ease;
624
- }
625
- .hacker-script-folder:hover {
626
- background: rgba(255, 255, 255, 0.12);
627
- border-color: rgba(0, 255, 100, 0.4);
628
- box-shadow: 0 0 12px rgba(0, 255, 100, 0.15);
629
- }
630
- .hacker-script-folder-icon {
631
- width: 32px;
632
- height: 28px;
633
- color: rgba(255, 255, 255, 0.7);
634
- }
635
- .hacker-script-folder-label {
636
- font-size: 0.72rem;
637
- text-align: center;
638
- word-break: break-word;
639
- line-height: 1.3;
640
- }
641
- @media (max-width: 600px) {
642
- .hacker-modal-scripts-grid {
643
- grid-template-columns: repeat(3, 1fr);
644
- }
645
- }
646
- /* Help: 虚拟键盘 */
647
- .hacker-vkeyboard {
648
- display: flex;
649
- flex-direction: column;
650
- gap: 4px;
651
- font-size: 0.7rem;
652
- }
653
- .hacker-vkeyboard-row {
654
- display: flex;
655
- justify-content: center;
656
- gap: 3px;
657
- }
658
- .hacker-vkey {
659
- min-width: 24px;
660
- height: 28px;
661
- padding: 0 6px;
662
- display: inline-flex;
663
- align-items: center;
664
- justify-content: center;
665
- background: rgba(255, 255, 255, 0.08);
666
- border: 1px solid rgba(255, 255, 255, 0.2);
667
- border-radius: 4px;
668
- color: rgba(255, 255, 255, 0.9);
669
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
670
- cursor: pointer;
671
- transition: all 0.1s ease;
672
- user-select: none;
673
- }
674
- .hacker-vkey:hover {
675
- background: rgba(255, 255, 255, 0.15);
676
- border-color: rgba(255, 255, 255, 0.35);
677
- }
678
- .hacker-vkey.highlight {
679
- background: rgba(0, 255, 100, 0.35);
680
- border-color: rgba(0, 255, 100, 0.7);
681
- box-shadow: 0 0 12px rgba(0, 255, 100, 0.3);
682
- }
683
- .hacker-vkey.wide { min-width: 36px; }
684
- .hacker-vkey.backspace { min-width: 72px; }
685
- .hacker-vkey.space { min-width: 120px; }
686
- .hacker-vkey.acc { background: rgba(255, 140, 0, 0.25); border-color: rgba(255, 140, 0, 0.5); }
687
- .hacker-vkey.acc:hover { background: rgba(255, 140, 0, 0.35); }
688
- .hacker-vkeyboard-wrap {
689
- display: flex;
690
- flex-wrap: wrap;
691
- gap: 2rem;
692
- align-items: stretch;
693
- }
694
- .hacker-vkeyboard-main {
695
- flex: 1;
696
- min-width: 0;
697
- }
698
- .hacker-vkeyboard-side {
699
- display: flex;
700
- flex-direction: column;
701
- gap: 6px;
702
- flex-shrink: 0;
703
- min-width: 140px;
704
- }
705
- .hacker-vkeyboard-side-block {
706
- display: flex;
707
- flex-direction: column;
708
- gap: 4px;
709
- margin-bottom: 4px;
710
- }
711
- .hacker-vkeyboard-side-row {
712
- display: flex;
713
- gap: 3px;
714
- }
715
- .hacker-vkeyboard-side-block .hacker-vkey {
716
- flex: 1;
717
- min-width: 0;
718
- }
719
- .hacker-vkey.nav-home { background: rgba(66, 133, 244, 0.3); border-color: rgba(66, 133, 244, 0.5); }
720
- .hacker-vkey.nav-home:hover { background: rgba(66, 133, 244, 0.4); }
721
- .hacker-vkey.nav-end { background: rgba(234, 67, 53, 0.25); border-color: rgba(234, 67, 53, 0.5); }
722
- .hacker-vkey.nav-end:hover { background: rgba(234, 67, 53, 0.35); }
723
- .hacker-vkeyboard-arrows-wrap {
724
- display: flex;
725
- flex-direction: column;
726
- align-items: center;
727
- margin-top: 6px;
728
- }
729
- .hacker-vkeyboard-arrows {
730
- display: grid;
731
- grid-template: ". u ." 1fr "l d r" 1fr / 1fr 1fr 1fr;
732
- gap: 2px;
733
- height: 56px;
734
- }
735
- .hacker-vkeyboard-arrows .arr-u { grid-area: u; }
736
- .hacker-vkeyboard-arrows .arr-l { grid-area: l; }
737
- .hacker-vkeyboard-arrows .arr-r { grid-area: r; }
738
- .hacker-vkeyboard-arrows .arr-d { grid-area: d; }
739
- .hacker-vkeyboard-arrows .hacker-vkey { width: 50px; height: 22px; font-size: 0.65rem; padding: 0; }
740
- .hacker-vkeyboard-stats {
741
- width: 100%;
742
- margin-top: 0.2rem;
743
- font-size: 0.75em;
744
- color: rgba(255, 255, 255, 0.6);
745
- }
746
- .hacker-vkeyboard-stats-label {
747
- font-size: 0.65rem;
748
- color: rgba(255, 255, 255, 0.5);
749
- letter-spacing: 0.1em;
750
- }
751
- .hacker-modal-body.hacker-modal-keyboard {
752
- overflow: visible;
753
- }
754
- @media (max-width: 900px) {
755
- .hacker-sidebar { display: none; }
756
- }
1
+ /* About style entrypoint: imported in stable order to avoid visual regressions. */
2
+ @import "./about/base.css";
3
+ @import "./about/background.css";
4
+ @import "./about/panel.css";
5
+ @import "./about/sidebar.css";
6
+ @import "./about/modals.css";
7
+ @import "./about/keyboard.css";
8
+ @import "./about/responsive.css";