@crisp-ui-kit/crisp 0.33.0 → 0.33.2

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 (110) hide show
  1. package/README.md +33 -1
  2. package/dist/appshell.css +1 -4
  3. package/dist/appshell.layered.css +1 -4
  4. package/dist/authshell.css +4 -19
  5. package/dist/authshell.layered.css +4 -19
  6. package/dist/avatar.css +2 -1
  7. package/dist/avatar.layered.css +2 -1
  8. package/dist/board.css +1 -4
  9. package/dist/board.layered.css +1 -4
  10. package/dist/breadcrumb.css +0 -1
  11. package/dist/breadcrumb.layered.css +0 -1
  12. package/dist/button.css +14 -6
  13. package/dist/button.layered.css +14 -6
  14. package/dist/card.css +2 -1
  15. package/dist/card.layered.css +2 -1
  16. package/dist/checkbox.css +6 -9
  17. package/dist/checkbox.layered.css +6 -9
  18. package/dist/cjs/components/avatar/avatar.recipe.js +38 -19
  19. package/dist/cjs/components/button/button.recipe.js +109 -18
  20. package/dist/cjs/components/datatable/datatable.js +14 -2
  21. package/dist/cjs/components/datatable/datatable.recipe.js +5 -0
  22. package/dist/cjs/components/switch/switch.recipe.js +48 -18
  23. package/dist/columncalc.css +2 -6
  24. package/dist/columncalc.layered.css +2 -6
  25. package/dist/command.css +9 -11
  26. package/dist/command.layered.css +9 -11
  27. package/dist/datatable.css +11 -19
  28. package/dist/datatable.layered.css +11 -19
  29. package/dist/datepicker.css +15 -80
  30. package/dist/datepicker.layered.css +15 -80
  31. package/dist/datepickerfield.css +3 -18
  32. package/dist/datepickerfield.layered.css +3 -18
  33. package/dist/donutchart.css +1 -2
  34. package/dist/donutchart.layered.css +1 -2
  35. package/dist/entitycard.css +1 -7
  36. package/dist/entitycard.layered.css +1 -7
  37. package/dist/esm/components/avatar/avatar.recipe.js +38 -19
  38. package/dist/esm/components/button/button.recipe.js +109 -18
  39. package/dist/esm/components/datatable/datatable.js +14 -2
  40. package/dist/esm/components/datatable/datatable.recipe.js +5 -0
  41. package/dist/esm/components/switch/switch.recipe.js +48 -18
  42. package/dist/fileupload.css +10 -60
  43. package/dist/fileupload.layered.css +10 -60
  44. package/dist/inbox.css +1 -7
  45. package/dist/inbox.layered.css +1 -7
  46. package/dist/input.css +9 -20
  47. package/dist/input.layered.css +9 -20
  48. package/dist/listpage.css +2 -12
  49. package/dist/listpage.layered.css +2 -12
  50. package/dist/menu.css +3 -19
  51. package/dist/menu.layered.css +3 -19
  52. package/dist/multiselect.css +4 -25
  53. package/dist/multiselect.layered.css +4 -25
  54. package/dist/navitem.css +5 -13
  55. package/dist/navitem.layered.css +5 -13
  56. package/dist/onboarding.css +1 -8
  57. package/dist/onboarding.layered.css +1 -8
  58. package/dist/quantitypicker.css +15 -50
  59. package/dist/quantitypicker.layered.css +15 -50
  60. package/dist/radiogroup.css +1 -6
  61. package/dist/radiogroup.layered.css +1 -6
  62. package/dist/recordpage.css +2 -10
  63. package/dist/recordpage.layered.css +2 -10
  64. package/dist/recordpanel.css +1 -13
  65. package/dist/recordpanel.layered.css +1 -13
  66. package/dist/recordstable.css +2 -11
  67. package/dist/recordstable.layered.css +2 -11
  68. package/dist/resizablepanel.css +4 -15
  69. package/dist/resizablepanel.layered.css +4 -15
  70. package/dist/richtext.css +1 -5
  71. package/dist/richtext.layered.css +1 -5
  72. package/dist/select.css +7 -30
  73. package/dist/select.layered.css +7 -30
  74. package/dist/settingsshell.css +2 -7
  75. package/dist/settingsshell.layered.css +2 -7
  76. package/dist/sidebar.css +23 -28
  77. package/dist/sidebar.layered.css +23 -28
  78. package/dist/slider.css +1 -8
  79. package/dist/slider.layered.css +1 -8
  80. package/dist/statcard.css +1 -2
  81. package/dist/statcard.layered.css +1 -2
  82. package/dist/styles.css +196 -652
  83. package/dist/styles.layered.css +196 -652
  84. package/dist/switch.css +1 -5
  85. package/dist/switch.layered.css +1 -5
  86. package/dist/table.css +2 -1
  87. package/dist/table.layered.css +2 -1
  88. package/dist/tabletoolbar.css +1 -3
  89. package/dist/tabletoolbar.layered.css +1 -3
  90. package/dist/tabs.css +1 -5
  91. package/dist/tabs.layered.css +1 -5
  92. package/dist/tasklist.css +1 -8
  93. package/dist/tasklist.layered.css +1 -8
  94. package/dist/textarea.css +2 -13
  95. package/dist/textarea.layered.css +2 -13
  96. package/dist/tooltip.css +2 -1
  97. package/dist/tooltip.layered.css +2 -1
  98. package/dist/trialbanner.css +2 -11
  99. package/dist/trialbanner.layered.css +2 -11
  100. package/dist/types/components/avatar/avatar.d.ts +30 -30
  101. package/dist/types/components/avatar/avatar.recipe.d.ts +136 -49
  102. package/dist/types/components/button/button.d.ts +30 -30
  103. package/dist/types/components/button/button.recipe.d.ts +193 -45
  104. package/dist/types/components/datatable/datatable.d.ts +10 -1
  105. package/dist/types/components/switch/switch.recipe.d.ts +57 -3
  106. package/dist/viewtoggle.css +3 -9
  107. package/dist/viewtoggle.layered.css +3 -9
  108. package/dist/wheelpicker.css +14 -59
  109. package/dist/wheelpicker.layered.css +14 -59
  110. package/package.json +1 -1
@@ -230,7 +230,8 @@
230
230
  }
231
231
 
232
232
  .crisp-avatar {
233
- display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; font-family: var(--crisp-font-sans); font-weight: var(--crisp-weight-semibold); overflow: hidden; user-select: none; & img { width: 100%; height: 100%; object-fit: cover; }
233
+ display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; font-family: var(--crisp-font-sans); font-weight: var(--crisp-weight-semibold); overflow: hidden; user-select: none;
234
+ & img { width: 100%; height: 100%; object-fit: cover; }
234
235
  }
235
236
  .crisp-avatar--size_sm {
236
237
  height: 16px; width: 16px; font-size: 9px;
@@ -358,7 +359,6 @@
358
359
  & .crisp-breadcrumb-item[aria-current] { color: var(--crisp-fg-primary); font-weight: var(--crisp-weight-medium); }
359
360
  & .crisp-breadcrumb-sep { flex-shrink: 0; color: color-mix(in srgb, var(--crisp-fg-primary) 28%, transparent); }
360
361
  [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
361
-
362
362
  }
363
363
 
364
364
  .crisp-bulkbar {
@@ -384,19 +384,26 @@
384
384
  }
385
385
 
386
386
  .crisp-button {
387
- display: inline-flex; align-items: center; justify-content: center; gap: var(--crisp-space-1-5); font-family: var(--crisp-font-sans); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; line-height: 20px; white-space: nowrap; border: none; cursor: pointer; transition: background-color .2s, box-shadow .2s, color .2s; &:disabled { opacity: 0.5; cursor: not-allowed; }
387
+ display: inline-flex; align-items: center; justify-content: center; gap: var(--crisp-space-1-5); font-family: var(--crisp-font-sans); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; line-height: 20px; white-space: nowrap; border: none; cursor: pointer; transition: background-color .2s, box-shadow .2s, color .2s;
388
+ &:disabled { opacity: 0.5; cursor: not-allowed; }
388
389
  }
389
390
  .crisp-button--intent_primary {
390
- background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.07), 0 2px 4px -2px rgba(38,109,240,0.12), 0 3px 6px -2px rgba(38,109,240,0.08); &:hover { background: var(--crisp-bg-brand-solid-pressed); } &:active { background: var(--crisp-bg-brand-solid-pressed); }
391
+ background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.07), 0 2px 4px -2px rgba(38,109,240,0.12), 0 3px 6px -2px rgba(38,109,240,0.08);
392
+ &:hover { background: var(--crisp-bg-brand-solid-pressed); }
393
+ &:active { background: var(--crisp-bg-brand-solid-pressed); }
391
394
  }
392
395
  .crisp-button--intent_neutral {
393
- background: var(--crisp-bg-surface); color: var(--crisp-fg-primary); 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); &:hover { background: var(--crisp-bg-raised); }
396
+ background: var(--crisp-bg-surface); color: var(--crisp-fg-primary); 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);
397
+ &:hover { background: var(--crisp-bg-raised); }
394
398
  }
395
399
  .crisp-button--intent_danger {
396
- background: var(--crisp-bg-danger-solid); color: var(--crisp-fg-on-brand); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.07), 0 2px 4px -2px rgba(186,37,37,0.20), 0 3px 6px -2px rgba(186,37,37,0.12); &:hover { filter: brightness(0.96); } &:active { filter: brightness(0.92); }
400
+ background: var(--crisp-bg-danger-solid); color: var(--crisp-fg-on-brand); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.07), 0 2px 4px -2px rgba(186,37,37,0.20), 0 3px 6px -2px rgba(186,37,37,0.12);
401
+ &:hover { filter: brightness(0.96); }
402
+ &:active { filter: brightness(0.92); }
397
403
  }
398
404
  .crisp-button--intent_ghost {
399
- background: transparent; color: var(--crisp-fg-muted); box-shadow: none; &:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
405
+ background: transparent; color: var(--crisp-fg-muted); box-shadow: none;
406
+ &:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
400
407
  }
401
408
  .crisp-button--size_sm {
402
409
  height: 24px; padding-inline: var(--crisp-space-1-5); font-size: var(--crisp-text-md); border-radius: var(--crisp-radius-md);
@@ -414,7 +421,8 @@
414
421
  padding-inline: 0; aspect-ratio: 1 / 1;
415
422
  }
416
423
  .crisp-button--touchTarget_true {
417
- position: relative; &::after { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 100%; height: 100%; min-width: 44px; min-height: 44px; }
424
+ position: relative;
425
+ &::after { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 100%; height: 100%; min-width: 44px; min-height: 44px; }
418
426
  }
419
427
  .crisp-button--touchTarget_false {
420
428
 
@@ -460,7 +468,8 @@
460
468
 
461
469
  }
462
470
  .crisp-card--interactive_true {
463
- cursor: pointer; transition: box-shadow 0.12s ease; &:hover { box-shadow: inset 0 0 0 1px var(--crisp-border-default), 0 1px 2px rgba(0,0,0,0.04), 0 6px 16px -6px rgba(28,40,64,0.12); }
471
+ cursor: pointer; transition: box-shadow 0.12s ease;
472
+ &:hover { box-shadow: inset 0 0 0 1px var(--crisp-border-default), 0 1px 2px rgba(0,0,0,0.04), 0 6px 16px -6px rgba(28,40,64,0.12); }
464
473
  }
465
474
  .crisp-card--interactive_false {
466
475
 
@@ -475,15 +484,12 @@
475
484
  }
476
485
 
477
486
  .crisp-checkbox {
478
- 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-sm)
479
- ; background: var(--crisp-bg-surface)
480
- ; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary)
481
- 9%, transparent); cursor: pointer; transition: background-color .12s, box-shadow .12s; &:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 30%, transparent); }
482
- &:checked, &:indeterminate { background: var(--crisp-bg-brand-solid) center / 10px no-repeat; box-shadow: none; }
483
- &:checked { 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"); }
484
- &:indeterminate { background-image: linear-gradient(var(--crisp-fg-on-brand), var(--crisp-fg-on-brand)); background-size: 8px 2px; }
485
- &:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
486
-
487
+ 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-sm) ; background: var(--crisp-bg-surface) ; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 9%, transparent); cursor: pointer; transition: background-color .12s, box-shadow .12s;
488
+ &:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 30%, transparent); }
489
+ &:checked, &:indeterminate { background: var(--crisp-bg-brand-solid) center / 10px no-repeat; box-shadow: none; }
490
+ &:checked { 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"); }
491
+ &:indeterminate { background-image: linear-gradient(var(--crisp-fg-on-brand), var(--crisp-fg-on-brand)); background-size: 8px 2px; }
492
+ &:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
487
493
  }
488
494
 
489
495
  @media (prefers-reduced-motion: reduce) {
@@ -495,13 +501,9 @@
495
501
  }
496
502
 
497
503
  .crisp-columncalc {
498
- display: flex; align-items: stretch; width: 100%; height: 100%; font-family: var(--crisp-font-sans);
499
- /* Menu wraps its trigger in a flex div that sizes to content, which would
500
- shrink the button back to its text. Make the wrapper fill too, so the
501
- whole cell stays clickable. */
504
+ display: flex; align-items: stretch; width: 100%; height: 100%; font-family: var(--crisp-font-sans); /* Menu wraps its trigger in a flex div that sizes to content, which would shrink the button back to its text. Make the wrapper fill too, so the whole cell stays clickable. */
502
505
  & .crisp-menu { width: 100%; height: 100%; }
503
- /* No radius: the trigger fills the cell, so rounding its own corners
504
- leaves the cell's background showing through at the four corners as
506
+ /* No radius: the trigger fills the cell, so rounding its own corners leaves the cell's background showing through at the four corners as
505
507
  soon as the hover tint paints. Everything else that fills a grid cell
506
508
  agrees -- recordstable-sum-btn, the same summary trigger, declares no
507
509
  radius, and datatable-grip and the embedded pickers zero theirs. An 8px
@@ -558,30 +560,26 @@
558
560
  & .crisp-datatable-search input::placeholder { color: var(--crisp-fg-muted); }
559
561
  & .crisp-datatable-search input:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
560
562
  & .crisp-datatable-count { margin-inline-start: auto; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
561
- /* The header cell has no padding of its own -- the button owns the
562
- full cell so the whole header is clickable (its own inset is 12px).
563
- Mirrors the summary-row fix. */
563
+ /* The header cell has no padding of its own -- the button owns the /* announced, never drawn */
564
+ & .crisp-datatable-live { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
565
+ full cell so the whole header is clickable (its own inset is 12px). Mirrors the summary-row fix. */
564
566
  & th { padding: 0; }
565
- /* Same wrapper trap as AUTHORING.md Lesson 40 (ColumnCalc's summary trigger):
567
+ /* Same wrapper trap as AUTHORING.md Lesson 40 (ColumnCalc's summary trigger):
566
568
  Menu wraps its trigger in a flex div that sizes to its content, so a
567
569
  long header grew past the column instead of filling it -- with nothing
568
- left to squeeze, the label's own ellipsis CSS (below) had no properly
569
- -sized box to truncate against, and the th's own overflow hard-clipped
570
- it with no "...". Fill the wrapper, scoped to th so Menu's default
571
- (correct everywhere else) is untouched. */
570
+ left to squeeze, the label's own ellipsis CSS (below) had no properly -sized box to truncate against, and the th's own overflow hard-clipped
571
+ it with no "...". Fill the wrapper, scoped to th so Menu's default (correct everywhere else) is untouched. */
572
572
  & th .crisp-menu { width: 100%; height: 100%; }
573
573
  & .crisp-datatable-th-inner { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); width: 100%; min-width: 0; height: 100%; }
574
574
  & .crisp-datatable-th-inner > svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
575
- /* The summary cell has NO padding of its own -- the calculation trigger
576
- owns the whole 246x37 area so a click anywhere in the cell opens the
577
- menu. Zero the cell's inset and let ColumnCalc supply the 12px. */
575
+ /* The summary cell has NO padding of its own -- the calculation trigger owns the whole 246x37 area so a click anywhere in the cell opens the menu. Zero the cell's inset and let ColumnCalc supply the 12px. */
578
576
  & tfoot td { padding: 0; }
579
577
  /* Group heading row -- a view is grouped under a subtle label with the
580
578
  bucket's count beside it. */
581
- & .crisp-datatable-viewsettings { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: transparent; color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); white-space: nowrap; cursor: pointer; transition: background-color .12s, color .12s; }
579
+ & .crisp-datatable-viewsettings { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: transparent; color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); white-space: nowrap; cursor: pointer; transition: background-color .12s, color .12s; }
582
580
  & .crisp-datatable-viewsettings:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); color: var(--crisp-fg-primary); }
