@crisp-ui-kit/crisp 0.33.0 → 0.33.1

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 (105) 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/switch/switch.recipe.js +48 -18
  21. package/dist/columncalc.css +2 -6
  22. package/dist/columncalc.layered.css +2 -6
  23. package/dist/command.css +9 -11
  24. package/dist/command.layered.css +9 -11
  25. package/dist/datatable.css +9 -19
  26. package/dist/datatable.layered.css +9 -19
  27. package/dist/datepicker.css +15 -80
  28. package/dist/datepicker.layered.css +15 -80
  29. package/dist/datepickerfield.css +3 -18
  30. package/dist/datepickerfield.layered.css +3 -18
  31. package/dist/donutchart.css +1 -2
  32. package/dist/donutchart.layered.css +1 -2
  33. package/dist/entitycard.css +1 -7
  34. package/dist/entitycard.layered.css +1 -7
  35. package/dist/esm/components/avatar/avatar.recipe.js +38 -19
  36. package/dist/esm/components/button/button.recipe.js +109 -18
  37. package/dist/esm/components/switch/switch.recipe.js +48 -18
  38. package/dist/fileupload.css +10 -60
  39. package/dist/fileupload.layered.css +10 -60
  40. package/dist/inbox.css +1 -7
  41. package/dist/inbox.layered.css +1 -7
  42. package/dist/input.css +9 -20
  43. package/dist/input.layered.css +9 -20
  44. package/dist/listpage.css +2 -12
  45. package/dist/listpage.layered.css +2 -12
  46. package/dist/menu.css +3 -19
  47. package/dist/menu.layered.css +3 -19
  48. package/dist/multiselect.css +4 -25
  49. package/dist/multiselect.layered.css +4 -25
  50. package/dist/navitem.css +5 -13
  51. package/dist/navitem.layered.css +5 -13
  52. package/dist/onboarding.css +1 -8
  53. package/dist/onboarding.layered.css +1 -8
  54. package/dist/quantitypicker.css +15 -50
  55. package/dist/quantitypicker.layered.css +15 -50
  56. package/dist/radiogroup.css +1 -6
  57. package/dist/radiogroup.layered.css +1 -6
  58. package/dist/recordpage.css +2 -10
  59. package/dist/recordpage.layered.css +2 -10
  60. package/dist/recordpanel.css +1 -13
  61. package/dist/recordpanel.layered.css +1 -13
  62. package/dist/recordstable.css +2 -11
  63. package/dist/recordstable.layered.css +2 -11
  64. package/dist/resizablepanel.css +4 -15
  65. package/dist/resizablepanel.layered.css +4 -15
  66. package/dist/richtext.css +1 -5
  67. package/dist/richtext.layered.css +1 -5
  68. package/dist/select.css +7 -30
  69. package/dist/select.layered.css +7 -30
  70. package/dist/settingsshell.css +2 -7
  71. package/dist/settingsshell.layered.css +2 -7
  72. package/dist/sidebar.css +23 -28
  73. package/dist/sidebar.layered.css +23 -28
  74. package/dist/slider.css +1 -8
  75. package/dist/slider.layered.css +1 -8
  76. package/dist/statcard.css +1 -2
  77. package/dist/statcard.layered.css +1 -2
  78. package/dist/styles.css +194 -652
  79. package/dist/styles.layered.css +194 -652
  80. package/dist/switch.css +1 -5
  81. package/dist/switch.layered.css +1 -5
  82. package/dist/table.css +2 -1
  83. package/dist/table.layered.css +2 -1
  84. package/dist/tabletoolbar.css +1 -3
  85. package/dist/tabletoolbar.layered.css +1 -3
  86. package/dist/tabs.css +1 -5
  87. package/dist/tabs.layered.css +1 -5
  88. package/dist/tasklist.css +1 -8
  89. package/dist/tasklist.layered.css +1 -8
  90. package/dist/textarea.css +2 -13
  91. package/dist/textarea.layered.css +2 -13
  92. package/dist/tooltip.css +2 -1
  93. package/dist/tooltip.layered.css +2 -1
  94. package/dist/trialbanner.css +2 -11
  95. package/dist/trialbanner.layered.css +2 -11
  96. package/dist/types/components/avatar/avatar.d.ts +30 -30
  97. package/dist/types/components/avatar/avatar.recipe.d.ts +136 -49
  98. package/dist/types/components/button/button.d.ts +30 -30
  99. package/dist/types/components/button/button.recipe.d.ts +193 -45
  100. package/dist/types/components/switch/switch.recipe.d.ts +57 -3
  101. package/dist/viewtoggle.css +3 -9
  102. package/dist/viewtoggle.layered.css +3 -9
  103. package/dist/wheelpicker.css +14 -59
  104. package/dist/wheelpicker.layered.css +14 -59
  105. 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,24 @@
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 full cell so the whole header is clickable (its own inset is 12px). Mirrors the summary-row fix. */
564
564
  & th { padding: 0; }
565
- /* Same wrapper trap as AUTHORING.md Lesson 40 (ColumnCalc's summary trigger):
565
+ /* Same wrapper trap as AUTHORING.md Lesson 40 (ColumnCalc's summary trigger):
566
566
  Menu wraps its trigger in a flex div that sizes to its content, so a
567
567
  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. */
568
+ 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
569
+ it with no "...". Fill the wrapper, scoped to th so Menu's default (correct everywhere else) is untouched. */
572
570
  & th .crisp-menu { width: 100%; height: 100%; }
573
571
  & .crisp-datatable-th-inner { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); width: 100%; min-width: 0; height: 100%; }
574
572
  & .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. */
573
+ /* 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
574
  & tfoot td { padding: 0; }
579
575
  /* Group heading row -- a view is grouped under a subtle label with the
580
576
  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; }
577
+ & .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
578
  & .crisp-datatable-viewsettings:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); color: var(--crisp-fg-primary); }
583
579
  & .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); }
580
+ & .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
581
  & .crisp-datatable-group-count { margin-inline-start: var(--crisp-space-1-5); color: var(--crisp-fg-muted); font-variant-numeric: tabular-nums; }
586
582
  & .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
583
  & .crisp-datatable-th-rename:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
@@ -635,13 +631,9 @@
635
631
  & .crisp-datatable-num { font-variant-numeric: tabular-nums; }
636
632
  & .crisp-datatable-muted { color: var(--crisp-fg-muted); }
637
633
  /* 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
634
+ 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
635
  draggable + dataTransfer, the same one column reorder already uses
643
- (RecordsTable's reorderColumn) -- not a proprietary
644
- pointer-events implementation. */
636
+ (RecordsTable's reorderColumn) -- not a proprietary pointer-events implementation. */
645
637
  & .crisp-datatable-col-grip { width: 20px; padding: 0; text-align: center; }
646
638
  & .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
639
  & .crisp-datatable-grip:active { cursor: grabbing; }
@@ -657,75 +649,28 @@
657
649
  }
