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