583
581
  & .crisp-datatable-group-label { padding: var(--crisp-space-1-5) 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); }
584
- & .crisp-datatable-group { height: var(--crisp-size-menuRow); padding: 0 var(--crisp-space-3); background: var(--crisp-bg-subtle); border-bottom: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
582
+ & .crisp-datatable-group { height: var(--crisp-size-menuRow); padding: 0 var(--crisp-space-3); background: var(--crisp-bg-subtle); border-bottom: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
585
583
  & .crisp-datatable-group-count { margin-inline-start: var(--crisp-space-1-5); color: var(--crisp-fg-muted); font-variant-numeric: tabular-nums; }
586
584
  & .crisp-datatable-th-rename { width: 100%; min-width: 0; height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-1); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); outline: none; }
587
585
  & .crisp-datatable-th-rename:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
@@ -635,13 +633,9 @@
635
633
  & .crisp-datatable-num { font-variant-numeric: tabular-nums; }
636
634
  & .crisp-datatable-muted { color: var(--crisp-fg-muted); }
637
635
  /* row drag-to-reorder -- a Settings > Objects > Attributes screen measures
638
- a leading 20px grip column, a 16px grip icon, and the row's own
639
- hairline doubling as the drop indicator (it tints toward the brand
640
- colour as the active drop target). The affordance + geometry are
641
- measured; the drag MECHANISM is crisp's existing house idiom -- HTML5
636
+ a leading 20px grip column, a 16px grip icon, and the row's own hairline doubling as the drop indicator (it tints toward the brand colour as the active drop target). The affordance + geometry are measured; the drag MECHANISM is crisp's existing house idiom -- HTML5
642
637
  draggable + dataTransfer, the same one column reorder already uses
643
- (RecordsTable's reorderColumn) -- not a proprietary
644
- pointer-events implementation. */
638
+ (RecordsTable's reorderColumn) -- not a proprietary pointer-events implementation. */
645
639
  & .crisp-datatable-col-grip { width: 20px; padding: 0; text-align: center; }
646
640
  & .crisp-datatable-grip { display: inline-flex; align-items: center; justify-content: center; width: 100%; height: 100%; margin: 0; border: none; border-radius: 0; background: none; font-family: inherit; color: var(--crisp-fg-muted); cursor: grab; }
647
641
  & .crisp-datatable-grip:active { cursor: grabbing; }
@@ -657,75 +651,28 @@
657
651
  }
658
652
 
659
653
  .crisp-datepicker {
660
-
661
- position: relative; box-sizing: border-box; width: 100%; min-width: 0;
662
- font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary); background: var(--crisp-bg-surface);
663
-
664
- & .crisp-datepicker-header {
665
- display: flex; align-items: center; justify-content: space-between;
666
- height: var(--crisp-size-menuRow);
667
- }
668
- & .crisp-datepicker-header-label {
669
- display: inline-flex; align-items: center; gap: var(--crisp-space-1);
670
- height: 100%; min-width: 0; border: 0; padding: 0 var(--crisp-space-1);
671
- border-radius: var(--crisp-radius-md); background: transparent; cursor: pointer;
672
- color: var(--crisp-fg-primary); font-family: inherit;
673
- font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium);
674
- white-space: nowrap;
675
- outline: 2px solid transparent; outline-offset: -2px;
676
- transition: outline-color .2s ease;
677
- }
654
+ position: relative; box-sizing: border-box; width: 100%; min-width: 0; font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary); background: var(--crisp-bg-surface);
655
+ & .crisp-datepicker-header { display: flex; align-items: center; justify-content: space-between; height: var(--crisp-size-menuRow); }
656
+ & .crisp-datepicker-header-label { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: 100%; min-width: 0; border: 0; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-md); background: transparent; cursor: pointer; color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); white-space: nowrap; outline: 2px solid transparent; outline-offset: -2px; transition: outline-color .2s ease; }
678
657
  & .crisp-datepicker-header-label:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
679
658
  & .crisp-datepicker-header-chevron { display: inline-flex; transition: transform .2s ease; }
680
659
  & .crisp-datepicker-header-chevron[data-open] { transform: rotate(180deg); }
681
-
682
660
  & .crisp-datepicker-nav { display: flex; align-items: center; }
683
- & .crisp-datepicker-nav-button {
684
- display: inline-flex; align-items: center; justify-content: center;
685
- width: var(--crisp-size-menuRow); height: var(--crisp-size-menuRow); padding: 0;
686
- border: none; border-radius: var(--crisp-radius-md); background: none;
687
- color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer;
688
- outline: 2px solid transparent; outline-offset: -2px;
689
- transition: background-color .12s, outline-color .2s ease;
690
- }
661
+ & .crisp-datepicker-nav-button { display: inline-flex; align-items: center; justify-content: center; width: var(--crisp-size-menuRow); height: var(--crisp-size-menuRow); padding: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; outline: 2px solid transparent; outline-offset: -2px; transition: background-color .12s, outline-color .2s ease; }
691
662
  & .crisp-datepicker-nav-button:hover { background: var(--crisp-bg-raised); }
692
663
  & .crisp-datepicker-nav-button:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
693
664
  & .crisp-datepicker-nav-button:disabled { opacity: .4; cursor: not-allowed; }
694
-
695
- & .crisp-datepicker-weekday-row {
696
- display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));
697
- position: relative; z-index: 2; background: var(--crisp-bg-surface);
698
- }
699
- & .crisp-datepicker-weekday {
700
- display: flex; align-items: center; justify-content: center;
701
- height: var(--crisp-size-calendarCell); color: var(--crisp-fg-neutral-subtle);
702
- font-size: var(--crisp-text-sm); line-height: 16px; font-weight: var(--crisp-weight-medium);
703
- }
704
-
665
+ & .crisp-datepicker-weekday-row { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); position: relative; z-index: 2; background: var(--crisp-bg-surface); }
666
+ & .crisp-datepicker-weekday { display: flex; align-items: center; justify-content: center; height: var(--crisp-size-calendarCell); color: var(--crisp-fg-neutral-subtle); font-size: var(--crisp-text-sm); line-height: 16px; font-weight: var(--crisp-weight-medium); }
705
667
  & .crisp-datepicker-months { display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; min-width: 0; }
706
668
  & .crisp-datepicker-months[data-wheel-open] { visibility: hidden; }
707
669
  & .crisp-datepicker-month { min-width: 0; }
708
- & .crisp-datepicker-month-label {
709
- display: flex; align-items: center; height: 24px;
710
- color: var(--crisp-fg-primary); font-size: var(--crisp-text-lg); line-height: 20px;
711
- font-weight: var(--crisp-weight-medium);
712
- }
713
-
670
+ & .crisp-datepicker-month-label { display: flex; align-items: center; height: 24px; color: var(--crisp-fg-primary); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); }
714
671
  & .crisp-datepicker-grid { display: grid; min-width: 0; }
715
672
  & .crisp-datepicker-week-row { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); }
716
-
717
- & .crisp-datepicker-cell {
718
- position: relative; min-width: 0; min-height: var(--crisp-size-calendarCell);
719
- isolation: isolate;
720
- }
673
+ & .crisp-datepicker-cell { position: relative; min-width: 0; min-height: var(--crisp-size-calendarCell); isolation: isolate; }
721
674
  & .crisp-datepicker-empty-cell { min-height: var(--crisp-size-calendarCell); }
722
-
723
- /* The bridge joining days inside a completed range.
724
- The endpoints do NOT carry data-in-range -- only the interior days do --
725
- so these are three independent rules, not a base plus two modifiers. A
726
- modifier that sets only inset-inline-start never generates a pseudo
727
- element on an endpoint, which leaves a half-cell of white between the
728
- endpoint's pill and the run of grey beside it. Each rule declares its
675
+ /* The bridge joining days inside a completed range. The endpoints do NOT carry data-in-range -- only the interior days do -- so these are three independent rules, not a base plus two modifiers. A modifier that sets only inset-inline-start never generates a pseudo element on an endpoint, which leaves a half-cell of white between the endpoint's pill and the run of grey beside it. Each rule declares its
729
676
  own content. */
730
677
  & .crisp-datepicker-cell[data-range-complete][data-in-range]::before {
731
678
  content: ""; position: absolute; z-index: -1; inset-inline: 0;
@@ -783,41 +730,23 @@
783
730
  Without this the content column top-aligns the glyph and the pill reads
784
731
  as offset — the cell is 48px, the pill 42px inset 3px, and only a
785
732
  42px-tall numeral box shares the pill's centre line. */
786
- & .crisp-datepicker-date-content > [data-date-picker-day] {
787
- display: flex; min-height: var(--crisp-size-calendarPill); flex-shrink: 0;
788
- align-items: center; justify-content: center;
789
- }
790
-
733
+ & .crisp-datepicker-date-content > [data-date-picker-day] { display: flex; min-height: var(--crisp-size-calendarPill); flex-shrink: 0; align-items: center; justify-content: center; }
791
734
  /* the year/month wheel, laid over the grid it replaces */
792
- & .crisp-datepicker-wheel-container {
793
- position: absolute; z-index: 1; inset-inline: 0;
794
- top: var(--crisp-size-menuRow); bottom: 0;
795
- display: flex; align-items: center; overflow: hidden;
796
- background: var(--crisp-bg-surface);
797
- }
735
+ & .crisp-datepicker-wheel-container { position: absolute; z-index: 1; inset-inline: 0; top: var(--crisp-size-menuRow); bottom: 0; display: flex; align-items: center; overflow: hidden; background: var(--crisp-bg-surface); }
798
736
  & .crisp-datepicker-wheel { width: 100%; }
799
-
800
- & .crisp-datepicker-continuous-scroll {
801
- height: 100%; min-height: 0; overflow-y: auto;
802
- overscroll-behavior: contain; scrollbar-width: none;
803
- }
737
+ & .crisp-datepicker-continuous-scroll { height: 100%; min-height: 0; overflow-y: auto; overscroll-behavior: contain; scrollbar-width: none; }
804
738
  & .crisp-datepicker-continuous-scroll::-webkit-scrollbar { display: none; }
805
739
  & .crisp-datepicker-continuous-content { display: flex; flex-direction: column; }
806
-
807
740
  /* announced, never drawn */
808
- & .crisp-datepicker-live-region {
809
- position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
810
- overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
811
- }
812
-
741
+ & .crisp-datepicker-live-region { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
813
742
  }
814
743
  .crisp-datepicker--visibleRange_month {
815
744
 
816
745
  }
817
746
  .crisp-datepicker--visibleRange_twoMonths {
818
747
  & .crisp-datepicker-months { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--crisp-space-6); }
819
- & .crisp-datepicker-two-month-header { display: flex; align-items: center; justify-content: space-between; height: var(--crisp-size-menuRow); }
820
- & .crisp-datepicker-two-month-label { color: var(--crisp-fg-primary); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); }
748
+ & .crisp-datepicker-two-month-header { display: flex; align-items: center; justify-content: space-between; height: var(--crisp-size-menuRow); }
749
+ & .crisp-datepicker-two-month-label { color: var(--crisp-fg-primary); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); }
821
750
  }
822
751
  .crisp-datepicker--visibleRange_week {
823
752
 
@@ -835,31 +764,16 @@
835
764
  }
836
765
 
837
766
  .crisp-datepickerfield {
838
-
839
- display: inline-flex; font-family: var(--crisp-font-sans);
840
-
841
- & .crisp-datepickerfield-trigger {
842
- display: inline-flex; align-items: center; gap: var(--crisp-space-2);
843
- box-sizing: border-box; height: 32px; padding: 0 var(--crisp-space-2-5); margin: 0;
844
- border: none; border-radius: var(--crisp-radius-md); background: transparent;
845
- box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent);
846
- color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-lg);
847
- white-space: nowrap; cursor: pointer;
848
- }
767
+ display: inline-flex; font-family: var(--crisp-font-sans);
768
+ & .crisp-datepickerfield-trigger { display: inline-flex; align-items: center; gap: var(--crisp-space-2); box-sizing: border-box; height: 32px; padding: 0 var(--crisp-space-2-5); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent); color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-lg); white-space: nowrap; cursor: pointer; }
849
769
  & .crisp-datepickerfield-trigger[data-ghost] { background: transparent; box-shadow: none; }
850
770
  & .crisp-datepickerfield-trigger[data-ghost]:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); }
851
771
  & .crisp-datepickerfield-trigger[data-placeholder] { color: var(--crisp-fg-muted); }
852
772
  & .crisp-datepickerfield-trigger svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
853
-
854
773
  & .crisp-datepickerfield-panel { padding: var(--crisp-space-2); width: 300px; }
855
774
  & .crisp-datepickerfield-presets { display: flex; flex-wrap: wrap; gap: var(--crisp-space-1); margin-top: var(--crisp-space-2); }
856
- & .crisp-datepickerfield-preset {
857
- height: var(--crisp-size-chip); padding: 0 var(--crisp-space-2); border: none;
858
- border-radius: var(--crisp-radius-chip); background: var(--crisp-bg-raised); color: var(--crisp-fg-primary);
859
- font-family: inherit; font-size: var(--crisp-text-sm); cursor: pointer;
860
- }
775
+ & .crisp-datepickerfield-preset { height: var(--crisp-size-chip); padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-chip); background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-sm); cursor: pointer; }
861
776
  & .crisp-datepickerfield-preset:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); }
862
-
863
777
  }
864
778
 
865
779
  .crisp-dialog {
@@ -897,8 +811,7 @@
897
811
  }
898
812
 
899
813
  .crisp-donutchart {
900
- display: inline-flex; align-items: center; gap: var(--crisp-space-4); box-sizing: border-box; font-family: var(--crisp-font-sans);
901
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
814
+ display: inline-flex; align-items: center; gap: var(--crisp-space-4); box-sizing: border-box; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
902
815
  & .crisp-donutchart-ring { position: relative; flex-shrink: 0; }
903
816
  & .crisp-donutchart-svg { display: block; }
904
817
  & .crisp-donutchart-seg { fill: none; transition: stroke-dasharray 0.3s ease; }
@@ -969,85 +882,35 @@
969
882
  }
970
883
 
971
884
  .crisp-fileupload {
972
-
973
- display: flex; flex-direction: column; gap: var(--crisp-space-2);
974
- font-family: var(--crisp-font-sans); min-width: 0;
975
-
976
- & .crisp-fileupload-zone {
977
- box-sizing: border-box; position: relative;
978
- display: flex; flex-direction: column; align-items: center;
979
- justify-content: center; gap: var(--crisp-space-1);
980
- width: 100%; padding: var(--crisp-space-6) var(--crisp-space-4);
981
- border: 1px dashed var(--crisp-border-default); border-radius: var(--crisp-radius-md);
982
- background: transparent; cursor: pointer; text-align: center;
983
- font-family: inherit;
984
- transition: background-color .12s, border-color .12s;
985
- outline: 2px solid transparent; outline-offset: -2px;
986
- }
885
+ display: flex; flex-direction: column; gap: var(--crisp-space-2); font-family: var(--crisp-font-sans); min-width: 0;
886
+ & .crisp-fileupload-zone { box-sizing: border-box; position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--crisp-space-1); width: 100%; padding: var(--crisp-space-6) var(--crisp-space-4); border: 1px dashed var(--crisp-border-default); border-radius: var(--crisp-radius-md); background: transparent; cursor: pointer; text-align: center; font-family: inherit; transition: background-color .12s, border-color .12s; outline: 2px solid transparent; outline-offset: -2px; }
987
887
  & .crisp-fileupload-zone:hover { background: var(--crisp-bg-raised); }
988
888
  & .crisp-fileupload-zone:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
989
- & .crisp-fileupload-zone[data-dragging] {
990
- border-color: var(--crisp-bg-brand-solid);
991
- background: color-mix(in srgb, var(--crisp-bg-brand-solid) 6%, transparent);
992
- }
889
+ & .crisp-fileupload-zone[data-dragging] { border-color: var(--crisp-bg-brand-solid); background: color-mix(in srgb, var(--crisp-bg-brand-solid) 6%, transparent); }
993
890
  & .crisp-fileupload-zone[data-disabled] { opacity: .5; cursor: not-allowed; }
994
891
  & .crisp-fileupload-zone[data-invalid] { border-color: var(--crisp-bg-danger); }
995
-
996
892
  /* "No files" 16/20 weight 600 */