658
650
 
659
651
  .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
- }
652
+ 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);
653
+ & .crisp-datepicker-header { display: flex; align-items: center; justify-content: space-between; height: var(--crisp-size-menuRow); }
654
+ & .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
655
  & .crisp-datepicker-header-label:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
679
656
  & .crisp-datepicker-header-chevron { display: inline-flex; transition: transform .2s ease; }
680
657
  & .crisp-datepicker-header-chevron[data-open] { transform: rotate(180deg); }
681
-
682
658
  & .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
- }
659
+ & .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
660
  & .crisp-datepicker-nav-button:hover { background: var(--crisp-bg-raised); }
692
661
  & .crisp-datepicker-nav-button:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
693
662
  & .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
-
663
+ & .crisp-datepicker-weekday-row { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); position: relative; z-index: 2; background: var(--crisp-bg-surface); }
664
+ & .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
665
  & .crisp-datepicker-months { display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; min-width: 0; }
706
666
  & .crisp-datepicker-months[data-wheel-open] { visibility: hidden; }
707
667
  & .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
-
668
+ & .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
669
  & .crisp-datepicker-grid { display: grid; min-width: 0; }
715
670
  & .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
- }
671
+ & .crisp-datepicker-cell { position: relative; min-width: 0; min-height: var(--crisp-size-calendarCell); isolation: isolate; }
721
672
  & .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
673
+ /* 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
674
  own content. */
