@crisp-ui-kit/crisp 0.57.3 → 0.57.4

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 (169) hide show
  1. package/dist/assigneepicker.css +13 -0
  2. package/dist/assigneepicker.d.ts +7 -0
  3. package/dist/assigneepicker.layered.css +15 -0
  4. package/dist/button.css +1 -1
  5. package/dist/button.layered.css +1 -1
  6. package/dist/cjs/components/button/button.recipe.js +15 -10
  7. package/dist/cjs/components/datatable/datatable.js +6 -3
  8. package/dist/cjs/components/datatable/datatable.recipe.js +35 -2
  9. package/dist/cjs/components/menu/menu.js +48 -8
  10. package/dist/cjs/components/multiselect/multiselect.js +3 -0
  11. package/dist/cjs/components/multiselect/multiselect.recipe.js +18 -0
  12. package/dist/cjs/components/select/select.js +2 -2
  13. package/dist/cjs/components/select/select.recipe.js +19 -0
  14. package/dist/cjs/core/index.js +2 -1
  15. package/dist/cjs/core/place-floating.js +38 -0
  16. package/dist/cjs/index.js +8 -0
  17. package/dist/cjs/product/assigneepicker/assigneepicker.js +127 -0
  18. package/dist/cjs/product/assigneepicker/assigneepicker.recipe.js +36 -0
  19. package/dist/cjs/product/assigneepicker/index.js +7 -0
  20. package/dist/cjs/product/notesgallery/index.js +7 -0
  21. package/dist/cjs/product/notesgallery/notesgallery.js +80 -0
  22. package/dist/cjs/product/notesgallery/notesgallery.recipe.js +46 -0
  23. package/dist/cjs/product/objectpagemenu/index.js +17 -0
  24. package/dist/cjs/product/objectpagemenu/objectpagemenu.js +26 -0
  25. package/dist/cjs/product/objectpagemenu/objectpagemenu.recipe.js +30 -0
  26. package/dist/cjs/product/objectsettings/objectsettings.js +107 -14
  27. package/dist/cjs/product/recordpage/recordpage.js +64 -5
  28. package/dist/cjs/product/recordpage/recordpage.recipe.js +38 -0
  29. package/dist/cjs/product/recordpicker/index.js +7 -0
  30. package/dist/cjs/product/recordpicker/recordpicker.js +100 -0
  31. package/dist/cjs/product/recordpicker/recordpicker.recipe.js +36 -0
  32. package/dist/cjs/product/savedviews/index.js +2 -1
  33. package/dist/cjs/product/savedviews/savedviews.js +22 -0
  34. package/dist/cjs/product/savedviews/savedviews.recipe.js +47 -0
  35. package/dist/cjs/product/share/index.js +7 -0
  36. package/dist/cjs/product/share/share.js +179 -0
  37. package/dist/cjs/product/share/share.recipe.js +114 -0
  38. package/dist/cjs/product/shortcutssheet/index.js +17 -0
  39. package/dist/cjs/product/shortcutssheet/shortcutssheet.js +125 -0
  40. package/dist/cjs/product/shortcutssheet/shortcutssheet.recipe.js +50 -0
  41. package/dist/cjs/product/taskeditpopover/index.js +7 -0
  42. package/dist/cjs/product/taskeditpopover/taskeditpopover.js +159 -0
  43. package/dist/cjs/product/taskeditpopover/taskeditpopover.recipe.js +68 -0
  44. package/dist/cjs/product/workspaceswitchermenu/index.js +17 -0
  45. package/dist/cjs/product/workspaceswitchermenu/workspaceswitchermenu.js +38 -0
  46. package/dist/cjs/product/workspaceswitchermenu/workspaceswitchermenu.recipe.js +34 -0
  47. package/dist/cjs/tokens/palette.js +27 -0
  48. package/dist/cjs/tokens/semantic.js +20 -0
  49. package/dist/datatable.css +40 -7
  50. package/dist/datatable.layered.css +40 -7
  51. package/dist/esm/components/button/button.recipe.js +15 -10
  52. package/dist/esm/components/datatable/datatable.js +6 -3
  53. package/dist/esm/components/datatable/datatable.recipe.js +35 -2
  54. package/dist/esm/components/menu/menu.js +47 -7
  55. package/dist/esm/components/multiselect/multiselect.js +3 -0
  56. package/dist/esm/components/multiselect/multiselect.recipe.js +18 -0
  57. package/dist/esm/components/select/select.js +2 -2
  58. package/dist/esm/components/select/select.recipe.js +19 -0
  59. package/dist/esm/core/index.js +1 -1
  60. package/dist/esm/core/place-floating.js +37 -0
  61. package/dist/esm/index.js +8 -0
  62. package/dist/esm/product/assigneepicker/assigneepicker.js +91 -0
  63. package/dist/esm/product/assigneepicker/assigneepicker.recipe.js +33 -0
  64. package/dist/esm/product/assigneepicker/index.js +2 -0
  65. package/dist/esm/product/notesgallery/index.js +2 -0
  66. package/dist/esm/product/notesgallery/notesgallery.js +44 -0
  67. package/dist/esm/product/notesgallery/notesgallery.recipe.js +43 -0
  68. package/dist/esm/product/objectpagemenu/index.js +1 -0
  69. package/dist/esm/product/objectpagemenu/objectpagemenu.js +23 -0
  70. package/dist/esm/product/objectpagemenu/objectpagemenu.recipe.js +27 -0
  71. package/dist/esm/product/objectsettings/objectsettings.js +106 -13
  72. package/dist/esm/product/recordpage/recordpage.js +64 -5
  73. package/dist/esm/product/recordpage/recordpage.recipe.js +38 -0
  74. package/dist/esm/product/recordpicker/index.js +2 -0
  75. package/dist/esm/product/recordpicker/recordpicker.js +64 -0
  76. package/dist/esm/product/recordpicker/recordpicker.recipe.js +33 -0
  77. package/dist/esm/product/savedviews/index.js +1 -1
  78. package/dist/esm/product/savedviews/savedviews.js +22 -1
  79. package/dist/esm/product/savedviews/savedviews.recipe.js +47 -0
  80. package/dist/esm/product/share/index.js +2 -0
  81. package/dist/esm/product/share/share.js +143 -0
  82. package/dist/esm/product/share/share.recipe.js +111 -0
  83. package/dist/esm/product/shortcutssheet/index.js +1 -0
  84. package/dist/esm/product/shortcutssheet/shortcutssheet.js +88 -0
  85. package/dist/esm/product/shortcutssheet/shortcutssheet.recipe.js +47 -0
  86. package/dist/esm/product/taskeditpopover/index.js +2 -0
  87. package/dist/esm/product/taskeditpopover/taskeditpopover.js +123 -0
  88. package/dist/esm/product/taskeditpopover/taskeditpopover.recipe.js +65 -0
  89. package/dist/esm/product/workspaceswitchermenu/index.js +1 -0
  90. package/dist/esm/product/workspaceswitchermenu/workspaceswitchermenu.js +35 -0
  91. package/dist/esm/product/workspaceswitchermenu/workspaceswitchermenu.recipe.js +31 -0
  92. package/dist/esm/tokens/palette.js +27 -0
  93. package/dist/esm/tokens/semantic.js +20 -0
  94. package/dist/multiselect.css +18 -0
  95. package/dist/multiselect.layered.css +18 -0
  96. package/dist/native/tokens.d.ts +1 -1
  97. package/dist/native/tokens.js +56 -4
  98. package/dist/notesgallery.css +15 -0
  99. package/dist/notesgallery.d.ts +7 -0
  100. package/dist/notesgallery.layered.css +17 -0
  101. package/dist/objectpagemenu.css +3 -0
  102. package/dist/objectpagemenu.d.ts +7 -0
  103. package/dist/objectpagemenu.layered.css +5 -0
  104. package/dist/recordpage.css +36 -0
  105. package/dist/recordpage.layered.css +36 -0
  106. package/dist/recordpicker.css +13 -0
  107. package/dist/recordpicker.d.ts +7 -0
  108. package/dist/recordpicker.layered.css +15 -0
  109. package/dist/savedviews.css +47 -0
  110. package/dist/savedviews.layered.css +47 -0
  111. package/dist/select.css +19 -0
  112. package/dist/select.layered.css +19 -0
  113. package/dist/share.css +84 -0
  114. package/dist/share.d.ts +7 -0
  115. package/dist/share.layered.css +86 -0
  116. package/dist/shortcutssheet.css +24 -0
  117. package/dist/shortcutssheet.d.ts +7 -0
  118. package/dist/shortcutssheet.layered.css +26 -0
  119. package/dist/styles.css +387 -8
  120. package/dist/styles.layered.css +387 -8
  121. package/dist/taskeditpopover.css +36 -0
  122. package/dist/taskeditpopover.d.ts +7 -0
  123. package/dist/taskeditpopover.layered.css +38 -0
  124. package/dist/tokens.css +26 -0
  125. package/dist/tokens.json +56 -4
  126. package/dist/types/components/button/button.recipe.d.ts +2 -3
  127. package/dist/types/components/datatable/datatable.d.ts +8 -0
  128. package/dist/types/components/menu/menu.d.ts +50 -7
  129. package/dist/types/components/multiselect/multiselect.d.ts +9 -0
  130. package/dist/types/components/select/select.d.ts +10 -0
  131. package/dist/types/core/index.d.ts +1 -1
  132. package/dist/types/core/place-floating.d.ts +37 -0
  133. package/dist/types/index.d.ts +8 -0
  134. package/dist/types/product/assigneepicker/assigneepicker.d.ts +36 -0
  135. package/dist/types/product/assigneepicker/assigneepicker.recipe.d.ts +3 -0
  136. package/dist/types/product/assigneepicker/index.d.ts +2 -0
  137. package/dist/types/product/notesgallery/index.d.ts +2 -0
  138. package/dist/types/product/notesgallery/notesgallery.d.ts +54 -0
  139. package/dist/types/product/notesgallery/notesgallery.recipe.d.ts +3 -0
  140. package/dist/types/product/objectpagemenu/index.d.ts +1 -0
  141. package/dist/types/product/objectpagemenu/objectpagemenu.d.ts +40 -0
  142. package/dist/types/product/objectpagemenu/objectpagemenu.recipe.d.ts +17 -0
  143. package/dist/types/product/objectsettings/objectsettings.d.ts +71 -15
  144. package/dist/types/product/recordpage/index.d.ts +1 -1
  145. package/dist/types/product/recordpage/recordpage.d.ts +96 -1
  146. package/dist/types/product/recordpicker/index.d.ts +2 -0
  147. package/dist/types/product/recordpicker/recordpicker.d.ts +38 -0
  148. package/dist/types/product/recordpicker/recordpicker.recipe.d.ts +3 -0
  149. package/dist/types/product/savedviews/index.d.ts +1 -1
  150. package/dist/types/product/savedviews/savedviews.d.ts +36 -0
  151. package/dist/types/product/share/index.d.ts +2 -0
  152. package/dist/types/product/share/share.d.ts +85 -0
  153. package/dist/types/product/share/share.recipe.d.ts +3 -0
  154. package/dist/types/product/shortcutssheet/index.d.ts +1 -0
  155. package/dist/types/product/shortcutssheet/shortcutssheet.d.ts +49 -0
  156. package/dist/types/product/shortcutssheet/shortcutssheet.recipe.d.ts +3 -0
  157. package/dist/types/product/taskeditpopover/index.d.ts +2 -0
  158. package/dist/types/product/taskeditpopover/taskeditpopover.d.ts +67 -0
  159. package/dist/types/product/taskeditpopover/taskeditpopover.recipe.d.ts +3 -0
  160. package/dist/types/product/workspaceswitchermenu/index.d.ts +1 -0
  161. package/dist/types/product/workspaceswitchermenu/workspaceswitchermenu.d.ts +54 -0
  162. package/dist/types/product/workspaceswitchermenu/workspaceswitchermenu.recipe.d.ts +19 -0
  163. package/dist/types/tokens/contract.d.ts +13 -0
  164. package/dist/types/tokens/palette.d.ts +52 -0
  165. package/dist/types/tokens/semantic.d.ts +20 -0
  166. package/dist/workspaceswitchermenu.css +4 -0
  167. package/dist/workspaceswitchermenu.d.ts +7 -0
  168. package/dist/workspaceswitchermenu.layered.css +6 -0
  169. package/package.json +41 -1