997
- & .crisp-fileupload-title {
998
- color: var(--crisp-fg-primary); font-size: var(--crisp-text-xl); line-height: 20px;
999
- font-weight: var(--crisp-weight-semibold);
1000
- }
893
+ & .crisp-fileupload-title { color: var(--crisp-fg-primary); font-size: var(--crisp-text-xl); line-height: 20px; font-weight: var(--crisp-weight-semibold); }
1001
894
  /* The hint line, 14/20 weight 500 at 63% of the foreground */
1002
- & .crisp-fileupload-hint {
1003
- color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
1004
- font-size: var(--crisp-text-lg); line-height: 20px;
1005
- font-weight: var(--crisp-weight-medium);
1006
- }
1007
-
1008
- & .crisp-fileupload-input {
1009
- position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
1010
- overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
1011
- }
1012
-
895
+ & .crisp-fileupload-hint { color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); }
896
+ & .crisp-fileupload-input { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
1013
897
  & .crisp-fileupload-list { display: flex; flex-direction: column; gap: var(--crisp-space-1); margin: 0; padding: 0; list-style: none; }
1014
898
  /* the row height crisp measured for a data-grid row */
1015
- & .crisp-fileupload-item {
1016
- display: flex; align-items: center; gap: var(--crisp-space-2);
1017
- min-height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-2);
1018
- border-radius: var(--crisp-radius-md); background: var(--crisp-bg-raised);
1019
- font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary);
1020
- }
899
+ & .crisp-fileupload-item { display: flex; align-items: center; gap: var(--crisp-space-2); min-height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-2); border-radius: var(--crisp-radius-md); background: var(--crisp-bg-raised); font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary); }
1021
900
  & .crisp-fileupload-item-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1022
901
  & .crisp-fileupload-item-size { flex-shrink: 0; color: var(--crisp-fg-muted); font-size: var(--crisp-text-sm); font-variant-numeric: tabular-nums; }
1023
902
  & .crisp-fileupload-item[data-status="error"] { color: var(--crisp-bg-danger); }
1024
903
  & .crisp-fileupload-item[data-status="error"] .crisp-fileupload-item-size { color: var(--crisp-bg-danger); }
1025
-
1026
904
  /* progress track, reusing the measured Progress geometry */
1027
- & .crisp-fileupload-progress {
1028
- flex-shrink: 0; width: 64px; height: 4px; border-radius: var(--crisp-radius-full);
1029
- background: var(--crisp-bg-neutral-weak); overflow: hidden;
1030
- }
905
+ & .crisp-fileupload-progress { flex-shrink: 0; width: 64px; height: 4px; border-radius: var(--crisp-radius-full); background: var(--crisp-bg-neutral-weak); overflow: hidden; }
1031
906
  & .crisp-fileupload-progress-fill { height: 100%; background: var(--crisp-bg-brand-solid); transition: width .2s ease; }
1032
-
1033
- & .crisp-fileupload-remove {
1034
- display: inline-flex; align-items: center; justify-content: center;
1035
- flex-shrink: 0; width: var(--crisp-size-icon); height: var(--crisp-size-icon);
1036
- padding: 0; border: none; border-radius: var(--crisp-radius-sm);
1037
- background: transparent; color: var(--crisp-fg-muted); cursor: pointer;
1038
- font-family: inherit;
1039
- outline: 2px solid transparent; outline-offset: -2px;
1040
- }
907
+ & .crisp-fileupload-remove { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: var(--crisp-size-icon); height: var(--crisp-size-icon); padding: 0; border: none; border-radius: var(--crisp-radius-sm); background: transparent; color: var(--crisp-fg-muted); cursor: pointer; font-family: inherit; outline: 2px solid transparent; outline-offset: -2px; }
1041
908
  & .crisp-fileupload-remove:hover { color: var(--crisp-fg-primary); }
1042
909
  & .crisp-fileupload-remove:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
1043
-
1044
910
  & .crisp-fileupload-errors { display: flex; flex-direction: column; gap: var(--crisp-space-0-5); margin: 0; padding: 0; list-style: none; }
1045
- /* out of flow while empty, so the always-mounted live region costs no
1046
- layout: display:none would take it out of the accessibility tree, which
1047
- is the one thing it exists to be in */
911
+ /* out of flow while empty, so the always-mounted live region costs no layout: display:none would take it out of the accessibility tree, which is the one thing it exists to be in */
1048
912
  & .crisp-fileupload-errors:empty { position: absolute; }
1049
913
  & .crisp-fileupload-error { color: var(--crisp-bg-danger); font-size: var(--crisp-text-md); line-height: 18px; }
1050
-
1051
914
  }
1052
915
 
1053
916
  @media (prefers-reduced-motion: reduce) {
@@ -1068,36 +931,25 @@
1068
931
  }
1069
932
 
1070
933
  .crisp-input {
1071
-
1072
- position: relative; box-sizing: border-box; display: inline-flex; align-items: center;
1073
- width: 100%; 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);
1074
- font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); line-height: 20px;
1075
-
1076
- &::after {
1077
- content: ""; position: absolute; inset: 0; border-radius: inherit;
1078
- border: 2px solid transparent; transition: border-color .1s ease;
1079
- pointer-events: none;
1080
- }
934
+ position: relative; box-sizing: border-box; display: inline-flex; align-items: center; width: 100%; 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: var(--crisp-font-sans); font-size: var(--crisp-text-lg); line-height: 20px;
935
+ &::after { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 2px solid transparent; transition: border-color .1s ease; pointer-events: none; }
1081
936
  &:focus-within::after { border-color: var(--crisp-stroke-field-focus); }
1082
-
1083
- & .crisp-input-value {
1084
- box-sizing: border-box; flex: 1 1 auto; min-width: 0; width: 100%;
1085
- align-self: stretch; margin: 0; border: none; background: none; outline: none;
1086
- font: inherit; color: var(--crisp-fg-primary);
1087
- }
937
+ & .crisp-input-value { box-sizing: border-box; flex: 1 1 auto; min-width: 0; width: 100%; align-self: stretch; margin: 0; border: none; background: none; outline: none; font: inherit; color: var(--crisp-fg-primary); }
1088
938
  & .crisp-input-value::placeholder { color: var(--crisp-fg-muted); }
1089
939
  & .crisp-input-value:disabled { opacity: 0.5; cursor: not-allowed; }
1090
940
  &:has(.crisp-input-value:disabled) { opacity: 1; }
1091
-
1092
941
  }
1093
942
  .crisp-input--size_medium {
1094
- height: 32px; border-radius: var(--crisp-radius-md); & .crisp-input-value { padding-inline: var(--crisp-space-2-5); }
943
+ height: 32px; border-radius: var(--crisp-radius-md);
944
+ & .crisp-input-value { padding-inline: var(--crisp-space-2-5); }
1095
945
  }
1096
946
  .crisp-input--size_large {
1097
- height: 36px; border-radius: 10px; & .crisp-input-value { padding-inline: var(--crisp-space-3); }
947
+ height: 36px; border-radius: 10px;
948
+ & .crisp-input-value { padding-inline: var(--crisp-space-3); }
1098
949
  }
1099
950
  .crisp-input--invalid_true {
1100
- &::after { border-color: var(--crisp-bg-danger); } &:focus-within::after { border-color: var(--crisp-bg-danger); }
951
+ &::after { border-color: var(--crisp-bg-danger); }
952
+ &:focus-within::after { border-color: var(--crisp-bg-danger); }
1101
953
  }
1102
954
  .crisp-input--invalid_false {
1103
955
 
@@ -1132,27 +984,13 @@
1132
984
  }
1133
985
 
1134
986
  .crisp-menu {
1135
-
1136
- position: relative; display: inline-flex; font-family: var(--crisp-font-sans);
1137
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1138
-
1139
- & .crisp-menu-content {
1140
- position: fixed; z-index: 60; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px);
1141
- min-width: 200px; max-height: 360px; overflow-y: auto; padding: var(--crisp-space-1);
1142
- border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover);
1143
- 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);
1144
- transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease;
1145
- }
987
+ position: relative; display: inline-flex; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
988
+ & .crisp-menu-content { position: fixed; z-index: 60; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px); min-width: 200px; max-height: 360px; overflow-y: auto; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover); 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); transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease; }
1146
989
  & .crisp-menu-content[data-align="end"] { transform-origin: top right; }
1147
990
  & .crisp-menu-content[data-up] { transform-origin: bottom left; }
1148
991
  & .crisp-menu-content[data-up][data-align="end"] { transform-origin: bottom right; }
1149
992
  & .crisp-menu-content { @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
1150
-
1151
- & .crisp-menu-item {
1152
- box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-1-5); width: 100%; height: var(--crisp-size-menuRow); flex-shrink: 0;
1153
- margin: 0; padding: 0 var(--crisp-space-2); border: none; background: none; border-radius: var(--crisp-radius-md);
1154
- font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; white-space: nowrap;
1155
- }
993
+ & .crisp-menu-item { box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-1-5); width: 100%; height: var(--crisp-size-menuRow); flex-shrink: 0; margin: 0; padding: 0 var(--crisp-space-2); border: none; background: none; border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; white-space: nowrap; }
1156
994
  & .crisp-menu-item svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
1157
995
  & .crisp-menu-item:focus { outline: none; }
1158
996
  & .crisp-menu-item:hover:not([data-disabled]), & .crisp-menu-item:focus-visible:not([data-disabled]), & .crisp-menu-item[data-highlighted]:not([data-disabled]) { background: var(--crisp-bg-raised); }
@@ -1164,10 +1002,8 @@
1164
1002
  & .crisp-menu-item-shortcut { flex-shrink: 0; margin-inline-start: var(--crisp-space-3); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); letter-spacing: 0.02em; }
1165
1003
  & .crisp-menu-item-check { flex-shrink: 0; color: var(--crisp-bg-brand-solid); }
1166
1004
  & .crisp-menu-item-check--placeholder { width: 15px; }
1167
-
1168
1005
  & .crisp-menu-sep { height: 1px; flex-shrink: 0; border: none; margin: var(--crisp-space-1) calc(-1 * var(--crisp-space-1)); background: var(--crisp-border-subtle); }
1169
1006
  & .crisp-menu-label { padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
1170
-
1171
1007
  }
1172
1008
 
1173
1009
  @media (prefers-reduced-motion: reduce) {
@@ -1179,17 +1015,8 @@
1179
1015
  }
1180
1016
 
1181
1017
  .crisp-multiselect {
1182
-
1183
- position: relative; display: inline-flex; width: 100%; font-family: var(--crisp-font-sans);
1184
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1185
-
1186
- & .crisp-multiselect-trigger {
1187
- box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-1); width: 100%; min-width: 0; min-height: var(--crisp-size-menuRow);
1188
- margin: 0; padding: var(--crisp-space-0-5) var(--crisp-space-1-5) var(--crisp-space-0-5) var(--crisp-space-2);
1189
- border: none; border-radius: var(--crisp-radius-md); background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent);
1190
- font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); cursor: pointer; text-align: start;
1191
- transition: background-color .12s ease, box-shadow .12s ease;
1192
- }
1018
+ position: relative; display: inline-flex; width: 100%; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1019
+ & .crisp-multiselect-trigger { box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-1); width: 100%; min-width: 0; min-height: var(--crisp-size-menuRow); margin: 0; padding: var(--crisp-space-0-5) var(--crisp-space-1-5) var(--crisp-space-0-5) var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); cursor: pointer; text-align: start; transition: background-color .12s ease, box-shadow .12s ease; }
1193
1020
  & .crisp-multiselect-trigger:hover { background: var(--crisp-bg-raised); }
1194
1021
  & .crisp-multiselect-trigger[data-open], & .crisp-multiselect-trigger:focus-visible { outline: none; box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); background: var(--crisp-bg-surface); }
1195
1022
  & .crisp-multiselect-trigger:disabled { opacity: 0.5; cursor: not-allowed; }
@@ -1197,30 +1024,19 @@
1197
1024
  & .crisp-multiselect-placeholder { color: var(--crisp-fg-muted); }
1198
1025
  & .crisp-multiselect-chevron { flex-shrink: 0; color: var(--crisp-fg-muted); transition: transform .15s ease; }
1199
1026
  & .crisp-multiselect-trigger[data-open] .crisp-multiselect-chevron { transform: rotate(180deg); }
1200
-
1201
- & .crisp-multiselect-listbox {
1202
- position: fixed; z-index: 60; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px);
1203
- max-height: 300px; overflow-y: auto; padding: var(--crisp-space-1);
1204
- border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover);
1205
- 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);
1206
- transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease;
1207
- }
1027
+ & .crisp-multiselect-listbox { position: fixed; z-index: 60; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px); max-height: 300px; overflow-y: auto; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover); 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); transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease; }
1208
1028
  & .crisp-multiselect-listbox[data-up] { transform-origin: bottom left; }
1209
1029
  & .crisp-multiselect-listbox { @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
1210
1030
  & .crisp-multiselect-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 34px; flex-shrink: 0; margin: calc(-1 * var(--crisp-space-1)) calc(-1 * var(--crisp-space-1)) var(--crisp-space-1); padding: 0 var(--crisp-space-2-5); border-bottom: 1px solid var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
1211
1031
  & .crisp-multiselect-search svg { flex-shrink: 0; }
1212
1032
  & .crisp-multiselect-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
1213
1033
  & .crisp-multiselect-search input::placeholder { color: var(--crisp-fg-muted); }
1214
- & .crisp-multiselect-option {
1215
- box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-menuRow); flex-shrink: 0;
1216
- padding: 0 var(--crisp-space-2); margin: 0; border: none; background: none; border-radius: var(--crisp-radius-md); font-family: inherit; cursor: pointer; text-align: start;
1217
- }
1034
+ & .crisp-multiselect-option { box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-menuRow); flex-shrink: 0; padding: 0 var(--crisp-space-2); margin: 0; border: none; background: none; border-radius: var(--crisp-radius-md); font-family: inherit; cursor: pointer; text-align: start; }
1218
1035
  & .crisp-multiselect-option[data-highlighted] { background: var(--crisp-bg-raised); }
1219
1036
  & .crisp-multiselect-option-chip { flex: 0 1 auto; min-width: 0; overflow: hidden; }
1220
1037
  & .crisp-multiselect-check { flex-shrink: 0; margin-inline-start: auto; display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: var(--crisp-radius-sm); box-shadow: inset 0 0 0 1.5px var(--crisp-border-default); color: transparent; }
1221
1038
  & .crisp-multiselect-option[aria-selected="true"] .crisp-multiselect-check { background: var(--crisp-bg-brand-solid); box-shadow: none; color: #fff; }
1222
1039
  & .crisp-multiselect-empty { padding: var(--crisp-space-3) var(--crisp-space-2); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
1223
-
1224
1040
  & .crisp-recordstable-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; overflow: hidden; text-overflow: ellipsis; background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 82%, transparent); }
1225
1041
  & .crisp-recordstable-tag[data-tone="brand"] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); color: color-mix(in srgb, var(--crisp-bg-brand-solid) 82%, var(--crisp-fg-primary)); }
1226
1042
  & .crisp-recordstable-tag[data-tone="success"] { background: color-mix(in srgb, var(--crisp-bg-success) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-success) 78%, var(--crisp-fg-primary)); }
@@ -1229,7 +1045,6 @@
1229
1045
  & .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)); }
1230
1046
  & .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)); }
1231
1047
  & .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)); }
1232
-
1233
1048
  }
1234
1049
 
1235
1050
  @media (prefers-reduced-motion: reduce) {
@@ -1272,68 +1087,33 @@
1272
1087
  }
1273
1088
 
1274
1089
  .crisp-quantitypicker {
1275
-
1276
- display: inline-flex; box-sizing: border-box; width: fit-content;
1277
- align-items: center; font-family: var(--crisp-font-sans);
1278
- background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-default);
1279
-
1090
+ display: inline-flex; box-sizing: border-box; width: fit-content; align-items: center; font-family: var(--crisp-font-sans); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-default);
1280
1091
  &[data-invalid] { box-shadow: inset 0 0 0 2px var(--crisp-bg-danger); }
1281
-
1282
- & .crisp-quantitypicker-button {
1283
- display: inline-flex; flex-shrink: 0; box-sizing: border-box;
1284
- align-items: center; justify-content: center;
1285
- border: none; padding: 0; cursor: pointer;
1286
- background: transparent; color: var(--crisp-fg-primary);
1287
- transition: background-color .15s ease, outline-color .15s ease;
1288
- outline: 2px solid transparent; outline-offset: 2px;
1289
- }
1092
+ & .crisp-quantitypicker-button { display: inline-flex; flex-shrink: 0; box-sizing: border-box; align-items: center; justify-content: center; border: none; padding: 0; cursor: pointer; background: transparent; color: var(--crisp-fg-primary); transition: background-color .15s ease, outline-color .15s ease; outline: 2px solid transparent; outline-offset: 2px; }
1290
1093
  & .crisp-quantitypicker-button:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