730
675
  & .crisp-datepicker-cell[data-range-complete][data-in-range]::before {
731
676
  content: ""; position: absolute; z-index: -1; inset-inline: 0;
@@ -783,41 +728,23 @@
783
728
  Without this the content column top-aligns the glyph and the pill reads
784
729
  as offset — the cell is 48px, the pill 42px inset 3px, and only a
785
730
  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
-
731
+ & .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
732
  /* 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
- }
733
+ & .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
734
  & .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
- }
735
+ & .crisp-datepicker-continuous-scroll { height: 100%; min-height: 0; overflow-y: auto; overscroll-behavior: contain; scrollbar-width: none; }
804
736
  & .crisp-datepicker-continuous-scroll::-webkit-scrollbar { display: none; }
805
737
  & .crisp-datepicker-continuous-content { display: flex; flex-direction: column; }
806
-
807
738
  /* 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
-
739
+ & .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
740
  }
814
741
  .crisp-datepicker--visibleRange_month {
815
742
 
816
743
  }
817
744
  .crisp-datepicker--visibleRange_twoMonths {
818
745
  & .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); }
746
+ & .crisp-datepicker-two-month-header { display: flex; align-items: center; justify-content: space-between; height: var(--crisp-size-menuRow); }
747
+ & .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
748
  }
822
749
  .crisp-datepicker--visibleRange_week {
823
750
 
@@ -835,31 +762,16 @@
835
762
  }
836
763
 
837
764
  .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
- }
765
+ display: inline-flex; font-family: var(--crisp-font-sans);
766
+ & .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
767
  & .crisp-datepickerfield-trigger[data-ghost] { background: transparent; box-shadow: none; }
850
768
  & .crisp-datepickerfield-trigger[data-ghost]:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); }
851
769
  & .crisp-datepickerfield-trigger[data-placeholder] { color: var(--crisp-fg-muted); }
852
770
  & .crisp-datepickerfield-trigger svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
853
-
854
771
  & .crisp-datepickerfield-panel { padding: var(--crisp-space-2); width: 300px; }
855
772
  & .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
- }
773
+ & .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
774
  & .crisp-datepickerfield-preset:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); }
862
-
863
775
  }
864
776
 
865
777
  .crisp-dialog {
@@ -897,8 +809,7 @@
897
809
  }
898
810
 
899
811
  .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;
812
+ 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
813
  & .crisp-donutchart-ring { position: relative; flex-shrink: 0; }
903
814
  & .crisp-donutchart-svg { display: block; }
904
815
  & .crisp-donutchart-seg { fill: none; transition: stroke-dasharray 0.3s ease; }
@@ -969,85 +880,35 @@
969
880
  }
970
881
 
971
882
  .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
- }
883
+ display: flex; flex-direction: column; gap: var(--crisp-space-2); font-family: var(--crisp-font-sans); min-width: 0;
884
+ & .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
885
  & .crisp-fileupload-zone:hover { background: var(--crisp-bg-raised); }
988
886
  & .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
- }
887
+ & .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
888
  & .crisp-fileupload-zone[data-disabled] { opacity: .5; cursor: not-allowed; }
994
889
  & .crisp-fileupload-zone[data-invalid] { border-color: var(--crisp-bg-danger); }
995
-
996
890
  /* "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
- }
891
+ & .crisp-fileupload-title { color: var(--crisp-fg-primary); font-size: var(--crisp-text-xl); line-height: 20px; font-weight: var(--crisp-weight-semibold); }
1001
892
  /* 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
-
893
+ & .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); }
894
+ & .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
895
  & .crisp-fileupload-list { display: flex; flex-direction: column; gap: var(--crisp-space-1); margin: 0; padding: 0; list-style: none; }
1014
896
  /* 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
- }
897
+ & .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
898
  & .crisp-fileupload-item-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1022
899
  & .crisp-fileupload-item-size { flex-shrink: 0; color: var(--crisp-fg-muted); font-size: var(--crisp-text-sm); font-variant-numeric: tabular-nums; }
1023
900
  & .crisp-fileupload-item[data-status="error"] { color: var(--crisp-bg-danger); }
1024
901
  & .crisp-fileupload-item[data-status="error"] .crisp-fileupload-item-size { color: var(--crisp-bg-danger); }
1025
-
1026
902
  /* 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
- }
903
+ & .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
904
  & .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
- }
905
+ & .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
906
  & .crisp-fileupload-remove:hover { color: var(--crisp-fg-primary); }
1042
907
  & .crisp-fileupload-remove:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
1043
-
1044
908
  & .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 */
909
+ /* 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
910
  & .crisp-fileupload-errors:empty { position: absolute; }
1049
911
  & .crisp-fileupload-error { color: var(--crisp-bg-danger); font-size: var(--crisp-text-md); line-height: 18px; }
1050
-
1051
912
  }
1052
913
 
1053
914
  @media (prefers-reduced-motion: reduce) {
@@ -1068,36 +929,25 @@
1068
929
  }
1069
930
 
1070
931
  .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
- }
932
+ 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;
933
+ &::after { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 2px solid transparent; transition: border-color .1s ease; pointer-events: none; }
1081
934
  &: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
- }
935
+ & .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
936
  & .crisp-input-value::placeholder { color: var(--crisp-fg-muted); }
1089
937
  & .crisp-input-value:disabled { opacity: 0.5; cursor: not-allowed; }
1090
938
  &:has(.crisp-input-value:disabled) { opacity: 1; }
1091
-
1092
939
  }
1093
940
  .crisp-input--size_medium {
1094
- height: 32px; border-radius: var(--crisp-radius-md); & .crisp-input-value { padding-inline: var(--crisp-space-2-5); }
941
+ height: 32px; border-radius: var(--crisp-radius-md);
942
+ & .crisp-input-value { padding-inline: var(--crisp-space-2-5); }
1095
943
  }
1096
944
  .crisp-input--size_large {
1097
- height: 36px; border-radius: 10px; & .crisp-input-value { padding-inline: var(--crisp-space-3); }
945
+ height: 36px; border-radius: 10px;
946
+ & .crisp-input-value { padding-inline: var(--crisp-space-3); }
1098
947
  }
1099
948
  .crisp-input--invalid_true {
1100
- &::after { border-color: var(--crisp-bg-danger); } &:focus-within::after { border-color: var(--crisp-bg-danger); }
949
+ &::after { border-color: var(--crisp-bg-danger); }
950
+ &:focus-within::after { border-color: var(--crisp-bg-danger); }
1101
951
  }
1102
952
  .crisp-input--invalid_false {
1103
953
 
@@ -1132,27 +982,13 @@
1132
982
  }
1133
983
 
1134
984
  .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
- }
985
+ position: relative; display: inline-flex; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
986
+ & .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
987
  & .crisp-menu-content[data-align="end"] { transform-origin: top right; }
1147
988
  & .crisp-menu-content[data-up] { transform-origin: bottom left; }
1148
989
  & .crisp-menu-content[data-up][data-align="end"] { transform-origin: bottom right; }
1149
990
  & .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
- }
991
+ & .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
992
  & .crisp-menu-item svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
1157
993
  & .crisp-menu-item:focus { outline: none; }
1158
994
  & .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 +1000,8 @@
1164
1000
  & .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
1001
  & .crisp-menu-item-check { flex-shrink: 0; color: var(--crisp-bg-brand-solid); }
1166
1002
  & .crisp-menu-item-check--placeholder { width: 15px; }
1167
-
1168
1003
  & .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
1004
  & .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
1005
  }
1172
1006
 
1173
1007
  @media (prefers-reduced-motion: reduce) {
@@ -1179,17 +1013,8 @@
1179
1013
  }
1180
1014
 
1181
1015
  .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
- }
1016
+ position: relative; display: inline-flex; width: 100%; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1017
+ & .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
1018
  & .crisp-multiselect-trigger:hover { background: var(--crisp-bg-raised); }
1194
1019
  & .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
1020
  & .crisp-multiselect-trigger:disabled { opacity: 0.5; cursor: not-allowed; }
@@ -1197,30 +1022,19 @@
1197
1022
  & .crisp-multiselect-placeholder { color: var(--crisp-fg-muted); }
1198
1023
  & .crisp-multiselect-chevron { flex-shrink: 0; color: var(--crisp-fg-muted); transition: transform .15s ease; }
1199
1024
  & .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
- }
1025
+ & .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
1026
  & .crisp-multiselect-listbox[data-up] { transform-origin: bottom left; }
1209
1027
  & .crisp-multiselect-listbox { @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
1210
1028
  & .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
1029
  & .crisp-multiselect-search svg { flex-shrink: 0; }
1212
1030
  & .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
1031
  & .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
- }
1032
+ & .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
1033
  & .crisp-multiselect-option[data-highlighted] { background: var(--crisp-bg-raised); }
1219
1034
  & .crisp-multiselect-option-chip { flex: 0 1 auto; min-width: 0; overflow: hidden; }
1220
1035
  & .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
1036
  & .crisp-multiselect-option[aria-selected="true"] .crisp-multiselect-check { background: var(--crisp-bg-brand-solid); box-shadow: none; color: #fff; }
1222
1037
  & .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
1038
  & .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
1039
  & .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
1040
  & .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 +1043,6 @@
1229
1043
  & .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
1044
  & .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
1045
  & .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
1046
  }
1234
1047
 
1235
1048
  @media (prefers-reduced-motion: reduce) {
@@ -1272,68 +1085,33 @@
1272
1085
  }
1273
1086
 
1274
1087
  .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
-
1088
+ 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
1089
  &[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
- }
1090
+ & .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
1091
  & .crisp-quantitypicker-button:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
1291
1092
  & .crisp-quantitypicker-button:not([data-disabled]):hover { background: var(--crisp-bg-raised); }
1292
1093
  & .crisp-quantitypicker-button[data-loading] { background: var(--crisp-bg-raised); }
1293
1094
  & .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
- }
1095
+ & .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
1096
  & .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
-
1097
+ & .crisp-quantitypicker-placeholder { grid-column: 1; grid-row: 1; visibility: hidden; font-variant-numeric: tabular-nums; }
1098
+ & .crisp-quantitypicker-text { grid-column: 1; grid-row: 1; text-align: center; font-variant-numeric: tabular-nums; }
1099
+ & .crisp-quantitypicker-divider { flex-shrink: 0; width: 1px; height: var(--crisp-space-4); background: var(--crisp-border-subtle); }
1316
1100
  }
1317
1101
  .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
-
1102
+ height: 36px; border-radius: var(--crisp-radius-md);
1103
+ & .crisp-quantitypicker-button { width: 36px; height: 36px; border-radius: var(--crisp-radius-md); }
1104
+ & .crisp-quantitypicker-value { font-size: var(--crisp-text-xl); line-height: 22px; }
1323
1105
  }
1324
1106
  .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
-
1107
+ height: 40px; border-radius: var(--crisp-radius-md);
1108
+ & .crisp-quantitypicker-button { width: 40px; height: 40px; border-radius: var(--crisp-radius-md); }
1109
+ & .crisp-quantitypicker-value { font-size: var(--crisp-text-xl); line-height: 22px; }
1330
1110
  }
1331
1111
  .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
-
1112
+ height: 52px; border-radius: var(--crisp-radius-xl);
1113
+ & .crisp-quantitypicker-button { width: 52px; height: 52px; border-radius: var(--crisp-radius-xl); }
1114
+ & .crisp-quantitypicker-value { font-size: 18px; line-height: 24px; }
1337
1115
  }
1338
1116
  .crisp-quantitypicker--fill_true {
1339
1117
  width: auto; flex-grow: 1;
@@ -1351,10 +1129,7 @@
1351
1129
  }
1352
1130
 
1353
1131
  .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
-
1132
+ 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
1133
  & .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
1134
  & .crisp-radio:disabled { opacity: 0.5; cursor: not-allowed; }
1360
1135
  & .crisp-radio:focus-visible { outline: none; }
@@ -1364,14 +1139,12 @@
1364
1139
  & .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
1140
  & .crisp-radio:focus-visible .crisp-radio-dot { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
1366
1141
  & .crisp-radio-label { min-width: 0; }
1367
-
1368
1142
  &[data-variant="card"] { flex-direction: row; flex-wrap: wrap; gap: var(--crisp-space-3); }
1369
1143
  &[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
1144
  &[data-variant="card"] .crisp-radio:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 22%, transparent); }
1371
1145
  &[data-variant="card"] .crisp-radio[data-checked] { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
1372
1146
  &[data-variant="card"] .crisp-radio-preview { flex: 1; min-height: 0; background: var(--crisp-bg-raised); }
1373
1147
  &[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
1148
  }
1376
1149
 
1377
1150
  @media (prefers-reduced-motion: reduce) {
@@ -1383,29 +1156,22 @@
1383
1156
  }
1384
1157
 
1385
1158
  .crisp-resizablepanel {
1386
-
1387
- position: relative; display: flex; height: 100%;
1159
+ position: relative; display: flex; height: 100%;
1388
1160
  & .crisp-resizablepanel-spacer { flex: 0 0 auto; height: 100%; transition: width 0.14s; }
1389
1161
  & .crisp-resizablepanel-panel { position: absolute; top: 0; bottom: 0; box-sizing: border-box; overflow: hidden; background: var(--crisp-bg-surface); }
1390
1162
  & .crisp-resizablepanel-panel[data-side="left"] { left: 0; }
1391
1163
  & .crisp-resizablepanel-panel[data-side="right"] { right: 0; }
1392
-
1393
1164
  /* docked */
1394
1165
  & .crisp-resizablepanel-panel[data-floating="false"] { border-radius: 0; box-shadow: none; }
1395
1166
  & .crisp-resizablepanel-panel[data-floating="false"][data-side="left"] { border-inline-end: 1px solid var(--crisp-border-subtle); }
1396
1167
  & .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. */
1168
+ /* 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
1169
  & .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
1170
  & .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
1171
  & .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
1172
  & .crisp-resizablepanel-inner { height: 100%; opacity: 1; }
1405
1173
  & .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). */
1174
+ /* handle — variant "panel" (default): a 10px hit target, its ::before the only visible divider (1px rest -> 2px on hover/drag, brand-solid). */
1409
1175
  & .crisp-resizablepanel-handle { position: absolute; top: 0; width: 10px; height: 100%; z-index: 2; cursor: col-resize; background: transparent; touch-action: none; }
1410
1176
  & .crisp-resizablepanel-handle[data-side="left"] { right: 0; }
1411
1177
  & .crisp-resizablepanel-handle[data-side="right"] { left: 0; }
@@ -1413,10 +1179,7 @@
1413
1179
  & .crisp-resizablepanel-handle[data-side="left"]::before { right: 0; }
1414
1180
  & .crisp-resizablepanel-handle[data-side="right"]::before { left: 0; }
1415
1181
  & .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
1182
+ /* 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
1183
  ::before swap. */
1421
1184
  /* .crisp-resizablepanel-handle.crisp-resizablepanel-handle--column (both classes) to
1422
1185
  out-specificity the base [data-side] left/right rules above, which
@@ -1425,7 +1188,6 @@
1425
1188
  & .crisp-resizablepanel-handle--column::before { content: none; }
1426
1189
  & .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
1190
  & .crisp-resizablepanel-handle--column:hover .crisp-resizablepanel-handle-inner, & .crisp-resizablepanel-handle--column[data-dragging="true"] .crisp-resizablepanel-handle-inner { opacity: 1; }
1428
-
1429
1191
  }
1430
1192
 
1431
1193
  @media (prefers-reduced-motion: reduce) {
@@ -1456,17 +1218,8 @@
1456
1218
  }
1457
1219
 
1458
1220
  .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
- }
1221
+ position: relative; display: inline-flex; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1222
+ & .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
1223
  & .crisp-select-trigger:hover { background: var(--crisp-bg-raised); }
1471
1224
  & .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
1225
  & .crisp-select-trigger:disabled { opacity: 0.5; cursor: not-allowed; }
@@ -1474,14 +1227,7 @@
1474
1227
  & .crisp-select-placeholder { color: var(--crisp-fg-muted); }
1475
1228
  & .crisp-select-chevron { flex-shrink: 0; color: var(--crisp-fg-muted); transition: transform .15s ease; }
1476
1229
  & .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
- }
1230
+ & .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
1231
  & .crisp-select-listbox[data-up] { transform-origin: bottom; }
1486
1232
  & .crisp-select-listbox { @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
1487
1233
  & .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 +1235,20 @@
1489
1235
  & .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
1236
  & .crisp-select-search input::placeholder { color: var(--crisp-fg-muted); }
1491
1237
  & .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
- }
1238
+ & .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
1239
  & .crisp-select-option[data-highlighted] { background: var(--crisp-bg-raised); }
1498
1240
  & .crisp-select-option[data-disabled] { opacity: 0.5; cursor: not-allowed; }
1499
1241
  & .crisp-select-option-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); }
1500
1242
  & .crisp-select-option-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
1501
1243
  & .crisp-select-option-check { flex-shrink: 0; color: var(--crisp-bg-brand-solid); }
1502
-
1503
1244
  }
1504
1245
  .crisp-select--variant_default {
1505
1246
 
1506
1247
  }
1507
1248
  .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
-
1249
+ & .crisp-select-trigger { background: transparent; box-shadow: none; }
1250
+ & .crisp-select-trigger:hover { background: var(--crisp-bg-raised); box-shadow: none; }
1251
+ & .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
1252
  }
1514
1253
  .crisp-select--width_full {
1515
1254
  width: 100%;
@@ -1541,13 +1280,7 @@
1541
1280
  }
1542
1281
 
1543
1282
  .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 */
1283
+ 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
1284
  & .crisp-slider-thumblabel {
1552
1285
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
1553
1286
  overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
@@ -1586,7 +1319,6 @@
1586
1319
  &[data-disabled] { cursor: not-allowed; }
1587
1320
  &[data-disabled] .crisp-slider-range { background: var(--crisp-fg-disabled); }
1588
1321
  &[data-disabled] .crisp-slider-thumb::after { cursor: not-allowed; }
1589
-
1590
1322
  }
1591
1323
 
1592
1324
  @media (prefers-reduced-motion: reduce) {
@@ -1624,8 +1356,7 @@
1624
1356
  }
1625
1357
 
1626
1358
  .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;
1359
+ 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
1360
  & .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
1361
  & .crisp-statcard-label svg { color: var(--crisp-fg-muted); }
1631
1362
  & .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 +1375,12 @@
1644
1375
  }
