@protolabsai/ui 0.3.0 → 0.5.0

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.
package/src/styles.css CHANGED
@@ -464,3 +464,787 @@ a.pl-row:hover {
464
464
  .pl-link:hover {
465
465
  text-decoration-color: var(--pl-color-fg);
466
466
  }
467
+
468
+ /* ── Tabs ──────────────────────────────────────────────────────────────────── */
469
+ .pl-tabs {
470
+ display: flex;
471
+ gap: 2px;
472
+ border-bottom: var(--pl-border-width) solid var(--pl-color-border);
473
+ }
474
+ .pl-tab {
475
+ display: inline-flex;
476
+ align-items: center;
477
+ gap: 6px;
478
+ background: none;
479
+ border: none;
480
+ border-bottom: 2px solid transparent;
481
+ color: var(--pl-color-fg-muted);
482
+ font: inherit;
483
+ font-family: var(--pl-font-sans);
484
+ padding: 8px 14px;
485
+ cursor: pointer;
486
+ border-radius: var(--pl-radius) var(--pl-radius) 0 0;
487
+ }
488
+ .pl-tab__icon {
489
+ display: inline-flex;
490
+ align-items: center;
491
+ }
492
+ .pl-tab__icon svg {
493
+ width: 15px;
494
+ height: 15px;
495
+ }
496
+ .pl-tab__badge {
497
+ display: inline-flex;
498
+ align-items: center;
499
+ justify-content: center;
500
+ min-width: 16px;
501
+ height: 16px;
502
+ padding: 0 5px;
503
+ font-family: var(--pl-font-mono);
504
+ font-size: 10px;
505
+ line-height: 1;
506
+ color: var(--pl-color-fg-muted);
507
+ background: var(--pl-color-bg-subtle);
508
+ border: var(--pl-border-width) solid var(--pl-color-border);
509
+ border-radius: 999px;
510
+ }
511
+ .pl-tab--active .pl-tab__badge {
512
+ color: var(--pl-color-fg);
513
+ }
514
+ .pl-tab:hover:not(:disabled) {
515
+ color: var(--pl-color-fg);
516
+ }
517
+ .pl-tab--active {
518
+ color: var(--pl-color-fg);
519
+ border-bottom-color: var(--pl-color-fg);
520
+ }
521
+ .pl-tab:disabled {
522
+ opacity: 0.35;
523
+ cursor: not-allowed;
524
+ }
525
+ .pl-tab__lock {
526
+ margin-left: 5px;
527
+ opacity: 0.6;
528
+ }
529
+
530
+ /* ── Board (kanban) ────────────────────────────────────────────────────────── */
531
+ .pl-board {
532
+ display: flex;
533
+ gap: 12px;
534
+ overflow-x: auto;
535
+ align-items: flex-start;
536
+ }
537
+ .pl-board-col {
538
+ flex: 1 0 200px;
539
+ min-width: 200px;
540
+ background: var(--pl-color-bg-raised);
541
+ border: var(--pl-border-width) solid var(--pl-color-border);
542
+ border-radius: var(--pl-radius);
543
+ display: flex;
544
+ flex-direction: column;
545
+ }
546
+ .pl-board-col__head {
547
+ display: flex;
548
+ align-items: center;
549
+ justify-content: space-between;
550
+ padding: 10px 12px;
551
+ font-size: 12px;
552
+ font-weight: 600;
553
+ border-bottom: var(--pl-border-width) solid var(--pl-color-border);
554
+ }
555
+ .pl-board-col__count {
556
+ color: var(--pl-color-fg-muted);
557
+ font-family: var(--pl-font-mono);
558
+ }
559
+ .pl-board-col__body {
560
+ padding: 8px;
561
+ display: flex;
562
+ flex-direction: column;
563
+ gap: 8px;
564
+ min-height: 40px;
565
+ }
566
+ .pl-board-card {
567
+ text-align: left;
568
+ background: var(--pl-color-bg);
569
+ border: var(--pl-border-width) solid var(--pl-color-border);
570
+ border-radius: var(--pl-radius);
571
+ color: var(--pl-color-fg);
572
+ padding: 10px 12px;
573
+ cursor: pointer;
574
+ display: flex;
575
+ flex-direction: column;
576
+ gap: 6px;
577
+ font: inherit;
578
+ }
579
+ .pl-board-card:hover {
580
+ border-color: var(--pl-color-fg);
581
+ }
582
+
583
+ /* ── Field ─────────────────────────────────────────────────────────────────── */
584
+ .pl-field {
585
+ display: block;
586
+ }
587
+ .pl-field__label {
588
+ display: block;
589
+ font-size: 11px;
590
+ text-transform: uppercase;
591
+ letter-spacing: 0.05em;
592
+ color: var(--pl-color-fg-muted);
593
+ margin-bottom: 6px;
594
+ }
595
+ .pl-field__input {
596
+ width: 100%;
597
+ background: var(--pl-color-bg-raised);
598
+ border: var(--pl-border-width) solid var(--pl-color-border);
599
+ color: var(--pl-color-fg);
600
+ border-radius: var(--pl-radius);
601
+ padding: 9px 11px;
602
+ font: inherit;
603
+ font-family: var(--pl-font-sans);
604
+ resize: vertical;
605
+ }
606
+ .pl-field__input:focus {
607
+ outline: none;
608
+ border-color: var(--pl-color-fg);
609
+ }
610
+
611
+ /* ── PanelHeader (console panel header) ──────────────────────────────────────── */
612
+ .pl-panel-header {
613
+ display: flex;
614
+ align-items: center;
615
+ justify-content: space-between;
616
+ gap: var(--pl-space-3);
617
+ padding: var(--pl-space-3) var(--pl-space-4);
618
+ border-bottom: var(--pl-border-width) solid var(--pl-color-border);
619
+ }
620
+ .pl-panel-header__kicker {
621
+ font-family: var(--pl-font-mono);
622
+ font-size: 11px;
623
+ text-transform: uppercase;
624
+ letter-spacing: 0.06em;
625
+ color: var(--pl-color-fg-muted);
626
+ margin-bottom: 2px;
627
+ }
628
+ .pl-panel-header__title {
629
+ margin: 0;
630
+ font-size: 15px;
631
+ font-weight: var(--pl-font-weight-medium);
632
+ line-height: 1.2;
633
+ color: var(--pl-color-fg);
634
+ }
635
+ .pl-panel-header__actions {
636
+ display: flex;
637
+ align-items: center;
638
+ gap: var(--pl-space-2);
639
+ flex-shrink: 0;
640
+ }
641
+ .pl-panel-header--compact {
642
+ padding: var(--pl-space-2) var(--pl-space-3);
643
+ }
644
+ .pl-panel-header--compact .pl-panel-header__title {
645
+ font-size: 13px;
646
+ }
647
+
648
+ /* ── Overlay scrim (Dialog + Drawer) ─────────────────────────────────────────── */
649
+ .pl-overlay {
650
+ position: fixed;
651
+ inset: 0;
652
+ z-index: 1000;
653
+ display: flex;
654
+ align-items: center;
655
+ justify-content: center;
656
+ padding: var(--pl-space-4);
657
+ background: var(--pl-color-overlay);
658
+ }
659
+ .pl-overlay--drawer {
660
+ padding: 0;
661
+ }
662
+
663
+ /* ── Dialog / Modal ──────────────────────────────────────────────────────────── */
664
+ .pl-dialog {
665
+ display: flex;
666
+ flex-direction: column;
667
+ width: 480px;
668
+ max-width: 100%;
669
+ max-height: calc(100vh - 2 * var(--pl-space-4));
670
+ background: var(--pl-color-bg-raised);
671
+ border: var(--pl-border-width) solid var(--pl-color-border-strong);
672
+ border-radius: var(--pl-radius);
673
+ box-shadow: var(--pl-shadow-popover);
674
+ }
675
+ .pl-dialog:focus {
676
+ outline: none;
677
+ }
678
+ .pl-dialog__head {
679
+ display: flex;
680
+ align-items: center;
681
+ justify-content: space-between;
682
+ gap: var(--pl-space-3);
683
+ padding: var(--pl-space-3) var(--pl-space-4);
684
+ border-bottom: var(--pl-border-width) solid var(--pl-color-border);
685
+ }
686
+ .pl-dialog__title {
687
+ font-size: 14px;
688
+ font-weight: var(--pl-font-weight-medium);
689
+ color: var(--pl-color-fg);
690
+ }
691
+ .pl-dialog__close {
692
+ display: inline-flex;
693
+ align-items: center;
694
+ justify-content: center;
695
+ width: 24px;
696
+ height: 24px;
697
+ font-size: 18px;
698
+ line-height: 1;
699
+ color: var(--pl-color-fg-muted);
700
+ background: transparent;
701
+ border: none;
702
+ border-radius: var(--pl-radius);
703
+ cursor: pointer;
704
+ transition:
705
+ color var(--pl-motion-fast) var(--pl-motion-ease),
706
+ background var(--pl-motion-fast) var(--pl-motion-ease);
707
+ }
708
+ .pl-dialog__close:hover {
709
+ color: var(--pl-color-fg);
710
+ background: var(--pl-color-bg-hover);
711
+ }
712
+ .pl-dialog__body {
713
+ padding: var(--pl-space-4);
714
+ overflow-y: auto;
715
+ font-size: 14px;
716
+ line-height: 1.6;
717
+ color: var(--pl-color-fg-muted);
718
+ }
719
+ .pl-dialog__foot {
720
+ display: flex;
721
+ justify-content: flex-end;
722
+ gap: var(--pl-space-2);
723
+ padding: var(--pl-space-3) var(--pl-space-4);
724
+ border-top: var(--pl-border-width) solid var(--pl-color-border);
725
+ }
726
+
727
+ /* Destructive confirm — error-toned border, fills error on hover. */
728
+ .pl-btn--danger {
729
+ border-color: color-mix(in oklch, var(--pl-color-status-error) 60%, transparent);
730
+ color: var(--pl-color-status-error);
731
+ }
732
+ .pl-btn--danger:hover {
733
+ background: var(--pl-color-status-error);
734
+ border-color: var(--pl-color-status-error);
735
+ color: var(--pl-color-bg);
736
+ }
737
+
738
+ /* ── Drawer (slide-in sheet) ─────────────────────────────────────────────────── */
739
+ .pl-drawer {
740
+ display: flex;
741
+ flex-direction: column;
742
+ width: 420px;
743
+ max-width: 100%;
744
+ height: 100%;
745
+ background: var(--pl-color-bg-raised);
746
+ box-shadow: var(--pl-shadow-popover);
747
+ animation: pl-drawer-in var(--pl-motion-base) var(--pl-motion-ease);
748
+ }
749
+ .pl-drawer:focus {
750
+ outline: none;
751
+ }
752
+ .pl-drawer--right {
753
+ margin-left: auto;
754
+ border-left: var(--pl-border-width) solid var(--pl-color-border-strong);
755
+ }
756
+ .pl-drawer--left {
757
+ margin-right: auto;
758
+ border-right: var(--pl-border-width) solid var(--pl-color-border-strong);
759
+ animation-name: pl-drawer-in-left;
760
+ }
761
+ .pl-overlay--drawer:has(.pl-drawer--left) {
762
+ justify-content: flex-start;
763
+ }
764
+ @keyframes pl-drawer-in {
765
+ from {
766
+ transform: translateX(100%);
767
+ }
768
+ }
769
+ @keyframes pl-drawer-in-left {
770
+ from {
771
+ transform: translateX(-100%);
772
+ }
773
+ }
774
+ .pl-drawer__head {
775
+ display: flex;
776
+ align-items: center;
777
+ justify-content: space-between;
778
+ gap: var(--pl-space-3);
779
+ padding: var(--pl-space-3) var(--pl-space-4);
780
+ border-bottom: var(--pl-border-width) solid var(--pl-color-border);
781
+ }
782
+ .pl-drawer__title {
783
+ font-size: 14px;
784
+ font-weight: var(--pl-font-weight-medium);
785
+ color: var(--pl-color-fg);
786
+ }
787
+ .pl-drawer__body {
788
+ flex: 1;
789
+ padding: var(--pl-space-4);
790
+ overflow-y: auto;
791
+ font-size: 14px;
792
+ line-height: 1.6;
793
+ color: var(--pl-color-fg-muted);
794
+ }
795
+ .pl-drawer__foot {
796
+ display: flex;
797
+ justify-content: flex-end;
798
+ gap: var(--pl-space-2);
799
+ padding: var(--pl-space-3) var(--pl-space-4);
800
+ border-top: var(--pl-border-width) solid var(--pl-color-border);
801
+ }
802
+
803
+ /* ── Toast ───────────────────────────────────────────────────────────────────── */
804
+ .pl-toast-stack {
805
+ position: fixed;
806
+ bottom: var(--pl-space-4);
807
+ right: var(--pl-space-4);
808
+ z-index: 1100;
809
+ display: flex;
810
+ flex-direction: column;
811
+ gap: var(--pl-space-2);
812
+ max-width: min(360px, calc(100vw - 2 * var(--pl-space-4)));
813
+ }
814
+ .pl-toast {
815
+ display: flex;
816
+ align-items: flex-start;
817
+ gap: var(--pl-space-3);
818
+ padding: var(--pl-space-3);
819
+ background: var(--pl-color-bg-raised);
820
+ border: var(--pl-border-width) solid var(--pl-color-border);
821
+ border-left-width: 2px;
822
+ border-radius: var(--pl-radius);
823
+ box-shadow: var(--pl-shadow-popover);
824
+ animation: pl-toast-in var(--pl-motion-base) var(--pl-motion-ease);
825
+ }
826
+ @keyframes pl-toast-in {
827
+ from {
828
+ opacity: 0;
829
+ transform: translateY(6px);
830
+ }
831
+ }
832
+ .pl-toast--success {
833
+ border-left-color: var(--pl-color-status-success);
834
+ }
835
+ .pl-toast--warning {
836
+ border-left-color: var(--pl-color-status-warning);
837
+ }
838
+ .pl-toast--error {
839
+ border-left-color: var(--pl-color-status-error);
840
+ }
841
+ .pl-toast--info {
842
+ border-left-color: var(--pl-color-status-info);
843
+ }
844
+ .pl-toast__body {
845
+ flex: 1;
846
+ min-width: 0;
847
+ }
848
+ .pl-toast__title {
849
+ font-family: var(--pl-font-mono);
850
+ font-size: 12px;
851
+ color: var(--pl-color-fg);
852
+ margin-bottom: 0.2rem;
853
+ }
854
+ .pl-toast__msg {
855
+ font-size: 13px;
856
+ line-height: 1.5;
857
+ color: var(--pl-color-fg-muted);
858
+ }
859
+ .pl-toast__close {
860
+ flex-shrink: 0;
861
+ font-size: 16px;
862
+ line-height: 1;
863
+ color: var(--pl-color-fg-muted);
864
+ background: transparent;
865
+ border: none;
866
+ cursor: pointer;
867
+ }
868
+ .pl-toast__close:hover {
869
+ color: var(--pl-color-fg);
870
+ }
871
+
872
+ /* ── Tooltip (CSS-only) ──────────────────────────────────────────────────────── */
873
+ .pl-tip-wrap {
874
+ position: relative;
875
+ display: inline-flex;
876
+ }
877
+ .pl-tip {
878
+ position: absolute;
879
+ z-index: 1200;
880
+ pointer-events: none;
881
+ white-space: nowrap;
882
+ padding: 0.25rem 0.5rem;
883
+ font-family: var(--pl-font-mono);
884
+ font-size: 11px;
885
+ color: var(--pl-color-fg);
886
+ background: var(--pl-color-bg-raised);
887
+ border: var(--pl-border-width) solid var(--pl-color-border-strong);
888
+ border-radius: var(--pl-radius);
889
+ box-shadow: var(--pl-shadow-popover);
890
+ opacity: 0;
891
+ transition: opacity var(--pl-motion-fast) var(--pl-motion-ease);
892
+ }
893
+ .pl-tip-wrap:hover .pl-tip,
894
+ .pl-tip-wrap:focus-within .pl-tip {
895
+ opacity: 1;
896
+ }
897
+ .pl-tip--top {
898
+ bottom: calc(100% + 6px);
899
+ left: 50%;
900
+ transform: translateX(-50%);
901
+ }
902
+ .pl-tip--bottom {
903
+ top: calc(100% + 6px);
904
+ left: 50%;
905
+ transform: translateX(-50%);
906
+ }
907
+ .pl-tip--left {
908
+ right: calc(100% + 6px);
909
+ top: 50%;
910
+ transform: translateY(-50%);
911
+ }
912
+ .pl-tip--right {
913
+ left: calc(100% + 6px);
914
+ top: 50%;
915
+ transform: translateY(-50%);
916
+ }
917
+
918
+ /* ── Table (dense data) ──────────────────────────────────────────────────────── */
919
+ .pl-table {
920
+ width: 100%;
921
+ border-collapse: collapse;
922
+ font-size: 13px;
923
+ }
924
+ .pl-table th {
925
+ text-align: left;
926
+ font-family: var(--pl-font-mono);
927
+ font-size: 11px;
928
+ font-weight: var(--pl-font-weight-medium);
929
+ text-transform: uppercase;
930
+ letter-spacing: 0.04em;
931
+ color: var(--pl-color-fg-muted);
932
+ padding: var(--pl-space-2) var(--pl-space-3);
933
+ border-bottom: var(--pl-border-width) solid var(--pl-color-border);
934
+ }
935
+ .pl-table td {
936
+ padding: var(--pl-space-2) var(--pl-space-3);
937
+ color: var(--pl-color-fg);
938
+ border-bottom: var(--pl-border-width) solid var(--pl-color-border);
939
+ }
940
+ .pl-table tbody tr.pl-tr--interactive {
941
+ cursor: pointer;
942
+ transition: background var(--pl-motion-fast) var(--pl-motion-ease);
943
+ }
944
+ .pl-table tbody tr.pl-tr--interactive:hover {
945
+ background: var(--pl-color-bg-hover);
946
+ }
947
+ .pl-table tbody tr.pl-tr--selected {
948
+ background: var(--pl-color-bg-subtle);
949
+ }
950
+
951
+ /* ── Status dot ──────────────────────────────────────────────────────────────── */
952
+ .pl-dot {
953
+ display: inline-block;
954
+ width: 8px;
955
+ height: 8px;
956
+ border-radius: 50%;
957
+ background: var(--pl-color-fg-muted);
958
+ }
959
+ .pl-dot--success {
960
+ background: var(--pl-color-status-success);
961
+ }
962
+ .pl-dot--warning {
963
+ background: var(--pl-color-status-warning);
964
+ }
965
+ .pl-dot--error {
966
+ background: var(--pl-color-status-error);
967
+ }
968
+ .pl-dot--info {
969
+ background: var(--pl-color-status-info);
970
+ }
971
+ .pl-dot--pulse {
972
+ animation: pl-dot-pulse var(--pl-motion-status) var(--pl-motion-ease-in-out) infinite;
973
+ }
974
+ @keyframes pl-dot-pulse {
975
+ 0%,
976
+ 100% {
977
+ opacity: 1;
978
+ }
979
+ 50% {
980
+ opacity: 0.35;
981
+ }
982
+ }
983
+ .pl-dot-row {
984
+ display: inline-flex;
985
+ align-items: center;
986
+ gap: 0.4rem;
987
+ }
988
+ .pl-dot-row__label {
989
+ font-size: 12px;
990
+ color: var(--pl-color-fg-muted);
991
+ }
992
+
993
+ /* ── Spinner ─────────────────────────────────────────────────────────────────── */
994
+ .pl-spinner {
995
+ display: inline-block;
996
+ border: 2px solid var(--pl-color-border-strong);
997
+ border-top-color: var(--pl-color-fg);
998
+ border-radius: 50%;
999
+ animation: pl-spin var(--pl-motion-loading) var(--pl-motion-linear) infinite;
1000
+ }
1001
+ @keyframes pl-spin {
1002
+ to {
1003
+ transform: rotate(360deg);
1004
+ }
1005
+ }
1006
+
1007
+ /* ── ScrollArea (thin brand scrollbars) ──────────────────────────────────────── */
1008
+ .pl-scroll {
1009
+ overflow: auto;
1010
+ scrollbar-width: thin;
1011
+ scrollbar-color: var(--pl-color-border-strong) transparent;
1012
+ }
1013
+ .pl-scroll::-webkit-scrollbar {
1014
+ width: 8px;
1015
+ height: 8px;
1016
+ }
1017
+ .pl-scroll::-webkit-scrollbar-thumb {
1018
+ background: var(--pl-color-border-strong);
1019
+ border-radius: var(--pl-radius);
1020
+ }
1021
+ .pl-scroll::-webkit-scrollbar-track {
1022
+ background: transparent;
1023
+ }
1024
+
1025
+ /* ── Form controls ───────────────────────────────────────────────────────────── */
1026
+ .pl-input {
1027
+ width: 100%;
1028
+ background: var(--pl-color-bg-raised);
1029
+ border: var(--pl-border-width) solid var(--pl-color-border);
1030
+ color: var(--pl-color-fg);
1031
+ border-radius: var(--pl-radius);
1032
+ padding: 9px 11px;
1033
+ font: inherit;
1034
+ font-family: var(--pl-font-sans);
1035
+ font-size: 13px;
1036
+ }
1037
+ .pl-input::placeholder {
1038
+ color: var(--pl-color-fg-muted);
1039
+ }
1040
+ .pl-input:focus {
1041
+ outline: none;
1042
+ border-color: var(--pl-color-border-strong);
1043
+ }
1044
+ .pl-input:disabled {
1045
+ opacity: 0.5;
1046
+ cursor: not-allowed;
1047
+ }
1048
+ .pl-textarea {
1049
+ resize: vertical;
1050
+ min-height: 72px;
1051
+ line-height: 1.5;
1052
+ }
1053
+ .pl-select {
1054
+ cursor: pointer;
1055
+ }
1056
+
1057
+ /* Switch */
1058
+ .pl-switch {
1059
+ display: inline-flex;
1060
+ align-items: center;
1061
+ gap: 0.5rem;
1062
+ cursor: pointer;
1063
+ }
1064
+ .pl-switch--disabled {
1065
+ opacity: 0.5;
1066
+ cursor: not-allowed;
1067
+ }
1068
+ .pl-switch__input {
1069
+ position: absolute;
1070
+ opacity: 0;
1071
+ width: 0;
1072
+ height: 0;
1073
+ }
1074
+ .pl-switch__track {
1075
+ position: relative;
1076
+ display: inline-block;
1077
+ width: 32px;
1078
+ height: 18px;
1079
+ background: var(--pl-color-bg-subtle);
1080
+ border: var(--pl-border-width) solid var(--pl-color-border-strong);
1081
+ border-radius: 999px;
1082
+ transition: background var(--pl-motion-fast) var(--pl-motion-ease);
1083
+ }
1084
+ .pl-switch__thumb {
1085
+ position: absolute;
1086
+ top: 2px;
1087
+ left: 2px;
1088
+ width: 12px;
1089
+ height: 12px;
1090
+ background: var(--pl-color-fg-muted);
1091
+ border-radius: 50%;
1092
+ transition:
1093
+ transform var(--pl-motion-fast) var(--pl-motion-ease),
1094
+ background var(--pl-motion-fast) var(--pl-motion-ease);
1095
+ }
1096
+ .pl-switch__input:checked + .pl-switch__track {
1097
+ background: var(--pl-color-fg);
1098
+ border-color: var(--pl-color-fg);
1099
+ }
1100
+ .pl-switch__input:checked + .pl-switch__track .pl-switch__thumb {
1101
+ transform: translateX(14px);
1102
+ background: var(--pl-color-bg);
1103
+ }
1104
+ .pl-switch__input:focus-visible + .pl-switch__track {
1105
+ outline: 2px solid var(--pl-color-border-strong);
1106
+ outline-offset: 2px;
1107
+ }
1108
+ .pl-switch__label {
1109
+ font-size: 13px;
1110
+ color: var(--pl-color-fg);
1111
+ }
1112
+
1113
+ /* Checkbox */
1114
+ .pl-checkbox {
1115
+ display: inline-flex;
1116
+ align-items: center;
1117
+ gap: 0.5rem;
1118
+ cursor: pointer;
1119
+ }
1120
+ .pl-checkbox--disabled {
1121
+ opacity: 0.5;
1122
+ cursor: not-allowed;
1123
+ }
1124
+ .pl-checkbox__input {
1125
+ position: absolute;
1126
+ opacity: 0;
1127
+ width: 0;
1128
+ height: 0;
1129
+ }
1130
+ .pl-checkbox__box {
1131
+ position: relative;
1132
+ display: inline-block;
1133
+ width: 16px;
1134
+ height: 16px;
1135
+ background: var(--pl-color-bg-raised);
1136
+ border: var(--pl-border-width) solid var(--pl-color-border-strong);
1137
+ border-radius: var(--pl-radius);
1138
+ transition:
1139
+ background var(--pl-motion-fast) var(--pl-motion-ease),
1140
+ border-color var(--pl-motion-fast) var(--pl-motion-ease);
1141
+ }
1142
+ .pl-checkbox__input:checked + .pl-checkbox__box {
1143
+ background: var(--pl-color-fg);
1144
+ border-color: var(--pl-color-fg);
1145
+ }
1146
+ .pl-checkbox__input:checked + .pl-checkbox__box::after {
1147
+ content: "";
1148
+ position: absolute;
1149
+ left: 5px;
1150
+ top: 2px;
1151
+ width: 4px;
1152
+ height: 8px;
1153
+ border: solid var(--pl-color-bg);
1154
+ border-width: 0 2px 2px 0;
1155
+ transform: rotate(45deg);
1156
+ }
1157
+ .pl-checkbox__input:focus-visible + .pl-checkbox__box {
1158
+ outline: 2px solid var(--pl-color-border-strong);
1159
+ outline-offset: 2px;
1160
+ }
1161
+ .pl-checkbox__label {
1162
+ font-size: 13px;
1163
+ color: var(--pl-color-fg);
1164
+ }
1165
+
1166
+ /* ── Menu / DropdownMenu (Radix-backed) ──────────────────────────────────────── */
1167
+ .pl-menu__anchor {
1168
+ width: 0;
1169
+ height: 0;
1170
+ pointer-events: none;
1171
+ }
1172
+ .pl-menu {
1173
+ min-width: 180px;
1174
+ padding: 4px;
1175
+ background: var(--pl-color-bg-raised);
1176
+ border: var(--pl-border-width) solid var(--pl-color-border-strong);
1177
+ border-radius: var(--pl-radius);
1178
+ box-shadow: var(--pl-shadow-popover);
1179
+ z-index: 1200;
1180
+ }
1181
+ .pl-menu__item {
1182
+ display: flex;
1183
+ align-items: center;
1184
+ gap: 8px;
1185
+ padding: 6px 8px;
1186
+ font-size: 13px;
1187
+ color: var(--pl-color-fg);
1188
+ border-radius: calc(var(--pl-radius) - 1px);
1189
+ cursor: pointer;
1190
+ outline: none;
1191
+ user-select: none;
1192
+ }
1193
+ /* Radix sets data-highlighted on the keyboard/pointer-focused item. */
1194
+ .pl-menu__item[data-highlighted] {
1195
+ background: var(--pl-color-bg-hover);
1196
+ }
1197
+ .pl-menu__item[data-disabled] {
1198
+ color: var(--pl-color-fg-muted);
1199
+ opacity: 0.5;
1200
+ pointer-events: none;
1201
+ }
1202
+ .pl-menu__item--destructive {
1203
+ color: var(--pl-color-status-error);
1204
+ }
1205
+ .pl-menu__item--destructive[data-highlighted] {
1206
+ background: color-mix(in oklch, var(--pl-color-status-error) 16%, transparent);
1207
+ }
1208
+ .pl-menu__icon {
1209
+ display: inline-flex;
1210
+ align-items: center;
1211
+ color: var(--pl-color-fg-muted);
1212
+ }
1213
+ .pl-menu__icon svg {
1214
+ width: 15px;
1215
+ height: 15px;
1216
+ }
1217
+ .pl-menu__item--destructive .pl-menu__icon {
1218
+ color: var(--pl-color-status-error);
1219
+ }
1220
+ .pl-menu__label {
1221
+ flex: 1;
1222
+ }
1223
+ .pl-menu__subarrow {
1224
+ color: var(--pl-color-fg-muted);
1225
+ font-size: 14px;
1226
+ line-height: 1;
1227
+ }
1228
+ .pl-menu__sep {
1229
+ height: 1px;
1230
+ margin: 4px 0;
1231
+ background: var(--pl-color-border);
1232
+ }
1233
+ .pl-menu__group-label {
1234
+ padding: 4px 8px;
1235
+ font-family: var(--pl-font-mono);
1236
+ font-size: 10px;
1237
+ text-transform: uppercase;
1238
+ letter-spacing: 0.06em;
1239
+ color: var(--pl-color-fg-muted);
1240
+ }
1241
+
1242
+ /* Respect reduced-motion for every animation this package introduces. */
1243
+ @media (prefers-reduced-motion: reduce) {
1244
+ .pl-drawer,
1245
+ .pl-toast,
1246
+ .pl-dot--pulse,
1247
+ .pl-spinner {
1248
+ animation: none;
1249
+ }
1250
+ }