1291
1094
  & .crisp-quantitypicker-button:not([data-disabled]):hover { background: var(--crisp-bg-raised); }
1292
1095
  & .crisp-quantitypicker-button[data-loading] { background: var(--crisp-bg-raised); }
1293
1096
  & .crisp-quantitypicker-button[data-disabled] { cursor: not-allowed; color: var(--crisp-fg-disabled); }
1294
-
1295
- & .crisp-quantitypicker-value {
1296
- display: grid; flex-grow: 1; flex-shrink: 0; box-sizing: border-box;
1297
- align-items: center; justify-content: center;
1298
- padding-inline: var(--crisp-space-2);
1299
- font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary);
1300
- }
1097
+ & .crisp-quantitypicker-value { display: grid; flex-grow: 1; flex-shrink: 0; box-sizing: border-box; align-items: center; justify-content: center; padding-inline: var(--crisp-space-2); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
1301
1098
  & .crisp-quantitypicker-value[data-disabled] { color: var(--crisp-fg-disabled); }
1302
- & .crisp-quantitypicker-placeholder {
1303
- grid-column: 1; grid-row: 1; visibility: hidden;
1304
- font-variant-numeric: tabular-nums;
1305
- }
1306
- & .crisp-quantitypicker-text {
1307
- grid-column: 1; grid-row: 1; text-align: center;
1308
- font-variant-numeric: tabular-nums;
1309
- }
1310
-
1311
- & .crisp-quantitypicker-divider {
1312
- flex-shrink: 0; width: 1px; height: var(--crisp-space-4);
1313
- background: var(--crisp-border-subtle);
1314
- }
1315
-
1099
+ & .crisp-quantitypicker-placeholder { grid-column: 1; grid-row: 1; visibility: hidden; font-variant-numeric: tabular-nums; }
1100
+ & .crisp-quantitypicker-text { grid-column: 1; grid-row: 1; text-align: center; font-variant-numeric: tabular-nums; }
1101
+ & .crisp-quantitypicker-divider { flex-shrink: 0; width: 1px; height: var(--crisp-space-4); background: var(--crisp-border-subtle); }
1316
1102
  }
1317
1103
  .crisp-quantitypicker--size_small {
1318
-
1319
- height: 36px; border-radius: var(--crisp-radius-md);
1320
- & .crisp-quantitypicker-button { width: 36px; height: 36px; border-radius: var(--crisp-radius-md); }
1321
- & .crisp-quantitypicker-value { font-size: var(--crisp-text-xl); line-height: 22px; }
1322
-
1104
+ height: 36px; border-radius: var(--crisp-radius-md);
1105
+ & .crisp-quantitypicker-button { width: 36px; height: 36px; border-radius: var(--crisp-radius-md); }
1106
+ & .crisp-quantitypicker-value { font-size: var(--crisp-text-xl); line-height: 22px; }
1323
1107
  }
1324
1108
  .crisp-quantitypicker--size_medium {
1325
-
1326
- height: 40px; border-radius: var(--crisp-radius-md);
1327
- & .crisp-quantitypicker-button { width: 40px; height: 40px; border-radius: var(--crisp-radius-md); }
1328
- & .crisp-quantitypicker-value { font-size: var(--crisp-text-xl); line-height: 22px; }
1329
-
1109
+ height: 40px; border-radius: var(--crisp-radius-md);
1110
+ & .crisp-quantitypicker-button { width: 40px; height: 40px; border-radius: var(--crisp-radius-md); }
1111
+ & .crisp-quantitypicker-value { font-size: var(--crisp-text-xl); line-height: 22px; }
1330
1112
  }
1331
1113
  .crisp-quantitypicker--size_large {
1332
-
1333
- height: 52px; border-radius: var(--crisp-radius-xl);
1334
- & .crisp-quantitypicker-button { width: 52px; height: 52px; border-radius: var(--crisp-radius-xl); }
1335
- & .crisp-quantitypicker-value { font-size: 18px; line-height: 24px; }
1336
-
1114
+ height: 52px; border-radius: var(--crisp-radius-xl);
1115
+ & .crisp-quantitypicker-button { width: 52px; height: 52px; border-radius: var(--crisp-radius-xl); }
1116
+ & .crisp-quantitypicker-value { font-size: 18px; line-height: 24px; }
1337
1117
  }
1338
1118
  .crisp-quantitypicker--fill_true {
1339
1119
  width: auto; flex-grow: 1;
@@ -1351,10 +1131,7 @@
1351
1131
  }
1352
1132
 
1353
1133
  .crisp-radiogroup {
1354
-
1355
- display: flex; flex-direction: column; gap: var(--crisp-space-1); font-family: var(--crisp-font-sans);
1356
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1357
-
1134
+ display: flex; flex-direction: column; gap: var(--crisp-space-1); font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1358
1135
  & .crisp-radio { display: flex; align-items: center; gap: var(--crisp-space-2); margin: 0; padding: var(--crisp-space-1) var(--crisp-space-1); border: none; background: none; border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; }
1359
1136
  & .crisp-radio:disabled { opacity: 0.5; cursor: not-allowed; }
1360
1137
  & .crisp-radio:focus-visible { outline: none; }
@@ -1364,14 +1141,12 @@
1364
1141
  & .crisp-radio[data-checked] .crisp-radio-dot::after { content: ""; position: absolute; inset: 0; margin: auto; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); background: var(--crisp-bg-brand-solid); }
1365
1142
  & .crisp-radio:focus-visible .crisp-radio-dot { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
1366
1143
  & .crisp-radio-label { min-width: 0; }
1367
-
1368
1144
  &[data-variant="card"] { flex-direction: row; flex-wrap: wrap; gap: var(--crisp-space-3); }
1369
1145
  &[data-variant="card"] .crisp-radio { flex: 1 1 150px; min-width: 150px; flex-direction: column; align-items: stretch; gap: 0; padding: 0; border-radius: var(--crisp-radius-2xl); box-shadow: inset 0 0 0 1px var(--crisp-border-default); overflow: hidden; transition: box-shadow .12s ease; }
1370
1146
  &[data-variant="card"] .crisp-radio:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 22%, transparent); }
1371
1147
  &[data-variant="card"] .crisp-radio[data-checked] { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
1372
1148
  &[data-variant="card"] .crisp-radio-preview { flex: 1; min-height: 0; background: var(--crisp-bg-raised); }
1373
1149
  &[data-variant="card"] .crisp-radio-cardfoot { display: flex; align-items: center; gap: var(--crisp-space-2); padding: var(--crisp-space-2) var(--crisp-space-2-5); border-top: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); }
1374
-
1375
1150
  }
1376
1151
 
1377
1152
  @media (prefers-reduced-motion: reduce) {
@@ -1383,29 +1158,22 @@
1383
1158
  }
1384
1159
 
1385
1160
  .crisp-resizablepanel {
1386
-
1387
- position: relative; display: flex; height: 100%;
1161
+ position: relative; display: flex; height: 100%;
1388
1162
  & .crisp-resizablepanel-spacer { flex: 0 0 auto; height: 100%; transition: width 0.14s; }
1389
1163
  & .crisp-resizablepanel-panel { position: absolute; top: 0; bottom: 0; box-sizing: border-box; overflow: hidden; background: var(--crisp-bg-surface); }
1390
1164
  & .crisp-resizablepanel-panel[data-side="left"] { left: 0; }
1391
1165
  & .crisp-resizablepanel-panel[data-side="right"] { right: 0; }
1392
-
1393
1166
  /* docked */
1394
1167
  & .crisp-resizablepanel-panel[data-floating="false"] { border-radius: 0; box-shadow: none; }
1395
1168
  & .crisp-resizablepanel-panel[data-floating="false"][data-side="left"] { border-inline-end: 1px solid var(--crisp-border-subtle); }
1396
1169
  & .crisp-resizablepanel-panel[data-floating="false"][data-side="right"] { border-inline-start: 1px solid var(--crisp-border-subtle); }
1397
-
1398
- /* floating — position: fixed, 8px gutter, r10, the measured floating elevation.
1399
- Rest is transform: none (Lesson 27); the off-canvas value is the @starting-style enter only. */
1170
+ /* floating — position: fixed, 8px gutter, r10, the measured floating elevation. Rest is transform: none (Lesson 27); the off-canvas value is the @starting-style enter only. */
1400
1171
  & .crisp-resizablepanel-panel[data-floating="true"] { position: fixed; top: var(--crisp-space-2); bottom: var(--crisp-space-2); border-inline-end: none; border-inline-start: none; border-radius: 10px; 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); transform: none; transition: transform 0.14s, padding 0.14s; }
1401
1172
  & .crisp-resizablepanel-panel[data-floating="true"][data-side="left"] { padding: var(--crisp-space-2) 0 var(--crisp-space-2) var(--crisp-space-2); @starting-style { transform: translateX(calc(-100% - var(--crisp-space-2))); } }
1402
1173
  & .crisp-resizablepanel-panel[data-floating="true"][data-side="right"] { padding: var(--crisp-space-2) var(--crisp-space-2) var(--crisp-space-2) 0; @starting-style { transform: translateX(calc(100% + var(--crisp-space-2))); } }
1403
-
1404
1174
  & .crisp-resizablepanel-inner { height: 100%; opacity: 1; }
1405
1175
  & .crisp-resizablepanel-panel[data-floating="true"] .crisp-resizablepanel-inner { opacity: 1; transition: opacity 0.14s; @starting-style { opacity: 0; } }
1406
-
1407
- /* handle — variant "panel" (default): a 10px hit target, its ::before the
1408
- only visible divider (1px rest -> 2px on hover/drag, brand-solid). */
1176
+ /* handle — variant "panel" (default): a 10px hit target, its ::before the only visible divider (1px rest -> 2px on hover/drag, brand-solid). */
1409
1177
  & .crisp-resizablepanel-handle { position: absolute; top: 0; width: 10px; height: 100%; z-index: 2; cursor: col-resize; background: transparent; touch-action: none; }
1410
1178
  & .crisp-resizablepanel-handle[data-side="left"] { right: 0; }
1411
1179
  & .crisp-resizablepanel-handle[data-side="right"] { left: 0; }
@@ -1413,10 +1181,7 @@
1413
1181
  & .crisp-resizablepanel-handle[data-side="left"]::before { right: 0; }
1414
1182
  & .crisp-resizablepanel-handle[data-side="right"]::before { left: 0; }
1415
1183
  & .crisp-resizablepanel-handle:hover::before, & .crisp-resizablepanel-handle[data-dragging="true"]::before { width: 2px; background: var(--crisp-bg-brand-solid); }
1416
-
1417
- /* handle — variant "column": a wider 7px hit target straddling a 1px
1418
- divider (table column edges), with a real 3px inner bar whose opacity
1419
- comes in on a 100ms DELAY — distinct from the panel variant's instant
1184
+ /* handle — variant "column": a wider 7px hit target straddling a 1px divider (table column edges), with a real 3px inner bar whose opacity comes in on a 100ms DELAY — distinct from the panel variant's instant
1420
1185
  ::before swap. */
1421
1186
  /* .crisp-resizablepanel-handle.crisp-resizablepanel-handle--column (both classes) to
1422
1187
  out-specificity the base [data-side] left/right rules above, which
@@ -1425,7 +1190,6 @@
1425
1190
  & .crisp-resizablepanel-handle--column::before { content: none; }
1426
1191
  & .crisp-resizablepanel-handle-inner { width: 3px; height: 100%; border-radius: 3px; background: var(--crisp-bg-brand-solid); opacity: 0; transition: opacity 0.1s 0.1s; }
1427
1192
  & .crisp-resizablepanel-handle--column:hover .crisp-resizablepanel-handle-inner, & .crisp-resizablepanel-handle--column[data-dragging="true"] .crisp-resizablepanel-handle-inner { opacity: 1; }
1428
-
1429
1193
  }
1430
1194
 
1431
1195
  @media (prefers-reduced-motion: reduce) {
@@ -1456,17 +1220,8 @@
1456
1220
  }
1457
1221
 
1458
1222
  .crisp-select {
1459
-
1460
- position: relative; display: inline-flex; font-family: var(--crisp-font-sans);
1461
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1462
-
1463
- & .crisp-select-trigger {
1464
- box-sizing: border-box; display: inline-flex; align-items: center; gap: var(--crisp-space-1-5);
1465
- height: var(--crisp-size-menuRow); width: 100%; min-width: 0; margin: 0; padding: 0 var(--crisp-space-1-5) 0 var(--crisp-space-2);
1466
- border: none; border-radius: var(--crisp-radius-md); background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent);
1467
- font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); cursor: pointer;
1468
- transition: background-color .12s ease, box-shadow .12s ease;
1469
- }
1223
+ position: relative; display: inline-flex; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1224
+ & .crisp-select-trigger { box-sizing: border-box; display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-menuRow); width: 100%; min-width: 0; margin: 0; padding: 0 var(--crisp-space-1-5) 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); cursor: pointer; transition: background-color .12s ease, box-shadow .12s ease; }
1470
1225
  & .crisp-select-trigger:hover { background: var(--crisp-bg-raised); }
1471
1226
  & .crisp-select-trigger[data-open], & .crisp-select-trigger:focus-visible { outline: none; box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); background: var(--crisp-bg-surface); }
1472
1227
  & .crisp-select-trigger:disabled { opacity: 0.5; cursor: not-allowed; }
@@ -1474,14 +1229,7 @@
1474
1229
  & .crisp-select-placeholder { color: var(--crisp-fg-muted); }
1475
1230
  & .crisp-select-chevron { flex-shrink: 0; color: var(--crisp-fg-muted); transition: transform .15s ease; }
1476
1231
  & .crisp-select-trigger[data-open] .crisp-select-chevron { transform: rotate(180deg); }
1477
-
1478
- & .crisp-select-listbox {
1479
- position: fixed; z-index: 60; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px);
1480
- max-height: 280px; overflow-y: auto; padding: var(--crisp-space-1);
1481
- border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover);
1482
- 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);
1483
- transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease;
1484
- }
1232
+ & .crisp-select-listbox { position: fixed; z-index: 60; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px); max-height: 280px; overflow-y: auto; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover); 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); transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease; }
1485
1233
  & .crisp-select-listbox[data-up] { transform-origin: bottom; }
1486
1234
  & .crisp-select-listbox { @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
1487
1235
  & .crisp-select-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 34px; flex-shrink: 0; margin: calc(-1 * var(--crisp-space-1)) calc(-1 * var(--crisp-space-1)) var(--crisp-space-1); padding: 0 var(--crisp-space-2-5); border-bottom: 1px solid var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
@@ -1489,27 +1237,20 @@
1489
1237
  & .crisp-select-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
1490
1238
  & .crisp-select-search input::placeholder { color: var(--crisp-fg-muted); }
1491
1239
  & .crisp-select-empty { padding: var(--crisp-space-3) var(--crisp-space-2); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
1492
- & .crisp-select-option {
1493
- box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-menuRow); flex-shrink: 0;
1494
- padding: 0 var(--crisp-space-2); margin: 0; border: none; background: none; border-radius: var(--crisp-radius-md);
1495
- font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; white-space: nowrap;
1496
- }
1240
+ & .crisp-select-option { box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-menuRow); flex-shrink: 0; padding: 0 var(--crisp-space-2); margin: 0; border: none; background: none; border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; white-space: nowrap; }
1497
1241
  & .crisp-select-option[data-highlighted] { background: var(--crisp-bg-raised); }
1498
1242
  & .crisp-select-option[data-disabled] { opacity: 0.5; cursor: not-allowed; }
1499
1243
  & .crisp-select-option-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); }
1500
1244
  & .crisp-select-option-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
1501
1245
  & .crisp-select-option-check { flex-shrink: 0; color: var(--crisp-bg-brand-solid); }
1502
-
1503
1246
  }
1504
1247
  .crisp-select--variant_default {
1505
1248
 
1506
1249
  }
1507
1250
  .crisp-select--variant_ghost {
1508
-
1509
- & .crisp-select-trigger { background: transparent; box-shadow: none; }
1510
- & .crisp-select-trigger:hover { background: var(--crisp-bg-raised); box-shadow: none; }
1511
- & .crisp-select-trigger[data-open], & .crisp-select-trigger:focus-visible { background: transparent; box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
1512
-
1251
+ & .crisp-select-trigger { background: transparent; box-shadow: none; }
1252
+ & .crisp-select-trigger:hover { background: var(--crisp-bg-raised); box-shadow: none; }
1253
+ & .crisp-select-trigger[data-open], & .crisp-select-trigger:focus-visible { background: transparent; box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
1513
1254
  }
1514
1255
  .crisp-select--width_full {
1515
1256
  width: 100%;
@@ -1541,13 +1282,7 @@
1541
1282
  }
1542
1283
 
1543
1284
  .crisp-slider {
1544
-
1545
- display: flex; flex-direction: column; align-items: stretch;
1546
- width: 100%; min-width: 0; gap: var(--crisp-space-0-5);
1547
- font-family: var(--crisp-font-sans); user-select: none; touch-action: none;
1548
-
1549
- /* the position words ("minimum"/"maximum") that ARIA concatenates onto a
1550
- thumb's name — read, never drawn */
1285
+ display: flex; flex-direction: column; align-items: stretch; width: 100%; min-width: 0; gap: var(--crisp-space-0-5); font-family: var(--crisp-font-sans); user-select: none; touch-action: none; /* the position words ("minimum"/"maximum") that ARIA concatenates onto a thumb's name — read, never drawn */
1551
1286
  & .crisp-slider-thumblabel {
1552
1287
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
1553
1288
  overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
@@ -1586,7 +1321,6 @@
1586
1321
  &[data-disabled] { cursor: not-allowed; }
1587
1322
  &[data-disabled] .crisp-slider-range { background: var(--crisp-fg-disabled); }
1588
1323
  &[data-disabled] .crisp-slider-thumb::after { cursor: not-allowed; }
1589
-
1590
1324
  }