1645
1376
 
1646
1377
  .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;
1378
+ 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
1379
  & .crisp-switch-thumb { width: 12px; height: 12px; margin: 0 2px; border-radius: var(--crisp-radius-full); background: #fff; transition: transform .2s ease; }
1652
1380
  &[data-checked] { background: var(--crisp-bg-brand-solid); }
1653
1381
  &[data-checked] .crisp-switch-thumb { transform: translateX(8px); }
1654
1382
  &:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
1655
1383
  &:disabled { opacity: 0.5; cursor: not-allowed; }
1656
-
1657
1384
  }
1658
1385
 
1659
1386
  @media (prefers-reduced-motion: reduce) {
@@ -1679,7 +1406,8 @@
1679
1406
  & td[data-align="center"], & th[data-align="center"] { text-align: center; }
1680
1407
  }
1681
1408
  .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)); }
1409
+ & tbody tr { transition: background-color .12s; }
1410
+ & tbody tr:hover td { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, var(--crisp-bg-surface)); }
1683
1411
  }
1684
1412
  .crisp-table--interactive_false {
1685
1413
 
@@ -1700,8 +1428,7 @@
1700
1428
  }
1701
1429
 
1702
1430
  .crisp-tabletoolbar {
1703
-
1704
- display: contents; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1431
+ display: contents; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1705
1432
  & * { box-sizing: border-box; }
1706
1433
  & .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
1434
  & .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 +1494,6 @@
1767
1494
  & .crisp-tabletoolbar-count { font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
1768
1495
  & .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
1496
  & .crisp-tabletoolbar-new:hover { background: var(--crisp-bg-brand-solid-pressed); }
1770
-
1771
1497
  }
1772
1498
 
1773
1499
  @media (prefers-reduced-motion: reduce) {
@@ -1779,10 +1505,7 @@
1779
1505
  }
1780
1506
 
1781
1507
  .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
-
1508
+ display: flex; flex-direction: column; min-height: 0; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1786
1509
  & .crisp-tabs-list { position: relative; display: flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-row); flex-shrink: 0; }
