threadnote 0.7.8 → 0.7.10

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,910 @@
1
+ :root {
2
+ color-scheme: dark;
3
+ --bg: #0a0a0d;
4
+ --panel: #14141a;
5
+ --panel-alt: #1c1c24;
6
+ --line: #2a2a35;
7
+ --text: #ececf1;
8
+ --muted: #8a8a96;
9
+ --dim: #5c5c68;
10
+ --accent: #5ee0c5;
11
+ --accent-soft: rgba(94, 224, 197, 0.12);
12
+ --accent-line: rgba(94, 224, 197, 0.35);
13
+ --warn: #ffb86b;
14
+ --warn-soft: rgba(255, 184, 107, 0.14);
15
+ --danger: #ff7a7a;
16
+ --danger-soft: rgba(255, 122, 122, 0.14);
17
+ --ok: #6ee7b7;
18
+ --ok-soft: rgba(110, 231, 183, 0.14);
19
+ --code-bg: #101019;
20
+ --radius: 8px;
21
+ font-family:
22
+ Inter,
23
+ ui-sans-serif,
24
+ system-ui,
25
+ -apple-system,
26
+ BlinkMacSystemFont,
27
+ 'Segoe UI',
28
+ sans-serif;
29
+ }
30
+
31
+ * {
32
+ box-sizing: border-box;
33
+ }
34
+
35
+ html,
36
+ body,
37
+ #root {
38
+ min-height: 100%;
39
+ }
40
+
41
+ body {
42
+ margin: 0;
43
+ background:
44
+ radial-gradient(circle at 18vw 16vh, rgba(94, 224, 197, 0.08), transparent 34rem),
45
+ radial-gradient(circle at 86vw 80vh, rgba(124, 140, 255, 0.06), transparent 38rem), var(--bg);
46
+ background-attachment: fixed;
47
+ background-repeat: no-repeat;
48
+ background-size: 100vw 100vh;
49
+ color: var(--text);
50
+ min-height: 100vh;
51
+ }
52
+
53
+ button,
54
+ input,
55
+ select,
56
+ textarea {
57
+ font: inherit;
58
+ }
59
+
60
+ button {
61
+ border: 1px solid var(--line);
62
+ border-radius: 6px;
63
+ background: var(--panel-alt);
64
+ color: var(--text);
65
+ cursor: pointer;
66
+ line-height: 1.35;
67
+ min-height: 34px;
68
+ padding: 7px 12px;
69
+ }
70
+
71
+ button:hover {
72
+ border-color: var(--accent-line);
73
+ }
74
+
75
+ button:disabled {
76
+ color: var(--muted);
77
+ cursor: not-allowed;
78
+ opacity: 0.65;
79
+ }
80
+
81
+ button.danger {
82
+ background: var(--danger-soft);
83
+ border-color: rgba(255, 122, 122, 0.34);
84
+ color: var(--danger);
85
+ }
86
+
87
+ input,
88
+ select,
89
+ textarea {
90
+ border: 1px solid var(--line);
91
+ border-radius: 6px;
92
+ background: var(--code-bg);
93
+ color: var(--text);
94
+ line-height: 1.35;
95
+ min-height: 34px;
96
+ padding: 8px 12px;
97
+ width: 100%;
98
+ }
99
+
100
+ textarea {
101
+ line-height: 1.45;
102
+ resize: none;
103
+ }
104
+
105
+ .app {
106
+ display: grid;
107
+ grid-template-columns: var(--sidebar-width, 340px) 10px minmax(0, 1fr);
108
+ height: 100dvh;
109
+ min-height: 0;
110
+ overflow: hidden;
111
+ }
112
+
113
+ .sidebar {
114
+ background: rgba(20, 20, 26, 0.94);
115
+ display: grid;
116
+ grid-template-rows: auto auto auto minmax(0, 1fr);
117
+ min-height: 0;
118
+ min-width: 0;
119
+ overflow: hidden;
120
+ padding: 16px;
121
+ }
122
+
123
+ .sidebar-resizer {
124
+ background: rgba(20, 20, 26, 0.7);
125
+ border-left: 1px solid var(--line);
126
+ border-right: 1px solid var(--line);
127
+ cursor: col-resize;
128
+ min-width: 0;
129
+ position: relative;
130
+ }
131
+
132
+ .sidebar-resizer::before {
133
+ background: var(--dim);
134
+ border-radius: 999px;
135
+ content: '';
136
+ height: 58px;
137
+ left: 50%;
138
+ opacity: 0.55;
139
+ position: absolute;
140
+ top: 50%;
141
+ transform: translate(-50%, -50%);
142
+ transition:
143
+ background 120ms ease,
144
+ opacity 120ms ease;
145
+ width: 2px;
146
+ }
147
+
148
+ .sidebar-resizer:hover::before,
149
+ .sidebar-resizer:focus-visible::before {
150
+ background: var(--accent);
151
+ opacity: 1;
152
+ }
153
+
154
+ .sidebar-resizer:focus-visible {
155
+ outline: 2px solid var(--accent-line);
156
+ outline-offset: -2px;
157
+ }
158
+
159
+ body.is-resizing-sidebar {
160
+ cursor: col-resize;
161
+ user-select: none;
162
+ }
163
+
164
+ body.is-resizing-sidebar * {
165
+ cursor: col-resize !important;
166
+ }
167
+
168
+ .brand,
169
+ .topbar,
170
+ .pane-head,
171
+ .action-row,
172
+ .field-row,
173
+ .search-row,
174
+ .check-row,
175
+ .selection-bar {
176
+ align-items: center;
177
+ display: flex;
178
+ gap: 8px;
179
+ }
180
+
181
+ .select-row {
182
+ align-items: flex-start;
183
+ }
184
+
185
+ .brand {
186
+ justify-content: space-between;
187
+ margin-bottom: 14px;
188
+ }
189
+
190
+ .brand-title {
191
+ align-items: center;
192
+ display: flex;
193
+ gap: 10px;
194
+ min-width: 0;
195
+ }
196
+
197
+ .brand-logo {
198
+ flex: 0 0 auto;
199
+ height: 86px;
200
+ object-fit: contain;
201
+ width: 86px;
202
+ }
203
+
204
+ .brand h1,
205
+ .pane-head h2,
206
+ .form-pane h3,
207
+ .inspector h3,
208
+ .tools h2 {
209
+ letter-spacing: 0;
210
+ margin: 0;
211
+ }
212
+
213
+ .brand h1 {
214
+ font-size: 20px;
215
+ line-height: 1.1;
216
+ }
217
+
218
+ .brand p,
219
+ .uri-line,
220
+ .muted {
221
+ color: var(--muted);
222
+ font-size: 12px;
223
+ margin: 4px 0 0;
224
+ }
225
+
226
+ .icon-button {
227
+ aspect-ratio: 1;
228
+ min-height: 34px;
229
+ padding: 0;
230
+ width: 34px;
231
+ }
232
+
233
+ .check-row {
234
+ color: var(--muted);
235
+ font-size: 13px;
236
+ margin: 10px 0;
237
+ }
238
+
239
+ .check-row input {
240
+ min-height: auto;
241
+ width: auto;
242
+ }
243
+
244
+ .tree {
245
+ min-height: 0;
246
+ overflow: auto;
247
+ padding-right: 3px;
248
+ }
249
+
250
+ .tree details {
251
+ margin: 2px 0;
252
+ }
253
+
254
+ .tree summary,
255
+ .tree-row {
256
+ align-items: center;
257
+ border-radius: 6px;
258
+ display: grid;
259
+ gap: 6px;
260
+ grid-template-columns: 18px minmax(0, 1fr);
261
+ min-height: 28px;
262
+ padding: 2px 4px;
263
+ }
264
+
265
+ .tree summary {
266
+ cursor: pointer;
267
+ grid-template-columns: 18px 14px minmax(0, 1fr);
268
+ list-style: none;
269
+ }
270
+
271
+ .tree summary::-webkit-details-marker {
272
+ display: none;
273
+ }
274
+
275
+ .tree summary::marker {
276
+ content: '';
277
+ }
278
+
279
+ .tree-caret {
280
+ border-bottom: 4px solid transparent;
281
+ border-left: 5px solid var(--muted);
282
+ border-top: 4px solid transparent;
283
+ height: 0;
284
+ justify-self: center;
285
+ transition: transform 120ms ease;
286
+ width: 0;
287
+ }
288
+
289
+ .tree details[open] > summary .tree-caret {
290
+ transform: rotate(90deg);
291
+ }
292
+
293
+ .tree summary:hover,
294
+ .tree summary.is-active,
295
+ .tree-row:hover,
296
+ .tree-row.is-active {
297
+ background: var(--accent-soft);
298
+ }
299
+
300
+ .tree label {
301
+ align-items: center;
302
+ display: flex;
303
+ gap: 6px;
304
+ min-width: 0;
305
+ }
306
+
307
+ .tree input {
308
+ min-height: auto;
309
+ width: auto;
310
+ }
311
+
312
+ .tree-file {
313
+ background: transparent;
314
+ border: 0;
315
+ justify-content: flex-start;
316
+ min-height: 24px;
317
+ min-width: 0;
318
+ padding: 0;
319
+ text-align: left;
320
+ }
321
+
322
+ .tree-name {
323
+ overflow: hidden;
324
+ text-overflow: ellipsis;
325
+ white-space: nowrap;
326
+ }
327
+
328
+ .tree-children {
329
+ margin-left: 15px;
330
+ }
331
+
332
+ .main {
333
+ display: grid;
334
+ grid-template-rows: auto minmax(0, 1fr);
335
+ min-height: 0;
336
+ min-width: 0;
337
+ overflow: hidden;
338
+ }
339
+
340
+ .topbar {
341
+ background: rgba(20, 20, 26, 0.92);
342
+ border-bottom: 1px solid var(--line);
343
+ justify-content: space-between;
344
+ min-height: 58px;
345
+ padding: 10px 14px;
346
+ }
347
+
348
+ .tabs {
349
+ display: flex;
350
+ gap: 4px;
351
+ }
352
+
353
+ .tab {
354
+ background: transparent;
355
+ border-color: transparent;
356
+ }
357
+
358
+ .tab.is-active {
359
+ background: var(--accent-soft);
360
+ border-color: var(--accent-line);
361
+ color: var(--accent);
362
+ }
363
+
364
+ .selection-bar {
365
+ background: var(--panel-alt);
366
+ border: 1px solid var(--line);
367
+ border-radius: 8px;
368
+ padding: 6px;
369
+ }
370
+
371
+ .panel {
372
+ display: none;
373
+ min-height: 0;
374
+ overflow: hidden;
375
+ padding: 14px;
376
+ }
377
+
378
+ .panel.is-active {
379
+ display: block;
380
+ height: 100%;
381
+ }
382
+
383
+ .health-panel.panel.is-active {
384
+ overflow: auto;
385
+ }
386
+
387
+ .content-grid,
388
+ .split {
389
+ display: grid;
390
+ gap: 14px;
391
+ grid-template-columns: minmax(0, 1fr) 330px;
392
+ height: 100%;
393
+ min-height: 0;
394
+ }
395
+
396
+ .editor-pane,
397
+ .inspector,
398
+ .form-pane,
399
+ .split > section,
400
+ .doctorPanel {
401
+ background: var(--panel);
402
+ border: 1px solid var(--line);
403
+ border-radius: var(--radius);
404
+ min-width: 0;
405
+ }
406
+
407
+ .editor-pane {
408
+ display: grid;
409
+ grid-template-rows: auto minmax(0, 1fr);
410
+ min-height: 0;
411
+ }
412
+
413
+ .pane-head {
414
+ border-bottom: 1px solid var(--line);
415
+ justify-content: space-between;
416
+ min-height: 64px;
417
+ padding: 12px;
418
+ }
419
+
420
+ .pane-head h2 {
421
+ font-size: 18px;
422
+ }
423
+
424
+ .editor-pane .pane-head {
425
+ align-items: flex-start;
426
+ flex-direction: column;
427
+ }
428
+
429
+ .editor-pane .action-row {
430
+ justify-content: flex-start;
431
+ width: 100%;
432
+ }
433
+
434
+ .segmented-control {
435
+ display: inline-flex;
436
+ gap: 0;
437
+ }
438
+
439
+ .segmented-control button {
440
+ border-radius: 0;
441
+ }
442
+
443
+ .segmented-control button:first-child {
444
+ border-radius: 6px 0 0 6px;
445
+ }
446
+
447
+ .segmented-control button:last-child {
448
+ border-left: 0;
449
+ border-radius: 0 6px 6px 0;
450
+ }
451
+
452
+ .segmented-control button.is-active {
453
+ background: var(--accent-soft);
454
+ border-color: var(--accent-line);
455
+ color: var(--accent);
456
+ }
457
+
458
+ .action-row {
459
+ flex-wrap: wrap;
460
+ justify-content: flex-end;
461
+ }
462
+
463
+ .editor-pane textarea {
464
+ border: 0;
465
+ border-radius: 0 0 var(--radius) var(--radius);
466
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
467
+ height: 100%;
468
+ min-height: 420px;
469
+ outline: none;
470
+ padding: 14px;
471
+ }
472
+
473
+ .markdown-viewer {
474
+ color: var(--text);
475
+ line-height: 1.55;
476
+ min-height: 420px;
477
+ overflow: auto;
478
+ padding: 22px;
479
+ }
480
+
481
+ .markdown-viewer > :first-child {
482
+ margin-top: 0;
483
+ }
484
+
485
+ .markdown-viewer > :last-child {
486
+ margin-bottom: 0;
487
+ }
488
+
489
+ .markdown-viewer h1,
490
+ .markdown-viewer h2,
491
+ .markdown-viewer h3,
492
+ .markdown-viewer h4 {
493
+ line-height: 1.2;
494
+ margin: 22px 0 10px;
495
+ }
496
+
497
+ .markdown-viewer h1 {
498
+ border-bottom: 1px solid var(--line);
499
+ font-size: 26px;
500
+ padding-bottom: 10px;
501
+ }
502
+
503
+ .markdown-viewer h2 {
504
+ font-size: 21px;
505
+ }
506
+
507
+ .markdown-viewer h3 {
508
+ font-size: 17px;
509
+ }
510
+
511
+ .markdown-viewer p,
512
+ .markdown-viewer ul,
513
+ .markdown-viewer ol,
514
+ .markdown-viewer blockquote,
515
+ .markdown-viewer pre,
516
+ .markdown-viewer table {
517
+ margin: 0 0 14px;
518
+ }
519
+
520
+ .markdown-viewer ul,
521
+ .markdown-viewer ol {
522
+ padding-left: 24px;
523
+ }
524
+
525
+ .markdown-viewer li {
526
+ margin: 4px 0;
527
+ }
528
+
529
+ .markdown-viewer a {
530
+ color: var(--accent);
531
+ }
532
+
533
+ .markdown-viewer blockquote {
534
+ border-left: 3px solid var(--accent-line);
535
+ color: var(--muted);
536
+ padding-left: 12px;
537
+ }
538
+
539
+ .markdown-viewer code {
540
+ background: var(--code-bg);
541
+ border: 1px solid var(--line);
542
+ border-radius: 5px;
543
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
544
+ font-size: 0.92em;
545
+ padding: 1px 5px;
546
+ }
547
+
548
+ .markdown-viewer pre {
549
+ background: var(--code-bg);
550
+ border: 1px solid var(--line);
551
+ border-radius: var(--radius);
552
+ overflow: auto;
553
+ padding: 12px;
554
+ }
555
+
556
+ .markdown-viewer pre code {
557
+ background: transparent;
558
+ border: 0;
559
+ padding: 0;
560
+ }
561
+
562
+ .markdown-viewer table {
563
+ border-collapse: collapse;
564
+ display: block;
565
+ overflow: auto;
566
+ width: 100%;
567
+ }
568
+
569
+ .markdown-viewer th,
570
+ .markdown-viewer td {
571
+ border: 1px solid var(--line);
572
+ padding: 7px 9px;
573
+ text-align: left;
574
+ }
575
+
576
+ .markdown-viewer th {
577
+ background: var(--panel-alt);
578
+ }
579
+
580
+ .markdown-viewer input[type='checkbox'] {
581
+ margin-right: 7px;
582
+ min-height: auto;
583
+ width: auto;
584
+ }
585
+
586
+ .markdown-viewer hr {
587
+ border: 0;
588
+ border-top: 1px solid var(--line);
589
+ margin: 18px 0;
590
+ }
591
+
592
+ #memoryContent:focus,
593
+ .editor-pane textarea:focus {
594
+ box-shadow: inset 0 0 0 2px var(--accent-soft);
595
+ }
596
+
597
+ .inspector,
598
+ .form-pane,
599
+ .split > section {
600
+ overflow: auto;
601
+ padding: 16px;
602
+ }
603
+
604
+ .form-pane {
605
+ display: flex;
606
+ flex-direction: column;
607
+ gap: 18px;
608
+ }
609
+
610
+ .form-section {
611
+ display: grid;
612
+ gap: 8px;
613
+ }
614
+
615
+ .form-pane .form-section h3 {
616
+ margin: 0;
617
+ }
618
+
619
+ .button-row {
620
+ display: flex;
621
+ flex-wrap: wrap;
622
+ gap: 8px;
623
+ }
624
+
625
+ .inspector h3,
626
+ .form-pane h3 {
627
+ font-size: 14px;
628
+ margin: 16px 0 8px;
629
+ }
630
+
631
+ .inspector h3:first-child,
632
+ .form-pane h3:first-child {
633
+ margin-top: 0;
634
+ }
635
+
636
+ dl {
637
+ display: grid;
638
+ gap: 7px;
639
+ margin: 0;
640
+ }
641
+
642
+ dt {
643
+ color: var(--muted);
644
+ font-size: 12px;
645
+ }
646
+
647
+ dd {
648
+ margin: 0;
649
+ overflow-wrap: anywhere;
650
+ }
651
+
652
+ .target-fields {
653
+ display: grid;
654
+ gap: 8px;
655
+ margin-bottom: 12px;
656
+ }
657
+
658
+ .select-field {
659
+ display: grid;
660
+ gap: 6px;
661
+ min-width: 0;
662
+ width: 100%;
663
+ }
664
+
665
+ .select-button {
666
+ align-items: center;
667
+ display: flex;
668
+ justify-content: space-between;
669
+ text-align: left;
670
+ width: 100%;
671
+ }
672
+
673
+ .select-chevron {
674
+ border-left: 4px solid transparent;
675
+ border-right: 4px solid transparent;
676
+ border-top: 5px solid var(--text);
677
+ flex: 0 0 auto;
678
+ height: 0;
679
+ margin-left: 10px;
680
+ width: 0;
681
+ }
682
+
683
+ .select-menu {
684
+ background: var(--code-bg);
685
+ border: 1px solid var(--line);
686
+ border-radius: 6px;
687
+ display: grid;
688
+ max-height: 220px;
689
+ overflow: auto;
690
+ padding: 4px;
691
+ }
692
+
693
+ .select-option {
694
+ background: transparent;
695
+ border: 0;
696
+ justify-content: flex-start;
697
+ text-align: left;
698
+ width: 100%;
699
+ }
700
+
701
+ .select-option:hover,
702
+ .select-option.is-selected {
703
+ background: var(--accent-soft);
704
+ color: var(--accent);
705
+ }
706
+
707
+ .inspector textarea {
708
+ height: 220px;
709
+ margin: 8px 0;
710
+ }
711
+
712
+ .list {
713
+ display: grid;
714
+ gap: 8px;
715
+ margin-top: 12px;
716
+ }
717
+
718
+ .list-item,
719
+ .check-item {
720
+ border: 1px solid var(--line);
721
+ border-radius: var(--radius);
722
+ padding: 10px;
723
+ }
724
+
725
+ .list-item {
726
+ background: var(--panel);
727
+ display: block;
728
+ min-height: auto;
729
+ text-align: left;
730
+ width: 100%;
731
+ }
732
+
733
+ .list-item.is-selected {
734
+ border-color: var(--accent);
735
+ background: var(--accent-soft);
736
+ }
737
+
738
+ .list-item strong {
739
+ display: block;
740
+ margin-bottom: 5px;
741
+ }
742
+
743
+ .badge {
744
+ border-radius: 999px;
745
+ display: inline-flex;
746
+ font-size: 12px;
747
+ margin: 2px 4px 2px 0;
748
+ padding: 2px 7px;
749
+ }
750
+
751
+ .badge.ok {
752
+ background: var(--ok-soft);
753
+ color: var(--ok);
754
+ }
755
+
756
+ .badge.warn {
757
+ background: var(--warn-soft);
758
+ color: var(--warn);
759
+ }
760
+
761
+ .badge.fail {
762
+ background: var(--danger-soft);
763
+ color: var(--danger);
764
+ }
765
+
766
+ .checks {
767
+ display: grid;
768
+ gap: 8px;
769
+ margin-top: 12px;
770
+ overflow: auto;
771
+ }
772
+
773
+ .loading-row {
774
+ align-items: center;
775
+ background: var(--panel-alt);
776
+ border: 1px solid var(--accent-line);
777
+ border-radius: 8px;
778
+ color: var(--text);
779
+ display: inline-flex;
780
+ gap: 8px;
781
+ margin-top: 12px;
782
+ padding: 9px 12px;
783
+ }
784
+
785
+ .spinner {
786
+ animation: spin 0.8s linear infinite;
787
+ border: 2px solid var(--accent-line);
788
+ border-top-color: var(--accent);
789
+ border-radius: 50%;
790
+ display: inline-block;
791
+ height: 14px;
792
+ width: 14px;
793
+ }
794
+
795
+ @keyframes spin {
796
+ to {
797
+ transform: rotate(360deg);
798
+ }
799
+ }
800
+
801
+ .output {
802
+ background: var(--code-bg);
803
+ border-radius: var(--radius);
804
+ border: 1px solid var(--line);
805
+ color: #d6d6e0;
806
+ min-height: 220px;
807
+ overflow: auto;
808
+ padding: 12px;
809
+ white-space: pre-wrap;
810
+ }
811
+
812
+ .doctor-output {
813
+ margin: 12px 0 0;
814
+ max-height: min(34dvh, 360px);
815
+ min-height: 120px;
816
+ overflow: auto;
817
+ }
818
+
819
+ .uri-list {
820
+ display: grid;
821
+ gap: 6px;
822
+ margin: 12px 0;
823
+ }
824
+
825
+ .uri-list h3 {
826
+ font-size: 14px;
827
+ margin: 0;
828
+ }
829
+
830
+ .uri-button {
831
+ background: var(--panel-alt);
832
+ height: auto;
833
+ justify-content: flex-start;
834
+ line-height: 1.35;
835
+ min-height: 34px;
836
+ overflow-wrap: anywhere;
837
+ padding: 7px 9px;
838
+ text-align: left;
839
+ width: 100%;
840
+ }
841
+
842
+ .toast {
843
+ background: #050508;
844
+ border: 1px solid var(--line);
845
+ border-radius: 8px;
846
+ bottom: 18px;
847
+ color: var(--text);
848
+ left: 50%;
849
+ max-width: min(720px, calc(100vw - 32px));
850
+ padding: 10px 14px;
851
+ position: fixed;
852
+ transform: translateX(-50%);
853
+ z-index: 10;
854
+ }
855
+
856
+ .busy-overlay {
857
+ align-items: center;
858
+ background: rgba(5, 5, 8, 0.34);
859
+ display: flex;
860
+ inset: 0;
861
+ justify-content: center;
862
+ position: fixed;
863
+ z-index: 20;
864
+ }
865
+
866
+ .busy-panel {
867
+ background: #050508;
868
+ border: 1px solid var(--accent-line);
869
+ border-radius: 8px;
870
+ color: var(--text);
871
+ padding: 12px 16px;
872
+ }
873
+
874
+ .danger-text {
875
+ color: var(--danger);
876
+ }
877
+
878
+ @media (max-width: 980px) {
879
+ .app,
880
+ .content-grid,
881
+ .split {
882
+ grid-template-columns: 1fr;
883
+ }
884
+
885
+ .app {
886
+ height: auto;
887
+ overflow: visible;
888
+ }
889
+
890
+ .sidebar {
891
+ border-bottom: 1px solid var(--line);
892
+ border-right: 0;
893
+ max-height: 45vh;
894
+ }
895
+
896
+ .sidebar-resizer {
897
+ display: none;
898
+ }
899
+
900
+ .topbar,
901
+ .pane-head {
902
+ align-items: flex-start;
903
+ flex-direction: column;
904
+ }
905
+
906
+ .inspector,
907
+ .form-pane {
908
+ min-height: 260px;
909
+ }
910
+ }