1591
1325
 
1592
1326
  @media (prefers-reduced-motion: reduce) {
@@ -1624,8 +1358,7 @@
1624
1358
  }
1625
1359
 
1626
1360
  .crisp-statcard {
1627
- display: flex; flex-direction: column; gap: var(--crisp-space-1-5); box-sizing: border-box; font-family: var(--crisp-font-sans);
1628
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1361
+ display: flex; flex-direction: column; gap: var(--crisp-space-1-5); box-sizing: border-box; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1629
1362
  & .crisp-statcard-label { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
1630
1363
  & .crisp-statcard-label svg { color: var(--crisp-fg-muted); }
1631
1364
  & .crisp-statcard-value { font-size: 28px; line-height: 32px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.4px; color: var(--crisp-fg-primary); }
@@ -1644,16 +1377,12 @@
1644
1377
  }
1645
1378
 
1646
1379
  .crisp-switch {
1647
-
1648
- display: inline-flex; align-items: center; flex-shrink: 0; width: 24px; height: 16px; padding: 0; margin: 0;
1649
- border: none; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 9%, transparent);
1650
- cursor: pointer; transition: background-color .2s ease; -webkit-tap-highlight-color: transparent;
1380
+ display: inline-flex; align-items: center; flex-shrink: 0; width: 24px; height: 16px; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 9%, transparent); cursor: pointer; transition: background-color .2s ease; -webkit-tap-highlight-color: transparent;
1651
1381
  & .crisp-switch-thumb { width: 12px; height: 12px; margin: 0 2px; border-radius: var(--crisp-radius-full); background: #fff; transition: transform .2s ease; }
1652
1382
  &[data-checked] { background: var(--crisp-bg-brand-solid); }
1653
1383
  &[data-checked] .crisp-switch-thumb { transform: translateX(8px); }
1654
1384
  &:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
1655
1385
  &:disabled { opacity: 0.5; cursor: not-allowed; }
1656
-
1657
1386
  }
1658
1387
 
1659
1388
  @media (prefers-reduced-motion: reduce) {
@@ -1679,7 +1408,8 @@
1679
1408
  & td[data-align="center"], & th[data-align="center"] { text-align: center; }
1680
1409
  }
1681
1410
  .crisp-table--interactive_true {
1682
- & tbody tr { transition: background-color .12s; } & tbody tr:hover td { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, var(--crisp-bg-surface)); }
1411
+ & tbody tr { transition: background-color .12s; }
1412
+ & tbody tr:hover td { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, var(--crisp-bg-surface)); }
1683
1413
  }
1684
1414
  .crisp-table--interactive_false {
1685
1415
 
@@ -1700,8 +1430,7 @@
1700
1430
  }
1701
1431
 
1702
1432
  .crisp-tabletoolbar {
1703
-
1704
- display: contents; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1433
+ display: contents; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1705
1434
  & * { box-sizing: border-box; }
1706
1435
  & .crisp-tabletoolbar-toolbar { display: flex; align-items: center; gap: var(--crisp-space-1-5); padding: 0 var(--crisp-space-3) var(--crisp-space-2); }
1707
1436
  & .crisp-tabletoolbar-search { display: flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-row); padding: 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
@@ -1767,7 +1496,6 @@
1767
1496
  & .crisp-tabletoolbar-count { font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
1768
1497
  & .crisp-tabletoolbar-new { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-row); padding: 0 var(--crisp-space-2-5); 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: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; transition: background-color .12s; }
1769
1498
  & .crisp-tabletoolbar-new:hover { background: var(--crisp-bg-brand-solid-pressed); }
1770
-
1771
1499
  }
1772
1500
 
1773
1501
  @media (prefers-reduced-motion: reduce) {
@@ -1779,10 +1507,7 @@
1779
1507
  }
1780
1508
 
1781
1509
  .crisp-tabs {
1782
-
1783
- display: flex; flex-direction: column; min-height: 0; font-family: var(--crisp-font-sans);
1784
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1785
-
1510
+ display: flex; flex-direction: column; min-height: 0; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1786
1511
  & .crisp-tabs-list { position: relative; display: flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-row); flex-shrink: 0; }
1787
1512
  & .crisp-tabs-leading { display: inline-flex; align-items: center; margin-inline-end: var(--crisp-space-1); }
1788
1513
  & .crisp-tabs-tab { position: relative; display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 28px; margin: 0; padding: 0 var(--crisp-space-2); border: none; background: none; box-shadow: inset 0 0 0 1px transparent; border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; color: var(--crisp-fg-muted); cursor: pointer; white-space: nowrap; transition: color .12s ease, background-color .12s ease, box-shadow .12s ease; }
@@ -1795,7 +1520,6 @@
1795
1520
  & .crisp-tabs-indicator { position: absolute; bottom: calc(-1 * var(--crisp-space-2)); left: 0; height: 1px; background: var(--crisp-fg-primary); border-radius: 2px 2px 0 0; transition: transform .2s cubic-bezier(.4,0,.2,1), width .2s cubic-bezier(.4,0,.2,1); pointer-events: none; }
1796
1521
  & .crisp-tabs-panel { flex: 1; min-height: 0; }
1797
1522
  & .crisp-tabs-panel:focus-visible { outline: none; }
1798
-
1799
1523
  }
1800
1524
 
1801
1525
  @media (prefers-reduced-motion: reduce) {
@@ -1807,20 +1531,10 @@
1807
1531
  }
1808
1532
 
1809
1533
  .crisp-textarea {
1810
-
1811
- position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
1812
-
1813
- & .crisp-textarea-field {
1814
- box-sizing: border-box; display: block; width: 100%; min-height: 80px; resize: vertical;
1815
- margin: 0; padding: var(--crisp-space-1-5) var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md);
1816
- 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);
1817
- font-family: inherit; font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary);
1818
- outline: none; transition: box-shadow .15s ease;
1819
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1820
- }
1534
+ position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
1535
+ & .crisp-textarea-field { box-sizing: border-box; display: block; width: 100%; min-height: 80px; resize: vertical; margin: 0; padding: var(--crisp-space-1-5) var(--crisp-space-2-5); 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); line-height: 20px; color: var(--crisp-fg-primary); outline: none; transition: box-shadow .15s ease; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
1821
1536
  & .crisp-textarea-field::placeholder { color: var(--crisp-fg-muted); }
1822
1537
  & .crisp-textarea-field:disabled { opacity: 0.5; cursor: not-allowed; }
1823
-
1824
1538
  /* seed-design's focus treatment, same as Input: a 2px ring on an ::after
1825
1539
  overlay that is present-but-transparent at rest, so focusing never
1826
1540
  shifts the box, animating only its colour. */
@@ -1836,7 +1550,6 @@
1836
1550
  &[data-counted] .crisp-textarea-field { padding-bottom: var(--crisp-space-5); }
1837
1551
  & .crisp-textarea-count { position: absolute; inset-inline-end: var(--crisp-space-2-5); bottom: var(--crisp-space-1-5); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); pointer-events: none; }
1838
1552
  & .crisp-textarea-count[data-over] { color: var(--crisp-bg-danger); }
1839
-
1840
1553
  }
1841
1554
 
1842
1555
  @media (prefers-reduced-motion: reduce) {
@@ -1874,7 +1587,8 @@
1874
1587
  }
1875
1588
 
1876
1589
  .crisp-tooltip {
1877
- position: fixed; z-index: 70; box-sizing: border-box; pointer-events: none; max-width: 260px; padding: var(--crisp-space-1) var(--crisp-space-2); border-radius: var(--crisp-radius-sm); background: #20242c; color: #fff; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); line-height: 1.45; box-shadow: 0 4px 14px -2px rgba(28,40,64,0.28), 0 0 0 1px rgba(255,255,255,0.04); opacity: 1; transition: opacity 0.12s ease; @starting-style { opacity: 0; }
1590
+ position: fixed; z-index: 70; box-sizing: border-box; pointer-events: none; max-width: 260px; padding: var(--crisp-space-1) var(--crisp-space-2); border-radius: var(--crisp-radius-sm); background: #20242c; color: #fff; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); line-height: 1.45; box-shadow: 0 4px 14px -2px rgba(28,40,64,0.28), 0 0 0 1px rgba(255,255,255,0.04); opacity: 1; transition: opacity 0.12s ease;
1591
+ @starting-style { opacity: 0; }
1878
1592
  }
1879
1593
 
1880
1594
  @media (prefers-reduced-motion: reduce) {
@@ -1886,77 +1600,31 @@
1886
1600
  }
1887
1601
 
1888
1602
  .crisp-wheelpicker {
1889
-
1890
- position: relative; box-sizing: border-box; width: 100%; overflow: hidden;
1891
- background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans);
1892
-
1893
- /* the band the selected row sits in; behind the items, never hit-tested */
1894
- & .crisp-wheelpicker-indicator {
1895
- position: absolute; z-index: 0; inset-inline: var(--crisp-space-4); top: 50%;
1896
- transform: translateY(-50%); border-radius: var(--crisp-radius-md);
1897
- background: var(--crisp-bg-neutral-weak); pointer-events: none;
1898
- }
1899
-
1900
- /* fades the rows furthest from the centre, so the column reads as a wheel
1901
- rather than a list. 40% of the viewport, capped, top and bottom. */
1902
- & .crisp-wheelpicker-fog {
1903
- position: relative; z-index: 1; height: 100%; overflow: hidden;
1904
- mask-image: linear-gradient(
1905
- to bottom,
1906
- transparent 0,
1907
- #000 var(--crisp-wheelpicker-fog),
1908
- #000 calc(100% - var(--crisp-wheelpicker-fog)),
1909
- transparent 100%
1910
- );
1911
- }
1603
+ position: relative; box-sizing: border-box; width: 100%; overflow: hidden; background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); /* the band the selected row sits in; behind the items, never hit-tested */
1604
+ & .crisp-wheelpicker-indicator { position: absolute; z-index: 0; inset-inline: var(--crisp-space-4); top: 50%; transform: translateY(-50%); border-radius: var(--crisp-radius-md); background: var(--crisp-bg-neutral-weak); pointer-events: none; }
1605
+ /* fades the rows furthest from the centre, so the column reads as a wheel rather than a list. 40% of the viewport, capped, top and bottom. */
1606
+ & .crisp-wheelpicker-fog { position: relative; z-index: 1; height: 100%; overflow: hidden; mask-image: linear-gradient( to bottom, transparent 0, #000 var(--crisp-wheelpicker-fog), #000 calc(100% - var(--crisp-wheelpicker-fog)), transparent 100% ); }
1912
1607
  & .crisp-wheelpicker-columns { display: flex; width: 100%; height: 100%; justify-content: center; }
1913
-
1914
- & .crisp-wheelpicker-column {
1915
- box-sizing: border-box; flex: 0 0 auto; width: max-content; height: 100%;
1916
- overflow-x: hidden; overflow-y: auto;
1917
- overscroll-behavior-y: contain; overscroll-behavior-x: none;
1918
- scroll-snap-type: y mandatory; touch-action: pan-y;
1919
- scrollbar-width: none; -ms-overflow-style: none; outline: none;
1920
- padding-block: var(--crisp-wheelpicker-offset);
1921
- }
1608
+ & .crisp-wheelpicker-column { box-sizing: border-box; flex: 0 0 auto; width: max-content; height: 100%; overflow-x: hidden; overflow-y: auto; overscroll-behavior-y: contain; overscroll-behavior-x: none; scroll-snap-type: y mandatory; touch-action: pan-y; scrollbar-width: none; -ms-overflow-style: none; outline: none; padding-block: var(--crisp-wheelpicker-offset); }
1922
1609
  & .crisp-wheelpicker-column::-webkit-scrollbar { display: none; }
1923
-
1924
- & .crisp-wheelpicker-item {
1925
- display: flex; align-items: center; justify-content: center;
1926
- scroll-snap-align: center; user-select: none; white-space: nowrap;
1927
- padding-inline: var(--crisp-space-4); color: var(--crisp-fg-disabled);
1928
- background: none; border: none; font: inherit; cursor: pointer;
1929
- }
1610
+ & .crisp-wheelpicker-item { display: flex; align-items: center; justify-content: center; scroll-snap-align: center; user-select: none; white-space: nowrap; padding-inline: var(--crisp-space-4); color: var(--crisp-fg-disabled); background: none; border: none; font: inherit; cursor: pointer; }
1930
1611
  & .crisp-wheelpicker-item[data-selected] { color: var(--crisp-fg-primary); }
1931
-
1932
- /* the ring is drawn on the SELECTED row, and only for keyboard focus:
1933
- a pointer user has just tapped the row they meant and does not need it */
1934
- & .crisp-wheelpicker-column:focus-visible .crisp-wheelpicker-item[data-selected] {
1935
- outline: 2px solid var(--crisp-stroke-focus-ring); outline-offset: -2px;
1936
- border-radius: var(--crisp-radius-md);
1937
- }
1938
-
1612
+ /* the ring is drawn on the SELECTED row, and only for keyboard focus: a pointer user has just tapped the row they meant and does not need it */
1613
+ & .crisp-wheelpicker-column:focus-visible .crisp-wheelpicker-item[data-selected] { outline: 2px solid var(--crisp-stroke-focus-ring); outline-offset: -2px; border-radius: var(--crisp-radius-md); }
1939
1614
  }
1940
1615
  .crisp-wheelpicker--size_small {
1941
-
1942
- height: 180px; --crisp-wheelpicker-offset: 72px;
1943
- --crisp-wheelpicker-fog: min(40%, 108px);
1944
- & .crisp-wheelpicker-indicator { height: 36px; }
1945
- & .crisp-wheelpicker-item { height: 36px; min-height: 36px; font-size: 20px; line-height: 27px; }
1946
-
1616
+ height: 180px; --crisp-wheelpicker-offset: 72px; --crisp-wheelpicker-fog: min(40%, 108px);
1617
+ & .crisp-wheelpicker-indicator { height: 36px; }
1618
+ & .crisp-wheelpicker-item { height: 36px; min-height: 36px; font-size: 20px; line-height: 27px; }
1947
1619
  }
1948
1620
  .crisp-wheelpicker--size_medium {
1949
-
1950
- height: 220px; --crisp-wheelpicker-offset: 88px;
1951
- --crisp-wheelpicker-fog: min(40%, 132px);
1952
- & .crisp-wheelpicker-indicator { height: 44px; }
1953
- & .crisp-wheelpicker-item { height: 44px; min-height: 44px; font-size: 26px; line-height: 35px; }
1954
-
1621
+ height: 220px; --crisp-wheelpicker-offset: 88px; --crisp-wheelpicker-fog: min(40%, 132px);
1622
+ & .crisp-wheelpicker-indicator { height: 44px; }
1623
+ & .crisp-wheelpicker-item { height: 44px; min-height: 44px; font-size: 26px; line-height: 35px; }
1955
1624
  }
1956
1625
 
1957
1626
  .crisp-appshell {
1958
-
1959
- display: flex; height: 100%; width: 100%; overflow: hidden; background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1627
+ display: flex; height: 100%; width: 100%; overflow: hidden; background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1960
1628
  & .crisp-appshell-side { position: relative; flex-shrink: 0; overflow: hidden; }
1961
1629
  & .crisp-appshell-side-inner { height: 100%; }
1962
1630
  & .crisp-appshell-resize { position: absolute; top: 0; inset-inline-end: 0; width: 10px; height: 100%; cursor: col-resize; z-index: 5; touch-action: none; }
@@ -1965,9 +1633,7 @@
1965
1633
  & .crisp-appshell-main { position: relative; flex: 1; min-width: 0; display: flex; flex-direction: column; overflow: hidden; }
1966
1634
  & .crisp-appshell-expand { position: absolute; top: var(--crisp-space-2); inset-inline-start: var(--crisp-space-2); z-index: 6; display: inline-flex; align-items: center; justify-content: center; width: var(--crisp-size-row); height: var(--crisp-size-row); padding: 0; border: none; border-radius: var(--crisp-radius-md); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); background: var(--crisp-bg-surface); color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s; }
1967
1635
  & .crisp-appshell-expand:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
1968
-
1969
1636
  [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
1970
-
1971
1637
  }
1972
1638
 
1973
1639
  @media (prefers-reduced-motion: reduce) {
@@ -1979,33 +1645,20 @@
1979
1645
  }
1980
1646
 
1981
1647
  .crisp-authshell {
1982
- min-height: 100%; box-sizing: border-box; display: flex; flex-direction: column; align-items: center; position: relative;
1983
- 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);
1984
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1985
-
1648
+ 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;
1986
1649
  & .crisp-authshell-progress { position: absolute; top: 0; left: 0; width: 100%; height: 2px; background: var(--crisp-border-default); }
1987
1650
  & .crisp-authshell-progress-fill { height: 2px; background: var(--crisp-fg-primary); border-radius: 4px; transition: width .2s; }
1988
-
1989
1651
  & .crisp-authshell-logo { margin-top: var(--crisp-space-8); height: 24px; display: flex; align-items: center; }
1990
-
1991
1652
  & .crisp-authshell-card { margin-top: var(--crisp-space-6); display: flex; height: 692px; border-radius: 20px; border: 1px solid var(--crisp-border-subtle); overflow: hidden; }
1992
-
1993
1653
  & .crisp-authshell-pane { flex: 0 0 564px; padding: 72px; display: flex; flex-direction: column; box-sizing: border-box; }
1994
-
1995
1654
  & .crisp-authshell-preview { flex: 0 0 564px; padding: 96px 64px; background: var(--crisp-bg-subtle); border-inline-start: 1px solid color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); position: relative; overflow: hidden; box-sizing: border-box; }