1787
1510
  & .crisp-tabs-leading { display: inline-flex; align-items: center; margin-inline-end: var(--crisp-space-1); }
1788
1511
  & .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 +1518,6 @@
1795
1518
  & .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
1519
  & .crisp-tabs-panel { flex: 1; min-height: 0; }
1797
1520
  & .crisp-tabs-panel:focus-visible { outline: none; }
1798
-
1799
1521
  }
1800
1522
 
1801
1523
  @media (prefers-reduced-motion: reduce) {
@@ -1807,20 +1529,10 @@
1807
1529
  }
1808
1530
 
1809
1531
  .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
- }
1532
+ position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
1533
+ & .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
1534
  & .crisp-textarea-field::placeholder { color: var(--crisp-fg-muted); }
1822
1535
  & .crisp-textarea-field:disabled { opacity: 0.5; cursor: not-allowed; }
1823
-
1824
1536
  /* seed-design's focus treatment, same as Input: a 2px ring on an ::after
1825
1537
  overlay that is present-but-transparent at rest, so focusing never
1826
1538
  shifts the box, animating only its colour. */
@@ -1836,7 +1548,6 @@
1836
1548
  &[data-counted] .crisp-textarea-field { padding-bottom: var(--crisp-space-5); }
1837
1549
  & .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
1550
  & .crisp-textarea-count[data-over] { color: var(--crisp-bg-danger); }
1839
-
1840
1551
  }
1841
1552
 
1842
1553
  @media (prefers-reduced-motion: reduce) {
@@ -1874,7 +1585,8 @@
1874
1585
  }
1875
1586
 
1876
1587
  .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; }
1588
+ 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;
1589
+ @starting-style { opacity: 0; }
1878
1590
  }
1879
1591
 
1880
1592
  @media (prefers-reduced-motion: reduce) {
@@ -1886,77 +1598,31 @@
1886
1598
  }
1887
1599
 
1888
1600
  .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
- }
1601
+ 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 */
1602
+ & .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; }
1603
+ /* 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. */
1604
+ & .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
1605
  & .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
- }
1606
+ & .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
1607
  & .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
- }
1608
+ & .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
1609
  & .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
-
1610
+ /* 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 */
1611
+ & .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
1612
  }
1940
1613
  .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
-
1614
+ height: 180px; --crisp-wheelpicker-offset: 72px; --crisp-wheelpicker-fog: min(40%, 108px);
1615
+ & .crisp-wheelpicker-indicator { height: 36px; }
1616
+ & .crisp-wheelpicker-item { height: 36px; min-height: 36px; font-size: 20px; line-height: 27px; }
1947
1617
  }
1948
1618
  .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
-
1619
+ height: 220px; --crisp-wheelpicker-offset: 88px; --crisp-wheelpicker-fog: min(40%, 132px);
1620
+ & .crisp-wheelpicker-indicator { height: 44px; }
1621
+ & .crisp-wheelpicker-item { height: 44px; min-height: 44px; font-size: 26px; line-height: 35px; }
1955
1622
  }
1956
1623
 
1957
1624
  .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;
1625
+ 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
1626
  & .crisp-appshell-side { position: relative; flex-shrink: 0; overflow: hidden; }
1961
1627
  & .crisp-appshell-side-inner { height: 100%; }
1962
1628
  & .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 +1631,7 @@
1965
1631
  & .crisp-appshell-main { position: relative; flex: 1; min-width: 0; display: flex; flex-direction: column; overflow: hidden; }
1966
1632
  & .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
1633
  & .crisp-appshell-expand:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
1968
-
1969
1634
  [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
1970
-
1971
1635
  }