package/dist/styles.css CHANGED
@@ -97,6 +97,19 @@
97
97
  --crisp-stroke-select-divider: #00000010;
98
98
  --crisp-fg-select-placeholder: #b0b3ba;
99
99
  --crisp-shadow-select: #0000001f;
100
+ --crisp-bg-tag-swatch1: #fff3cc;
101
+ --crisp-bg-tag-swatch2: #f4fbcb;
102
+ --crisp-bg-tag-swatch3: #fdf7c4;
103
+ --crisp-bg-tag-swatch4: #feecf3;
104
+ --crisp-bg-tag-swatch5: #e0fced;
105
+ --crisp-bg-tag-swatch6: #ddf7ff;
106
+ --crisp-bg-tag-swatch7: #f6f7f7;
107
+ --crisp-bg-tag-swatch8: #ffebeb;
108
+ --crisp-bg-tag-swatch9: #feeee1;
109
+ --crisp-bg-tag-swatch10: #e5eeff;
110
+ --crisp-bg-tag-swatch11: #f5f0ff;
111
+ --crisp-bg-tag-swatch12: #fdedff;
112
+ --crisp-fg-tag-swatch: #000000;
100
113
  }
101
114
 
102
115
  [data-theme="dark"] {
@@ -170,6 +183,19 @@
170
183
  --crisp-stroke-select-divider: #ffffff17;
171
184
  --crisp-fg-select-placeholder: #868b94;
172
185
  --crisp-shadow-select: #000000cc;
186
+ --crisp-bg-tag-swatch1: #fff3cc;
187
+ --crisp-bg-tag-swatch2: #f4fbcb;
188
+ --crisp-bg-tag-swatch3: #fdf7c4;
189
+ --crisp-bg-tag-swatch4: #feecf3;
190
+ --crisp-bg-tag-swatch5: #e0fced;
191
+ --crisp-bg-tag-swatch6: #ddf7ff;
192
+ --crisp-bg-tag-swatch7: #f6f7f7;
193
+ --crisp-bg-tag-swatch8: #ffebeb;
194
+ --crisp-bg-tag-swatch9: #feeee1;
195
+ --crisp-bg-tag-swatch10: #e5eeff;
196
+ --crisp-bg-tag-swatch11: #f5f0ff;
197
+ --crisp-bg-tag-swatch12: #fdedff;
198
+ --crisp-fg-tag-swatch: #000000;
173
199
  }