1996
1655
  & .crisp-authshell-preview::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 120px; background: linear-gradient(color-mix(in srgb, var(--crisp-bg-subtle) 0%, transparent) 0%, var(--crisp-bg-subtle) 100%); pointer-events: none; }
1997
-
1998
1656
  & .crisp-authshell-body { width: 420px; margin: 0 auto; display: flex; flex-direction: column; gap: var(--crisp-space-8); align-items: center; }
1999
-
2000
1657
  & .crisp-authshell-title { font-size: 20px; line-height: 24px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.4px; color: var(--crisp-fg-primary); align-self: stretch; }
2001
-
2002
1658
  & .crisp-authshell-form { align-self: stretch; display: flex; flex-direction: column; gap: 28px; }
2003
-
2004
1659
  & .crisp-authshell-footer { margin-top: var(--crisp-space-6); display: flex; align-items: center; gap: var(--crisp-space-1); font-size: var(--crisp-text-sm); line-height: 16px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
2005
1660
  & .crisp-authshell-footer a { color: inherit; font-weight: var(--crisp-weight-medium); text-decoration: underline; }
2006
-
2007
- /* Auth-surface control treatment: flatter than the in-app chrome — a plain
2008
- hairline ring instead of elevation.field's soft glow, and a 36px (not
1661
+ /* Auth-surface control treatment: flatter than the in-app chrome — a plain hairline ring instead of elevation.field's soft glow, and a 36px (not
2009
1662
  40px) submit. Scoped to .crisp-authshell-body so a consumer keeps using
2010
1663
  crisp's Input / FormField / Button and gets the auth treatment for free. */
2011
1664
  & .crisp-authshell-body .crisp-formfield-label { font-size: var(--crisp-text-sm); line-height: 16px; font-weight: var(--crisp-weight-medium); letter-spacing: -0.12px; color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); padding-inline-start: var(--crisp-space-1); }
@@ -2013,8 +1666,7 @@
2013
1666
  & .crisp-authshell-body .crisp-input { height: 34px; padding-inline: var(--crisp-space-2-5); border-radius: 10px; background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; transition: box-shadow .14s, background-color .14s; }
2014
1667
  & .crisp-authshell-body .crisp-input:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
2015
1668
  /* Same three-layer brand shadow as Button's primary intent, but the auth
2016
- button's inset ring is measured at rgba(0,0,0,0.06) — a hairline, not
2017
- the in-app button's rgba(255,255,255,0.07) highlight. */
1669
+ button's inset ring is measured at rgba(0,0,0,0.06) — a hairline, not the in-app button's rgba(255,255,255,0.07) highlight. */
2018
1670
  & .crisp-authshell-body .crisp-button { height: 36px; padding-inline: var(--crisp-space-3); border-radius: 10px; }
2019
1671
  & .crisp-authshell-body .crisp-button--intent_primary { box-shadow: inset 0 0 0 1px rgba(0,0,0,0.06), 0 2px 4px -2px rgba(38,109,240,0.12), 0 3px 6px -2px rgba(38,109,240,0.08); }
2020
1672
 
@@ -2023,8 +1675,7 @@
2023
1675
  that bracket, not a measured value. A CONTAINER query, not a media
2024
1676
  query: the shell is embedded in the docs inside an ~800px column, where
2025
1677
  a viewport query would keep the 1130px card and overflow it. Asking the
2026
- shell's own width is what "there isn't room for the preview" means. */
2027
- container-type: inline-size;
1678
+ shell's own width is what "there isn't room for the preview" means. */ container-type: inline-size;
2028
1679
  @container (max-width: 1200px) { & .crisp-authshell-preview { display: none; } }
2029
1680
  }
2030
1681
 
@@ -2055,10 +1706,7 @@
2055
1706
  & .crisp-board-card:focus { outline: none; }
2056
1707
  & .crisp-board-card:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
2057
1708
  /* announced, never drawn */
2058
- & .crisp-board-live {
2059
- position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
2060
- overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
2061
- }
1709
+ & .crisp-board-live { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
2062
1710
  }
2063
1711
 
2064
1712
  @media (prefers-reduced-motion: reduce) {
@@ -2070,16 +1718,15 @@
2070
1718
  }
2071
1719
 
2072
1720
  .crisp-command {
2073
- display: contents; font-family: var(--crisp-font-sans)
2074
- ; & .crisp-command-content, & .crisp-command-card { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
2075
- & .crisp-command-backdrop { position: fixed; inset: 0; z-index: 50; background: transparent; }
2076
- & .crisp-command-positioner { position: fixed; inset: 0; z-index: 51; display: flex; align-items: flex-start; justify-content: center; padding: 15vh var(--crisp-space-4) var(--crisp-space-4); }
2077
- & .crisp-command-content { position: relative; display: flex; flex-direction: column; box-sizing: border-box; width: 90vw; max-width: 748px; max-height: 70vh; 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 0.2s ease, transform 0.2s ease; @starting-style { opacity: 0; transform: scale(0.97); } }
2078
- & .crisp-command-card { display: flex; flex-direction: column; flex: 1; min-height: 0; box-sizing: border-box; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); overflow: hidden; }
2079
- & .crisp-command-control { display: flex; align-items: center; gap: var(--crisp-space-2-5); height: 52px; flex-shrink: 0; padding: 0 var(--crisp-space-4); border-bottom: 1px solid var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
2080
- & .crisp-command-control svg { flex-shrink: 0; }
2081
- /* The palette's label element. It exists for the assistive tree only: zag's
2082
- combobox names the input through it and points the listbox's
1721
+ display: contents; font-family: var(--crisp-font-sans) ;
1722
+ & .crisp-command-content, & .crisp-command-card { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
1723
+ & .crisp-command-backdrop { position: fixed; inset: 0; z-index: 50; background: transparent; }
1724
+ & .crisp-command-positioner { position: fixed; inset: 0; z-index: 51; display: flex; align-items: flex-start; justify-content: center; padding: 15vh var(--crisp-space-4) var(--crisp-space-4); }
1725
+ & .crisp-command-content { position: relative; display: flex; flex-direction: column; box-sizing: border-box; width: 90vw; max-width: 748px; max-height: 70vh; 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 0.2s ease, transform 0.2s ease; @starting-style { opacity: 0; transform: scale(0.97); } }
1726
+ & .crisp-command-card { display: flex; flex-direction: column; flex: 1; min-height: 0; box-sizing: border-box; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); overflow: hidden; }
1727
+ & .crisp-command-control { display: flex; align-items: center; gap: var(--crisp-space-2-5); height: 52px; flex-shrink: 0; padding: 0 var(--crisp-space-4); border-bottom: 1px solid var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
1728
+ & .crisp-command-control svg { flex-shrink: 0; }
1729
+ /* The palette's label element. It exists for the assistive tree only: zag's combobox names the input through it and points the listbox's
2083
1730
  aria-labelledby at it, and without it both were unnamed and the reference
2084
1731
  resolved to nothing (#225). Clipped rather than display:none, which would
2085
1732
  take it out of the tree it exists for. */
@@ -2101,7 +1748,6 @@
2101
1748
  & .crisp-command-footer-action:disabled { opacity: 0.5; cursor: default; }
2102
1749
  & .crisp-command-footer-action-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2103
1750
  & .crisp-command-footer-key { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: rgba(255,255,255,0.22); font-size: var(--crisp-text-xs); }
2104
-
2105
1751
  }
2106
1752
 
2107
1753
  @media (prefers-reduced-motion: reduce) {
@@ -2113,15 +1759,9 @@
2113
1759
  }
2114
1760
 
2115
1761
  .crisp-entitycard {
2116
- display: flex; flex-direction: column; box-sizing: border-box; width: 100%; min-width: 0; text-align: start;
2117
- padding: var(--crisp-space-3) var(--crisp-space-4); margin: 0; border: none; border-radius: var(--crisp-radius-xl);
2118
- background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); color: var(--crisp-fg-primary);
2119
- font-family: var(--crisp-font-sans); cursor: pointer; transition: box-shadow .12s ease, background-color .12s ease;
2120
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2121
-
1762
+ display: flex; flex-direction: column; box-sizing: border-box; width: 100%; min-width: 0; text-align: start; padding: var(--crisp-space-3) var(--crisp-space-4); margin: 0; border: none; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); color: var(--crisp-fg-primary); font-family: var(--crisp-font-sans); cursor: pointer; transition: box-shadow .12s ease, background-color .12s ease; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2122
1763
  &:hover { box-shadow: inset 0 0 0 1px var(--crisp-border-default), 0 1px 2px rgba(0,0,0,0.04), 0 6px 16px -6px rgba(28,40,64,0.12); }
2123
1764
  &:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
2124
-
2125
1765
  & .crisp-entitycard-author { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
2126
1766
  & .crisp-entitycard-title { margin-top: var(--crisp-space-2); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); letter-spacing: -0.1px; color: var(--crisp-fg-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2127
1767
  & .crisp-entitycard-excerpt { margin-top: var(--crisp-space-1); font-size: var(--crisp-text-md); line-height: 18px; color: var(--crisp-fg-muted); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
@@ -2156,11 +1796,7 @@
2156
1796
  }
2157
1797
 
2158
1798
  .crisp-inbox {
2159
- display: flex; flex-direction: column; box-sizing: border-box; width: 380px; max-height: 588px;
2160
- border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); overflow: hidden;
2161
- box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent), 0 8px 28px -6px rgba(28,40,64,0.16), 0 2px 6px -2px rgba(28,40,64,0.10);
2162
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2163
-
1799
+ display: flex; flex-direction: column; box-sizing: border-box; width: 380px; max-height: 588px; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); overflow: hidden; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent), 0 8px 28px -6px rgba(28,40,64,0.16), 0 2px 6px -2px rgba(28,40,64,0.10); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2164
1800
  & .crisp-inbox-head { padding: var(--crisp-space-3) var(--crisp-space-3) 0; }
2165
1801
  & .crisp-inbox-title { font-size: var(--crisp-text-xl); line-height: 28px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.3px; color: var(--crisp-fg-primary); }
2166
1802
  & .crisp-inbox-tabs { display: flex; gap: var(--crisp-space-3); margin-top: var(--crisp-space-2); box-shadow: inset 0 -1px 0 var(--crisp-border-subtle); }
@@ -2169,7 +1805,6 @@
2169
1805
  & .crisp-inbox-tab[data-active] { color: var(--crisp-bg-brand-solid); box-shadow: inset 0 -2px 0 var(--crisp-bg-brand-solid); }
2170
1806
  & .crisp-inbox-tab-count { font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2171
1807
  & .crisp-inbox-tab[data-active] .crisp-inbox-tab-count { color: var(--crisp-bg-brand-solid); }
2172
-
2173
1808
  & .crisp-inbox-list { flex: 1; min-height: 0; overflow-y: auto; padding: var(--crisp-space-1); display: flex; flex-direction: column; gap: 1px; }
2174
1809
  & .crisp-inbox-row { display: flex; align-items: flex-start; gap: var(--crisp-space-2-5); padding: var(--crisp-space-2) var(--crisp-space-2); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; font-family: inherit; text-align: start; cursor: pointer; transition: background-color .12s; }
2175
1810
  & .crisp-inbox-row:hover { background: var(--crisp-bg-raised); }
@@ -2179,7 +1814,6 @@
2179
1814
  & .crisp-inbox-row-msg b { font-weight: var(--crisp-weight-semibold); }
2180
1815
  & .crisp-inbox-row-time { font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2181
1816
  & .crisp-inbox-row-unread { flex-shrink: 0; width: 8px; height: 8px; margin-top: var(--crisp-space-1); border-radius: var(--crisp-radius-full); background: var(--crisp-bg-brand-solid); }
2182
-
2183
1817
  & .crisp-inbox-empty { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--crisp-space-1); padding: var(--crisp-space-6) var(--crisp-space-4); text-align: center; }
2184
1818
  & .crisp-inbox-empty-icon { display: inline-flex; margin-bottom: var(--crisp-space-2); color: color-mix(in srgb, var(--crisp-fg-primary) 22%, transparent); }
2185
1819
  & .crisp-inbox-empty-title { font-size: var(--crisp-text-xl); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); }
@@ -2196,34 +1830,24 @@
2196
1830
  }
2197
1831
 
2198
1832
  .crisp-listpage {
2199
- display: flex; flex-direction: column; min-height: 0; box-sizing: border-box; font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary);
2200
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2201
-
1833
+ 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;
2202
1834
  & .crisp-listpage-toolbar { display: flex; align-items: center; gap: var(--crisp-space-2); height: 52px; flex-shrink: 0; padding: 0 var(--crisp-space-3); }
2203
1835
  & .crisp-listpage-toolbar-lead { display: flex; align-items: center; gap: var(--crisp-space-2); }
2204
1836
  & .crisp-listpage-count { margin-inline-start: auto; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); white-space: nowrap; }
2205
1837
  & .crisp-listpage-toolbar-trail { display: flex; align-items: center; gap: var(--crisp-space-2); }
2206
1838
  & .crisp-listpage-count + .crisp-listpage-toolbar-trail { margin-inline-start: var(--crisp-space-3); }
2207
-
2208
1839
  & .crisp-listpage-body { flex: 1; min-height: 0; overflow-y: auto; padding: 0 var(--crisp-space-3) var(--crisp-space-3); }
2209
-
2210
1840
  & .crisp-listpage-section-label { 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); }