1972
1636
 
1973
1637
  @media (prefers-reduced-motion: reduce) {
@@ -1979,33 +1643,20 @@
1979
1643
  }
1980
1644
 
1981
1645
  .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
-
1646
+ 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
1647
  & .crisp-authshell-progress { position: absolute; top: 0; left: 0; width: 100%; height: 2px; background: var(--crisp-border-default); }
1987
1648
  & .crisp-authshell-progress-fill { height: 2px; background: var(--crisp-fg-primary); border-radius: 4px; transition: width .2s; }
1988
-
1989
1649
  & .crisp-authshell-logo { margin-top: var(--crisp-space-8); height: 24px; display: flex; align-items: center; }
1990
-
1991
1650
  & .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
1651
  & .crisp-authshell-pane { flex: 0 0 564px; padding: 72px; display: flex; flex-direction: column; box-sizing: border-box; }
1994
-
1995
1652
  & .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
1653
  & .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
1654
  & .crisp-authshell-body { width: 420px; margin: 0 auto; display: flex; flex-direction: column; gap: var(--crisp-space-8); align-items: center; }
1999
-
2000
1655
  & .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
1656
  & .crisp-authshell-form { align-self: stretch; display: flex; flex-direction: column; gap: 28px; }
2003
-
2004
1657
  & .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
1658
  & .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
1659
+ /* 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
1660
  40px) submit. Scoped to .crisp-authshell-body so a consumer keeps using
2010
1661
  crisp's Input / FormField / Button and gets the auth treatment for free. */
2011
1662
  & .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 +1664,7 @@
2013
1664
  & .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
1665
  & .crisp-authshell-body .crisp-input:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
2015
1666
  /* 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. */
1667
+ 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
1668
  & .crisp-authshell-body .crisp-button { height: 36px; padding-inline: var(--crisp-space-3); border-radius: 10px; }
2019
1669
  & .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
1670
 
@@ -2023,8 +1673,7 @@
2023
1673
  that bracket, not a measured value. A CONTAINER query, not a media
2024
1674
  query: the shell is embedded in the docs inside an ~800px column, where
2025
1675
  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;
1676
+ shell's own width is what "there isn't room for the preview" means. */ container-type: inline-size;
2028
1677
  @container (max-width: 1200px) { & .crisp-authshell-preview { display: none; } }
2029
1678
  }
2030
1679
 
@@ -2055,10 +1704,7 @@
2055
1704
  & .crisp-board-card:focus { outline: none; }
2056
1705
  & .crisp-board-card:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
2057
1706
  /* 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
- }
1707
+ & .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
1708
  }
2063
1709
 
2064
1710
  @media (prefers-reduced-motion: reduce) {
@@ -2070,16 +1716,15 @@
2070
1716
  }
2071
1717
 
2072
1718
  .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
1719
+ display: contents; font-family: var(--crisp-font-sans) ;
1720
+ & .crisp-command-content, & .crisp-command-card { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
1721
+ & .crisp-command-backdrop { position: fixed; inset: 0; z-index: 50; background: transparent; }
1722
+ & .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); }
1723
+ & .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); } }
1724
+ & .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; }
1725
+ & .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); }
1726
+ & .crisp-command-control svg { flex-shrink: 0; }
1727
+ /* 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
1728
  aria-labelledby at it, and without it both were unnamed and the reference
2084
1729
  resolved to nothing (#225). Clipped rather than display:none, which would
2085
1730
  take it out of the tree it exists for. */
@@ -2101,7 +1746,6 @@
2101
1746
  & .crisp-command-footer-action:disabled { opacity: 0.5; cursor: default; }
2102
1747
  & .crisp-command-footer-action-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2103
1748
  & .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
1749
  }
2106
1750
 
2107
1751
  @media (prefers-reduced-motion: reduce) {
@@ -2113,15 +1757,9 @@
2113
1757
  }
2114
1758
 
2115
1759
  .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
-
1760
+ 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
1761
  &: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
1762
  &:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
2124
-
2125
1763
  & .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
1764
  & .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
1765
  & .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 +1794,7 @@
2156
1794
  }
2157
1795
 
2158
1796
  .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
-
1797
+ 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
1798
  & .crisp-inbox-head { padding: var(--crisp-space-3) var(--crisp-space-3) 0; }
2165
1799
  & .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
1800
  & .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 +1803,6 @@
2169
1803
  & .crisp-inbox-tab[data-active] { color: var(--crisp-bg-brand-solid); box-shadow: inset 0 -2px 0 var(--crisp-bg-brand-solid); }
2170
1804
  & .crisp-inbox-tab-count { font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2171
1805
  & .crisp-inbox-tab[data-active] .crisp-inbox-tab-count { color: var(--crisp-bg-brand-solid); }
2172
-
2173
1806
  & .crisp-inbox-list { flex: 1; min-height: 0; overflow-y: auto; padding: var(--crisp-space-1); display: flex; flex-direction: column; gap: 1px; }
2174
1807
  & .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
1808
  & .crisp-inbox-row:hover { background: var(--crisp-bg-raised); }
@@ -2179,7 +1812,6 @@
2179
1812
  & .crisp-inbox-row-msg b { font-weight: var(--crisp-weight-semibold); }
2180
1813
  & .crisp-inbox-row-time { font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2181
1814
  & .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
1815
  & .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
1816
  & .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
1817
  & .crisp-inbox-empty-title { font-size: var(--crisp-text-xl); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); }
@@ -2196,34 +1828,24 @@
2196
1828
  }
2197
1829
 
2198
1830
  .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
-
1831
+ 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
1832
  & .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
1833
  & .crisp-listpage-toolbar-lead { display: flex; align-items: center; gap: var(--crisp-space-2); }
2204
1834
  & .crisp-listpage-count { margin-inline-start: auto; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); white-space: nowrap; }
2205
1835
  & .crisp-listpage-toolbar-trail { display: flex; align-items: center; gap: var(--crisp-space-2); }
2206
1836
  & .crisp-listpage-count + .crisp-listpage-toolbar-trail { margin-inline-start: var(--crisp-space-3); }
2207
-
2208
1837
  & .crisp-listpage-body { flex: 1; min-height: 0; overflow-y: auto; padding: 0 var(--crisp-space-3) var(--crisp-space-3); }
2209
-
2210
1838
  & .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); }
1839
+ & .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
1840
  & .crisp-listpage-favorites[data-dashed] { box-shadow: none; border: 1px dashed color-mix(in srgb, var(--crisp-fg-primary) 14%, transparent); }