174
200
 
175
201
  :root {
@@ -468,7 +494,7 @@
468
494
  height: 24px; padding-inline: var(--crisp-space-1-5); font-size: var(--crisp-text-md); border-radius: var(--crisp-radius-md);
469
495
  }
470
496
  .crisp-button--size_xs {
471
- height: 20px; padding-inline: var(--crisp-space-1-5); font-size: 10px; font-weight: var(--crisp-weight-regular); line-height: 15px; letter-spacing: normal; border-radius: var(--crisp-radius-sm); gap: var(--crisp-space-1);
497
+ height: 20px; padding-inline: var(--crisp-space-1-5); font-size: var(--crisp-text-sm); line-height: 16px; letter-spacing: normal; border-radius: var(--crisp-radius-sm); gap: var(--crisp-space-1);
472
498
  }
473
499
  .crisp-button--size_md {
474
500
  height: 28px; padding-inline: var(--crisp-space-2); font-size: var(--crisp-text-lg); border-radius: var(--crisp-radius-md);
@@ -1046,14 +1072,29 @@
1046
1072
  Avatar's own already-shipped shape="rounded" value, not a new number.
1047
1073
  shape="circle" reuses Avatar's own shape="circle" value (radius.full)
1048
1074
  the same way, measured live on a real Attio person avatar. */
1049
- & .crisp-datatable-avatar { width: var(--crisp-size-icon); height: var(--crisp-size-icon); border-radius: 30%; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; font-size: 10px; line-height: 1; font-weight: var(--crisp-weight-semibold); text-transform: uppercase; color: var(--crisp-fg-on-brand); background: var(--crisp-bg-brand-solid); }
1075
+ & .crisp-datatable-avatar { width: var(--crisp-size-icon); height: var(--crisp-size-icon); border-radius: 30%; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; font-size: 10px; line-height: 1; font-weight: var(--crisp-weight-semibold); text-transform: uppercase; color: var(--crisp-fg-on-tone); background: var(--crisp-bg-brand-solid); }
1050
1076
  & .crisp-datatable-avatar[data-shape="circle"] { border-radius: var(--crisp-radius-full); }
1051
- & .crisp-datatable-avatar[data-tone="success"] { background: var(--crisp-bg-success); }
1052
- & .crisp-datatable-avatar[data-tone="warning"] { background: var(--crisp-bg-warning); }
1053
- & .crisp-datatable-avatar[data-tone="danger"] { background: var(--crisp-bg-danger); }
1054
- & .crisp-datatable-avatar[data-tone="purple"] { background: var(--crisp-bg-purple); }
1055
- & .crisp-datatable-avatar[data-tone="cyan"] { background: var(--crisp-bg-cyan); }
1056
- & .crisp-datatable-avatar[data-tone="orange"] { background: var(--crisp-bg-orange); }
1077
+ /* your-moon/crisp#891: every data-tone override painted ONLY a
1078
+ background, inheriting the base rule's white fgOnBrand -- white
1079
+ clears AA against none of these seven fills (brand 3.23:1, success
1080
+ 3.96, warning 4.12, danger 3.76, purple 3.58, cyan 2.30, orange
1081
+ 2.77). fgOnTone (ink, #101112 -- semantic.ts's own comment: "dark ink
1082
+ clears AA on every tone in both themes") clears 4.5:1+ on every fill
1083
+ here with a comfortable margin (brand 5.85, success 4.77/6.29,
1084
+ danger 5.03/6.19, purple 5.27, cyan 8.23, orange 6.83, light/dark),
1085
+ so the base rule's colour moves there and every override keeps it --
1086
+ EXCEPT warning, whose raw fill (bgWarning) only clears 4.59:1 in
1087
+ light, too thin a margin to rely on: it takes bgWarningSolid instead,
1088
+ the same solid-warning-plus-ink pair Badge's own solid variant
1089
+ already established (13.98/7.83), for the same reason (see
1090
+ tokens/palette.ts's amberSolid comment). No background changes
1091
+ otherwise -- the fills themselves are unaffected, only the text. */
1092
+ & .crisp-datatable-avatar[data-tone="success"] { background: var(--crisp-bg-success); color: var(--crisp-fg-on-tone); }
1093
+ & .crisp-datatable-avatar[data-tone="warning"] { background: var(--crisp-bg-warning-solid); color: var(--crisp-fg-on-tone); }
1094
+ & .crisp-datatable-avatar[data-tone="danger"] { background: var(--crisp-bg-danger); color: var(--crisp-fg-on-tone); }
1095
+ & .crisp-datatable-avatar[data-tone="purple"] { background: var(--crisp-bg-purple); color: var(--crisp-fg-on-tone); }
1096
+ & .crisp-datatable-avatar[data-tone="cyan"] { background: var(--crisp-bg-cyan); color: var(--crisp-fg-on-tone); }
1097
+ & .crisp-datatable-avatar[data-tone="orange"] { background: var(--crisp-bg-orange); color: var(--crisp-fg-on-tone); }
1057
1098
  & .crisp-datatable-avatar img { width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }
1058
1099
  & .crisp-datatable-tags { display: flex; align-items: center; gap: var(--crisp-space-1); overflow: hidden; }
1059
1100
  & .crisp-datatable-tag { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-chip); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); white-space: nowrap; background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 82%, transparent); }
@@ -1064,6 +1105,24 @@
1064
1105
  & .crisp-datatable-tag[data-tone="purple"] { background: color-mix(in srgb, var(--crisp-bg-purple) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-purple) 80%, var(--crisp-fg-primary)); }
1065
1106
  & .crisp-datatable-tag[data-tone="cyan"] { background: color-mix(in srgb, var(--crisp-bg-cyan) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-cyan) 82%, var(--crisp-fg-primary)); }
1066
1107
  & .crisp-datatable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--crisp-bg-orange) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-orange) 82%, var(--crisp-fg-primary)); }