2211
- & .crisp-listpage-favorites { display: flex; align-items: center; justify-content: center; min-height: 200px; padding: var(--crisp-space-6); border-radius: var(--crisp-radius-xl);
2212
- background: repeating-linear-gradient(0deg, transparent, transparent) padding-box,
2213
- border-box; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); }
1841
+ & .crisp-listpage-favorites { display: flex; align-items: center; justify-content: center; min-height: 200px; padding: var(--crisp-space-6); border-radius: var(--crisp-radius-xl); background: repeating-linear-gradient(0deg, transparent, transparent) padding-box, border-box; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); }
2214
1842
  & .crisp-listpage-favorites[data-dashed] { box-shadow: none; border: 1px dashed color-mix(in srgb, var(--crisp-fg-primary) 14%, transparent); }
2215
-
2216
1843
  & .crisp-listpage-colhead { display: flex; align-items: center; gap: var(--crisp-space-2-5); height: 40px; padding: 0 var(--crisp-space-2); box-shadow: inset 0 -1px 0 var(--crisp-border-subtle); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2217
1844
  & .crisp-listpage-colhead-cell { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); }
2218
-
2219
1845
  & .crisp-listpage-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-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
2220
1846
  & .crisp-listpage-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); }
2221
-
2222
1847
  & .crisp-listpage-row { display: flex; align-items: center; gap: var(--crisp-space-2-5); width: 100%; height: 52px; padding: 0 var(--crisp-space-2); margin: 0; border: none; border-top: 1px solid var(--crisp-border-subtle); background: none; font-family: inherit; color: inherit; text-align: start; cursor: pointer; transition: background-color .12s; }
2223
1848
  & .crisp-listpage-row:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: -2px; }
2224
1849
  & .crisp-listpage-row:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 3%, transparent); }
2225
1850
  & .crisp-listpage-row-title { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2226
-
2227
1851
  & .crisp-listpage-empty { padding: var(--crisp-space-8) var(--crisp-space-4); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2228
1852
  }
2229
1853
 
@@ -2236,19 +1860,11 @@
2236
1860
  }
2237
1861
 
2238
1862
  .crisp-navitem {
2239
- box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-1-5)
2240
- ; height: 28px; padding-inline: var(--crisp-space-2)
2241
- ; padding-inline-end: var(--crisp-space-1)
2242
- ; border-radius: var(--crisp-radius-lg)
2243
- ; font-family: var(--crisp-font-sans)
2244
- ; font-size: var(--crisp-text-lg)
2245
- ; font-weight: var(--crisp-weight-medium)
2246
- ; letter-spacing: -0.14px; line-height: 20px; color: var(--crisp-fg-primary)
2247
- ; text-decoration: none; cursor: pointer; user-select: none; width: 100%; transition: background-color 0.16s; & .crisp-navitem-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2248
- & .crisp-navitem-trailing { margin-inline-start: auto; display: inline-flex; align-items: center; flex-shrink: 0; }
2249
- &:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 2%, transparent); }
2250
- &[data-active] { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); }
2251
-
1863
+ box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-1-5) ; height: 28px; padding-inline: var(--crisp-space-2) ; padding-inline-end: var(--crisp-space-1) ; border-radius: var(--crisp-radius-lg) ; font-family: var(--crisp-font-sans) ; font-size: var(--crisp-text-lg) ; font-weight: var(--crisp-weight-medium) ; letter-spacing: -0.14px; line-height: 20px; color: var(--crisp-fg-primary) ; text-decoration: none; cursor: pointer; user-select: none; width: 100%; transition: background-color 0.16s;
1864
+ & .crisp-navitem-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1865
+ & .crisp-navitem-trailing { margin-inline-start: auto; display: inline-flex; align-items: center; flex-shrink: 0; }
1866
+ &:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 2%, transparent); }
1867
+ &[data-active] { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); }
2252
1868
  }
2253
1869
 
2254
1870
  @media (prefers-reduced-motion: reduce) {
@@ -2260,23 +1876,16 @@
2260
1876
  }
2261
1877
 
2262
1878
  .crisp-onboarding {
2263
- display: flex; flex-direction: column; box-sizing: border-box; width: 272px; padding: var(--crisp-space-3); gap: var(--crisp-space-2);
2264
- border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans);
2265
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2266
- box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent), 0 8px 28px -6px rgba(28,40,64,0.16), 0 2px 6px -2px rgba(28,40,64,0.10);
2267
-
1879
+ display: flex; flex-direction: column; box-sizing: border-box; width: 272px; padding: var(--crisp-space-3); gap: var(--crisp-space-2); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent), 0 8px 28px -6px rgba(28,40,64,0.16), 0 2px 6px -2px rgba(28,40,64,0.10);
2268
1880
  & .crisp-onboarding-head { display: flex; align-items: center; gap: var(--crisp-space-1); }
2269
1881
  & .crisp-onboarding-title { flex: 1; min-width: 0; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2270
1882
  & .crisp-onboarding-iconbtn { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: var(--crisp-size-chip); flex-shrink: 0; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s, color .12s; }
2271
1883
  & .crisp-onboarding-iconbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2272
-
2273
1884
  & .crisp-onboarding-sub { font-size: var(--crisp-text-sm); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); }
2274
1885
  & .crisp-onboarding-sub b { font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2275
-
2276
1886
  & .crisp-onboarding-progress { display: flex; gap: var(--crisp-space-1); margin: var(--crisp-space-0-5) 0 var(--crisp-space-1); }
2277
1887
  & .crisp-onboarding-seg { flex: 1; height: 4px; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); transition: background-color .2s ease; }
2278
1888
  & .crisp-onboarding-seg[data-done] { background: var(--crisp-bg-brand-solid); }
2279
-
2280
1889
  & .crisp-onboarding-steps { display: flex; flex-direction: column; }
2281
1890
  & .crisp-onboarding-step { display: flex; align-items: center; gap: var(--crisp-space-2); height: 36px; padding: 0 var(--crisp-space-1); margin: 0; 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; transition: background-color .12s; }
2282
1891
  & .crisp-onboarding-step:hover { background: var(--crisp-bg-raised); }
@@ -2298,12 +1907,8 @@
2298
1907
  }
2299
1908
 
2300
1909
  .crisp-recordpage {
2301
-
2302
- display: flex; flex-direction: column; height: 100%; min-height: 0; background: var(--crisp-bg-surface);
2303
- font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2304
- color: var(--crisp-fg-primary);
1910
+ display: flex; flex-direction: column; height: 100%; min-height: 0; background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; color: var(--crisp-fg-primary);
2305
1911
  & * { box-sizing: border-box; }
2306
-
2307
1912
  & .crisp-recordpage-topbar { display: flex; align-items: center; gap: var(--crisp-space-2); height: 44px; flex-shrink: 0; padding: 0 var(--crisp-space-3); border-bottom: 1px solid var(--crisp-border-subtle); }
2308
1913
  & .crisp-recordpage-crumbs { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; }
2309
1914
  & .crisp-recordpage-crumb { display: inline-flex; align-items: center; height: 26px; padding: 0 var(--crisp-space-1-5); margin: 0 calc(-1 * var(--crisp-space-1-5)) 0 0; border: none; border-radius: var(--crisp-radius-md); background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); cursor: pointer; }
@@ -2316,9 +1921,7 @@
2316
1921
  & .crisp-recordpage-action--ghost { box-shadow: none; color: var(--crisp-fg-muted); }
2317
1922
  & .crisp-recordpage-action--icon { width: 28px; padding: 0; justify-content: center; box-shadow: none; color: var(--crisp-fg-muted); }
2318
1923
  & .crisp-recordpage-action svg { flex-shrink: 0; }
2319
-
2320
1924
  & .crisp-recordpage-body { flex: 1; min-height: 0; display: flex; }
2321
-
2322
1925
  & .crisp-recordpage-details { width: 320px; flex-shrink: 0; overflow-y: auto; border-inline-end: 1px solid var(--crisp-border-subtle); padding: var(--crisp-space-3); }
2323
1926
  & .crisp-recordpage-resizer { position: relative; flex: 0 0 auto; width: 0; align-self: stretch; cursor: col-resize; z-index: 5; touch-action: none; }
2324
1927
  & .crisp-recordpage-resizer::before { content: ""; position: absolute; top: 0; bottom: 0; inset-inline-start: -4px; width: 9px; }
@@ -2339,8 +1942,7 @@
2339
1942
  & .crisp-recordpage-quickbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2340
1943
  & .crisp-recordpage-section { padding-top: var(--crisp-space-2); }
2341
1944
  & .crisp-recordpage-section-title { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); letter-spacing: -0.12px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); padding: var(--crisp-space-1); }
2342
- /* main-area section headers (Highlights / Activity / Emails / Notes / Tasks)
2343
- are 14px; the left column's (Record Details / Lists) stay 12px. */
1945
+ /* main-area section headers (Highlights / Activity / Emails / Notes / Tasks) are 14px; the left column's (Record Details / Lists) stay 12px. */
2344
1946
  & .crisp-recordpage-main .crisp-recordpage-section-title { font-size: var(--crisp-text-lg); }
2345
1947
  & .crisp-recordpage-detailhead { display: flex; align-items: center; gap: var(--crisp-space-0-5); margin-bottom: var(--crisp-space-3); padding-inline-end: var(--crisp-space-0-5); }
2346
1948
  & .crisp-recordpage-collapse { display: inline-flex; align-items: center; gap: 2px; flex: 1; min-width: 0; margin: 0; border: none; background: none; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); letter-spacing: -0.12px; color: var(--crisp-fg-muted); cursor: pointer; text-align: start; }
@@ -2438,7 +2040,6 @@
2438
2040
  & .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)); }
2439
2041
  & .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)); }
2440
2042
  & .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)); }
2441
-
2442
2043
  }
2443
2044
 
2444
2045
  @media (prefers-reduced-motion: reduce) {
@@ -2450,24 +2051,14 @@
2450
2051
  }
2451
2052
 
2452
2053
  .crisp-recordpanel {
2453
-
2454
- position: absolute; top: var(--crisp-space-2); inset-inline-end: var(--crisp-space-2); bottom: var(--crisp-space-2);
2455
- z-index: 20; display: flex; flex-direction: column; overflow: hidden;
2456
- width: 420px; max-width: calc(92% - var(--crisp-space-2));
2457
- background: var(--crisp-bg-surface); border-radius: var(--crisp-radius-xl);
2458
- 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);
2459
- font-family: var(--crisp-font-sans);
2460
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2461
- transform: translateX(0); transition: transform .2s ease;
2054
+ position: absolute; top: var(--crisp-space-2); inset-inline-end: var(--crisp-space-2); bottom: var(--crisp-space-2); z-index: 20; display: flex; flex-direction: column; overflow: hidden; width: 420px; max-width: calc(92% - var(--crisp-space-2)); background: var(--crisp-bg-surface); border-radius: var(--crisp-radius-xl); 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); font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transform: translateX(0); transition: transform .2s ease;
2462
2055
  @starting-style { transform: translateX(calc(100% + var(--crisp-space-2))); }
2463
2056
  & * { box-sizing: border-box; }
2464
-
2465
2057
  & .crisp-recordpanel-header { display: flex; align-items: center; gap: var(--crisp-space-2); height: 52px; flex-shrink: 0; padding: 0 var(--crisp-space-3); border-bottom: 1px solid var(--crisp-border-subtle); }
2466
2058
  & .crisp-recordpanel-fav { width: 22px; height: var(--crisp-size-chip); border-radius: var(--crisp-radius-sm); flex-shrink: 0; object-fit: cover; background: var(--crisp-bg-raised); }
2467
2059
  & .crisp-recordpanel-title { flex: 1; min-width: 0; font-size: var(--crisp-text-xl); font-weight: var(--crisp-weight-semibold); letter-spacing: -0.2px; color: var(--crisp-fg-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2468
2060
  & .crisp-recordpanel-iconbtn { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; flex-shrink: 0; padding: 0; border: none; border-radius: var(--crisp-radius-md); background: transparent; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s; }
2469
2061
  & .crisp-recordpanel-iconbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2470
-
2471
2062
  & .crisp-recordpanel-body { flex: 1; min-height: 0; overflow-y: auto; padding: var(--crisp-space-2) var(--crisp-space-3); }
2472
2063
  & .crisp-recordpanel-sectionlabel { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); padding: var(--crisp-space-2) var(--crisp-space-1) var(--crisp-space-1); }
2473
2064
  & .crisp-recordpanel-field { display: flex; align-items: flex-start; gap: var(--crisp-space-2); min-height: 32px; padding: var(--crisp-space-1) var(--crisp-space-1); border-radius: var(--crisp-radius-md); }
@@ -2476,7 +2067,6 @@
2476
2067
  & .crisp-recordpanel-field-label svg { flex-shrink: 0; }
2477
2068
  & .crisp-recordpanel-field-value { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); padding-top: 3px; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
2478
2069
  & .crisp-recordpanel-empty { color: var(--crisp-fg-muted); }
2479
-
2480
2070
  & .crisp-recordstable-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); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); }
2481
2071
  & .crisp-recordstable-tag[data-tone="brand"] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); color: color-mix(in srgb, var(--crisp-bg-brand-solid) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-brand-solid) 30%, transparent); }
2482
2072
  & .crisp-recordstable-tag[data-tone="success"] { background: color-mix(in srgb, var(--crisp-bg-success) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-success) 78%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-success) 30%, transparent); }
@@ -2487,7 +2077,6 @@
2487
2077
  & .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); }
2488
2078
  & .crisp-recordpanel-link { color: var(--crisp-bg-brand-solid); text-decoration: none; overflow: hidden; text-overflow: ellipsis; }
2489
2079
  & .crisp-recordpanel-link:hover { text-decoration: underline; }
2490
-
2491
2080
  }
2492
2081
 
2493
2082
  @media (prefers-reduced-motion: reduce) {
@@ -2499,10 +2088,8 @@
2499
2088
  }
2500
2089
 
2501
2090
  .crisp-recordstable {
2502
-
2503
- box-sizing: border-box; position: relative; display: flex; flex-direction: column; min-height: 0; height: 100%; width: 100%; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2091
+ box-sizing: border-box; position: relative; display: flex; flex-direction: column; min-height: 0; height: 100%; width: 100%; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2504
2092
  & * { box-sizing: border-box; }
2505
-
2506
2093
  /* toolbar */
2507
2094
  & .crisp-recordstable-toolbar { display: flex; align-items: center; gap: var(--crisp-space-1-5); padding: 0 var(--crisp-space-3) var(--crisp-space-2); }
2508
2095
  & .crisp-recordstable-search { display: flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-row); padding: 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
@@ -2571,7 +2158,6 @@
2571
2158
  & .crisp-recordstable-count { font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2572
2159
  & .crisp-recordstable-new { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-row); padding: 0 var(--crisp-space-2-5); 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: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; transition: background-color .12s; }
2573
2160
  & .crisp-recordstable-new:hover { background: var(--crisp-bg-brand-solid-pressed); }
2574
-
2575
2161
  /* scroll frame + table */
2576
2162
  & .crisp-recordstable-scroll { flex: 1; min-height: 0; overflow: auto; background: var(--crisp-bg-surface); border-top: 1px solid var(--crisp-border-subtle); scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--crisp-fg-primary) 22%, transparent) transparent; }
2577
2163
  & .crisp-recordstable-scroll::-webkit-scrollbar { width: 10px; height: 10px; }
@@ -2589,20 +2175,15 @@
2589
2175
  & .crisp-recordstable-sort { flex-shrink: 0; opacity: 0.4; transition: opacity .12s; color: color-mix(in srgb, var(--crisp-fg-primary) 45%, transparent); }
2590
2176
  & .crisp-recordstable-th:hover .crisp-recordstable-sort, & .crisp-recordstable-th[data-sorted] .crisp-recordstable-sort { opacity: 1; }
2591
2177
  & .crisp-recordstable-th[data-sorted="desc"] .crisp-recordstable-sort svg { transform: rotate(180deg); }
2592
-
2593
2178
  /* column resize handle */
2594
2179
  & .crisp-recordstable-resize { position: absolute; top: 0; inset-inline-end: -3px; width: 9px; height: 100%; cursor: col-resize; z-index: 6; touch-action: none; }
2595
2180
  & .crisp-recordstable-resize::after { content: ""; position: absolute; top: 0; inset-inline-start: 3px; width: 2px; height: 100%; background: var(--crisp-bg-brand-solid); opacity: 0; transition: opacity .12s; }
2596
2181
  & .crisp-recordstable-resize:hover::after, & .crisp-recordstable-resize[data-resizing]::after { opacity: 1; }
2597
-
2598
2182
  /* add-column header */
2599
2183
  & .crisp-recordstable-addcol { min-width: 44px; }
2600
2184
  & .crisp-recordstable-addcol button { display: flex; align-items: center; justify-content: center; width: 44px; height: 100%; border: none; background: none; color: var(--crisp-fg-muted); cursor: pointer; }