2215
-
2216
1841
  & .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
1842
  & .crisp-listpage-colhead-cell { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); }
2218
-
2219
1843
  & .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
1844
  & .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
1845
  & .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
1846
  & .crisp-listpage-row:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: -2px; }
2224
1847
  & .crisp-listpage-row:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 3%, transparent); }
2225
1848
  & .crisp-listpage-row-title { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2226
-
2227
1849
  & .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
1850
  }
2229
1851
 
@@ -2236,19 +1858,11 @@
2236
1858
  }
2237
1859
 
2238
1860
  .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
-
1861
+ 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;
1862
+ & .crisp-navitem-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1863
+ & .crisp-navitem-trailing { margin-inline-start: auto; display: inline-flex; align-items: center; flex-shrink: 0; }
1864
+ &:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 2%, transparent); }
1865
+ &[data-active] { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); }
2252
1866
  }
2253
1867
 
2254
1868
  @media (prefers-reduced-motion: reduce) {
@@ -2260,23 +1874,16 @@
2260
1874
  }
2261
1875
 
2262
1876
  .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
-
1877
+ 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
1878
  & .crisp-onboarding-head { display: flex; align-items: center; gap: var(--crisp-space-1); }
2269
1879
  & .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
1880
  & .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
1881
  & .crisp-onboarding-iconbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2272
-
2273
1882
  & .crisp-onboarding-sub { font-size: var(--crisp-text-sm); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); }
2274
1883
  & .crisp-onboarding-sub b { font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2275
-
2276
1884
  & .crisp-onboarding-progress { display: flex; gap: var(--crisp-space-1); margin: var(--crisp-space-0-5) 0 var(--crisp-space-1); }
2277
1885
  & .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
1886
  & .crisp-onboarding-seg[data-done] { background: var(--crisp-bg-brand-solid); }
2279
-
2280
1887
  & .crisp-onboarding-steps { display: flex; flex-direction: column; }
2281
1888
  & .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
1889
  & .crisp-onboarding-step:hover { background: var(--crisp-bg-raised); }
@@ -2298,12 +1905,8 @@
2298
1905
  }
2299
1906
 
2300
1907
  .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);
1908
+ 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
1909
  & * { box-sizing: border-box; }
2306
-
2307
1910
  & .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
1911
  & .crisp-recordpage-crumbs { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; }
2309
1912
  & .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 +1919,7 @@
2316
1919
  & .crisp-recordpage-action--ghost { box-shadow: none; color: var(--crisp-fg-muted); }
2317
1920
  & .crisp-recordpage-action--icon { width: 28px; padding: 0; justify-content: center; box-shadow: none; color: var(--crisp-fg-muted); }
2318
1921
  & .crisp-recordpage-action svg { flex-shrink: 0; }
2319
-
2320
1922
  & .crisp-recordpage-body { flex: 1; min-height: 0; display: flex; }
2321
-
2322
1923
  & .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
1924
  & .crisp-recordpage-resizer { position: relative; flex: 0 0 auto; width: 0; align-self: stretch; cursor: col-resize; z-index: 5; touch-action: none; }
2324
1925
  & .crisp-recordpage-resizer::before { content: ""; position: absolute; top: 0; bottom: 0; inset-inline-start: -4px; width: 9px; }
@@ -2339,8 +1940,7 @@
2339
1940
  & .crisp-recordpage-quickbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2340
1941
  & .crisp-recordpage-section { padding-top: var(--crisp-space-2); }
2341
1942
  & .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. */
1943
+ /* main-area section headers (Highlights / Activity / Emails / Notes / Tasks) are 14px; the left column's (Record Details / Lists) stay 12px. */
2344
1944
  & .crisp-recordpage-main .crisp-recordpage-section-title { font-size: var(--crisp-text-lg); }
2345
1945
  & .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
1946
  & .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 +2038,6 @@
2438
2038
  & .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
2039
  & .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
2040
  & .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
2041
  }
2443
2042
 
2444
2043
  @media (prefers-reduced-motion: reduce) {
@@ -2450,24 +2049,14 @@
2450
2049
  }
2451
2050
 
2452
2051
  .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;
2052
+ 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
2053
  @starting-style { transform: translateX(calc(100% + var(--crisp-space-2))); }
2463
2054
  & * { box-sizing: border-box; }
2464
-
2465
2055
  & .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
2056
  & .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
2057
  & .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
2058
  & .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
2059
  & .crisp-recordpanel-iconbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2470
-
2471
2060
  & .crisp-recordpanel-body { flex: 1; min-height: 0; overflow-y: auto; padding: var(--crisp-space-2) var(--crisp-space-3); }
2472
2061
  & .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
2062
  & .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 +2065,6 @@
2476
2065
  & .crisp-recordpanel-field-label svg { flex-shrink: 0; }
2477
2066
  & .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
2067
  & .crisp-recordpanel-empty { color: var(--crisp-fg-muted); }
2479
-
2480
2068
  & .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
2069
  & .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
2070
  & .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 +2075,6 @@
2487
2075
  & .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
2076
  & .crisp-recordpanel-link { color: var(--crisp-bg-brand-solid); text-decoration: none; overflow: hidden; text-overflow: ellipsis; }
2489
2077
  & .crisp-recordpanel-link:hover { text-decoration: underline; }
2490
-
2491
2078
  }
2492
2079
 
2493
2080
  @media (prefers-reduced-motion: reduce) {
@@ -2499,10 +2086,8 @@
2499
2086
  }
2500
2087
 
2501
2088
  .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;
2089
+ 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
2090
  & * { box-sizing: border-box; }
2505
-
2506
2091
  /* toolbar */
2507
2092
  & .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
2093
  & .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 +2156,6 @@
2571
2156
  & .crisp-recordstable-count { font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2572
2157
  & .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
2158
  & .crisp-recordstable-new:hover { background: var(--crisp-bg-brand-solid-pressed); }
2574
-
2575
2159
  /* scroll frame + table */
2576
2160
  & .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
2161
  & .crisp-recordstable-scroll::-webkit-scrollbar { width: 10px; height: 10px; }
@@ -2589,20 +2173,15 @@
2589
2173
  & .crisp-recordstable-sort { flex-shrink: 0; opacity: 0.4; transition: opacity .12s; color: color-mix(in srgb, var(--crisp-fg-primary) 45%, transparent); }
2590
2174
  & .crisp-recordstable-th:hover .crisp-recordstable-sort, & .crisp-recordstable-th[data-sorted] .crisp-recordstable-sort { opacity: 1; }
2591
2175
  & .crisp-recordstable-th[data-sorted="desc"] .crisp-recordstable-sort svg { transform: rotate(180deg); }
2592
-
2593
2176
  /* column resize handle */
2594
2177
  & .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
2178
  & .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
2179
  & .crisp-recordstable-resize:hover::after, & .crisp-recordstable-resize[data-resizing]::after { opacity: 1; }
2597
-
2598
2180
  /* add-column header */
2599
2181
  & .crisp-recordstable-addcol { min-width: 44px; }
2600
2182
  & .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
2183
  & .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
2184
+ /* 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
2185
  defaults to bold. Measured before the change and unchanged after: 400. */
2607
2186
  & .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
2187
  & .crisp-recordstable-td--editable { cursor: text; }
@@ -2708,7 +2287,6 @@
2708
2287
  }
