@inkbar/theme 0.3.0 → 0.4.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/theme.css +598 -11
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkbar/theme",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Default stylesheet for Inkbar. Zero specificity, so your CSS wins.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://inkbar.dev",
package/theme.css CHANGED
@@ -14,9 +14,10 @@
14
14
  /* Tokens. Popovers are portalled out of the root, so they carry the tokens too. */
15
15
  :where(
16
16
  [data-ink-root],
17
- [data-ink-note-popover],
17
+ [data-ink-thread-popover],
18
18
  [data-ink-suggestion-card],
19
- [data-ink-select-content]
19
+ [data-ink-select-content],
20
+ [data-ink-signature-dialog]
20
21
  ) {
21
22
  --ink-highlight: #f2c230;
22
23
  --ink-underline: #2b5a9e;
@@ -50,9 +51,10 @@
50
51
  @media (prefers-color-scheme: dark) {
51
52
  :where(
52
53
  [data-ink-root]:not(.light, .light *),
53
- [data-ink-note-popover]:not(.light *),
54
+ [data-ink-thread-popover]:not(.light *),
54
55
  [data-ink-suggestion-card]:not(.light *),
55
- [data-ink-select-content]:not(.light *)
56
+ [data-ink-select-content]:not(.light *),
57
+ [data-ink-signature-dialog]:not(.light *)
56
58
  ) {
57
59
  --ink-bg: var(--muted, #0f1217);
58
60
  --ink-fg: var(--foreground, #e6e9ef);
@@ -70,9 +72,10 @@
70
72
  :where(
71
73
  .dark [data-ink-root]:not(.light, .dark .light *),
72
74
  [data-ink-root].dark,
73
- .dark [data-ink-note-popover]:not(.dark .light *),
75
+ .dark [data-ink-thread-popover]:not(.dark .light *),
74
76
  .dark [data-ink-suggestion-card]:not(.dark .light *),
75
- .dark [data-ink-select-content]:not(.dark .light *)
77
+ .dark [data-ink-select-content]:not(.dark .light *),
78
+ .dark [data-ink-signature-dialog]:not(.dark .light *)
76
79
  ) {
77
80
  --ink-bg: var(--muted, #0f1217);
78
81
  --ink-fg: var(--foreground, #e6e9ef);
@@ -259,7 +262,25 @@
259
262
  background: color-mix(in srgb, var(--ink-redact) 15%, transparent);
260
263
  }
261
264
 
262
- /* Resize handles on a selected area mark, text box or shape: shown with the select tool only. */
265
+ /* The shape draft's box is only its bounds; the outline is the SVG inside it. */
266
+ :where(.ink-draft[data-ink-draft='shape']) {
267
+ border: 0;
268
+ background: none;
269
+ }
270
+
271
+ :where(.ink-draft[data-ink-draft='shape'] svg) {
272
+ display: block;
273
+ stroke: var(--ink-accent);
274
+ stroke-width: 1.5;
275
+ stroke-dasharray: 4 3;
276
+ fill: color-mix(in srgb, var(--ink-accent) 10%, transparent);
277
+ }
278
+
279
+ :where(.ink-draft[data-ink-draft='shape'] polyline) {
280
+ fill: none;
281
+ }
282
+
283
+ /* Edit handles on a selected annotation: shown with the select tools only. */
263
284
  :where(.ink-handle) {
264
285
  box-sizing: border-box;
265
286
  border: 1px solid var(--ink-accent);
@@ -267,7 +288,10 @@
267
288
  background: var(--ink-surface);
268
289
  }
269
290
 
270
- :where([data-ink-tool]:not([data-ink-tool='select']) .ink-handle) {
291
+ :where(
292
+ [data-ink-tool]:not([data-ink-tool='select'], [data-ink-tool='select-text'])
293
+ .ink-handle
294
+ ) {
271
295
  display: none;
272
296
  }
273
297
 
@@ -279,6 +303,11 @@
279
303
  cursor: nesw-resize;
280
304
  }
281
305
 
306
+ :where(.ink-handle[data-handle='start'], .ink-handle[data-handle='end']) {
307
+ border-radius: 50%;
308
+ cursor: move;
309
+ }
310
+
282
311
  /* Annotations */
283
312
  :where(.ink-overlay) {
284
313
  z-index: 1;
@@ -298,7 +327,7 @@
298
327
 
299
328
  :where(
300
329
  [data-ink-tool='select'] .ink-annotation,
301
- [data-ink-tool='view'] .ink-annotation
330
+ [data-ink-tool='select-text'] .ink-annotation
302
331
  ) {
303
332
  cursor: pointer;
304
333
  }
@@ -320,6 +349,36 @@
320
349
  outline-style: dotted;
321
350
  }
322
351
 
352
+ /* A free text inset by a fringe outlines its text box, where its corner handles sit, not
353
+ the whole rect with its callout. */
354
+ :where(.ink-annotation[data-framed]) {
355
+ outline-color: transparent;
356
+ }
357
+
358
+ :where(.ink-selection-frame) {
359
+ border-radius: 2px;
360
+ outline: 1px solid transparent;
361
+ outline-offset: 1px;
362
+ }
363
+
364
+ :where(.ink-annotation[data-framed][data-state='hover'] > .ink-selection-frame) {
365
+ outline-color: color-mix(in srgb, var(--ink-ring) 50%, transparent);
366
+ }
367
+
368
+ :where(
369
+ .ink-annotation[data-framed][data-state='selected'] > .ink-selection-frame,
370
+ .ink-annotation[data-framed]:focus-visible > .ink-selection-frame
371
+ ) {
372
+ outline: 2px solid var(--ink-ring);
373
+ }
374
+
375
+ :where(
376
+ .ink-annotation[data-framed][data-locked][data-state='selected']
377
+ > .ink-selection-frame
378
+ ) {
379
+ outline-style: dotted;
380
+ }
381
+
323
382
  :where(.ink-annotation[data-origin='suggested'] .ink-annotation-shape > *) {
324
383
  stroke-dasharray: 4 3;
325
384
  }
@@ -337,19 +396,58 @@
337
396
  pointer-events: none;
338
397
  }
339
398
 
399
+ /* Commented text markup: a comment glyph at the markup's end. */
400
+ :where(.ink-comment-marker) {
401
+ position: absolute;
402
+ display: grid;
403
+ place-items: center;
404
+ width: 14px;
405
+ height: 14px;
406
+ translate: -25% -75%;
407
+ border-radius: 4px;
408
+ background: var(--ink-surface);
409
+ color: var(--ink-accent);
410
+ box-shadow: 0 1px 2px rgb(0 0 0 / 0.3);
411
+ pointer-events: none;
412
+ }
413
+
414
+ :where(.ink-comment-marker > svg) {
415
+ width: 10px;
416
+ height: 10px;
417
+ }
418
+
340
419
  :where(.ink-free-text) {
420
+ box-sizing: border-box;
341
421
  width: 100%;
342
422
  height: 100%;
343
423
  overflow: hidden;
344
424
  font-family: var(--ink-font-family, Helvetica), Helvetica, Arial, sans-serif;
345
425
  font-size: var(--ink-font-size);
426
+ font-weight: var(--ink-font-weight, normal);
427
+ font-style: var(--ink-font-style, normal);
428
+ text-decoration: var(--ink-text-decoration, none);
346
429
  line-height: 1.2;
347
430
  color: var(--ink-text-color, var(--ink-free-text));
431
+ background: var(--ink-fill, transparent);
432
+ border-radius: var(--ink-corner-radius, 0);
348
433
  opacity: var(--ink-opacity, 1);
349
434
  overflow-wrap: break-word;
350
435
  white-space: pre-wrap;
351
436
  }
352
437
 
438
+ :where(.ink-free-text[data-border]) {
439
+ border: var(--ink-border-width, 1px) solid var(--ink-box-border, var(--ink-free-text));
440
+ }
441
+
442
+ :where(.ink-free-text[data-border='dashed']) {
443
+ border-style: dashed;
444
+ }
445
+
446
+ /* A speech bubble's outline is the path beside the text, so the text only needs room inside it. */
447
+ :where(.ink-free-text[data-bubble]) {
448
+ padding: 0.4em 0.6em;
449
+ }
450
+
353
451
  :where(.ink-free-text[data-align='left']) {
354
452
  text-align: left;
355
453
  }
@@ -362,6 +460,19 @@
362
460
  text-align: right;
363
461
  }
364
462
 
463
+ :where(.ink-free-text[data-align='justify']) {
464
+ text-align: justify;
465
+ }
466
+
467
+ /* The in-place editor grows with its text, and shows where the box is while it is empty. */
468
+ :where(.ink-free-text[data-ink-editor]) {
469
+ height: auto;
470
+ overflow: visible;
471
+ outline: 1px dashed var(--ink-free-text);
472
+ outline-offset: 1px;
473
+ cursor: text;
474
+ }
475
+
365
476
  /*
366
477
  * Toolbar. The theme styles the bar's surface and the controls in it; where a bar sits, how
367
478
  * its controls are grouped and what separates it from the document are up to the app.
@@ -572,8 +683,484 @@
572
683
  display: inline-flex;
573
684
  }
574
685
 
575
- /* Note threads and suggestion cards */
576
- :where(.ink-note-popover, .ink-suggestion-card) {
686
+ /*
687
+ * Style menus (line style and the other style controls). The panel takes the select
688
+ * panel's box through `.ink-select-content`; its items are buttons.
689
+ */
690
+ :where(.ink-menu-content) {
691
+ min-width: 11rem;
692
+ }
693
+
694
+ :where(.ink-menu-group + .ink-menu-group) {
695
+ margin-top: 0.25rem;
696
+ padding-top: 0.25rem;
697
+ border-top: 1px solid var(--ink-border);
698
+ }
699
+
700
+ :where(.ink-menu-label) {
701
+ padding: 0.25rem 0.5rem;
702
+ color: var(--ink-muted-fg);
703
+ font-size: 0.75rem;
704
+ }
705
+
706
+ :where(.ink-menu-item) {
707
+ box-sizing: border-box;
708
+ width: 100%;
709
+ border: 0;
710
+ background: none;
711
+ color: inherit;
712
+ font: inherit;
713
+ text-align: left;
714
+ }
715
+
716
+ :where(.ink-menu-item:hover:not(:disabled), .ink-menu-item:focus-visible) {
717
+ background: color-mix(in srgb, var(--ink-fg) 8%, transparent);
718
+ }
719
+
720
+ :where(.ink-menu-item:disabled) {
721
+ opacity: 0.5;
722
+ }
723
+
724
+ /*
725
+ * Colour menus. The trigger shows the current colour as a swatch; `data-kind` is `color`,
726
+ * `none` (slashed), `mixed` (split) or `empty`. A border swatch is a ring, a fill swatch a
727
+ * disc.
728
+ */
729
+ :where(.ink-swatch) {
730
+ position: relative;
731
+ display: inline-block;
732
+ box-sizing: border-box;
733
+ width: 1.125rem;
734
+ height: 1.125rem;
735
+ overflow: hidden;
736
+ border: 1px solid color-mix(in srgb, var(--ink-fg) 35%, transparent);
737
+ border-radius: 50%;
738
+ background: var(--ink-swatch, transparent);
739
+ }
740
+
741
+ :where(.ink-swatch[data-property='border'][data-kind='color']) {
742
+ border: 3px solid var(--ink-swatch);
743
+ background: transparent;
744
+ }
745
+
746
+ :where(.ink-swatch[data-kind='none'])::after {
747
+ content: '';
748
+ position: absolute;
749
+ inset: 0;
750
+ background: linear-gradient(
751
+ to top right,
752
+ transparent calc(50% - 1px),
753
+ #e5484d calc(50% - 1px),
754
+ #e5484d calc(50% + 1px),
755
+ transparent calc(50% + 1px)
756
+ );
757
+ }
758
+
759
+ :where(.ink-swatch[data-kind='mixed']) {
760
+ background: linear-gradient(135deg, #e5484d 50%, #3b82f6 50%);
761
+ }
762
+
763
+ :where(.ink-color-grid) {
764
+ display: grid;
765
+ grid-template-columns: repeat(12, 1.25rem);
766
+ gap: 2px;
767
+ padding: 0.25rem;
768
+ }
769
+
770
+ :where(.ink-swatch-item) {
771
+ box-sizing: border-box;
772
+ width: 1.25rem;
773
+ height: 1.25rem;
774
+ padding: 0;
775
+ border: 1px solid color-mix(in srgb, var(--ink-fg) 20%, transparent);
776
+ border-radius: 3px;
777
+ background: var(--ink-swatch);
778
+ cursor: default;
779
+ }
780
+
781
+ :where(.ink-swatch-item[data-state='checked']) {
782
+ outline: 2px solid var(--ink-fg);
783
+ outline-offset: 1px;
784
+ }
785
+
786
+ :where(.ink-swatch-item:hover, .ink-swatch-item:focus-visible) {
787
+ outline: 2px solid var(--ink-ring, var(--ink-fg));
788
+ outline-offset: 1px;
789
+ }
790
+
791
+ /* The native input stays in the page so its picker opens; only the picker is seen. */
792
+ :where(.ink-color-input) {
793
+ position: absolute;
794
+ width: 1px;
795
+ height: 1px;
796
+ padding: 0;
797
+ border: 0;
798
+ overflow: hidden;
799
+ clip-path: inset(50%);
800
+ opacity: 0;
801
+ pointer-events: none;
802
+ }
803
+
804
+ /*
805
+ * Text style menu: a popover panel of mixed widgets (font select, text colour, size stepper,
806
+ * emphasis toggles, alignment radios).
807
+ */
808
+ :where(.ink-text-style-content) {
809
+ display: flex;
810
+ flex-direction: column;
811
+ gap: 0.5rem;
812
+ padding: 0.5rem;
813
+ }
814
+
815
+ :where(.ink-text-style-row, .ink-text-style-size) {
816
+ display: flex;
817
+ align-items: center;
818
+ gap: 0.25rem;
819
+ }
820
+
821
+ :where(.ink-text-style-font, .ink-text-style-input) {
822
+ box-sizing: border-box;
823
+ height: 2rem;
824
+ padding: 0 0.5rem;
825
+ border: 1px solid var(--ink-border);
826
+ border-radius: calc(var(--ink-radius) - 2px);
827
+ background: var(--ink-surface);
828
+ color: inherit;
829
+ font: inherit;
830
+ }
831
+
832
+ :where(.ink-text-style-input) {
833
+ width: 3.5rem;
834
+ text-align: center;
835
+ appearance: textfield;
836
+ }
837
+
838
+ :where(.ink-text-style-button) {
839
+ display: inline-flex;
840
+ align-items: center;
841
+ justify-content: center;
842
+ box-sizing: border-box;
843
+ width: 2rem;
844
+ height: 2rem;
845
+ padding: 0;
846
+ border: 1px solid transparent;
847
+ border-radius: calc(var(--ink-radius) - 2px);
848
+ background: none;
849
+ color: inherit;
850
+ cursor: default;
851
+ }
852
+
853
+ :where(.ink-text-style-button:hover, .ink-text-style-button:focus-visible) {
854
+ background: color-mix(in srgb, var(--ink-fg) 8%, transparent);
855
+ }
856
+
857
+ :where(.ink-text-style-button[data-state='on']) {
858
+ border-color: var(--ink-border);
859
+ background: color-mix(in srgb, var(--ink-fg) 14%, transparent);
860
+ }
861
+
862
+ :where(.ink-text-style-button[data-mixed]) {
863
+ border-style: dashed;
864
+ border-color: var(--ink-border);
865
+ }
866
+
867
+ /* A style menu's trigger when the selection disagrees (the colour menus' swatch shows it too). */
868
+ :where(.ink-menu-trigger[data-mixed]) {
869
+ border-style: dashed;
870
+ border-color: var(--ink-border);
871
+ }
872
+
873
+ /* Shape menu: a split button, the tool part beside a narrow chevron. */
874
+ :where(.ink-split-button) {
875
+ display: inline-flex;
876
+ align-items: stretch;
877
+ }
878
+
879
+ :where(.ink-split-button .ink-menu-trigger) {
880
+ min-width: 0;
881
+ width: 1.25rem;
882
+ padding-inline: 0.125rem;
883
+ }
884
+
885
+ :where(.ink-shape-grid) {
886
+ display: grid;
887
+ grid-template-columns: repeat(2, minmax(8.5rem, 1fr));
888
+ gap: 2px;
889
+ padding: 0.25rem;
890
+ }
891
+
892
+ :where(.ink-shape-item) {
893
+ display: flex;
894
+ align-items: center;
895
+ gap: 0.5rem;
896
+ padding-right: 0.5rem;
897
+ }
898
+
899
+ /* Highlight menu: the markup kinds, then the markup colour. */
900
+ :where(.ink-highlight-kinds) {
901
+ display: grid;
902
+ gap: 2px;
903
+ padding: 0.25rem;
904
+ }
905
+
906
+ :where(.ink-highlight-item) {
907
+ display: flex;
908
+ align-items: center;
909
+ gap: 0.5rem;
910
+ padding-right: 0.5rem;
911
+ }
912
+
913
+ :where(.ink-highlight-colour) {
914
+ display: flex;
915
+ align-items: center;
916
+ justify-content: space-between;
917
+ gap: 0.5rem;
918
+ padding: 0.25rem 0.25rem 0.25rem 0.5rem;
919
+ }
920
+
921
+ /* Stamps: an image filling its box; the overlay sets its geometry and opacity. */
922
+ :where(.ink-stamp) {
923
+ display: block;
924
+ max-width: none;
925
+ opacity: var(--ink-opacity, 1);
926
+ user-select: none;
927
+ }
928
+
929
+ /* Signature menu: saved signatures as previews, each with a remove button. */
930
+ :where(.ink-signature-list) {
931
+ display: grid;
932
+ grid-template-columns: minmax(10rem, 1fr) auto;
933
+ gap: 2px;
934
+ padding: 0.25rem;
935
+ }
936
+
937
+ :where(.ink-signature-item) {
938
+ padding-right: 0.5rem;
939
+ color: var(--ink-ink);
940
+ }
941
+
942
+ :where(.ink-signature-item[data-state='checked']) {
943
+ background: color-mix(in srgb, var(--ink-accent) 10%, transparent);
944
+ }
945
+
946
+ /* Signatures are dark ink in both themes, so they sit on paper. */
947
+ :where(.ink-signature-preview) {
948
+ display: inline-flex;
949
+ align-items: center;
950
+ height: 2rem;
951
+ border-radius: calc(var(--ink-radius) - 4px);
952
+ background: #fff;
953
+ }
954
+
955
+ :where(.ink-signature-preview svg, .ink-signature-preview img) {
956
+ height: 100%;
957
+ max-width: 10rem;
958
+ object-fit: contain;
959
+ }
960
+
961
+ :where(.ink-signature-remove) {
962
+ display: inline-flex;
963
+ align-items: center;
964
+ justify-content: center;
965
+ width: 2rem;
966
+ padding: 0;
967
+ border-radius: calc(var(--ink-radius) - 4px);
968
+ color: var(--ink-muted-fg);
969
+ }
970
+
971
+ :where(.ink-signature-create) {
972
+ display: flex;
973
+ align-items: center;
974
+ gap: 0.5rem;
975
+ padding-right: 0.5rem;
976
+ }
977
+
978
+ /* Dialogs (Create signature): a modal over an overlay. */
979
+ :where(.ink-dialog-overlay) {
980
+ position: fixed;
981
+ inset: 0;
982
+ z-index: 50;
983
+ background: rgb(0 0 0 / 0.4);
984
+ }
985
+
986
+ :where(.ink-dialog) {
987
+ position: fixed;
988
+ top: 50%;
989
+ left: 50%;
990
+ z-index: 51;
991
+ box-sizing: border-box;
992
+ width: min(32rem, calc(100vw - 2rem));
993
+ max-height: calc(100vh - 2rem);
994
+ overflow: auto;
995
+ padding: 1rem;
996
+ border: 1px solid var(--ink-border);
997
+ border-radius: var(--ink-radius);
998
+ background: var(--ink-surface);
999
+ color: var(--ink-fg);
1000
+ box-shadow: 0 16px 48px rgb(0 0 0 / 0.25);
1001
+ font-size: 0.875rem;
1002
+ transform: translate(-50%, -50%);
1003
+ }
1004
+
1005
+ :where(.ink-dialog:focus) {
1006
+ outline: none;
1007
+ }
1008
+
1009
+ :where(.ink-dialog-title) {
1010
+ margin: 0 0 0.75rem;
1011
+ font-size: 1rem;
1012
+ font-weight: 600;
1013
+ }
1014
+
1015
+ :where(.ink-tabs) {
1016
+ display: flex;
1017
+ gap: 0.25rem;
1018
+ margin-bottom: 0.75rem;
1019
+ border-bottom: 1px solid var(--ink-border);
1020
+ }
1021
+
1022
+ :where(.ink-tab) {
1023
+ margin-bottom: -1px;
1024
+ padding: 0.375rem 0.75rem;
1025
+ border: 0;
1026
+ border-bottom: 2px solid transparent;
1027
+ background: none;
1028
+ color: var(--ink-muted-fg);
1029
+ font: inherit;
1030
+ cursor: pointer;
1031
+ }
1032
+
1033
+ :where(.ink-tab[data-state='active']) {
1034
+ border-bottom-color: var(--ink-accent);
1035
+ color: var(--ink-fg);
1036
+ }
1037
+
1038
+ :where(.ink-tab-panel) {
1039
+ display: grid;
1040
+ gap: 0.5rem;
1041
+ }
1042
+
1043
+ :where(.ink-tab-panel[hidden]) {
1044
+ display: none;
1045
+ }
1046
+
1047
+ :where(.ink-signature-pad-host) {
1048
+ box-sizing: border-box;
1049
+ height: 10rem;
1050
+ border: 1px dashed var(--ink-border);
1051
+ border-radius: calc(var(--ink-radius) - 2px);
1052
+ background: #fff;
1053
+ color: var(--ink-ink);
1054
+ cursor: crosshair;
1055
+ }
1056
+
1057
+ :where(.ink-signature-pad .ink-stroke) {
1058
+ fill: currentColor;
1059
+ }
1060
+
1061
+ :where(.ink-dialog-row) {
1062
+ display: flex;
1063
+ justify-content: flex-end;
1064
+ }
1065
+
1066
+ :where(.ink-field) {
1067
+ display: grid;
1068
+ gap: 0.25rem;
1069
+ }
1070
+
1071
+ :where(.ink-input) {
1072
+ box-sizing: border-box;
1073
+ width: 100%;
1074
+ padding: 0.375rem;
1075
+ border: 1px solid var(--ink-border);
1076
+ border-radius: calc(var(--ink-radius) - 2px);
1077
+ background: var(--ink-surface);
1078
+ color: inherit;
1079
+ font: inherit;
1080
+ }
1081
+
1082
+ :where(.ink-field-error) {
1083
+ margin: 0;
1084
+ color: var(--ink-strikeout);
1085
+ }
1086
+
1087
+ :where(.ink-signature-fonts) {
1088
+ display: grid;
1089
+ gap: 0.25rem;
1090
+ }
1091
+
1092
+ :where(.ink-signature-font) {
1093
+ overflow: hidden;
1094
+ padding: 0.25rem 0.5rem;
1095
+ border: 1px solid var(--ink-border);
1096
+ border-radius: calc(var(--ink-radius) - 2px);
1097
+ background: #fff;
1098
+ color: var(--ink-ink);
1099
+ text-align: left;
1100
+ text-overflow: ellipsis;
1101
+ white-space: nowrap;
1102
+ cursor: pointer;
1103
+ }
1104
+
1105
+ :where(.ink-signature-font-sample) {
1106
+ font-size: 1.75rem;
1107
+ line-height: 1.4;
1108
+ }
1109
+
1110
+ :where(.ink-signature-font[data-state='checked']) {
1111
+ border-color: var(--ink-accent);
1112
+ box-shadow: inset 0 0 0 1px var(--ink-accent);
1113
+ }
1114
+
1115
+ :where(.ink-signature-image) {
1116
+ max-width: 100%;
1117
+ max-height: 8rem;
1118
+ object-fit: contain;
1119
+ }
1120
+
1121
+ :where(.ink-dialog-actions) {
1122
+ display: flex;
1123
+ justify-content: flex-end;
1124
+ gap: 0.375rem;
1125
+ margin-top: 1rem;
1126
+ }
1127
+
1128
+ :where(.ink-button) {
1129
+ padding: 0.375rem 0.75rem;
1130
+ border: 1px solid var(--ink-border);
1131
+ border-radius: calc(var(--ink-radius) - 2px);
1132
+ background: var(--ink-surface);
1133
+ color: inherit;
1134
+ font: inherit;
1135
+ cursor: pointer;
1136
+ }
1137
+
1138
+ :where(.ink-button[data-variant='primary']) {
1139
+ border-color: var(--ink-accent);
1140
+ background: var(--ink-accent);
1141
+ color: var(--ink-accent-fg);
1142
+ }
1143
+
1144
+ :where(.ink-button:disabled) {
1145
+ opacity: 0.5;
1146
+ cursor: default;
1147
+ }
1148
+
1149
+ :where(
1150
+ .ink-tab:focus-visible,
1151
+ .ink-button:focus-visible,
1152
+ .ink-input:focus-visible,
1153
+ .ink-signature-font:focus-visible,
1154
+ .ink-text-style-font:focus-visible,
1155
+ .ink-text-style-input:focus-visible,
1156
+ .ink-text-style-button:focus-visible
1157
+ ) {
1158
+ outline: 2px solid var(--ink-ring);
1159
+ outline-offset: 2px;
1160
+ }
1161
+
1162
+ /* Comment threads and suggestion cards */
1163
+ :where(.ink-thread-popover, .ink-suggestion-card) {
577
1164
  z-index: 50;
578
1165
  width: 20rem;
579
1166
  max-width: calc(100vw - 1rem);