1108
+ /* your-moon/crisp#998: Attio's own 12-colour tag palette (measured
1109
+ live, see tokens/palette.ts's tagSwatch1 comment) -- flat black
1110
+ text, no ring, unlike the tone family above. 7px radius/10px text
1111
+ are measured literals (no matching step in the shared scale, same
1112
+ as Select's own .crisp-select-swatch). */
1113
+ & .crisp-datatable-swatch { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: 7px; font-size: 10px; font-weight: var(--crisp-weight-regular); white-space: nowrap; color: var(--crisp-fg-tag-swatch); }
1114
+ & .crisp-datatable-swatch[data-swatch="1"] { background: var(--crisp-bg-tag-swatch1); }
1115
+ & .crisp-datatable-swatch[data-swatch="2"] { background: var(--crisp-bg-tag-swatch2); }
1116
+ & .crisp-datatable-swatch[data-swatch="3"] { background: var(--crisp-bg-tag-swatch3); }
1117
+ & .crisp-datatable-swatch[data-swatch="4"] { background: var(--crisp-bg-tag-swatch4); }
1118
+ & .crisp-datatable-swatch[data-swatch="5"] { background: var(--crisp-bg-tag-swatch5); }
1119
+ & .crisp-datatable-swatch[data-swatch="6"] { background: var(--crisp-bg-tag-swatch6); }
1120
+ & .crisp-datatable-swatch[data-swatch="7"] { background: var(--crisp-bg-tag-swatch7); }
1121
+ & .crisp-datatable-swatch[data-swatch="8"] { background: var(--crisp-bg-tag-swatch8); }
1122
+ & .crisp-datatable-swatch[data-swatch="9"] { background: var(--crisp-bg-tag-swatch9); }
1123
+ & .crisp-datatable-swatch[data-swatch="10"] { background: var(--crisp-bg-tag-swatch10); }
1124
+ & .crisp-datatable-swatch[data-swatch="11"] { background: var(--crisp-bg-tag-swatch11); }
1125
+ & .crisp-datatable-swatch[data-swatch="12"] { background: var(--crisp-bg-tag-swatch12); }
1067
1126
  & .crisp-datatable-num { font-variant-numeric: tabular-nums; }
1068
1127
  & .crisp-datatable-muted { color: var(--crisp-fg-muted); }
1069
1128
  /* crisp#822 -- a date/datetime cell's danger/overdue tone: same token as
@@ -1773,6 +1832,24 @@
1773
1832
  .crisp-recordstable-tag[data-tone="purple"] { background: color-mix(in srgb, var(--crisp-bg-purple) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-purple) 80%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-purple) 30%, transparent); }
1774
1833
  .crisp-recordstable-tag[data-tone="cyan"] { background: color-mix(in srgb, var(--crisp-bg-cyan) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-cyan) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-cyan) 30%, transparent); }
1775
1834
  .crisp-recordstable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--crisp-bg-orange) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-orange) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-orange) 30%, transparent); }
1835
+ /* your-moon/crisp#998: Attio's own 12-colour tag palette (measured live,
1836
+ see tokens/palette.ts's tagSwatch1 comment) -- flat black text, no
1837
+ ring/border, unlike the tone family above. 7px radius/10px text are
1838
+ measured literals, no matching step in the shared scale (same as
1839
+ Select's own .crisp-select-swatch). */
1840
+ .crisp-multiselect-swatch { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: 7px; font-size: 10px; font-weight: var(--crisp-weight-regular); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--crisp-fg-tag-swatch); }
1841
+ .crisp-multiselect-swatch[data-swatch="1"] { background: var(--crisp-bg-tag-swatch1); }
1842
+ .crisp-multiselect-swatch[data-swatch="2"] { background: var(--crisp-bg-tag-swatch2); }
1843
+ .crisp-multiselect-swatch[data-swatch="3"] { background: var(--crisp-bg-tag-swatch3); }
1844
+ .crisp-multiselect-swatch[data-swatch="4"] { background: var(--crisp-bg-tag-swatch4); }
1845
+ .crisp-multiselect-swatch[data-swatch="5"] { background: var(--crisp-bg-tag-swatch5); }
1846
+ .crisp-multiselect-swatch[data-swatch="6"] { background: var(--crisp-bg-tag-swatch6); }
1847
+ .crisp-multiselect-swatch[data-swatch="7"] { background: var(--crisp-bg-tag-swatch7); }
1848
+ .crisp-multiselect-swatch[data-swatch="8"] { background: var(--crisp-bg-tag-swatch8); }
1849
+ .crisp-multiselect-swatch[data-swatch="9"] { background: var(--crisp-bg-tag-swatch9); }
1850
+ .crisp-multiselect-swatch[data-swatch="10"] { background: var(--crisp-bg-tag-swatch10); }
1851
+ .crisp-multiselect-swatch[data-swatch="11"] { background: var(--crisp-bg-tag-swatch11); }
1852
+ .crisp-multiselect-swatch[data-swatch="12"] { background: var(--crisp-bg-tag-swatch12); }
1776
1853
 
1777
1854
  .crisp-multiselect {
1778
1855
  position: relative; display: inline-flex; width: 100%; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
@@ -2066,6 +2143,25 @@
2066
2143
  .crisp-select-option[data-disabled] .crisp-select-option-description,
2067
2144
  .crisp-select-option[data-disabled] .crisp-select-option-check { color: var(--crisp-fg-disabled); }
2068
2145
  .crisp-select-option-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); margin-inline-end: var(--crisp-space-2); }
2146
+ /* your-moon/crisp#998: Attio's own 12-colour tag palette (measured live,
2147
+ see tokens/palette.ts's tagSwatch1 comment) -- the label itself as a
2148
+ filled pill, not a dot beside it. 7px radius/10px text have no
2149
+ matching step in the shared scale (radius.xs is 4px, .sm is 6px;
2150
+ text.xs is 11px), so both are the measured literals, same as
2151
+ DataTable's own avatar font-size (#891). */
2152
+ .crisp-select-swatch { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: 7px; font-size: 10px; font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-tag-swatch); }
2153
+ .crisp-select-swatch[data-swatch="1"] { background: var(--crisp-bg-tag-swatch1); }
2154
+ .crisp-select-swatch[data-swatch="2"] { background: var(--crisp-bg-tag-swatch2); }
2155
+ .crisp-select-swatch[data-swatch="3"] { background: var(--crisp-bg-tag-swatch3); }
2156
+ .crisp-select-swatch[data-swatch="4"] { background: var(--crisp-bg-tag-swatch4); }
2157
+ .crisp-select-swatch[data-swatch="5"] { background: var(--crisp-bg-tag-swatch5); }
2158
+ .crisp-select-swatch[data-swatch="6"] { background: var(--crisp-bg-tag-swatch6); }
2159
+ .crisp-select-swatch[data-swatch="7"] { background: var(--crisp-bg-tag-swatch7); }
2160
+ .crisp-select-swatch[data-swatch="8"] { background: var(--crisp-bg-tag-swatch8); }
2161
+ .crisp-select-swatch[data-swatch="9"] { background: var(--crisp-bg-tag-swatch9); }
2162
+ .crisp-select-swatch[data-swatch="10"] { background: var(--crisp-bg-tag-swatch10); }
2163
+ .crisp-select-swatch[data-swatch="11"] { background: var(--crisp-bg-tag-swatch11); }
2164
+ .crisp-select-swatch[data-swatch="12"] { background: var(--crisp-bg-tag-swatch12); }
2069
2165
  .crisp-select-option-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
2070
2166
  .crisp-select-option-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
2071
2167
  .crisp-select-option-description { min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--crisp-fg-neutral-subtle); }
@@ -2820,6 +2916,20 @@
2820
2916
  }
2821
2917
  }
2822
2918
 