2709
2288
 
2710
2289
  [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2711
-
2712
2290
  }
2713
2291
 
2714
2292
  @media (prefers-reduced-motion: reduce) {
@@ -2720,12 +2298,9 @@
2720
2298
  }
2721
2299
 
2722
2300
  .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
-
2301
+ 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
2302
  & .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
2303
  & .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
2304
  & .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
2305
  & .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
2306
  & .crisp-rte-body > * { margin: 0; }
@@ -2739,7 +2314,6 @@
2739
2314
  & .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
2315
  & .crisp-rte-body a { color: var(--crisp-bg-brand-solid); text-decoration: underline; text-underline-offset: 2px; }
2741
2316
  & .crisp-rte-body strong { font-weight: var(--crisp-weight-semibold); }
2742
-
2743
2317
  & .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
2318
  & .crisp-rte-toolbar { @starting-style { opacity: 0; } }
2745
2319
  & .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 +2341,13 @@
2767
2341
  }
2768
2342
 
2769
2343
  .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
-
2344
+ 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
2345
  & .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
2346
  & .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
2347
  & .crisp-settingsshell-back svg { color: var(--crisp-fg-muted); }
2776
2348
  & .crisp-settingsshell-back:hover svg { color: var(--crisp-fg-primary); }
2777
-
2778
2349
  & .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
2350
+ /* 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
2351
  input carries box-shadow: none while its wrapper carries
2782
2352
  inset 0 0 0 1px #266df0. */
2783
2353
  & .crisp-settingsshell-search:focus-within { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
@@ -2798,7 +2368,6 @@
2798
2368
 
2799
2369
  & .crisp-settingsshell-content { flex: 1; min-width: 0; min-height: 0; overflow-y: auto; padding: var(--crisp-space-6) var(--crisp-space-8); }
2800
2370
  [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2801
-
2802
2371
  }
2803
2372
 
2804
2373
  @media (prefers-reduced-motion: reduce) {
@@ -2810,34 +2379,29 @@
2810
2379
  }
2811
2380
 
2812
2381
  .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
-
2382
+ 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;
2383
+ & .crisp-sidebar-section { display: flex; flex-direction: column; gap: var(--crisp-space-px); margin-top: var(--crisp-space-2); }
2384
+ & .crisp-sidebar-section[data-collapsed] { display: none; }
2385
+ & .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); }
2386
+ & .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; }
2387
+ & .crisp-sidebar-section-header svg { flex-shrink: 0; transition: transform .15s ease; }
2388
+ & .crisp-sidebar-section-header[data-collapsed] svg { transform: rotate(-90deg); }
2389
+ & .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; }
2390
+ & .crisp-sidebar-ws:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); }
2391
+ & .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; }
2392
+ & .crisp-sidebar-ws-collapse { margin-inline-start: auto; }
2393
+ & .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); }
2394
+ & .crisp-sidebar-footer { margin-top: auto; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
2395
+ & .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); }
2396
+ & .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; }
2397
+ & .crisp-sidebar-search:hover { background: var(--crisp-bg-raised); }
2398
+ & .crisp-sidebar-search-label { flex: 1; color: var(--crisp-fg-primary); font-weight: var(--crisp-weight-medium); }
2399
+ & .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); }
2400
+ & .crisp-sidebar-pill { border-radius: var(--crisp-radius-full); align-self: center; width: auto; height: 32px; padding-inline: var(--crisp-space-4); }
2401
+ & .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; }
2402
+ & .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; }
2403
+ & .crisp-sidebar-newlist:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2404
+ [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2841
2405
  }
2842
2406
 
2843
2407
  @media (prefers-reduced-motion: reduce) {
@@ -2849,27 +2413,20 @@
2849
2413
  }
2850
2414
 
2851
2415
  .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
-
2416
+ 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
2417
  & .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
2418
  & .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
2419
  & .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
2420
  & .crisp-tasklist-row:first-child { border-top: none; }
2860
-
2861
2421
  & .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
2422
  & .crisp-tasklist-check:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 30%, transparent); }
2863
2423
  & .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
2424
  & .crisp-tasklist-check:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
2865
-
2866
2425
  & .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
2426
  & .crisp-tasklist-row[data-done] .crisp-tasklist-title { color: var(--crisp-fg-muted); text-decoration: line-through; }
2868
-
2869
2427
  & .crisp-tasklist-meta { display: inline-flex; align-items: center; gap: var(--crisp-space-3); flex-shrink: 0; }
2870
2428
  & .crisp-tasklist-due { font-size: var(--crisp-text-lg); color: var(--crisp-fg-muted); white-space: nowrap; }
2871
2429
  & .crisp-tasklist-due[data-overdue] { color: var(--crisp-bg-danger); }
2872
-
2873
2430
  & .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
2431
  }
2875
2432
 
@@ -2882,20 +2439,11 @@
2882
2439
  }
2883
2440
 
2884
2441
  .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
-
2442
+ 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
2443
  & .crisp-trialbanner-icon { display: inline-flex; flex-shrink: 0; color: var(--crisp-fg-muted); }
2891
2444
  & .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; }
2445
+ & .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
2446
  & .crisp-trialbanner-action:hover { background: var(--crisp-bg-raised); }
2898
-
2899
2447
  &[data-tone="warning"] .crisp-trialbanner-icon { color: var(--crisp-bg-warning); }
2900
2448
  &[data-tone="danger"] .crisp-trialbanner-icon { color: var(--crisp-bg-danger); }
2901
2449
  }
@@ -2909,16 +2457,10 @@
2909
2457
  }
2910
2458
 
2911
2459
  .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; }
2460
+ 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);
2461
+ & .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
2462
  & .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); }
2463
+ & .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
2464
  & .crisp-viewtoggle-tile:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
2923
2465
  }
2924
2466