scripttrace 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,745 @@
1
+ :root {
2
+ --bg: #efe8dc;
3
+ --ink: #1c1917;
4
+ --muted: #6f675e;
5
+ --paper: #fffcf8;
6
+ --sidebar: #f6f0e6;
7
+ --line: #e2d6c6;
8
+ --del: #fecaca;
9
+ --ins: #bbf7d0;
10
+ --accent: #1849a9;
11
+ --accent-ink: #123a86;
12
+ --danger: #b42318;
13
+ --danger-bg: #fef2f2;
14
+ --sidebar-w: 280px;
15
+ --hl: #edf3ff;
16
+ --hl-edge: #1849a9;
17
+ --ok: #16794c;
18
+ --warn: #b45309;
19
+ --ui: ui-sans-serif, "Segoe UI", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
20
+ --script: "Source Han Serif SC", "Noto Serif SC", "Songti SC", "SimSun", serif;
21
+ --shadow: 0 1px 0 rgba(28, 25, 23, 0.04), 0 8px 24px rgba(28, 25, 23, 0.05);
22
+ }
23
+
24
+ * { box-sizing: border-box; }
25
+ html, body { margin: 0; height: 100%; overflow: hidden; }
26
+ body {
27
+ font-family: var(--ui);
28
+ background: var(--bg);
29
+ color: var(--ink);
30
+ }
31
+ button, input, a { font-family: inherit; }
32
+ [hidden] { display: none !important; }
33
+
34
+ .app {
35
+ display: grid;
36
+ grid-template-columns: var(--sidebar-w) 1fr;
37
+ height: 100vh;
38
+ min-height: 0;
39
+ transition: grid-template-columns 0.18s ease;
40
+ }
41
+ .app.sidebar-collapsed { grid-template-columns: 44px 1fr; }
42
+
43
+ .sidebar {
44
+ display: flex;
45
+ flex-direction: column;
46
+ min-height: 0;
47
+ position: relative;
48
+ overflow: hidden;
49
+ background: var(--sidebar);
50
+ border-right: 1px solid var(--line);
51
+ }
52
+ .sidebar-toggle {
53
+ position: absolute;
54
+ top: 12px;
55
+ right: 10px;
56
+ z-index: 3;
57
+ width: 28px;
58
+ height: 28px;
59
+ padding: 0;
60
+ line-height: 1;
61
+ font-size: 16px;
62
+ border-radius: 999px;
63
+ background: #fff;
64
+ border: 1px solid var(--line);
65
+ cursor: pointer;
66
+ }
67
+ .app.sidebar-collapsed .sidebar {
68
+ cursor: pointer;
69
+ }
70
+ .app.sidebar-collapsed .sidebar-toggle {
71
+ right: 8px;
72
+ left: 8px;
73
+ }
74
+ .sidebar-body {
75
+ display: flex;
76
+ flex-direction: column;
77
+ min-height: 0;
78
+ flex: 1;
79
+ overflow: hidden;
80
+ }
81
+ .app.sidebar-collapsed .sidebar-body {
82
+ opacity: 0;
83
+ pointer-events: none;
84
+ }
85
+ .brand {
86
+ padding: 16px 44px 14px 18px;
87
+ border-bottom: 1px solid var(--line);
88
+ }
89
+ .brand strong {
90
+ font-family: var(--script);
91
+ font-size: 20px;
92
+ }
93
+ .brand span {
94
+ display: block;
95
+ color: var(--muted);
96
+ font-size: 12px;
97
+ margin-top: 4px;
98
+ }
99
+
100
+ .import {
101
+ padding: 14px 14px 12px;
102
+ border-bottom: 1px solid var(--line);
103
+ }
104
+ .import h2,
105
+ .projects h2 {
106
+ margin: 0 0 10px;
107
+ font-size: 11px;
108
+ letter-spacing: 0.14em;
109
+ text-transform: uppercase;
110
+ color: var(--muted);
111
+ font-weight: 700;
112
+ }
113
+ .drop {
114
+ display: flex;
115
+ flex-direction: column;
116
+ align-items: center;
117
+ justify-content: center;
118
+ gap: 4px;
119
+ width: 100%;
120
+ min-height: 88px;
121
+ border: 1.5px dashed #c4b5a5;
122
+ border-radius: 12px;
123
+ cursor: pointer;
124
+ background: rgba(255, 255, 255, 0.65);
125
+ color: var(--accent-ink);
126
+ transition: background 0.15s, border-color 0.15s;
127
+ }
128
+ .drop-icon {
129
+ width: 26px;
130
+ height: 26px;
131
+ border-radius: 999px;
132
+ background: #fff;
133
+ border: 1px solid var(--line);
134
+ display: grid;
135
+ place-items: center;
136
+ font-size: 14px;
137
+ color: var(--accent);
138
+ }
139
+ .drop-formats {
140
+ font-size: 11px;
141
+ color: var(--muted);
142
+ }
143
+ .drop:hover { background: #fff; border-color: #a8a29a; }
144
+ .drop.over { background: #ecfdf5; border-color: #34d399; }
145
+ .drop.busy { opacity: 0.65; pointer-events: none; }
146
+ .hint {
147
+ color: var(--danger);
148
+ min-height: 1.2em;
149
+ font-size: 12px;
150
+ margin: 8px 0 0;
151
+ }
152
+
153
+ .projects {
154
+ flex: 1;
155
+ min-height: 0;
156
+ display: flex;
157
+ flex-direction: column;
158
+ padding: 12px 10px 16px;
159
+ }
160
+ .list {
161
+ list-style: none;
162
+ padding: 0;
163
+ margin: 0;
164
+ overflow: auto;
165
+ flex: 1;
166
+ }
167
+ .list li.empty {
168
+ color: var(--muted);
169
+ font-size: 13px;
170
+ padding: 12px 8px;
171
+ }
172
+ .project-item {
173
+ display: grid;
174
+ grid-template-columns: 1fr auto;
175
+ gap: 2px 8px;
176
+ align-items: start;
177
+ width: 100%;
178
+ padding: 10px 10px;
179
+ border-radius: 10px;
180
+ margin-bottom: 4px;
181
+ background: rgba(255, 255, 255, 0.4);
182
+ border: 1px solid transparent;
183
+ cursor: pointer;
184
+ }
185
+ .project-item:hover {
186
+ background: #fff;
187
+ border-color: var(--line);
188
+ }
189
+ .project-item.active {
190
+ background: #fff;
191
+ border-color: #c7d7fe;
192
+ box-shadow: inset 3px 0 0 var(--accent);
193
+ }
194
+ .project-item .name {
195
+ font: inherit;
196
+ font-family: var(--script);
197
+ text-align: left;
198
+ border: none;
199
+ background: none;
200
+ padding: 0;
201
+ cursor: pointer;
202
+ color: var(--ink);
203
+ font-size: 14px;
204
+ overflow: hidden;
205
+ text-overflow: ellipsis;
206
+ white-space: nowrap;
207
+ min-width: 0;
208
+ }
209
+ .project-item .meta {
210
+ grid-column: 1;
211
+ font-size: 11px;
212
+ color: var(--muted);
213
+ }
214
+ .project-item .item-ops {
215
+ display: flex;
216
+ gap: 4px;
217
+ grid-column: 2;
218
+ grid-row: 1 / span 2;
219
+ align-self: center;
220
+ }
221
+ .project-item .rename,
222
+ .project-item .save-name,
223
+ .project-item .cancel-name,
224
+ .project-item .delete {
225
+ font-size: 12px;
226
+ border: 1px solid var(--line);
227
+ background: #fff;
228
+ padding: 3px 8px;
229
+ border-radius: 6px;
230
+ cursor: pointer;
231
+ color: var(--accent);
232
+ }
233
+ .project-item .delete {
234
+ color: var(--danger);
235
+ border-color: #fecaca;
236
+ }
237
+ .project-item .delete:hover { background: var(--danger-bg); }
238
+ .project-item .rename-actions {
239
+ display: flex;
240
+ gap: 4px;
241
+ grid-column: 2;
242
+ }
243
+ .project-item .name-input {
244
+ width: 100%;
245
+ min-width: 0;
246
+ font: inherit;
247
+ font-size: 14px;
248
+ border: 1px solid #93c5fd;
249
+ border-radius: 6px;
250
+ padding: 4px 8px;
251
+ }
252
+
253
+ .workspace {
254
+ display: flex;
255
+ flex-direction: column;
256
+ min-width: 0;
257
+ min-height: 0;
258
+ height: 100vh;
259
+ background: var(--paper);
260
+ }
261
+ .workspace-bar {
262
+ display: flex;
263
+ gap: 12px;
264
+ align-items: center;
265
+ padding: 10px 16px;
266
+ border-bottom: 1px solid var(--line);
267
+ background: #fffdf8;
268
+ flex-shrink: 0;
269
+ width: 100%;
270
+ }
271
+ .icon-btn {
272
+ width: 36px;
273
+ height: 36px;
274
+ padding: 0;
275
+ flex-shrink: 0;
276
+ border: 1px solid var(--line);
277
+ background: #fff;
278
+ border-radius: 8px;
279
+ cursor: pointer;
280
+ }
281
+ .title-wrap {
282
+ flex: 1 1 0%;
283
+ min-width: 0;
284
+ display: flex;
285
+ flex-direction: column;
286
+ gap: 2px;
287
+ }
288
+ .title-wrap input[type="text"] {
289
+ display: block;
290
+ width: 100%;
291
+ min-width: 0;
292
+ font-family: var(--script);
293
+ font-size: 17px;
294
+ background: #fff;
295
+ border: 1px solid var(--line);
296
+ border-radius: 8px;
297
+ padding: 8px 12px;
298
+ }
299
+ .title-wrap input[type="text"]:focus {
300
+ outline: none;
301
+ border-color: #93c5fd;
302
+ box-shadow: 0 0 0 3px rgba(147, 197, 253, 0.35);
303
+ }
304
+ .title-wrap input[type="text"]:disabled {
305
+ background: #faf7f1;
306
+ color: var(--muted);
307
+ }
308
+ #fileMeta {
309
+ color: var(--muted);
310
+ font-size: 12px;
311
+ padding-left: 2px;
312
+ min-height: 1.1em;
313
+ }
314
+ .actions {
315
+ display: flex;
316
+ gap: 8px;
317
+ align-items: center;
318
+ flex-shrink: 0;
319
+ }
320
+ button, .btn {
321
+ font: inherit;
322
+ border: 1px solid var(--line);
323
+ background: #fff;
324
+ padding: 7px 12px;
325
+ border-radius: 8px;
326
+ cursor: pointer;
327
+ color: var(--ink);
328
+ text-decoration: none;
329
+ font-size: 13px;
330
+ }
331
+ button:hover, .btn:hover { border-color: #a8a29a; }
332
+ button.ghost {
333
+ background: transparent;
334
+ }
335
+ button.primary {
336
+ background: var(--accent);
337
+ border-color: var(--accent);
338
+ color: #fff;
339
+ }
340
+ button.primary:hover {
341
+ background: var(--accent-ink);
342
+ border-color: var(--accent-ink);
343
+ }
344
+ .status {
345
+ font-size: 12px;
346
+ color: var(--muted);
347
+ padding: 3px 8px;
348
+ border-radius: 999px;
349
+ background: #f4efe6;
350
+ white-space: nowrap;
351
+ }
352
+ .status.ok { color: var(--ok); background: #ecfdf3; }
353
+ .status.dirty { color: var(--warn); background: #fff7ed; }
354
+ .status.err { color: var(--danger); background: var(--danger-bg); }
355
+ .status.busy { color: var(--accent); background: #eff6ff; }
356
+
357
+ .panes {
358
+ flex: 1;
359
+ min-height: 0;
360
+ display: flex;
361
+ flex-direction: column;
362
+ }
363
+ .pane-heads {
364
+ display: grid;
365
+ grid-template-columns: 44px 1fr 1fr minmax(240px, 0.72fr);
366
+ flex-shrink: 0;
367
+ border-bottom: 1px solid var(--line);
368
+ }
369
+ .head-num {
370
+ display: flex;
371
+ align-items: center;
372
+ justify-content: center;
373
+ font-size: 11px;
374
+ color: var(--muted);
375
+ background: #efe8dc;
376
+ border-right: 1px solid var(--line);
377
+ }
378
+ .pane-heads h3 {
379
+ margin: 0;
380
+ padding: 9px 18px;
381
+ font-size: 13px;
382
+ color: var(--muted);
383
+ font-weight: 650;
384
+ display: flex;
385
+ justify-content: space-between;
386
+ align-items: baseline;
387
+ }
388
+ .pane-heads .head-orig { background: #f6efe4; }
389
+ .pane-heads .head-rev {
390
+ background: #eef7f0;
391
+ border-left: 1px solid var(--line);
392
+ }
393
+ .pane-heads h3.head-note {
394
+ background: #fff4e5;
395
+ border-left: 1px solid #f0d9b5;
396
+ color: #9a3412;
397
+ }
398
+ .pane-heads h3 .lock {
399
+ font-weight: 500;
400
+ font-size: 12px;
401
+ color: #a8a29a;
402
+ }
403
+ .seg {
404
+ display: flex;
405
+ border: 1px solid var(--line);
406
+ border-radius: 8px;
407
+ overflow: hidden;
408
+ flex-shrink: 0;
409
+ background: #fff;
410
+ }
411
+ .seg-btn {
412
+ border: none;
413
+ border-radius: 0;
414
+ background: transparent;
415
+ padding: 6px 10px;
416
+ font-size: 12px;
417
+ color: var(--muted);
418
+ }
419
+ .seg-btn + .seg-btn { border-left: 1px solid var(--line); }
420
+ .seg-btn.on {
421
+ background: var(--accent);
422
+ color: #fff;
423
+ }
424
+ .seg-btn[data-filter="changed"].on { background: #166534; }
425
+ .seg-btn[data-filter="unchanged"].on { background: #57534e; }
426
+ .toolbar {
427
+ display: flex;
428
+ gap: 10px;
429
+ align-items: center;
430
+ padding: 8px 16px;
431
+ border-bottom: 1px solid var(--line);
432
+ background: #fbf7f0;
433
+ flex-shrink: 0;
434
+ }
435
+ .toolbar input[type="search"] {
436
+ flex: 1;
437
+ min-width: 0;
438
+ border: 1px solid var(--line);
439
+ background: #fff;
440
+ border-radius: 8px;
441
+ padding: 6px 10px;
442
+ font-size: 13px;
443
+ }
444
+ .toolbar input[type="search"]:focus {
445
+ outline: none;
446
+ border-color: #93c5fd;
447
+ }
448
+ .check {
449
+ display: flex;
450
+ align-items: center;
451
+ gap: 6px;
452
+ font-size: 13px;
453
+ color: var(--muted);
454
+ white-space: nowrap;
455
+ cursor: pointer;
456
+ }
457
+ .count {
458
+ font-size: 12px;
459
+ color: var(--muted);
460
+ white-space: nowrap;
461
+ margin-left: auto;
462
+ }
463
+ .pane-body {
464
+ flex: 1;
465
+ min-height: 0;
466
+ overflow: auto;
467
+ background: var(--paper);
468
+ }
469
+ .pair {
470
+ display: grid;
471
+ grid-template-columns: 44px 1fr 1fr minmax(240px, 0.72fr);
472
+ align-items: stretch;
473
+ border-bottom: 1px solid var(--line);
474
+ }
475
+ .pair.is-hidden { display: none; }
476
+ .line-no {
477
+ display: flex;
478
+ align-items: flex-start;
479
+ justify-content: center;
480
+ padding: 12px 4px 0;
481
+ font-size: 11px;
482
+ font-variant-numeric: tabular-nums;
483
+ color: var(--muted);
484
+ background: #f3eee6;
485
+ border-right: 1px solid var(--line);
486
+ }
487
+ .pair.active {
488
+ background: var(--hl);
489
+ box-shadow: inset 3px 0 0 var(--hl-edge);
490
+ }
491
+ .pair.changed {
492
+ background: #f0fdf4;
493
+ }
494
+ .pair.changed .line-no {
495
+ background: #166534;
496
+ color: #fff;
497
+ font-weight: 700;
498
+ }
499
+ .pair.changed .block-orig {
500
+ box-shadow: inset 3px 0 0 #16a34a;
501
+ }
502
+ .pair.active.changed {
503
+ background: #dcfce7;
504
+ box-shadow: inset 3px 0 0 #16a34a;
505
+ }
506
+ .pair.changed .block-rev .tag::after {
507
+ content: "已改";
508
+ margin-left: 8px;
509
+ color: var(--ok);
510
+ font-weight: 650;
511
+ }
512
+ .pair .block {
513
+ padding: 11px 16px;
514
+ min-width: 0;
515
+ }
516
+ .pair .block-orig {
517
+ border-right: 1px solid var(--line);
518
+ background: rgba(246, 239, 228, 0.35);
519
+ }
520
+ .pair .block-rev {
521
+ border-right: 1px solid #d8edd9;
522
+ background: rgba(238, 247, 240, 0.45);
523
+ }
524
+ .pair.changed .block-rev {
525
+ background: #ecfdf3;
526
+ }
527
+ .pair.kind-dialogue .block-rev .rev {
528
+ font-size: 17px;
529
+ }
530
+
531
+ .empty {
532
+ flex: 1;
533
+ display: flex;
534
+ flex-direction: column;
535
+ align-items: center;
536
+ justify-content: center;
537
+ color: var(--muted);
538
+ gap: 8px;
539
+ background: linear-gradient(180deg, #fffcf7 0%, #f4eee4 100%);
540
+ }
541
+ .empty p { margin: 0; font-size: 20px; font-family: var(--script); color: var(--ink); }
542
+ .empty .sub { font-size: 13px; }
543
+ .empty-actions { display: flex; gap: 8px; margin-top: 8px; }
544
+ .empty-art {
545
+ display: flex;
546
+ gap: 10px;
547
+ margin-bottom: 8px;
548
+ }
549
+ .sheet {
550
+ width: 72px;
551
+ height: 96px;
552
+ border-radius: 6px;
553
+ background: #fff;
554
+ border: 1px solid var(--line);
555
+ box-shadow: var(--shadow);
556
+ position: relative;
557
+ }
558
+ .sheet::before,
559
+ .sheet::after {
560
+ content: "";
561
+ position: absolute;
562
+ left: 12px;
563
+ right: 12px;
564
+ height: 4px;
565
+ border-radius: 2px;
566
+ background: #e7e0d6;
567
+ }
568
+ .sheet::before { top: 18px; }
569
+ .sheet::after { top: 28px; }
570
+ .sheet-rev {
571
+ background: #f0fdf4;
572
+ transform: translateY(6px);
573
+ }
574
+
575
+ .pair.annotated .annotate {
576
+ background: #ffedd5;
577
+ }
578
+ .annotate {
579
+ display: flex;
580
+ flex-direction: column;
581
+ gap: 8px;
582
+ padding: 10px 12px;
583
+ background: #fff8ee;
584
+ border-left: 1px solid #f0d9b5;
585
+ min-width: 0;
586
+ }
587
+ .annotate-head span:last-child {
588
+ font-weight: 500;
589
+ letter-spacing: 0;
590
+ color: #c2410c;
591
+ font-size: 11px;
592
+ }
593
+ .score-row {
594
+ display: flex;
595
+ align-items: center;
596
+ gap: 8px;
597
+ }
598
+ .annotate .score-label {
599
+ font-size: 12px;
600
+ color: #b45309;
601
+ flex-shrink: 0;
602
+ }
603
+ .stars {
604
+ display: flex;
605
+ gap: 2px;
606
+ flex-shrink: 0;
607
+ }
608
+ .star {
609
+ border: none;
610
+ background: none;
611
+ padding: 0 2px;
612
+ font-size: 16px;
613
+ line-height: 1;
614
+ color: #d6d3d1;
615
+ cursor: pointer;
616
+ }
617
+ .star.on { color: #d97706; }
618
+ .annotate textarea {
619
+ flex: 1;
620
+ min-width: 0;
621
+ width: 100%;
622
+ border: 1px solid #f0d9b5;
623
+ border-radius: 8px;
624
+ padding: 8px 10px;
625
+ font: inherit;
626
+ font-size: 13px;
627
+ resize: vertical;
628
+ min-height: 64px;
629
+ background: #fff;
630
+ }
631
+ .annotate textarea:focus {
632
+ outline: none;
633
+ border-color: #93c5fd;
634
+ }
635
+
636
+ .modal {
637
+ position: fixed;
638
+ inset: 0;
639
+ z-index: 80;
640
+ background: rgba(28, 25, 23, 0.35);
641
+ display: flex;
642
+ align-items: center;
643
+ justify-content: center;
644
+ padding: 24px;
645
+ }
646
+ .modal-card {
647
+ width: min(920px, 100%);
648
+ max-height: calc(100vh - 48px);
649
+ background: #fffdf8;
650
+ border-radius: 14px;
651
+ box-shadow: var(--shadow);
652
+ display: flex;
653
+ flex-direction: column;
654
+ min-height: 0;
655
+ }
656
+ .modal-head,
657
+ .modal-foot {
658
+ display: flex;
659
+ align-items: center;
660
+ justify-content: space-between;
661
+ gap: 12px;
662
+ padding: 12px 16px;
663
+ flex-shrink: 0;
664
+ }
665
+ .modal-head { border-bottom: 1px solid var(--line); }
666
+ .modal-foot { border-top: 1px solid var(--line); }
667
+ .stats {
668
+ display: flex;
669
+ gap: 8px;
670
+ flex-wrap: wrap;
671
+ padding: 12px 16px 0;
672
+ }
673
+ .stat {
674
+ background: #f6efe4;
675
+ border-radius: 8px;
676
+ padding: 8px 12px;
677
+ min-width: 88px;
678
+ }
679
+ .stat b { display: block; font-size: 18px; }
680
+ .stat span { font-size: 12px; color: var(--muted); }
681
+ .tabs {
682
+ display: flex;
683
+ gap: 6px;
684
+ padding: 12px 16px 0;
685
+ }
686
+ .tab {
687
+ border: 1px solid var(--line);
688
+ background: #fff;
689
+ border-radius: 999px;
690
+ padding: 5px 12px;
691
+ }
692
+ .tab.on {
693
+ background: var(--accent);
694
+ border-color: var(--accent);
695
+ color: #fff;
696
+ }
697
+ .preview-hint {
698
+ margin: 8px 16px 0;
699
+ font-size: 12px;
700
+ color: var(--muted);
701
+ }
702
+ .preview-body {
703
+ margin: 8px 16px 12px;
704
+ padding: 12px;
705
+ background: #1c1917;
706
+ color: #f5f0e8;
707
+ border-radius: 10px;
708
+ overflow: auto;
709
+ flex: 1;
710
+ min-height: 180px;
711
+ font-size: 12px;
712
+ line-height: 1.5;
713
+ white-space: pre-wrap;
714
+ word-break: break-word;
715
+ }
716
+ a.btn.primary {
717
+ background: var(--accent);
718
+ border-color: var(--accent);
719
+ color: #fff;
720
+ }
721
+
722
+ .tag {
723
+ font-size: 11px;
724
+ color: var(--muted);
725
+ margin-bottom: 4px;
726
+ }
727
+ .orig, .rev {
728
+ font-family: var(--script);
729
+ white-space: pre-wrap;
730
+ line-height: 1.7;
731
+ font-size: 16px;
732
+ }
733
+ .orig { user-select: text; cursor: default; }
734
+ .rev {
735
+ min-height: 1.6em;
736
+ border-radius: 6px;
737
+ cursor: text;
738
+ }
739
+ .rev[contenteditable="true"],
740
+ .rev[contenteditable="plaintext-only"] { outline: none; }
741
+ .rev:hover { background: rgba(255, 255, 255, 0.7); }
742
+ .rev:focus { background: #fff; box-shadow: inset 0 0 0 1px #93c5fd; }
743
+ del { background: var(--del); text-decoration: line-through; text-decoration-thickness: 2px; }
744
+ ins { background: var(--ins); text-decoration: none; }
745
+ .kind-dialogue .tag { color: var(--accent); }