2919
+ .crisp-assigneepicker {
2920
+ display: flex; flex-direction: column; box-sizing: border-box; width: 350px; font-family: var(--crisp-font-sans);
2921
+ & .crisp-assigneepicker-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 36px; padding: 0 var(--crisp-space-3); color: var(--crisp-fg-muted); }
2922
+ & .crisp-assigneepicker-search svg { flex-shrink: 0; }
2923
+ & .crisp-assigneepicker-search-input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); line-height: 20px; color: var(--crisp-fg-primary); }
2924
+ & .crisp-assigneepicker-search-input::placeholder { color: var(--crisp-fg-muted); }
2925
+ & .crisp-assigneepicker-pill { display: flex; padding: 0 var(--crisp-space-3) var(--crisp-space-2); }
2926
+ & .crisp-assigneepicker-remove { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 14px; height: 14px; margin: 0; padding: 0; border: none; background: none; color: inherit; font-family: inherit; cursor: pointer; }
2927
+ & .crisp-assigneepicker-empty { padding: var(--crisp-space-4) var(--crisp-space-3); text-align: center; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
2928
+ & .crisp-assigneepicker-list { display: flex; flex-direction: column; margin: 0; padding: var(--crisp-space-1); list-style: none; }
2929
+ & .crisp-assigneepicker-option { display: flex; align-items: center; width: 100%; box-sizing: border-box; height: 32px; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: none; font-family: inherit; text-align: start; cursor: pointer; }
2930
+ & .crisp-assigneepicker-option:hover, & .crisp-assigneepicker-option[data-highlighted] { background: var(--crisp-bg-raised); }
2931
+ }
2932
+
2823
2933
  .crisp-authshell {
2824
2934
  min-height: 100%; box-sizing: border-box; display: flex; flex-direction: column; align-items: center; position: relative; background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2825
2935
  &[data-single-pane] { justify-content: center; }
@@ -3398,6 +3508,22 @@
3398
3508
  }
3399
3509
  }
3400
3510
 
3511
+ .crisp-notesgallery {
3512
+ display: flex; flex-direction: column; min-height: 0; box-sizing: border-box; font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
3513
+ & .crisp-notesgallery-tabs { display: flex; align-items: center; gap: var(--crisp-space-2); height: 44px; flex-shrink: 0; padding: 0 var(--crisp-space-3); }
3514
+ & .crisp-notesgallery-toolbar { display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-header); flex-shrink: 0; padding: 0 var(--crisp-space-3); }
3515
+ & .crisp-notesgallery-toolbar-trail { display: flex; align-items: center; gap: var(--crisp-space-2); margin-inline-start: auto; }
3516
+ & .crisp-notesgallery-favorites-section { background: var(--crisp-bg-subtle); box-shadow: inset 0 -1px 0 var(--crisp-border-subtle); }
3517
+ & .crisp-notesgallery-favorites-label { padding: var(--crisp-space-2) var(--crisp-space-4) 0; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
3518
+ & .crisp-notesgallery-favorites { display: flex; align-items: center; justify-content: center; min-height: 200px; padding: var(--crisp-space-6); }
3519
+ & .crisp-notesgallery-favorites-empty { box-sizing: border-box; width: 100%; padding: var(--crisp-space-6); border: 1px dashed var(--crisp-border-default); border-radius: var(--crisp-radius-xl); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
3520
+ & .crisp-notesgallery-body { flex: 1; min-height: 0; overflow-y: auto; padding: 0 var(--crisp-space-3) var(--crisp-space-3); }
3521
+ & .crisp-notesgallery-group { display: flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-menuRow); padding: var(--crisp-space-2) var(--crisp-space-1); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
3522
+ & .crisp-notesgallery-group-count { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); font-size: var(--crisp-text-xs); color: var(--crisp-fg-muted); }
3523
+ & .crisp-notesgallery-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: var(--crisp-space-4); padding-bottom: var(--crisp-space-4); }
3524
+ & .crisp-notesgallery-empty { padding: var(--crisp-space-8) var(--crisp-space-3); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
3525
+ }
3526
+
3401
3527
  .crisp-notificationssettings {
3402
3528
  & .crisp-notificationssettings-page { display: flex; flex-direction: column; gap: var(--crisp-space-6); font-family: var(--crisp-font-sans); }
3403
3529
  & .crisp-notificationssettings-heading { display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
@@ -3421,6 +3547,10 @@
3421
3547
  & .crisp-notificationssettings-matrixrow-col { display: flex; align-items: center; justify-content: center; width: 64px; flex-shrink: 0; }
3422
3548
  }
3423
3549
 
3550
+
3551
+ [dir="rtl"] .crisp-menu-item svg[data-rtl-flip] { transform: scaleX(-1); }
3552
+
3553
+
3424
3554
  .crisp-objectsettings {
3425
3555
  & .crisp-objectsettings-page { display: flex; flex-direction: column; gap: var(--crisp-space-6); }
3426
3556
  & .crisp-objectsettings-head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--crisp-space-4); }
@@ -3605,6 +3735,18 @@
3605
3735
  the component's own comment) -- NOT `display: contents`, which
3606
3736
  drops a button's accessible semantics in some engines. */
3607
3737
  & .crisp-recordpage-edit-trigger { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); margin: 0; padding: 0; border: none; background: none; text-align: start; font: inherit; color: inherit; cursor: pointer; }
3738
+ /* #990: measured live on app.attio.com's URL/domain attribute (hover the
3739
+ row) -- the link itself never carries the edit affordance, a
3740
+ separate 20px button trails it, mounting only on hover: 16px icon,
3741
+ rgba(0,0,0,0.55) (crisp's own color-mix(fgPrimary 55%) -- the exact
3742
+ formula .crisp-datatable-entity-action's identical muted icon
3743
+ already uses), 6px radius (radius.sm). Reveal is opacity-based,
3744
+ not the mount/unmount Attio's own DOM does, so a keyboard user
3745
+ tabbing to it (:focus-visible) doesn't need the row hovered first --
3746
+ same mechanism DataTable's own row actions (#601) already use. */
3747
+ & .crisp-recordpage-edit-affordance { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 20px; height: 20px; margin: 0; padding: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; font-family: inherit; color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); cursor: pointer; opacity: 0; transition: opacity .12s, background-color .12s, color .12s; }
3748
+ & .crisp-recordpage-field:hover .crisp-recordpage-edit-affordance, & .crisp-recordpage-edit-affordance:focus-visible { opacity: 1; }
3749
+ & .crisp-recordpage-edit-affordance:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-primary); }
3608
3750
  & .crisp-recordpage-empty { color: var(--crisp-fg-muted); }
