at main 973 lines 20 kB view raw
1.record-view-container { 2 max-width: 1200px; 3 margin: 2rem auto; 4 padding: 0 1rem; 5} 6 7.record-header { 8 margin-bottom: 2rem; 9 padding-bottom: 0.5rem; 10 font-family: var(--font-mono); 11 border-bottom: 1px solid var(--color-border); 12} 13 14.record-header h1 { 15 font-family: var(--font-mono); 16 font-size: 1.2rem; 17 font-weight: 400; 18 margin-bottom: 1rem; 19 color: var(--color-text); 20 text-transform: uppercase; 21 letter-spacing: 0.15em; 22} 23 24.uri-input-section { 25 margin-bottom: 1rem; 26} 27 28.uri-input { 29 font-family: var(--font-mono); 30 font-size: 0.9rem; 31 width: 100%; 32 max-width: 100%; 33 box-sizing: border-box; 34 padding: 0.5rem 0.75rem; 35 background: var(--color-surface, rgba(0, 0, 0, 0.2)); 36 border: 1px solid var(--color-border); 37 color: var(--color-text); 38 outline: none; 39 transition: border-color 0.2s; 40} 41 42.uri-input:focus { 43 border-color: var(--color-primary); 44} 45 46.uri-input::placeholder { 47 color: var(--color-subtle); 48 opacity: 0.5; 49} 50 51.record-metadata { 52 display: flex-wrap; 53 flex-direction: column; 54 gap: 0.75rem; 55} 56 57.metadata-row { 58 display: flex; 59 gap: 0.5rem; 60 padding: 0.35rem; 61 align-items: baseline; 62} 63 64.metadata-label { 65 font-family: var(--font-mono); 66 color: var(--color-subtle); 67 font-size: 0.85rem; 68 text-transform: uppercase; 69 letter-spacing: 0.1em; 70 white-space: nowrap; 71} 72 73.metadata-label::after { 74 content: ":"; 75 font-size: 0.8rem; 76 margin-inline-start: 0.25rem; 77} 78 79.metadata-value { 80 font-family: var(--font-mono); 81 color: var(--color-text); 82 font-size: 1rem; 83 word-break: break-all; 84} 85 86.schema-valid { 87 color: var(--color-success); 88} 89.schema-invalid { 90 color: var(--color-warning); 91} 92 93.uri-link { 94 text-decoration: none; 95} 96 97.uri-link:hover .aturi-scheme, 98.uri-link:hover .aturi-authority, 99.uri-link:hover .aturi-collection, 100.uri-link:hover .aturi-rkey, 101.uri-link:hover .uri-scheme, 102.uri-link:hover .uri-authority, 103.uri-link:hover .uri-path { 104 text-decoration: underline; 105} 106 107.tab-bar { 108 display: flex; 109 gap: 0; 110 border-bottom: 1px solid var(--color-border); 111 margin-top: 1.5rem; 112 align-items: center; 113} 114 115.tab-button { 116 font-family: var(--font-mono); 117 background: transparent; 118 border: none; 119 padding: 0.5rem 1rem; 120 cursor: pointer; 121 color: var(--color-subtle); 122 text-transform: uppercase; 123 font-size: 0.9rem; 124 letter-spacing: 0.1em; 125 border-bottom: 2px solid transparent; 126 margin-bottom: -1px; 127 transition: all 0.2s; 128} 129 130.tab-button:hover { 131 color: var(--color-secondary); 132 font-weight: 550; 133 border-bottom-color: var(--color-secondary); 134} 135 136.tab-button.active { 137 color: var(--color-primary); 138 font-weight: 600; 139 border-bottom-color: var(--color-primary); 140} 141 142.tab-button.edit-button { 143 margin-inline-start: auto; 144} 145 146.action-buttons-group { 147 margin-inline-start: auto; 148 display: flex; 149 gap: 0; 150 align-items: center; 151} 152 153.tab-button.action-button-danger { 154 color: var(--color-error, #ff6b6b); 155} 156 157.tab-button.action-button-danger:hover { 158 color: var(--color-error, #ff5252); 159 border-bottom-color: var(--color-error, #ff6b6b); 160} 161 162.dropdown-wrapper { 163 position: relative; 164 display: inline-block; 165} 166 167.dropdown-menu { 168 position: absolute; 169 top: 100%; 170 left: 0; 171 background: var(--color-background); 172 border: 1px solid var(--color-border); 173 border-radius: 4px; 174 margin-top: 0.25rem; 175 z-index: 100; 176 min-width: 150px; 177} 178 179.dropdown-menu button { 180 display: block; 181 width: 100%; 182 padding: 0.5rem 1rem; 183 background: transparent; 184 border: none; 185 text-align: start; 186 cursor: pointer; 187 color: var(--color-text); 188 font-family: var(--font-mono); 189} 190 191.dropdown-menu button:hover { 192 background: var(--color-hover, rgba(255, 255, 255, 0.05)); 193} 194 195.tab-content { 196 min-height: 300px; 197} 198 199.pretty-record { 200 display: flex; 201 flex-direction: column; 202 align-items: flex-start; 203 border-inline-start: 1px dashed var(--color-subtle); 204} 205 206.record-field { 207 display: flex; 208 flex-direction: column; 209 padding: 0rem 0 0rem 1rem; 210 padding-inline-end: 1rem; 211 margin-inline-start: -1px; 212 border-inline-start: 2px solid var(--color-secondary); 213 border-bottom: 1px dashed var(--color-subtle); 214 z-index: 1; 215} 216 217.record-field.field-error { 218 border-inline-start-color: var(--color-error); 219 background-color: rgba(255, 107, 107, 0.05); 220} 221 222.field-error-message { 223 font-family: var(--font-mono); 224 font-size: 0.85rem; 225 color: var(--color-error); 226 padding: 0.25rem 0; 227 border-inline-start: 2px solid var(--color-error); 228 border-bottom: 1px dashed var(--color-error); 229 padding-inline-start: 0.5rem; 230 word-wrap: break-word; 231 margin-inline-start: -1px; 232 word-break: break-word; 233 overflow-wrap: break-word; 234} 235 236.field-label { 237 font-family: var(--font-mono); 238 color: var(--color-subtle); 239 font-size: 0.7rem; 240 padding-top: 0.5rem; 241} 242 243.path-prefix { 244 color: var(--color-subtle); 245} 246 247.path-final { 248 color: var(--color-text); 249 font-weight: 500; 250} 251 252.array-len { 253 font-family: var(--font-mono); 254 color: var(--color-subtle); 255 font-size: 0.9rem; 256 font-weight: 400; 257 padding-inline-start: 0.125rem; 258 padding-top: 0.5rem; 259} 260 261.field-value { 262 font-family: var(--font-mono); 263 color: var(--color-text); 264 font-size: 0.9rem; 265 padding-top: 0.2rem; 266 padding-bottom: 0.1rem; 267 word-break: break-word; 268} 269 270.field-value.muted { 271 color: var(--color-subtle); 272 font-style: italic; 273} 274 275.field-value.mime { 276 color: var(--color-subtle); 277 font-style: italic; 278 font-size: 0.85rem; 279} 280 281.field-value.bytes { 282 color: var(--color-subtle); 283 font-size: 0.75rem; 284} 285 286.record-section { 287 position: relative; 288 margin-inline-start: 1.5rem; 289 border-inline-start: 1px dashed var(--color-border); 290} 291 292.section-content .record-section { 293 position: relative; 294 border-inline-start: 1px dashed var(--color-border); 295} 296 297.array-item .record-section { 298 position: relative; 299 border-inline-start: 1px dashed var(--color-border); 300} 301 302.section-label { 303 font-family: var(--font-mono); 304 color: var(--color-primary); 305 font-size: 1rem; 306 font-weight: 600; 307 padding-inline-start: 1rem; 308 padding-top: 0.5rem; 309 padding-bottom: 0.25rem; 310 margin-inline-start: -1px; 311 border-inline-start: 2px solid var(--color-primary); 312 border-bottom: 1px dashed var(--color-muted); 313} 314 315.section-content .section-label { 316 font-family: var(--font-mono); 317 color: var(--color-tertiary); 318 font-size: 0.9rem; 319 font-weight: 600; 320 padding-inline-start: 1rem; 321 padding-top: 0.5rem; 322 margin-inline-start: -1px; 323 border-inline-start: 2px solid var(--color-secondary); 324} 325 326.section-content { 327 display: flex; 328 flex-direction: column; 329 align-items: flex-start; 330 padding-inline-end: 1rem; 331} 332 333.section-content .record-field { 334 border-inline-start-color: var(--color-secondary); 335 opacity: 0.95; 336 align-self: stretch; 337 width: 100%; 338} 339 340.blob-image { 341 max-width: 600px; 342 max-height: 400px; 343 width: auto; 344 height: auto; 345 object-fit: contain; 346 display: block; 347 margin-top: 0.5rem; 348 margin-bottom: 0.5rem; 349 align-self: flex-start; 350} 351 352.string-type-tag { 353 font-size: 0.7rem; 354 color: var(--color-subtle); 355 text-transform: uppercase; 356 letter-spacing: 0.05em; 357} 358 359.string-did, 360.string-handle, 361.string-at-identifier { 362 color: var(--color-primary); 363} 364 365.string-at-uri, 366.string-uri { 367 color: var(--color-secondary); 368} 369 370.string-cid, 371.string-tid { 372 color: var(--color-tertiary); 373 font-family: var(--font-mono); 374} 375 376.string-nsid { 377 color: var(--color-emphasis); 378} 379 380.string-datetime { 381 color: var(--color-text); 382 font-style: italic; 383} 384 385/* NSID highlighting */ 386.nsid-dot { 387 color: var(--color-subtle); 388 opacity: 0.6; 389} 390 391.nsid-segment-0 { 392 color: var(--color-primary); 393} 394 395.nsid-segment-1 { 396 color: var(--color-secondary); 397} 398 399.nsid-segment-2 { 400 color: var(--color-tertiary); 401} 402 403/* DID highlighting */ 404.did-scheme { 405 color: var(--color-subtle); 406 opacity: 0.7; 407} 408 409.did-method { 410 color: var(--color-secondary); 411 font-weight: 500; 412} 413 414.did-separator { 415 color: var(--color-muted); 416 opacity: 0.6; 417} 418 419.did-identifier { 420 color: var(--color-primary); 421} 422 423/* Handle highlighting */ 424.handle-dot { 425 color: var(--color-subtle); 426 opacity: 0.6; 427} 428 429.handle-segment-0 { 430 color: var(--color-primary); 431 font-weight: 500; 432} 433 434.handle-segment-1 { 435 color: var(--color-secondary); 436} 437 438/* AT URI highlighting */ 439.aturi-scheme { 440 color: var(--color-subtle); 441 opacity: 0.7; 442} 443 444.aturi-authority { 445 color: var(--color-primary); 446} 447 448.aturi-slash { 449 color: var(--color-subtle); 450 opacity: 0.6; 451} 452 453.aturi-collection { 454 color: var(--color-secondary); 455} 456 457.aturi-rkey { 458 color: var(--color-tertiary); 459} 460 461/* URI highlighting */ 462.uri-scheme { 463 color: var(--color-subtle); 464 opacity: 0.7; 465 font-weight: 500; 466} 467 468.uri-separator { 469 color: var(--color-subtle); 470 opacity: 0.6; 471} 472 473.uri-authority { 474 color: var(--color-primary); 475} 476 477.uri-path { 478 color: var(--color-secondary); 479} 480 481/* JSON Editor */ 482.json-editor { 483 display: flex; 484 gap: 1.5rem; 485} 486 487.json-textarea { 488 flex: 1; 489 font-family: var(--font-mono); 490 font-size: 0.9rem; 491 padding: 1rem; 492 margin-top: 1.5rem; 493 background: var(--color-surface, rgba(0, 0, 0, 0.2)); 494 border: 1px solid var(--color-border); 495 color: var(--color-text); 496 resize: vertical; 497 line-height: 1.5; 498} 499 500.json-textarea:focus { 501 outline: none; 502 border-color: var(--color-primary); 503} 504 505.validation-panel { 506 flex: 0 0 300px; 507 max-width: 400px; 508 font-family: var(--font-mono); 509 font-size: 0.85rem; 510 padding: 1rem; 511 background: var(--color-surface, rgba(0, 0, 0, 0.2)); 512 border: 1px solid var(--color-border); 513 overflow-y: auto; 514 overflow-x: hidden; 515 margin-top: 1.5rem; 516 align-self: flex-start; 517} 518 519.parse-error, 520.validation-errors { 521 color: var(--color-error); 522 margin-top: 0.5rem; 523} 524 525.parse-success, 526.validation-success { 527 color: var(--color-success); 528} 529 530.validation-errors h4 { 531 font-size: 0.9rem; 532 font-weight: 600; 533 margin-bottom: 0.5rem; 534 color: var(--color-text); 535} 536 537.validation-errors .error { 538 padding: 0.25rem 0; 539 border-inline-start: 2px solid var(--color-error); 540 padding-inline-start: 0.5rem; 541 margin: 0.25rem 0; 542 word-wrap: break-word; 543 word-break: break-word; 544 overflow-wrap: break-word; 545} 546 547.validation-warning { 548 color: var(--color-warning, #ffaa00); 549} 550 551/* Array Section Styling */ 552.record-section-header { 553 display: flex; 554 align-items: baseline; 555 gap: 0.5rem; 556} 557 558.array-item .record-section-header { 559} 560.array-item .section-content .record-field { 561} 562 563.array-item .record-field { 564} 565 566.array-length { 567 font-family: var(--font-mono); 568 font-size: 0.8rem; 569 color: var(--color-subtle); 570 font-weight: normal; 571} 572 573.array-item { 574 width: 100%; 575 display: flex; 576 flex-direction: column; 577 margin-inline-start: 1.48rem; 578} 579 580/* Pretty Editor Input Fields */ 581.record-field input[type="text"], 582.record-field input[type="number"] { 583 font-family: var(--font-mono); 584 font-size: 0.9rem; 585 color: var(--color-text); 586 background: transparent; 587 border: none; 588 border-bottom: 1px solid transparent; 589 padding: 0.2rem 0 0.1rem 0; 590 margin-top: 0.1rem; 591 outline: none; 592 min-width: 10ch; 593 max-width: 100%; 594 width: auto; 595 flex: 1 1 auto; 596 transition: border-color 0.2s; 597} 598 599/* Hide number input spinner arrows */ 600.record-field input[type="number"] { 601 -moz-appearance: textfield; 602} 603 604.record-field input[type="number"]::-webkit-outer-spin-button, 605.record-field input[type="number"]::-webkit-inner-spin-button { 606 -webkit-appearance: none; 607 margin: 0; 608} 609 610.record-field textarea { 611 font-family: var(--font-mono); 612 font-size: 0.9rem; 613 color: var(--color-text); 614 background: transparent; 615 border: none; 616 border-bottom: 1px solid transparent; 617 padding: 0.2rem 0 0.1rem 0; 618 margin-top: 0.1rem; 619 outline: none; 620 width: 100%; 621 min-height: 1.5em; 622 transition: border-color 0.2s; 623 overflow-y: hidden; 624} 625 626/* Style textarea resize handle - webkit (Chrome/Safari) */ 627.record-field textarea::-webkit-resizer { 628 background: transparent; 629 border: 2px solid var(--color-border); 630 border-inline-start: none; 631 border-bottom: none; 632 border-top: none; 633} 634 635/* Style textarea resize handle - Firefox */ 636.record-field textarea { 637 scrollbar-color: var(--color-border) transparent; 638 scrollbar-width: thin; 639} 640 641.record-field input[type="text"]:focus, 642.record-field input[type="number"]:focus, 643.record-field textarea:focus { 644 border-bottom-color: var(--color-primary); 645} 646 647.record-field input[type="text"].invalid, 648.record-field input[type="number"].invalid, 649.record-field textarea.invalid { 650 border-bottom-color: var(--color-error, #ff6b6b); 651} 652 653.boolean-toggle { 654 font-family: var(--font-mono); 655 font-size: 0.9rem; 656 color: var(--color-text); 657 background: var(--color-surface); 658 border: 1px solid var(--color-border); 659 padding: 0.25rem 0.25rem; 660 margin-inline-end: 0.5rem; 661 margin-bottom: 0.2rem; 662 cursor: pointer; 663 transition: 664 background-color 0.2s, 665 border-color 0.2s; 666} 667 668.boolean-toggle-false { 669 color: var(--color-error); 670 border: 1px solid var(--color-error); 671} 672 673.boolean-toggle-true { 674 border: 1px solid var(--color-success); 675} 676 677.boolean-toggle:hover { 678 border: 1px solid var(--color-primary); 679 background-color: var(--color-primary); 680 color: var(--color-surface); 681} 682 683.field-error { 684 font-family: var(--font-mono); 685 font-size: 0.75rem; 686 color: var(--color-error, #ff6b6b); 687 padding-top: 0.2rem; 688 padding-bottom: 0.3rem; 689} 690 691.add-field-widget { 692 display: flex; 693 gap: 0.5rem; 694 align-items: center; 695 padding: 0.75rem 0 0rem 0rem; 696 margin-bottom: 1rem; 697 margin-inline-start: 1.5rem; 698 border-inline-start: 1px solid var(--color-border); 699} 700 701.add-field-widget input[type="text"] { 702 font-family: var(--font-mono); 703 font-size: 0.85rem; 704 color: var(--color-text); 705 background: var(--color-background-alt, rgba(0, 0, 0, 0.2)); 706 border: 1px solid var(--color-border); 707 padding: 0.3rem 0.5rem; 708 margin-inline-start: -1px; 709 outline: none; 710} 711 712.add-field-widget input[type="text"]:focus { 713 border-color: var(--color-primary); 714} 715 716.add-field-widget button { 717 font-family: var(--font-mono); 718 font-size: 0.75rem; 719 text-transform: uppercase; 720 letter-spacing: 0.05em; 721 padding: 0.3rem 0.75rem; 722 margin-inline-start: -1px; 723 background: transparent; 724 border: 1px solid var(--color-border); 725 color: var(--color-primary); 726 cursor: pointer; 727 transition: all 0.2s; 728} 729 730.add-field-form button { 731 font-family: var(--font-mono); 732 font-size: 0.75rem; 733 text-transform: uppercase; 734 letter-spacing: 0.05em; 735 padding: 0.36rem 0.75rem; 736 margin-inline-start: -1px; 737 background: transparent; 738 border: 1px solid var(--color-primary); 739 color: var(--color-primary); 740 cursor: pointer; 741 transition: all 0.2s; 742} 743 744.add-field-form button:hover { 745 background-color: var(--color-primary); 746 color: var(--color-surface); 747} 748 749.add-field-widget button:hover { 750 border: 1px solid var(--color-primary); 751 background-color: var(--color-primary); 752 color: var(--color-surface); 753} 754 755.add-field-widget button:disabled { 756 opacity: 0.4; 757 cursor: not-allowed; 758} 759 760.field-header { 761 display: flex; 762 align-items: baseline; 763 gap: 0.5rem; 764} 765 766/* Bytes fields need wider inputs */ 767.bytes-field input, 768.bytes-field textarea { 769 min-width: 80ch; 770} 771 772/* Blob upload section */ 773.blob-upload-section { 774 margin-top: 0.5rem; 775 display: flex; 776 align-items: center; 777 gap: 0.5rem; 778 flex-wrap: wrap; 779 width: 100%; 780 z-index: 2; 781} 782 783.blob-upload-section input[type="file"] { 784 font-family: var(--font-mono); 785 font-size: 0.85rem; 786 color: var(--color-text); 787 flex: 1 1 auto; 788 min-width: 0; 789 max-width: 100%; 790 overflow: visible; 791 text-overflow: clip; 792 white-space: normal; 793} 794 795.blob-upload-section input[type="file"]::file-selector-button { 796 font-family: var(--font-mono); 797 font-size: 0.85rem; 798 color: var(--color-text); 799 background: var(--color-surface); 800 border: 1px dashed var(--color-border); 801 padding: 0.25rem 0.5rem; 802 margin-inline-end: 0.5rem; 803 margin-bottom: -0.2rem; 804 cursor: pointer; 805 transition: 806 background-color 0.2s, 807 border-color 0.2s; 808} 809 810.blob-upload-section input[type="file"]::file-selector-button:hover { 811 border: 1px solid var(--color-primary); 812 background-color: var(--color-primary); 813 color: var(--color-surface); 814} 815 816.blob-upload-section input[type="file"]:disabled::file-selector-button { 817 opacity: 0.5; 818 cursor: not-allowed; 819} 820 821.upload-status { 822 font-size: 0.85rem; 823 color: var(--color-subtle); 824 font-style: italic; 825} 826 827.field-remove-button { 828 font-family: var(--font-mono); 829 font-size: 0.7rem; 830 color: var(--color-error); 831 background: transparent; 832 border: none; 833 padding: 0.2rem 0.4rem; 834 cursor: pointer; 835 transition: color 0.2s; 836} 837 838.field-remove-button:hover { 839 color: var(--color-warning, #ff6b6b); 840} 841 842/* Blob Field Styling */ 843.blob-field { 844 /* Inherits from .record-field */ 845} 846 847.blob-fields { 848 display: flex; 849 flex-direction: column; 850 gap: 0.5rem; 851 padding-top: 0.5rem; 852 width: 100%; 853} 854 855.blob-field-row { 856 display: flex; 857 align-items: baseline; 858 gap: 0.5rem; 859 width: 100%; 860} 861 862.blob-field-row label { 863 font-family: var(--font-mono); 864 font-size: 0.75rem; 865 color: var(--color-subtle); 866 min-width: 4rem; 867 text-transform: uppercase; 868 letter-spacing: 0.05em; 869 flex-shrink: 0; 870} 871 872.blob-field-cid { 873 flex-wrap: wrap; 874} 875 876.blob-field-cid input { 877 flex: 1 1 auto; 878 width: 100% !important; 879 min-width: unset !important; 880 max-width: unset !important; 881 font-size: 0.75rem; 882} 883 884.blob-field-row .readonly { 885 font-family: var(--font-mono); 886 font-size: 0.85rem; 887 color: var(--color-text); 888 opacity: 0.7; 889} 890 891.blob-upload-note { 892 font-size: 0.75rem; 893 font-style: italic; 894 padding-top: 0.25rem; 895} 896 897/* Dialog Actions for Delete Confirmation */ 898.dialog-actions { 899 display: flex; 900 flex-direction: row; 901 justify-content: flex-end; 902 gap: 0; 903 margin-top: 8px; 904} 905 906.dialog-actions button { 907 font-family: var(--font-mono); 908 font-size: 0.75rem; 909 text-transform: uppercase; 910 letter-spacing: 0.05em; 911 padding: 0.5rem 1rem; 912 background: transparent; 913 border: none; 914 border-bottom: 2px solid transparent; 915 color: var(--color-subtle); 916 cursor: pointer; 917 transition: all 0.2s; 918} 919 920.dialog-actions button:hover { 921 color: var(--color-primary); 922 border-bottom-color: var(--color-primary); 923} 924 925.dialog-actions button:first-child { 926 color: var(--color-error, #ff6b6b); 927} 928 929.dialog-actions button:first-child:hover { 930 color: var(--color-error, #ff5252); 931 border-bottom-color: var(--color-error, #ff6b6b); 932} 933 934.accordion-content { 935 grid-template-rows: 1fr; 936 padding-inline-start: 46px; 937} 938 939.accordion-content .section-content { 940 margin-inline-start: -1px; 941} 942 943.accordion-content .record-field { 944 margin-inline-start: 0px; 945} 946 947.accordion-content .array-item { 948 margin-inline-start: 0px; 949} 950 951.accordion-content .array-item .section-content { 952 border-collapse: collapse; 953} 954 955.accordion-content .array-item .record-section { 956 margin-inline-start: 1.5rem; 957} 958 959.accordion-content .array-item .record-section .record-field { 960 margin-inline-start: -1px; 961} 962 963.accordion-content .array-item .record-section .accordion-trigger .section-label { 964 margin-inline-start: -2px; 965} 966 967.accordion-trigger { 968 background-color: var(--color-base) !important; 969} 970 971.accordion { 972 margin-inline-start: -46px; 973}