2601
2185
  & .crisp-recordstable-addcol button:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2602
-
2603
- /* cells */
2604
- /* font-weight is explicit because the first cell of each row is a
2605
- th[scope=row] — the record's name is what the row IS — and a th
2186
+ /* cells */ /* font-weight is explicit because the first cell of each row is a th[scope=row] — the record's name is what the row IS — and a th
2606
2187
  defaults to bold. Measured before the change and unchanged after: 400. */
2607
2188
  & .crisp-recordstable-td { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-primary); background: var(--crisp-bg-surface); cursor: default; }
2608
2189
  & .crisp-recordstable-td--editable { cursor: text; }
@@ -2708,7 +2289,6 @@
2708
2289
  }
2709
2290
 
2710
2291
  [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2711
-
2712
2292
  }
2713
2293
 
2714
2294
  @media (prefers-reduced-motion: reduce) {
@@ -2720,12 +2300,9 @@
2720
2300
  }
2721
2301
 
2722
2302
  .crisp-richtext {
2723
- display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary);
2724
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2725
-
2303
+ 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;
2726
2304
  & .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; }
2727
2305
  & .crisp-rte-title[data-empty]::before { content: attr(data-placeholder); color: color-mix(in srgb, var(--crisp-fg-primary) 28%, transparent); pointer-events: none; }
2728
-
2729
2306
  & .crisp-rte-body { margin-top: var(--crisp-space-3); font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary); outline: none; }
2730
2307
  & .crisp-rte-body[data-empty]::before { content: attr(data-placeholder); color: color-mix(in srgb, var(--crisp-fg-primary) 28%, transparent); pointer-events: none; }
2731
2308
  & .crisp-rte-body > * { margin: 0; }
@@ -2739,7 +2316,6 @@
2739
2316
  & .crisp-rte-body code { font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace; font-size: var(--crisp-text-md); padding: 1px var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); }
2740
2317
  & .crisp-rte-body a { color: var(--crisp-bg-brand-solid); text-decoration: underline; text-underline-offset: 2px; }
2741
2318
  & .crisp-rte-body strong { font-weight: var(--crisp-weight-semibold); }
2742
-
2743
2319
  & .crisp-rte-toolbar { position: fixed; z-index: 70; display: inline-flex; align-items: center; gap: 2px; padding: var(--crisp-space-0-5); border-radius: var(--crisp-radius-md); background: #20242c; box-shadow: 0 8px 28px -6px rgba(0,0,0,0.36), 0 2px 6px -2px rgba(0,0,0,0.24); transform: translate(-50%, -100%); opacity: 1; transition: opacity 0.1s ease; }
2744
2320
  & .crisp-rte-toolbar { @starting-style { opacity: 0; } }
2745
2321
  & .crisp-rte-tool { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; color: rgba(255,255,255,0.86); font-family: inherit; cursor: pointer; transition: background-color .1s; }
@@ -2767,17 +2343,13 @@
2767
2343
  }
2768
2344
 
2769
2345
  .crisp-settingsshell {
2770
- display: flex; min-height: 0; box-sizing: border-box; font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary);
2771
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2772
-
2346
+ display: flex; 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;
2773
2347
  & .crisp-settingsshell-nav { display: flex; flex-direction: column; width: 256px; flex-shrink: 0; min-height: 0; padding: var(--crisp-space-3); border-inline-end: 1px solid var(--crisp-border-subtle); }
2774
2348
  & .crisp-settingsshell-back { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 28px; padding: 0 var(--crisp-space-1); margin: 0 0 var(--crisp-space-2); border: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); cursor: pointer; border-radius: var(--crisp-radius-md); }
2775
2349
  & .crisp-settingsshell-back svg { color: var(--crisp-fg-muted); }
2776
2350
  & .crisp-settingsshell-back:hover svg { color: var(--crisp-fg-primary); }
2777
-
2778
2351
  & .crisp-settingsshell-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 32px; margin-bottom: var(--crisp-space-2); padding: 0 var(--crisp-space-2-5); border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-default); color: var(--crisp-fg-muted); }
2779
- /* The field box owns the ring, so focus has to move it -- the inner
2780
- input kills its own outline. Measured live: a focused field's
2352
+ /* The field box owns the ring, so focus has to move it -- the inner input kills its own outline. Measured live: a focused field's
2781
2353
  input carries box-shadow: none while its wrapper carries
2782
2354
  inset 0 0 0 1px #266df0. */
2783
2355
  & .crisp-settingsshell-search:focus-within { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
@@ -2798,7 +2370,6 @@
2798
2370
 
2799
2371
  & .crisp-settingsshell-content { flex: 1; min-width: 0; min-height: 0; overflow-y: auto; padding: var(--crisp-space-6) var(--crisp-space-8); }
2800
2372
  [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2801
-
2802
2373
  }
2803
2374
 
2804
2375
  @media (prefers-reduced-motion: reduce) {
@@ -2810,34 +2381,29 @@
2810
2381
  }
2811
2382
 
2812
2383
  .crisp-sidebar {
2813
- box-sizing: border-box; display: flex; flex-direction: column; width: 275px; height: 100%; background: var(--crisp-bg-sidebar)
2814
- ; border-inline-end: 1px solid var(--crisp-border-subtle)
2815
- ; padding: var(--crisp-space-2)
2816
- ; font-family: var(--crisp-font-sans)
2817
- ; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-y: auto; & .crisp-sidebar-section { display: flex; flex-direction: column; gap: var(--crisp-space-px); margin-top: var(--crisp-space-2); }
2818
- & .crisp-sidebar-section[data-collapsed] { display: none; }
2819
- & .crisp-sidebar-label { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); }
2820
- & .crisp-sidebar-section-header { display: flex; align-items: center; gap: var(--crisp-space-1); width: 100%; margin: 0; border: none; background: none; padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); cursor: pointer; }
2821
- & .crisp-sidebar-section-header svg { flex-shrink: 0; transition: transform .15s ease; }
2822
- & .crisp-sidebar-section-header[data-collapsed] svg { transform: rotate(-90deg); }
2823
- & .crisp-sidebar-ws { display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-header); padding: 0 var(--crisp-space-2); border-radius: var(--crisp-radius-lg); cursor: pointer; transition: background-color 0.16s; }
2824
- & .crisp-sidebar-ws:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); }
2825
- & .crisp-sidebar-ws-name { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2826
- & .crisp-sidebar-ws-collapse { margin-inline-start: auto; }
2827
- & .crisp-sidebar-searchrow { display: flex; align-items: center; gap: var(--crisp-space-1-5); margin-top: var(--crisp-space-2-5); padding-inline-end: var(--crisp-space-2); }
2828
- & .crisp-sidebar-footer { margin-top: auto; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
2829
- & .crisp-sidebar-trial { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-2); padding: var(--crisp-space-1-5) var(--crisp-space-2); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2830
- & .crisp-sidebar-search { box-sizing: border-box; flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-1) 0 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); color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-lg); text-align: start; cursor: pointer; transition: background-color 0.14s; }
2831
- & .crisp-sidebar-search:hover { background: var(--crisp-bg-raised); }
2832
- & .crisp-sidebar-search-label { flex: 1; color: var(--crisp-fg-primary); font-weight: var(--crisp-weight-medium); }
2833
- & .crisp-sidebar-search-kbd { margin-inline-start: auto; display: inline-flex; align-items: center; height: 18px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); font-size: var(--crisp-text-xs); }
2834
- & .crisp-sidebar-pill { border-radius: var(--crisp-radius-full); align-self: center; width: auto; height: 32px; padding-inline: var(--crisp-space-4); }
2835
- & .crisp-sidebar-divider { height: 0; border: none; border-top: 1px solid var(--crisp-border-subtle); margin: var(--crisp-space-2) calc(-1 * var(--crisp-space-2)) 0; }
2836
- & .crisp-sidebar-newlist { box-sizing: border-box; display: flex; align-items: center; justify-content: center; width: 100%; height: var(--crisp-size-row); border-radius: var(--crisp-radius-md); border: 1px dashed var(--crisp-border-default); background: transparent; color: var(--crisp-fg-muted); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
2837
- & .crisp-sidebar-newlist:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2838
-
2839
- [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2840
-
2384
+ box-sizing: border-box; display: flex; flex-direction: column; width: 275px; height: 100%; background: var(--crisp-bg-sidebar) ; border-inline-end: 1px solid var(--crisp-border-subtle) ; padding: var(--crisp-space-2) ; font-family: var(--crisp-font-sans) ; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-y: auto;
2385
+ & .crisp-sidebar-section { display: flex; flex-direction: column; gap: var(--crisp-space-px); margin-top: var(--crisp-space-2); }
2386
+ & .crisp-sidebar-section[data-collapsed] { display: none; }
2387
+ & .crisp-sidebar-label { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); }
2388
+ & .crisp-sidebar-section-header { display: flex; align-items: center; gap: var(--crisp-space-1); width: 100%; margin: 0; border: none; background: none; padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); cursor: pointer; }
2389
+ & .crisp-sidebar-section-header svg { flex-shrink: 0; transition: transform .15s ease; }
2390
+ & .crisp-sidebar-section-header[data-collapsed] svg { transform: rotate(-90deg); }
2391
+ & .crisp-sidebar-ws { display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-header); padding: 0 var(--crisp-space-2); border-radius: var(--crisp-radius-lg); cursor: pointer; transition: background-color 0.16s; }
2392
+ & .crisp-sidebar-ws:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); }
2393
+ & .crisp-sidebar-ws-name { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2394
+ & .crisp-sidebar-ws-collapse { margin-inline-start: auto; }
2395
+ & .crisp-sidebar-searchrow { display: flex; align-items: center; gap: var(--crisp-space-1-5); margin-top: var(--crisp-space-2-5); padding-inline-end: var(--crisp-space-2); }
2396
+ & .crisp-sidebar-footer { margin-top: auto; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
2397
+ & .crisp-sidebar-trial { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-2); padding: var(--crisp-space-1-5) var(--crisp-space-2); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2398
+ & .crisp-sidebar-search { box-sizing: border-box; flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-1) 0 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); color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-lg); text-align: start; cursor: pointer; transition: background-color 0.14s; }
2399
+ & .crisp-sidebar-search:hover { background: var(--crisp-bg-raised); }
2400
+ & .crisp-sidebar-search-label { flex: 1; color: var(--crisp-fg-primary); font-weight: var(--crisp-weight-medium); }
2401
+ & .crisp-sidebar-search-kbd { margin-inline-start: auto; display: inline-flex; align-items: center; height: 18px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); font-size: var(--crisp-text-xs); }
2402
+ & .crisp-sidebar-pill { border-radius: var(--crisp-radius-full); align-self: center; width: auto; height: 32px; padding-inline: var(--crisp-space-4); }
2403
+ & .crisp-sidebar-divider { height: 0; border: none; border-top: 1px solid var(--crisp-border-subtle); margin: var(--crisp-space-2) calc(-1 * var(--crisp-space-2)) 0; }
2404
+ & .crisp-sidebar-newlist { box-sizing: border-box; display: flex; align-items: center; justify-content: center; width: 100%; height: var(--crisp-size-row); border-radius: var(--crisp-radius-md); border: 1px dashed var(--crisp-border-default); background: transparent; color: var(--crisp-fg-muted); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
2405
+ & .crisp-sidebar-newlist:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2406
+ [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2841
2407
  }
2842
2408
 
2843
2409
  @media (prefers-reduced-motion: reduce) {
@@ -2849,27 +2415,20 @@
2849
2415
  }
2850
2416
 
2851
2417
  .crisp-tasklist {
2852
- display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans);
2853
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2854
-
2418
+ display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2855
2419
  & .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); }
2856
2420
  & .crisp-tasklist-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); }
2857
-
2858
2421
  & .crisp-tasklist-row { display: flex; align-items: center; gap: var(--crisp-space-2-5); height: 52px; padding: 0 var(--crisp-space-2); border-top: 1px solid var(--crisp-border-subtle); }
2859
2422
  & .crisp-tasklist-row:first-child { border-top: none; }
2860
-
2861
2423
  & .crisp-tasklist-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; transition: background-color .12s, box-shadow .12s; }
2862
2424
  & .crisp-tasklist-check:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 30%, transparent); }
2863
2425
  & .crisp-tasklist-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"); }
2864
2426
  & .crisp-tasklist-check:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
2865
-
2866
2427
  & .crisp-tasklist-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); color: var(--crisp-fg-primary); }
2867
2428
  & .crisp-tasklist-row[data-done] .crisp-tasklist-title { color: var(--crisp-fg-muted); text-decoration: line-through; }
2868
-
2869
2429
  & .crisp-tasklist-meta { display: inline-flex; align-items: center; gap: var(--crisp-space-3); flex-shrink: 0; }
2870
2430
  & .crisp-tasklist-due { font-size: var(--crisp-text-lg); color: var(--crisp-fg-muted); white-space: nowrap; }
2871
2431
  & .crisp-tasklist-due[data-overdue] { color: var(--crisp-bg-danger); }
2872
-
2873
2432
  & .crisp-tasklist-empty { padding: var(--crisp-space-4) var(--crisp-space-2); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2874
2433
  }
2875
2434
 
@@ -2882,20 +2441,11 @@
2882
2441
  }
2883
2442
 
2884
2443
  .crisp-trialbanner {
2885
- display: flex; align-items: center; gap: var(--crisp-space-1-5); box-sizing: border-box; min-height: 28px;
2886
- padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-lg); font-family: var(--crisp-font-sans);
2887
- font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary);
2888
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2889
-
2444
+ display: flex; align-items: center; gap: var(--crisp-space-1-5); box-sizing: border-box; min-height: 28px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-lg); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2890
2445
  & .crisp-trialbanner-icon { display: inline-flex; flex-shrink: 0; color: var(--crisp-fg-muted); }
2891
2446
  & .crisp-trialbanner-msg { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2892
- & .crisp-trialbanner-action { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: 20px; flex-shrink: 0;
2893
- padding: 0 var(--crisp-space-1-5); margin: 0; border: none; border-radius: var(--crisp-radius-sm); background: var(--crisp-bg-surface);
2894
- box-shadow: 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04);
2895
- font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary);
2896
- white-space: nowrap; cursor: pointer; transition: background-color .12s; }
2447
+ & .crisp-trialbanner-action { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: 20px; flex-shrink: 0; padding: 0 var(--crisp-space-1-5); margin: 0; border: none; border-radius: var(--crisp-radius-sm); background: var(--crisp-bg-surface); box-shadow: 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-md); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); white-space: nowrap; cursor: pointer; transition: background-color .12s; }
2897
2448
  & .crisp-trialbanner-action:hover { background: var(--crisp-bg-raised); }
2898
-
2899
2449
  &[data-tone="warning"] .crisp-trialbanner-icon { color: var(--crisp-bg-warning); }
2900
2450
  &[data-tone="danger"] .crisp-trialbanner-icon { color: var(--crisp-bg-danger); }
2901
2451
  }
@@ -2909,16 +2459,10 @@
2909
2459
  }
2910
2460
 
2911
2461
  .crisp-viewtoggle {
2912
- display: inline-flex; align-items: center; gap: 2px; box-sizing: border-box; padding: 2px;
2913
- border-radius: var(--crisp-radius-lg); background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent);
2914
- font-family: var(--crisp-font-sans);
2915
-
2916
- & .crisp-viewtoggle-tile { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px;
2917
- padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted);
2918
- font-family: inherit; cursor: pointer; transition: background-color .12s, color .12s, box-shadow .12s; }
2462
+ display: inline-flex; align-items: center; gap: 2px; box-sizing: border-box; padding: 2px; border-radius: var(--crisp-radius-lg); background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); font-family: var(--crisp-font-sans);
2463
+ & .crisp-viewtoggle-tile { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s, color .12s, box-shadow .12s; }
2919
2464
  & .crisp-viewtoggle-tile:hover { color: var(--crisp-fg-primary); }
2920
- & .crisp-viewtoggle-tile[data-active] { background: var(--crisp-bg-tile-active); color: var(--crisp-fg-primary);
2921
- box-shadow: 0 1px 2px -1px var(--crisp-shadow-tile-active); }
2465
+ & .crisp-viewtoggle-tile[data-active] { background: var(--crisp-bg-tile-active); color: var(--crisp-fg-primary); box-shadow: 0 1px 2px -1px var(--crisp-shadow-tile-active); }
2922
2466
  & .crisp-viewtoggle-tile:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
2923
2467
  }
2924
2468