3609
3751
  /* #431: measured live on app.attio.com's record page Details column --
3610
3752
  clicking a field's value opens a plain, borderless field exactly
@@ -3729,6 +3871,30 @@
3729
3871
  & .crisp-recordstable-tag[data-tone="purple"] { background: color-mix(in srgb, var(--crisp-bg-purple) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-purple) 80%, var(--crisp-fg-primary)); }
3730
3872
  & .crisp-recordstable-tag[data-tone="cyan"] { background: color-mix(in srgb, var(--crisp-bg-cyan) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-cyan) 82%, var(--crisp-fg-primary)); }
3731
3873
  & .crisp-recordstable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--crisp-bg-orange) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-orange) 82%, var(--crisp-fg-primary)); }
3874
+ /* #620: the "Run workflow" quick action's own popover -- measured live:
3875
+ a centered, top-anchored overlay sharing product/command's own
3876
+ Cmd-K-palette shell exactly (elevation.modal, bgOverlayFrost 60% +
3877
+ blur(15px), radius 2xl/xl outer/inner) -- duplicated here rather than
3878
+ imported, the same "own copy per product surface" choice already
3879
+ made elsewhere in this codebase (product/command sits outside this
3880
+ lane's own product/recordpage ownership). */
3881
+ & .crisp-recordpage-workflow-backdrop { position: fixed; inset: 0; z-index: 60; background: transparent; }
3882
+ & .crisp-recordpage-workflow-positioner { position: fixed; inset: 0; z-index: 61; display: flex; align-items: flex-start; justify-content: center; padding: 15vh var(--crisp-space-4) var(--crisp-space-4); }
3883
+ & .crisp-recordpage-workflow-content { position: relative; display: flex; flex-direction: column; box-sizing: border-box; width: 90vw; max-width: 808px; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-2xl); background: color-mix(in srgb, var(--crisp-bg-overlay-frost) 60%, transparent); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); box-shadow: 0 8px 28px -6px var(--crisp-shadow-overlay1), 0 18px 88px -4px var(--crisp-shadow-overlay2), 0 0 1px var(--crisp-shadow-overlay3); opacity: 1; transform: scale(1); transition: opacity .2s ease, transform .2s ease; @starting-style { opacity: 0; transform: scale(0.97); } }
3884
+ & .crisp-recordpage-workflow-card { display: flex; flex-direction: column; box-sizing: border-box; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); overflow: hidden; }
3885
+ & .crisp-recordpage-workflow-header { display: flex; align-items: center; gap: var(--crisp-space-2); height: 52px; flex-shrink: 0; padding: 0 var(--crisp-space-2) 0 var(--crisp-space-4); }
3886
+ & .crisp-recordpage-workflow-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.07px; color: var(--crisp-fg-primary); }
3887
+ & .crisp-recordpage-workflow-close { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 28px; height: 28px; margin: 0; padding: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); font-family: inherit; cursor: pointer; transition: background-color .12s, color .12s; }
3888
+ & .crisp-recordpage-workflow-close:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-primary); }
3889
+ & .crisp-recordpage-workflow-search { display: flex; align-items: center; min-height: 52px; padding: var(--crisp-space-4); }
3890
+ & .crisp-recordpage-workflow-input { flex: 1; min-width: 0; border: none; outline: none; background: transparent; font-family: inherit; font-size: var(--crisp-text-xl); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
3891
+ & .crisp-recordpage-workflow-input::placeholder { color: var(--crisp-fg-muted); }
3892
+ & .crisp-recordpage-workflow-sep { height: 1px; flex-shrink: 0; background: var(--crisp-border-subtle); }
3893
+ & .crisp-recordpage-workflow-empty { display: flex; flex-direction: column; align-items: center; gap: var(--crisp-space-2); padding: var(--crisp-space-6) var(--crisp-space-3); text-align: center; }
3894
+ & .crisp-recordpage-workflow-create { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 32px; padding: 0 var(--crisp-space-3); margin-top: var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); cursor: pointer; transition: background-color .12s; }
3895
+ & .crisp-recordpage-workflow-create:hover { background: var(--crisp-bg-raised); }
3896
+ & .crisp-recordpage-workflow-footer { display: flex; align-items: center; height: 44px; flex-shrink: 0; padding: 0 var(--crisp-space-2-5); border-top: 1px solid var(--crisp-border-subtle); }
3897
+ & .crisp-recordpage-workflow-footer-nav { display: flex; align-items: center; gap: var(--crisp-space-1-5); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
3732
3898
  }
3733
3899
 
3734
3900
  @media (prefers-reduced-motion: reduce) {
@@ -3845,6 +4011,20 @@
3845
4011
  }
3846
4012
  }
3847
4013
 
4014
+ .crisp-recordpicker {
4015
+ display: flex; flex-direction: column; box-sizing: border-box; width: 350px; font-family: var(--crisp-font-sans);
4016
+ & .crisp-recordpicker-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 36px; padding: 0 var(--crisp-space-3); color: var(--crisp-fg-muted); }
4017
+ & .crisp-recordpicker-search svg { flex-shrink: 0; }
4018
+ & .crisp-recordpicker-search-input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); line-height: 20px; color: var(--crisp-fg-primary); }
4019
+ & .crisp-recordpicker-search-input::placeholder { color: var(--crisp-fg-muted); }
4020
+ & .crisp-recordpicker-loading { display: flex; align-items: center; justify-content: center; gap: 10px; padding: var(--crisp-space-8) var(--crisp-space-3); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); line-height: 20px; }
4021
+ & .crisp-recordpicker-empty { padding: var(--crisp-space-4) var(--crisp-space-3); text-align: center; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
4022
+ & .crisp-recordpicker-list { display: flex; flex-direction: column; margin: 0; padding: var(--crisp-space-1); list-style: none; max-height: 280px; overflow-y: auto; }
4023
+ & .crisp-recordpicker-option { display: flex; align-items: center; gap: var(--crisp-space-2); width: 100%; box-sizing: border-box; height: 32px; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; }
4024
+ & .crisp-recordpicker-option svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
4025
+ & .crisp-recordpicker-option:hover, & .crisp-recordpicker-option[data-highlighted] { background: var(--crisp-bg-raised); }
4026
+ }
4027
+
3848
4028
  .crisp-richtext {
3849
4029
  display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
3850
4030
  & .crisp-rte-title { font-size: 32px; line-height: 36px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.6px; color: var(--crisp-fg-primary); outline: none; }
@@ -4003,6 +4183,53 @@
4003
4183
  font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium);
4004
4184
  color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent);
4005
4185
  }
4186
+
4187
+ /* crisp#568: the "Discard changes" / "Save for everyone ▾" bar a
4188
+ consumer swaps into its own toolbar's trailing slot (TableToolbar's
4189
+ own children prop already documents "right-aligned actions after the
4190
+ count") while the loaded view is dirty -- measured live on
4191
+ app.attio.com replacing that exact slot's usual Import/Export + New
4192
+ button. Not rendered inside SavedViews' own trigger/panel, which
4193
+ stays untouched; this is its own export, SavedViewsSaveBar. */
4194
+ .crisp-savedviews-savebar { display: flex; align-items: center; gap: var(--crisp-space-2); }
4195
+ /* Rest-state color is a 55% color-mix of fgPrimary -- measured
4196
+ identical to recordpanel's own ".crisp-recordpanel-section-action"
4197
+ (its own comment: "measured 10px/400, a lighter mix..." -- font size
4198
+ there was the SAME outer-vs-inner-div miss #688 corrected; the 55%
4199
+ mix itself checks out independently here). Hover repeats crisp's own
4200
+ already-measured Button ghost intent exactly (bgRaised + fgPrimary),
4201
+ confirmed live (hover bg rgba(0,0,0,.04) + ink text matches bgRaised
4202
+ + fgPrimary bit for bit) -- reused, not re-derived. */
4203
+ .crisp-savedviews-savebar-discard {
4204
+ box-sizing: border-box; display: inline-flex; align-items: center; height: 28px;
4205
+ margin: 0; padding-inline: var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md);
4206
+ background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium);
4207
+ color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); cursor: pointer;
4208
+ transition: background-color .12s ease, color .12s ease;
4209
+ }
4210
+ .crisp-savedviews-savebar-discard:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
4211
+ /* the split "Save for everyone ▾" pill -- two adjacent buttons sharing
4212
+ one visual pill (measured: label half rounds only its outer/left
4213
+ corners, the chevron half only its outer/right corners, seamless
4214
+ between). Fill is crisp's OWN measured bgBrandContrast, not Attio's
4215
+ own literal button blue -- the owner's directive is Attio structure/
4216
+ sizing, seed-identity color (crisp direction doc). Hover/active reuse
4217
+ Button's own already-measured primary-intent brightness filter
4218
+ (crisp#910) rather than Attio's own literal darker fill, for the
4219
+ same reason. */
4220
+ .crisp-savedviews-savebar-save-group { display: flex; }
4221
+ .crisp-savedviews-savebar-save, .crisp-savedviews-savebar-save-chevron {
4222
+ box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
4223
+ height: 28px; margin: 0; border: none; background: var(--crisp-bg-brand-contrast); color: var(--crisp-fg-on-brand);
4224
+ cursor: pointer; transition: filter .2s;
4225
+ }
4226
+ .crisp-savedviews-savebar-save:hover, .crisp-savedviews-savebar-save-chevron:hover { filter: brightness(0.96); }
4227
+ .crisp-savedviews-savebar-save:active, .crisp-savedviews-savebar-save-chevron:active { filter: brightness(0.92); }
4228
+ .crisp-savedviews-savebar-save {
4229
+ padding-inline: var(--crisp-space-2) var(--crisp-space-1-5); border-radius: var(--crisp-radius-md) 0 0 var(--crisp-radius-md);
4230
+ font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium);
4231
+ }
4232
+ .crisp-savedviews-savebar-save-chevron { width: 28px; padding: 0; border-radius: 0 var(--crisp-radius-md) var(--crisp-radius-md) 0; }
4006
4233
 
4007
4234
  .crisp-savedviews {
4008
4235
  position: relative; display: inline-flex; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; /* crisp/#772 follow-up, re-measured live 2026-09-25 in the trigger's
@@ -4079,6 +4306,116 @@
4079
4306
  }
4080
4307
 
4081
4308
 
4309
+ .crisp-share-content {
4310
+ font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
4311
+ position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box;
4312
+ width: 440px; max-width: 92vw;
4313
+ padding: var(--crisp-space-3); display: flex; flex-direction: column; gap: var(--crisp-space-3);
4314
+ border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover); color: var(--crisp-fg-primary);
4315
+ box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3);
4316
+ opacity: 1; transform: none; transform-origin: top right;
4317
+ transition: opacity 0.08s ease, transform 0.08s ease;
4318
+ @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); }
4319
+ }
4320
+ .crisp-share-content[data-up] { transform-origin: bottom right; }
4321
+
4322
+ .crisp-share-tabs { display: flex; align-items: center; gap: var(--crisp-space-1); }
4323
+ .crisp-share-tab {
4324
+ box-sizing: border-box; display: inline-flex; align-items: center; gap: var(--crisp-space-1-5);
4325
+ height: var(--crisp-size-row); padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md);
4326
+ background: transparent; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
4327
+ font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.07px;
4328
+ cursor: pointer; transition: background-color .12s ease, color .12s ease;
4329
+ }
4330
+ .crisp-share-tab svg { flex-shrink: 0; }
4331
+ .crisp-share-tab:hover { color: var(--crisp-fg-primary); }
4332
+ .crisp-share-tab[aria-selected="true"] { background: var(--crisp-bg-surface-muted); color: var(--crisp-fg-primary); }
4333
+
4334
+ .crisp-share-row { display: flex; align-items: center; gap: var(--crisp-space-2); min-height: 34px; }
4335
+ .crisp-share-row-label { flex: 1; min-width: 0; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); letter-spacing: -0.07px; }
4336
+ .crisp-share-row .crisp-select { flex-shrink: 0; }
4337
+ .crisp-share-row .crisp-select .crisp-select-value,
4338
+ .crisp-share-row .crisp-select .crisp-select-chevron { color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); }
4339
+
4340
+ .crisp-share-clear {
4341
+ align-self: flex-start; margin: 0; padding: 0; border: none; background: none;
4342
+ font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium);
4343
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); cursor: pointer;
4344
+ }
4345
+ .crisp-share-clear:hover { color: var(--crisp-fg-primary); text-decoration: underline; }
4346
+
4347
+ .crisp-share-section-label {
4348
+ margin: 0; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent);
4349
+ }
4350
+ .crisp-share-members { display: flex; flex-direction: column; gap: var(--crisp-space-2); }
4351
+ .crisp-share-member { display: flex; align-items: center; gap: var(--crisp-space-2); }
4352
+ .crisp-share-member-text { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: var(--crisp-space-1-5); overflow: hidden; }
4353
+ .crisp-share-member-name { flex-shrink: 0; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); letter-spacing: -0.07px; }
4354
+ .crisp-share-member-email { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); letter-spacing: -0.07px; }
4355
+ .crisp-share-member .crisp-select { flex-shrink: 0; }
4356
+ .crisp-share-member .crisp-select .crisp-select-value,
4357
+ .crisp-share-member .crisp-select .crisp-select-chevron { color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); }
4358
+
4359
+ .crisp-share-automations-row { display: flex; align-items: center; gap: var(--crisp-space-2); }
4360
+ .crisp-share-automations-row .crisp-input { flex: 1; min-width: 0; }
4361
+ .crisp-share-automations-row .crisp-select { flex-shrink: 0; }
4362
+
4363
+ .crisp-share-add {
4364
+ flex-shrink: 0; box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
4365
+ height: 32px; padding: 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-lg);
4366
+ background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand);
4367
+ font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.07px;
4368
+ cursor: pointer; transition: background-color .12s ease, opacity .12s ease;
4369
+ }
4370
+ .crisp-share-add:hover:not(:disabled) { background: var(--crisp-bg-brand-solid-pressed); }
4371
+ .crisp-share-add:disabled { opacity: 0.4; cursor: not-allowed; }
4372
+
4373
+ .crisp-share-learnmore {
4374
+ display: inline-flex; align-items: center; gap: var(--crisp-space-1-5);
4375
+ font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
4376
+ text-decoration: none;
4377
+ }
4378
+ .crisp-share-learnmore:hover { color: var(--crisp-fg-primary); }
4379
+ .crisp-share-learnmore svg { flex-shrink: 0; }
4380
+
4381
+ .crisp-share {
4382
+ display: contents; font-family: var(--crisp-font-sans);
4383
+ }
4384
+
4385
+ @media (prefers-reduced-motion: reduce) {
4386
+ .crisp-share, .crisp-share * {
4387
+ animation-duration: 0.01ms !important;
4388
+ animation-iteration-count: 1 !important;
4389
+ transition-duration: 0.01ms !important;
4390
+ }
4391
+ }
4392
+
4393
+
4394
+ /* Overrides Drawer's own 420px default (specificity: .crisp-drawer
4395
+ .crisp-drawer-content.crisp-shortcutssheet-panel, higher than
4396
+ Drawer's .crisp-drawer .crisp-drawer-content regardless of which
4397
+ chunk of dist/styles.css concatenates first). */
4398
+ .crisp-drawer .crisp-drawer-content.crisp-shortcutssheet-panel { width: 360px; }
4399
+
4400
+ .crisp-shortcutssheet-body { display: flex; flex-direction: column; gap: var(--crisp-space-2-5); }
4401
+ .crisp-shortcutssheet-section-label {
4402
+ font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium);
4403
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
4404
+ }
4405
+ .crisp-shortcutssheet-section-label:not(:first-child) { margin-top: var(--crisp-space-2-5); }
4406
+ .crisp-shortcutssheet-row { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-1); }
4407
+ .crisp-shortcutssheet-desc {
4408
+ font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium);
4409
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
4410
+ }
4411
+ .crisp-shortcutssheet-keys { display: flex; align-items: center; gap: var(--crisp-space-1); flex-shrink: 0; }
4412
+ .crisp-shortcutssheet-then {
4413
+ font-size: var(--crisp-text-xs); font-weight: var(--crisp-weight-medium);
4414
+ color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent);
4415
+ }
4416
+
4417
+
4418
+
4082
4419
  .crisp-sidebar-ws-menu-content { width: 280px; }
4083
4420
 
4084
4421
  .crisp-sidebar {
@@ -4131,6 +4468,43 @@
4131
4468
  & .crisp-statlist-empty { padding: var(--crisp-space-4) 0; text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
4132
4469
  }
4133
4470
 
4471
+ .crisp-taskeditpopover { position: fixed; z-index: 70; pointer-events: auto; opacity: 1; transform: scale(1); transition: opacity 0.08s ease, transform 0.08s ease; @starting-style { opacity: 0; transform: scale(0.97) translateY(-4px); } }
4472
+ .crisp-taskeditpopover {
4473
+ display: flex; flex-direction: column; box-sizing: border-box; width: 800px; max-width: 92vw; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.07); font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
4474
+ & .crisp-taskeditpopover-header { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-2); height: 44px; box-sizing: border-box; padding: 0 var(--crisp-space-2) 0 var(--crisp-space-3); border-bottom: 1px solid var(--crisp-border-subtle); }
4475
+ & .crisp-taskeditpopover-heading { display: flex; align-items: center; gap: var(--crisp-space-1); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
4476
+ & .crisp-taskeditpopover-heading svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
4477
+ & .crisp-taskeditpopover-close { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 28px; height: 28px; margin: 0; padding: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; }
4478
+ & .crisp-taskeditpopover-close:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
4479
+ & .crisp-taskeditpopover-body { display: flex; align-items: center; gap: var(--crisp-space-2-5); min-height: 52px; box-sizing: border-box; padding: var(--crisp-space-3); }
4480
+ & .crisp-taskeditpopover-check { appearance: none; -webkit-appearance: none; box-sizing: border-box; flex-shrink: 0; margin: 0; width: 16px; height: 16px; border: none; border-radius: var(--crisp-radius-full); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 9%, transparent); cursor: pointer; }
4481
+ & .crisp-taskeditpopover-check:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 30%, transparent); }
4482
+ & .crisp-taskeditpopover-check:checked { background: var(--crisp-bg-brand-solid) center / 10px no-repeat; box-shadow: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.5 6.5 5 9l4.5-5'/%3E%3C/svg%3E"); }
4483
+ & .crisp-taskeditpopover-title { flex: 1; min-width: 0; border: none; border-radius: var(--crisp-radius-sm); outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
4484
+ & .crisp-taskeditpopover-title:focus-visible { outline: 2px solid var(--crisp-stroke-focus-ring); outline-offset: 2px; }
4485
+ & .crisp-taskeditpopover-footer { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-2); height: 44px; box-sizing: border-box; padding: 0 var(--crisp-space-2) 0 var(--crisp-space-3); }
4486
+ & .crisp-taskeditpopover-chips { display: flex; align-items: center; gap: var(--crisp-space-1); min-width: 0; }
4487
+ & .crisp-taskeditpopover-chip { display: inline-flex; align-items: center; gap: 6px; flex-shrink: 0; height: 28px; box-sizing: border-box; padding: 4px 8px 4px 6px; border: none; border-radius: var(--crisp-radius-md); background: none; color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); font-family: inherit; font-size: 10px; white-space: nowrap; cursor: pointer; }
4488
+ & .crisp-taskeditpopover-chip svg { flex-shrink: 0; }
4489
+ & .crisp-taskeditpopover-chip:hover { background: var(--crisp-bg-raised); }
4490
+ & .crisp-taskeditpopover-actions { display: flex; align-items: center; gap: var(--crisp-space-2); flex-shrink: 0; }
4491
+ & .crisp-taskeditpopover-kebab { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; margin: 0; padding: 6px; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-primary); font-family: inherit; cursor: pointer; }
4492
+ & .crisp-taskeditpopover-kebab:hover { background: var(--crisp-bg-raised); }
4493
+ & .crisp-taskeditpopover-cancel { display: inline-flex; align-items: center; gap: 6px; height: 28px; box-sizing: border-box; padding: 4px 6px 4px 8px; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-primary); font-family: inherit; font-size: 10px; cursor: pointer; }
4494
+ & .crisp-taskeditpopover-cancel:hover { background: var(--crisp-bg-raised); }
4495
+ & .crisp-taskeditpopover-save { display: inline-flex; align-items: center; gap: 6px; height: 28px; box-sizing: border-box; padding: 4px 6px 4px 8px; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); font-family: inherit; font-size: 10px; cursor: pointer; }
4496
+ & .crisp-taskeditpopover-save:hover { background: var(--crisp-bg-brand-solid-pressed); }
4497
+ & .crisp-taskeditpopover-key { color: color-mix(in srgb, currentColor 55%, transparent); font-size: 10px; }
4498
+ }
4499
+
4500
+ @media (prefers-reduced-motion: reduce) {
4501
+ .crisp-taskeditpopover, .crisp-taskeditpopover * {
4502
+ animation-duration: 0.01ms !important;
4503
+ animation-iteration-count: 1 !important;
4504
+ transition-duration: 0.01ms !important;
4505
+ }
4506
+ }
4507
+
4134
4508
  .crisp-tasklist {
4135
4509
  display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
4136
4510
  & .crisp-tasklist-group { display: flex; align-items: center; gap: var(--crisp-space-1-5); height: 36px; padding: 0 var(--crisp-space-2); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
@@ -4250,3 +4624,8 @@
4250
4624
  & .crisp-workspacegeneralsettings-rowtitle { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
4251
4625
  & .crisp-workspacegeneralsettings-dangerwarning { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
4252
4626
  }
4627
+
4628
+
4629
+ [dir="rtl"] .crisp-menu-item svg[data-rtl-flip] { transform: scaleX(-1); }
4630
+ .crisp-menu-item svg.crisp-workspaceswitchermenu-check { color: var(--crisp-fg-brand-contrast); }
4631
+