@crewlethq/ui 0.34.2 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +47 -0
  2. package/dist/AppShell/index.js +2 -2
  3. package/dist/ArtifactBar/ArtifactBar.d.ts +6 -0
  4. package/dist/ArtifactBar/index.d.ts +1 -0
  5. package/dist/ArtifactBar/index.js +2 -2
  6. package/dist/{ArtifactBar-C462VD4C.css → ArtifactBar-HV5AT4RG.css} +39 -2
  7. package/dist/ArtifactCard/index.d.ts +1 -0
  8. package/dist/ArtifactCard/index.js +2 -2
  9. package/dist/{ArtifactCard-XHRLAL7C.css → ArtifactCard-OGTMO2KI.css} +15 -16
  10. package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +14 -1
  11. package/dist/ArtifactKindIllustration/index.d.ts +1 -0
  12. package/dist/ArtifactKindIllustration/index.js +1 -1
  13. package/dist/{ArtifactKindIllustration-4NG6IE3C.css → ArtifactKindIllustration-5FPRJQ3P.css} +32 -26
  14. package/dist/ArtifactKinds-CVD3FCYO.css +15 -0
  15. package/dist/AvatarPicker/index.js +2 -2
  16. package/dist/CanvasBoard/CanvasBoard.d.ts +30 -12
  17. package/dist/CanvasBoard/index.js +1 -1
  18. package/dist/ChangeMark/index.js +2 -2
  19. package/dist/ChoiceList/ChoiceList.d.ts +7 -1
  20. package/dist/ChoiceList/index.js +1 -1
  21. package/dist/{ChoiceList-2PQJS4DX.css → ChoiceList-RBL7FNQL.css} +39 -0
  22. package/dist/DataTable/index.js +2 -2
  23. package/dist/DataView/index.js +3 -3
  24. package/dist/DocTabsEditor/index.js +2 -2
  25. package/dist/{Editor-JMRD6AZW.js → Editor-BVQHBF7L.js} +4 -4
  26. package/dist/FileDrop/FileDrop.d.ts +64 -0
  27. package/dist/FileDrop/index.d.ts +3 -0
  28. package/dist/FileDrop/index.js +4 -0
  29. package/dist/FileDrop-WE7BNZGV.css +80 -0
  30. package/dist/FindingList/FindingList.d.ts +35 -0
  31. package/dist/FindingList/index.d.ts +3 -0
  32. package/dist/FindingList/index.js +3 -0
  33. package/dist/FindingList-PMYA2R6Q.css +71 -0
  34. package/dist/HuePicker/HuePicker.d.ts +9 -0
  35. package/dist/HuePicker/index.d.ts +1 -1
  36. package/dist/HuePicker/index.js +1 -1
  37. package/dist/Markdown/index.js +1 -1
  38. package/dist/Menu/Menu.d.ts +6 -1
  39. package/dist/Menu/index.js +1 -1
  40. package/dist/RichEditor/index.js +3 -3
  41. package/dist/RichEditorMarkdown/index.js +3 -3
  42. package/dist/SheetColumnEditor/SheetColumnEditor.d.ts +94 -0
  43. package/dist/SheetColumnEditor/index.d.ts +3 -0
  44. package/dist/SheetColumnEditor/index.js +23 -0
  45. package/dist/SheetColumnEditor-BO2HKFRB.css +73 -0
  46. package/dist/SheetGrid/SheetGrid.d.ts +19 -1
  47. package/dist/SheetGrid/index.js +5 -4
  48. package/dist/{SheetGrid-GDPCCZ4V.css → SheetGrid-YRDXTIIZ.css} +48 -0
  49. package/dist/SheetModel/index.js +1 -1
  50. package/dist/SheetModel/labels.d.ts +6 -0
  51. package/dist/SlideFilmstrip/SlideFilmstrip.d.ts +30 -1
  52. package/dist/SlideFilmstrip/index.js +5 -1
  53. package/dist/{SlideFilmstrip-5U6Z55GS.css → SlideFilmstrip-4ITZLMO4.css} +49 -0
  54. package/dist/SourceEditor/SourceEditor.d.ts +62 -0
  55. package/dist/SourceEditor/index.d.ts +3 -0
  56. package/dist/SourceEditor/index.js +3 -0
  57. package/dist/SourceEditor-G2C3STPX.css +160 -0
  58. package/dist/ThemeGallery/ThemeGallery.d.ts +10 -3
  59. package/dist/ThemeGallery/index.js +1 -1
  60. package/dist/{ThemeGallery-NITASULQ.css → ThemeGallery-HSUKBDWY.css} +9 -0
  61. package/dist/{chunk-UXXJDIYE.js → chunk-22CQQDFW.js} +1 -1
  62. package/dist/{chunk-EQ7P7DGN.js → chunk-3VD3G3IL.js} +2 -2
  63. package/dist/{chunk-EWAFN2IU.js → chunk-5VCG26CV.js} +281 -234
  64. package/dist/{chunk-7T5LSYZ2.js → chunk-7UYONN6K.js} +4 -3
  65. package/dist/{chunk-KK5OYNAF.js → chunk-BAKPMH3S.js} +8 -4
  66. package/dist/{chunk-3EB2AV3H.js → chunk-BUVCV3WI.js} +1 -1
  67. package/dist/{chunk-4B6LSFDS.js → chunk-CSQTDGTS.js} +1 -1
  68. package/dist/{chunk-WPX6A5BV.js → chunk-E35CMI5D.js} +22 -6
  69. package/dist/{chunk-OMLACFPP.js → chunk-FJJHD73S.js} +1 -1
  70. package/dist/{chunk-SGHIAGPR.js → chunk-HAKTRTRP.js} +1 -1
  71. package/dist/chunk-MAD6WPER.js +342 -0
  72. package/dist/{chunk-ZADVT7IL.js → chunk-NKZCJRKO.js} +9 -4
  73. package/dist/chunk-NTB5LRRD.js +52 -0
  74. package/dist/{chunk-VI5FWDZW.js → chunk-OOMXLJ3S.js} +4 -1
  75. package/dist/{chunk-UOR7TOAU.js → chunk-OSFA5ROT.js} +86 -1
  76. package/dist/{chunk-T46NR3WP.js → chunk-PGZ2R3ON.js} +1 -1
  77. package/dist/chunk-PI7HKLIT.js +245 -0
  78. package/dist/{chunk-YZFLH463.js → chunk-QEFHYUCY.js} +1 -1
  79. package/dist/{chunk-NPQWKZTB.js → chunk-QFNWMWWY.js} +2 -2
  80. package/dist/{chunk-C7DKX453.js → chunk-QH6VYJ3X.js} +1 -1
  81. package/dist/{chunk-XV32RKQZ.js → chunk-QIXMNOBD.js} +67 -6
  82. package/dist/{chunk-GPHWCK7M.js → chunk-SUXP4OBT.js} +6 -3
  83. package/dist/{chunk-TRQCHF2F.js → chunk-SWD4QBL6.js} +1 -1
  84. package/dist/chunk-THDGBD6Y.js +154 -0
  85. package/dist/{chunk-C2FRTWKO.js → chunk-W3UVOZKL.js} +3 -2
  86. package/dist/{chunk-UDQW6UK7.js → chunk-W7QBBKUE.js} +34 -7
  87. package/dist/{chunk-QBXZLGK2.js → chunk-ZU3DUXD2.js} +3 -2
  88. package/dist/generated/index.d.ts +4 -0
  89. package/dist/generated/index.js +56 -52
  90. package/dist/index.js +56 -52
  91. package/dist/styles.css +652 -51
  92. package/dist/utils/csv.d.ts +35 -0
  93. package/dist/utils/index.d.ts +2 -1
  94. package/dist/utils/index.js +1 -1
  95. package/package.json +3 -3
  96. /package/dist/{chunk-VFRSSP3W.js → chunk-3WCNHYXE.js} +0 -0
package/dist/styles.css CHANGED
@@ -2041,7 +2041,7 @@ button.crewlet-account-row__who:focus-visible {
2041
2041
  }
2042
2042
 
2043
2043
 
2044
- /* ArtifactBar-C462VD4C.css */
2044
+ /* ArtifactBar-HV5AT4RG.css */
2045
2045
  /*
2046
2046
  * One row, one hairline under it, the height of a large row. The lead (the
2047
2047
  * way back, the glyph, the title, the version) takes what the end leaves it
@@ -2108,6 +2108,9 @@ button.crewlet-account-row__who:focus-visible {
2108
2108
  align-items: center;
2109
2109
  }
2110
2110
 
2111
+ /* THE KIND'S GLYPH IN THE KIND'S INK, as the gallery's badge and the Make
2112
+ row draw it, so an open artifact and a create page say what they are in the
2113
+ same colour the reader picked it by. */
2111
2114
  .crewlet-artifact-bar__glyph {
2112
2115
  display: inline-flex;
2113
2116
  flex: none;
@@ -2115,7 +2118,7 @@ button.crewlet-account-row__who:focus-visible {
2115
2118
  justify-content: center;
2116
2119
  width: var(--size-control-sm);
2117
2120
  height: var(--size-control-sm);
2118
- color: var(--color-text-secondary);
2121
+ color: var(--crewlet-kind-ink, var(--color-text-secondary));
2119
2122
  }
2120
2123
 
2121
2124
  /* THE TITLE. Read only, it is text; renamable, its words are a button drawn
@@ -2306,7 +2309,8 @@ button.crewlet-account-row__who:focus-visible {
2306
2309
 
2307
2310
  /* Both arrangements are drawn; the bar's width says which one shows. */
2308
2311
  .crewlet-artifact-bar__narrow,
2309
- .crewlet-artifact-bar__tight {
2312
+ .crewlet-artifact-bar__tight,
2313
+ .crewlet-artifact-bar__word-short {
2310
2314
  display: none;
2311
2315
  }
2312
2316
 
@@ -2353,6 +2357,39 @@ button.crewlet-account-row__who:focus-visible {
2353
2357
  display: inline-flex;
2354
2358
  }
2355
2359
 
2360
+ /* A PRIMARY ACTION TAKES ITS SHORT WORD, where it has one, so "Create and
2361
+ ask SRE Lead" does not push the title out of a phone's bar. */
2362
+ .crewlet-artifact-bar__word-full {
2363
+ display: none;
2364
+ }
2365
+
2366
+ .crewlet-artifact-bar__word-short {
2367
+ display: inline;
2368
+ }
2369
+
2370
+ /* THE STATUS GIVES WAY BEFORE THE TITLE: the end may shrink, and the
2371
+ status is the part of it that does, cut to an ellipsis rather than drawn
2372
+ over the title. Its words stay whole for a screen reader. */
2373
+ .crewlet-artifact-bar__end {
2374
+ flex: 0 1 auto;
2375
+ min-width: 0;
2376
+ }
2377
+
2378
+ .crewlet-artifact-bar__end > * {
2379
+ flex: none;
2380
+ }
2381
+
2382
+ .crewlet-artifact-bar__end > .crewlet-artifact-bar__status {
2383
+ display: block;
2384
+ flex: 0 1 auto;
2385
+ min-width: 0;
2386
+ max-width: 30cqi;
2387
+ margin-inline-end: var(--spacing-1);
2388
+ overflow: hidden;
2389
+ text-overflow: ellipsis;
2390
+ white-space: nowrap;
2391
+ }
2392
+
2356
2393
  /* The views have folded, so there is nothing to centre: the title takes
2357
2394
  the room. */
2358
2395
  .crewlet-artifact-bar__row--centred .crewlet-artifact-bar__end {
@@ -2414,7 +2451,7 @@ button.crewlet-account-row__who:focus-visible {
2414
2451
  }
2415
2452
 
2416
2453
 
2417
- /* ArtifactCard-XHRLAL7C.css */
2454
+ /* ArtifactCard-OGTMO2KI.css */
2418
2455
  /*
2419
2456
  * A card in a gallery: the preview on top at a fixed ratio, so a grid of them
2420
2457
  * lines up whatever each preview is, the kind's badge over its foot, then the
@@ -2536,7 +2573,12 @@ button.crewlet-account-row__who:focus-visible {
2536
2573
  * A SOFT PANE WITH A GENEROUS CORNER. The card is the card rung with its
2537
2574
  * hairline, rounded a step past a plain card's because the preview inside it
2538
2575
  * is a picture, and a picture in a tight corner reads as a screenshot pasted
2539
- * into a box. Hover lifts the edge and the shadow, never the colour.
2576
+ * into a box.
2577
+ *
2578
+ * HOVER IS A STEP, NEVER A MOVE: the hairline darkens and a hairline shadow
2579
+ * settles under the card, quickly and with the standard ease. A card that rose
2580
+ * and cast a wide shadow made a gallery ripple as the pointer crossed it, and
2581
+ * the preview inside it never moves.
2540
2582
  */
2541
2583
  .crewlet-artifact-card--card {
2542
2584
  position: relative;
@@ -2547,15 +2589,13 @@ button.crewlet-account-row__who:focus-visible {
2547
2589
  border-radius: var(--radius-xl);
2548
2590
  background: var(--color-surface-subtle);
2549
2591
  transition:
2550
- border-color var(--motion-duration-base) var(--motion-easing-out),
2551
- box-shadow var(--motion-duration-base) var(--motion-easing-out),
2552
- transform var(--motion-duration-base) var(--motion-easing-out);
2592
+ border-color var(--motion-duration-fast) var(--motion-easing-out),
2593
+ box-shadow var(--motion-duration-fast) var(--motion-easing-out);
2553
2594
  }
2554
2595
 
2555
2596
  .crewlet-artifact-card--card:hover {
2556
2597
  border-color: var(--color-border-hover);
2557
- box-shadow: var(--shadow-card);
2558
- transform: translateY(-1px);
2598
+ box-shadow: var(--shadow-xs);
2559
2599
  }
2560
2600
 
2561
2601
  .crewlet-artifact-card--card:has(.crewlet-artifact-card__link:focus-visible) {
@@ -2595,7 +2635,7 @@ button.crewlet-account-row__who:focus-visible {
2595
2635
 
2596
2636
  .crewlet-artifact-card--card .crewlet-artifact-card__body {
2597
2637
  gap: var(--spacing-1);
2598
- padding: 0 var(--spacing-5) var(--spacing-5);
2638
+ padding: 0 var(--spacing-4) var(--spacing-4);
2599
2639
  }
2600
2640
 
2601
2641
  /*
@@ -2610,19 +2650,19 @@ button.crewlet-account-row__who:focus-visible {
2610
2650
  align-items: center;
2611
2651
  justify-content: center;
2612
2652
  align-self: flex-start;
2613
- width: 40px;
2614
- height: 40px;
2615
- margin-top: -22px;
2653
+ width: 32px;
2654
+ height: 32px;
2655
+ margin-top: -18px;
2616
2656
  margin-bottom: var(--spacing-2);
2617
2657
  border: 1px solid var(--color-border-default);
2618
- border-radius: var(--radius-lg);
2658
+ border-radius: var(--radius-md);
2619
2659
  background: var(--color-surface-background);
2620
2660
  box-shadow: var(--shadow-sm);
2621
2661
  color: var(--crewlet-kind-ink, var(--color-text-secondary));
2622
2662
  }
2623
2663
 
2624
2664
  .crewlet-artifact-card--card .crewlet-artifact-card__title {
2625
- font-size: var(--font-size-lg);
2665
+ font-size: var(--font-size-md);
2626
2666
  font-weight: var(--font-weight-medium);
2627
2667
  line-height: 1.35;
2628
2668
  }
@@ -2691,10 +2731,6 @@ button.crewlet-account-row__who:focus-visible {
2691
2731
  .crewlet-artifact-card__actions {
2692
2732
  transition: none;
2693
2733
  }
2694
-
2695
- .crewlet-artifact-card--card:hover {
2696
- transform: none;
2697
- }
2698
2734
  }
2699
2735
 
2700
2736
  .crewlet-artifact-card--skeleton {
@@ -2776,22 +2812,16 @@ button.crewlet-account-row__who:focus-visible {
2776
2812
  }
2777
2813
 
2778
2814
 
2779
- /* ArtifactKindIllustration-4NG6IE3C.css */
2815
+ /* ArtifactKindIllustration-5FPRJQ3P.css */
2780
2816
  /*
2781
2817
  * A kind's drawing, its tinted ground and the Make something new tile.
2782
2818
  *
2783
2819
  * Every colour is the kind's token, `--color-artifact-kind-<kind>` and its
2784
- * Fill and Line steps, set once per kind on `--crewlet-kind-*` and read by
2785
- * every rule below, so the drawing, the ground and the tile repaint together
2786
- * with the theme.
2820
+ * Fill and Line steps, set once per kind on `--crewlet-kind-*`
2821
+ * (`ArtifactKinds.css`) and read by every rule below, so the drawing, the
2822
+ * ground and the tile repaint together with the theme.
2787
2823
  */
2788
2824
 
2789
- .crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); }
2790
- .crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); }
2791
- .crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); }
2792
- .crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); }
2793
- .crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); }
2794
- .crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); }
2795
2825
 
2796
2826
  /* ---- the drawing ---- */
2797
2827
 
@@ -2914,9 +2944,7 @@ button.crewlet-account-row__who:focus-visible {
2914
2944
  border: 1px solid var(--color-border-default);
2915
2945
  border-radius: var(--radius-2xl);
2916
2946
  background: var(--color-surface-subtle);
2917
- transition:
2918
- border-color var(--motion-duration-base) var(--motion-easing-out),
2919
- box-shadow var(--motion-duration-base) var(--motion-easing-out);
2947
+ transition: border-color var(--motion-duration-fast) var(--motion-easing-out);
2920
2948
  }
2921
2949
 
2922
2950
  .crewlet-kind-tile__ground {
@@ -2925,10 +2953,6 @@ button.crewlet-account-row__who:focus-visible {
2925
2953
  overflow: hidden;
2926
2954
  }
2927
2955
 
2928
- .crewlet-kind-tile__ground > .crewlet-kind-illustration {
2929
- transition: transform var(--motion-duration-base) var(--motion-easing-out);
2930
- }
2931
-
2932
2956
  .crewlet-kind-tile__label {
2933
2957
  display: flex;
2934
2958
  align-items: center;
@@ -2956,12 +2980,35 @@ button.crewlet-account-row__who:focus-visible {
2956
2980
  font-weight: var(--font-weight-medium);
2957
2981
  }
2958
2982
 
2959
- a.crewlet-kind-tile:hover .crewlet-kind-tile__frame {
2960
- border-color: var(--color-border-hover);
2983
+ /* A tile that starts something in place is a button, drawn as the link is. */
2984
+ .crewlet-kind-tile--button {
2985
+ /* A button shrinks to its content where a link in a grid cell fills it. */
2986
+ width: 100%;
2987
+ padding: 0;
2988
+ border: 0;
2989
+ background: none;
2990
+ font: inherit;
2991
+ text-align: start;
2992
+ cursor: pointer;
2993
+ }
2994
+
2995
+ /* What the tile starts, under its name, in the quiet ink. */
2996
+ .crewlet-kind-tile__detail {
2997
+ margin-top: calc(-1 * var(--spacing-1));
2998
+ padding-inline: var(--spacing-1);
2999
+ overflow: hidden;
3000
+ color: var(--color-text-tertiary);
3001
+ font-size: var(--font-size-compact);
3002
+ line-height: 1.3;
3003
+ text-overflow: ellipsis;
3004
+ white-space: nowrap;
2961
3005
  }
2962
3006
 
2963
- a.crewlet-kind-tile:hover .crewlet-kind-tile__ground > .crewlet-kind-illustration {
2964
- transform: translateY(-2px) scale(1.03);
3007
+ /* HOVER IS THE FRAME'S STEP ALONE: the drawing inside stays still, as a
3008
+ card's preview does, so a row of tiles never ripples under the pointer. */
3009
+ a.crewlet-kind-tile:hover .crewlet-kind-tile__frame,
3010
+ .crewlet-kind-tile--button:hover .crewlet-kind-tile__frame {
3011
+ border-color: var(--color-border-hover);
2965
3012
  }
2966
3013
 
2967
3014
  .crewlet-kind-tile:focus-visible .crewlet-kind-tile__frame {
@@ -2979,17 +3026,30 @@ a.crewlet-kind-tile:hover .crewlet-kind-tile__ground > .crewlet-kind-illustratio
2979
3026
  }
2980
3027
 
2981
3028
  @media (prefers-reduced-motion: reduce) {
2982
- .crewlet-kind-tile__frame,
2983
- .crewlet-kind-tile__ground > .crewlet-kind-illustration {
3029
+ .crewlet-kind-tile__frame {
2984
3030
  transition: none;
2985
3031
  }
2986
-
2987
- a.crewlet-kind-tile:hover .crewlet-kind-tile__ground > .crewlet-kind-illustration {
2988
- transform: none;
2989
- }
2990
3032
  }
2991
3033
 
2992
3034
 
3035
+ /* ArtifactKinds-CVD3FCYO.css */
3036
+ /*
3037
+ * A kind's colours, set once per kind on `--crewlet-kind-*` by its class
3038
+ * (`crewlet-kind--<kind>`): the hue, its Fill and Line steps and the ink a
3039
+ * glyph is drawn in. Every surface that tints by kind reads these, so a kind
3040
+ * glyph in a bar, a card's badge and a Make row's tile repaint together with
3041
+ * the theme, and no surface spells a kind's colour of its own. A sheet of
3042
+ * its own, imported by each surface that tints, because the glyph's module
3043
+ * carries no stylesheet (a frame that draws one glyph takes nothing else).
3044
+ */
3045
+ .crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); }
3046
+ .crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); }
3047
+ .crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); }
3048
+ .crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); }
3049
+ .crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); }
3050
+ .crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); }
3051
+
3052
+
2993
3053
  /* ArtifactPanel-HW3SU7CP.css */
2994
3054
  /*
2995
3055
  * The workspace is a row: the artifact's body, then at most one panel. The
@@ -7388,13 +7448,15 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7388
7448
  }
7389
7449
 
7390
7450
 
7391
- /* ChoiceList-2PQJS4DX.css */
7451
+ /* ChoiceList-RBL7FNQL.css */
7392
7452
  /*
7393
7453
  * A short list of answers in one bordered box: a radio, the label with a line
7394
7454
  * of detail under it, and a tag at the row's end. The selected row takes the
7395
7455
  * accent's soft fill, so the answer reads at a glance without the radio.
7396
7456
  */
7397
7457
  .crewlet-choice-list {
7458
+ /* The platform's radio, sized here so a panel can line up with the text beside it. */
7459
+ --crewlet-choice-list-radio-size: 13px;
7398
7460
  display: grid;
7399
7461
  gap: var(--spacing-1);
7400
7462
  padding: var(--spacing-1);
@@ -7434,6 +7496,22 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7434
7496
  transition: background-color var(--motion-duration-fast) var(--motion-easing-default);
7435
7497
  }
7436
7498
 
7499
+ /* A choice with a picture: the radio, the picture, the words, the tag. The
7500
+ picture centres on the label and its detail together. */
7501
+ .crewlet-choice-list__row.has-media {
7502
+ grid-template-columns: auto auto minmax(0, 1fr) auto;
7503
+ align-items: center;
7504
+ }
7505
+
7506
+ .crewlet-choice-list__row.has-media .crewlet-choice-list__radio {
7507
+ margin-top: 0;
7508
+ }
7509
+
7510
+ .crewlet-choice-list__media {
7511
+ display: inline-flex;
7512
+ flex: none;
7513
+ }
7514
+
7437
7515
  .crewlet-choice-list__row:hover {
7438
7516
  background: var(--color-surface-hover);
7439
7517
  }
@@ -7447,6 +7525,8 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7447
7525
  }
7448
7526
 
7449
7527
  .crewlet-choice-list__radio {
7528
+ width: var(--crewlet-choice-list-radio-size);
7529
+ height: var(--crewlet-choice-list-radio-size);
7450
7530
  margin: 3px 0 0;
7451
7531
  accent-color: var(--color-brand-accent);
7452
7532
  cursor: inherit;
@@ -7486,6 +7566,25 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7486
7566
  white-space: nowrap;
7487
7567
  }
7488
7568
 
7569
+ /* A SELECTED CHOICE'S PANEL is part of the choice: it continues the row's
7570
+ fill under it, and its content starts where the label does, not under the
7571
+ radio. */
7572
+ .crewlet-choice-list__item:has(> .crewlet-choice-list__panel) {
7573
+ gap: 0;
7574
+ }
7575
+
7576
+ .crewlet-choice-list__item:has(> .crewlet-choice-list__panel) > .crewlet-choice-list__row {
7577
+ border-end-start-radius: 0;
7578
+ border-end-end-radius: 0;
7579
+ }
7580
+
7581
+ .crewlet-choice-list__panel {
7582
+ padding: var(--spacing-1) var(--spacing-2) var(--spacing-3) calc(var(--spacing-2) + var(--crewlet-choice-list-radio-size) + var(--spacing-3));
7583
+ border-end-start-radius: var(--radius-sm);
7584
+ border-end-end-radius: var(--radius-sm);
7585
+ background: var(--color-brand-accent-soft);
7586
+ }
7587
+
7489
7588
  .crewlet-choice-list__footer {
7490
7589
  display: flex;
7491
7590
  justify-content: flex-end;
@@ -13131,6 +13230,89 @@ svg.crewlet-datetime__chevron {
13131
13230
  }
13132
13231
 
13133
13232
 
13233
+ /* FileDrop-WE7BNZGV.css */
13234
+ /*
13235
+ * Where files are dropped. A target of its own is a dashed, quiet area with a
13236
+ * heading, a hint and the pickers; a region wrapping content draws nothing
13237
+ * until files are held over it, then an accent overlay saying what dropping
13238
+ * does. The overlay takes no pointer, so the drop lands on the region.
13239
+ */
13240
+ .crewlet-file-drop {
13241
+ position: relative;
13242
+ min-width: 0;
13243
+ }
13244
+
13245
+ .crewlet-file-drop.is-target {
13246
+ display: grid;
13247
+ justify-items: center;
13248
+ gap: var(--spacing-1);
13249
+ padding: var(--spacing-6) var(--spacing-4);
13250
+ border: 1px dashed var(--color-border-strong);
13251
+ border-radius: var(--radius-md);
13252
+ background: var(--color-surface-subtle);
13253
+ text-align: center;
13254
+ transition:
13255
+ border-color var(--motion-duration-fast) var(--motion-easing-default),
13256
+ background-color var(--motion-duration-fast) var(--motion-easing-default);
13257
+ }
13258
+
13259
+ .crewlet-file-drop.is-target.is-over {
13260
+ border-color: var(--color-brand-accent);
13261
+ background: var(--color-brand-accent-soft);
13262
+ }
13263
+
13264
+ .crewlet-file-drop.is-disabled {
13265
+ opacity: 0.6;
13266
+ }
13267
+
13268
+ .crewlet-file-drop__title {
13269
+ font-size: var(--font-size-sm);
13270
+ font-weight: var(--font-weight-medium);
13271
+ color: var(--color-text-primary);
13272
+ }
13273
+
13274
+ .crewlet-file-drop__hint {
13275
+ font-size: var(--font-size-xs);
13276
+ color: var(--color-text-tertiary);
13277
+ }
13278
+
13279
+ .crewlet-file-drop__actions {
13280
+ display: flex;
13281
+ flex-wrap: wrap;
13282
+ justify-content: center;
13283
+ gap: var(--spacing-2);
13284
+ margin-top: var(--spacing-2);
13285
+ }
13286
+
13287
+ .crewlet-file-drop__overlay {
13288
+ position: absolute;
13289
+ inset: 0;
13290
+ z-index: 1;
13291
+ display: grid;
13292
+ place-content: center;
13293
+ justify-items: center;
13294
+ gap: var(--spacing-1);
13295
+ border: 1px dashed var(--color-brand-accent);
13296
+ border-radius: var(--radius-md);
13297
+ /* Floats over the region's content, so it takes the frosted ground. */
13298
+ background: var(--color-surface-glass);
13299
+ backdrop-filter: blur(var(--blur-sm));
13300
+ pointer-events: none;
13301
+ text-align: center;
13302
+ }
13303
+
13304
+ /* The input the picker opens is never drawn or reached: the button is. */
13305
+ .crewlet-file-drop__input {
13306
+ display: none;
13307
+ }
13308
+
13309
+ @media (prefers-reduced-motion: reduce) {
13310
+ .crewlet-file-drop.is-target {
13311
+ transition: none;
13312
+ }
13313
+ }
13314
+
13315
+
13134
13316
  /* FilterChip-EZ4QMW4E.css */
13135
13317
  /*
13136
13318
  * The filter chip: neutral until it is on, and then the accent.
@@ -13244,6 +13426,80 @@ svg.crewlet-datetime__chevron {
13244
13426
  }
13245
13427
 
13246
13428
 
13429
+ /* FindingList-PMYA2R6Q.css */
13430
+ /*
13431
+ * What a checker found: a quiet list, one row each, the tone's glyph in its
13432
+ * ink, the location in mono over the sentence. A row that goes somewhere takes
13433
+ * the hover ground and the focus ring as a whole.
13434
+ */
13435
+ .crewlet-finding-list {
13436
+ display: grid;
13437
+ margin: 0;
13438
+ padding: 0;
13439
+ list-style: none;
13440
+ }
13441
+
13442
+ .crewlet-finding-list__row {
13443
+ display: grid;
13444
+ grid-template-columns: auto minmax(0, 1fr);
13445
+ gap: var(--spacing-2);
13446
+ align-items: start;
13447
+ width: 100%;
13448
+ padding: var(--spacing-2);
13449
+ border: 0;
13450
+ border-radius: var(--radius-sm);
13451
+ background: transparent;
13452
+ color: var(--color-text-primary);
13453
+ font: inherit;
13454
+ text-align: start;
13455
+ }
13456
+
13457
+ button.crewlet-finding-list__row {
13458
+ cursor: pointer;
13459
+ }
13460
+
13461
+ button.crewlet-finding-list__row:hover {
13462
+ background: var(--color-surface-hover);
13463
+ }
13464
+
13465
+ button.crewlet-finding-list__row:focus-visible {
13466
+ outline: 2px solid var(--color-focus);
13467
+ outline-offset: -2px;
13468
+ }
13469
+
13470
+ .crewlet-finding-list__glyph {
13471
+ display: inline-flex;
13472
+ padding-top: 2px;
13473
+ }
13474
+
13475
+ .crewlet-finding-list__glyph.is-danger {
13476
+ color: var(--color-feedback-danger-ink);
13477
+ }
13478
+
13479
+ .crewlet-finding-list__glyph.is-warning {
13480
+ color: var(--color-feedback-warning-ink);
13481
+ }
13482
+
13483
+ .crewlet-finding-list__text {
13484
+ display: grid;
13485
+ gap: 2px;
13486
+ min-width: 0;
13487
+ }
13488
+
13489
+ .crewlet-finding-list__location {
13490
+ font-family: var(--font-family-mono);
13491
+ font-size: var(--font-size-2xs);
13492
+ color: var(--color-text-tertiary);
13493
+ overflow-wrap: anywhere;
13494
+ }
13495
+
13496
+ .crewlet-finding-list__message {
13497
+ font-size: var(--font-size-sm);
13498
+ line-height: var(--font-line-height-normal);
13499
+ overflow-wrap: anywhere;
13500
+ }
13501
+
13502
+
13247
13503
  /* Highlight-DXLV2R6L.css */
13248
13504
  /*
13249
13505
  * Words a search matched (Highlight.tsx).
@@ -21730,7 +21986,83 @@ svg.crewlet-select__chevron {
21730
21986
  }
21731
21987
 
21732
21988
 
21733
- /* SheetGrid-GDPCCZ4V.css */
21989
+ /* SheetColumnEditor-BO2HKFRB.css */
21990
+ /*
21991
+ * A sheet column's settings (SheetColumnEditor.tsx): a column of fields at
21992
+ * the compact step, the choices as rows of a swatch, a name and a remove
21993
+ * control, and a foot with the column's own actions at the start and Done at
21994
+ * the end. It sits in a popover, so it sets no surface of its own.
21995
+ */
21996
+
21997
+ .crewlet-sheet-column-editor {
21998
+ display: flex;
21999
+ flex-direction: column;
22000
+ gap: var(--spacing-3);
22001
+ width: 100%;
22002
+ min-width: 0;
22003
+ }
22004
+
22005
+ /* The suggestion: a quiet line naming the type, and the press that takes it. */
22006
+ .crewlet-sheet-column-editor__suggestion {
22007
+ display: flex;
22008
+ align-items: center;
22009
+ justify-content: space-between;
22010
+ gap: var(--spacing-2);
22011
+ margin-top: calc(var(--spacing-2) * -1);
22012
+ color: var(--color-text-secondary);
22013
+ font-size: var(--font-size-xs);
22014
+ }
22015
+
22016
+ .crewlet-sheet-column-editor__suggestion-text {
22017
+ display: inline-flex;
22018
+ align-items: center;
22019
+ gap: var(--spacing-1);
22020
+ min-width: 0;
22021
+ }
22022
+
22023
+ .crewlet-sheet-column-editor__choices {
22024
+ display: flex;
22025
+ flex-direction: column;
22026
+ gap: var(--spacing-1);
22027
+ margin: 0 0 var(--spacing-1);
22028
+ padding: 0;
22029
+ list-style: none;
22030
+ }
22031
+
22032
+ .crewlet-sheet-column-editor__choices:empty {
22033
+ display: none;
22034
+ }
22035
+
22036
+ .crewlet-sheet-column-editor__choice {
22037
+ display: flex;
22038
+ align-items: center;
22039
+ gap: var(--spacing-1);
22040
+ min-width: 0;
22041
+ }
22042
+
22043
+ .crewlet-sheet-column-editor__choice > .crewlet-input {
22044
+ flex: 1 1 auto;
22045
+ min-width: 0;
22046
+ }
22047
+
22048
+ /* The foot: a hairline above it, the column's own actions, then Done. */
22049
+ .crewlet-sheet-column-editor__foot {
22050
+ display: flex;
22051
+ align-items: center;
22052
+ justify-content: space-between;
22053
+ gap: var(--spacing-2);
22054
+ padding-top: var(--spacing-3);
22055
+ border-top: 1px solid var(--color-border-default);
22056
+ }
22057
+
22058
+ .crewlet-sheet-column-editor__foot-start {
22059
+ display: flex;
22060
+ align-items: center;
22061
+ gap: var(--spacing-1);
22062
+ }
22063
+
22064
+
22065
+ /* SheetGrid-YRDXTIIZ.css */
21734
22066
  /*
21735
22067
  * The editable sheet (SheetGrid.tsx) and its cells (cells.tsx).
21736
22068
  *
@@ -22159,6 +22491,54 @@ svg.crewlet-select__chevron {
22159
22491
  font-size: var(--font-size-xs);
22160
22492
  }
22161
22493
 
22494
+ /* A HEADER THAT OPENS ITS COLUMN'S SETTINGS reads as pressable: the pointer,
22495
+ and the hover tint the open header keeps while its popover is up. */
22496
+ .crewlet-sheet-grid__header--settings {
22497
+ cursor: pointer;
22498
+ }
22499
+
22500
+ .crewlet-sheet-grid__header--settings:hover,
22501
+ .crewlet-sheet-grid__header--open {
22502
+ background: var(--color-surface-hover);
22503
+ color: var(--color-text-primary);
22504
+ }
22505
+
22506
+ /* A COLUMN'S SETTINGS: the popover holds a short form, so it is padded as a
22507
+ panel and given the room a list of choices needs before it scrolls. */
22508
+ .crewlet-popover.crewlet-sheet-grid__column-settings {
22509
+ width: 300px;
22510
+ max-height: min(560px, 80vh);
22511
+ padding: var(--spacing-3);
22512
+ }
22513
+
22514
+ /* ADD COLUMN stands beside the header row, outside the grid's roles: the
22515
+ scroller lays the grid and the control side by side, the grid's last track
22516
+ still takes the slack up to the control, and the control sticks to the top
22517
+ with the header while the rows scroll under it. */
22518
+ .crewlet-sheet-grid__scroller--add-column {
22519
+ --crewlet-sheet-add-column-width: var(--size-target-min);
22520
+ display: flex;
22521
+ align-items: flex-start;
22522
+ }
22523
+
22524
+ .crewlet-sheet-grid__scroller--add-column > .crewlet-sheet-grid__grid {
22525
+ flex: 0 0 auto;
22526
+ min-width: calc(100% - var(--crewlet-sheet-add-column-width));
22527
+ }
22528
+
22529
+ .crewlet-sheet-grid__add-column {
22530
+ position: sticky;
22531
+ top: 0;
22532
+ z-index: var(--z-index-sticky);
22533
+ display: flex;
22534
+ flex: 0 0 var(--crewlet-sheet-add-column-width);
22535
+ align-items: center;
22536
+ justify-content: center;
22537
+ box-sizing: border-box;
22538
+ border-bottom: 1px solid var(--color-border-default);
22539
+ background: var(--color-surface-subtle);
22540
+ }
22541
+
22162
22542
  .crewlet-sheet-grid__sync {
22163
22543
  display: inline-flex;
22164
22544
  align-items: center;
@@ -23490,7 +23870,7 @@ svg.crewlet-select__chevron {
23490
23870
  }
23491
23871
 
23492
23872
 
23493
- /* SlideFilmstrip-5U6Z55GS.css */
23873
+ /* SlideFilmstrip-4ITZLMO4.css */
23494
23874
  /*
23495
23875
  * SlideFilmstrip: the column of slide thumbnails beside a deck's stage, or
23496
23876
  * the row under it on a phone.
@@ -23661,6 +24041,55 @@ svg.crewlet-select__chevron {
23661
24041
  box-shadow: var(--spacing-1) 0 0 var(--color-brand-accent);
23662
24042
  }
23663
24043
 
24044
+ /* A SLIDE'S CONTROLS, beside its thumbnail: the handle over the actions menu,
24045
+ one column, so a thumbnail keeps the strip's full width beside them. The
24046
+ menu's trigger shows on the selected slide and under the pointer or focus,
24047
+ so a strip of twelve slides is not twelve rows of ellipses. */
24048
+ .crewlet-slide-filmstrip__controls {
24049
+ display: flex;
24050
+ flex-direction: column;
24051
+ align-items: center;
24052
+ gap: var(--spacing-0);
24053
+ }
24054
+
24055
+ .crewlet-slide-filmstrip__controls .crewlet-menu-anchor {
24056
+ opacity: 0;
24057
+ }
24058
+
24059
+ .crewlet-slide-filmstrip__item[data-selected='true'] .crewlet-menu-anchor,
24060
+ .crewlet-slide-filmstrip__item:hover .crewlet-menu-anchor,
24061
+ .crewlet-slide-filmstrip__controls .crewlet-menu-anchor:focus-within,
24062
+ .crewlet-slide-filmstrip__controls .crewlet-menu-anchor:has([aria-expanded='true']) {
24063
+ opacity: 1;
24064
+ }
24065
+
24066
+ @media (hover: none) {
24067
+ .crewlet-slide-filmstrip__controls .crewlet-menu-anchor {
24068
+ opacity: 1;
24069
+ }
24070
+ }
24071
+
24072
+ /* What follows the slides (a New slide control), aligned with the thumbnails
24073
+ rather than with the numbers beside them. */
24074
+ .crewlet-slide-filmstrip__footer {
24075
+ padding: var(--spacing-1) var(--spacing-1) var(--spacing-2) calc(var(--spacing-5) + var(--spacing-2));
24076
+ }
24077
+
24078
+ .crewlet-slide-filmstrip--horizontal {
24079
+ display: flex;
24080
+ align-items: flex-start;
24081
+ }
24082
+
24083
+ .crewlet-slide-filmstrip--horizontal .crewlet-slide-filmstrip__controls {
24084
+ grid-area: handle;
24085
+ flex-direction: row;
24086
+ }
24087
+
24088
+ .crewlet-slide-filmstrip--horizontal .crewlet-slide-filmstrip__footer {
24089
+ flex: none;
24090
+ padding: var(--spacing-1) var(--spacing-2);
24091
+ }
24092
+
23664
24093
 
23665
24094
  /* SlideGrid-S4LTJ4UU.css */
23666
24095
  /*
@@ -23881,6 +24310,169 @@ svg.crewlet-select__chevron {
23881
24310
  }
23882
24311
 
23883
24312
 
24313
+ /* SourceEditor-G2C3STPX.css */
24314
+ /*
24315
+ * Source text written in place: a gutter of line numbers beside a real
24316
+ * textarea, and the marks a checker placed drawn behind the text. The gutter,
24317
+ * the marks and the field share one font, one line height and one top inset,
24318
+ * so a number and a mark always sit on the line they name; the layers follow
24319
+ * the field's scroll by a transform.
24320
+ *
24321
+ * The BOX takes the focus ring, as the Composer's does.
24322
+ */
24323
+ .crewlet-source-editor {
24324
+ --crewlet-source-inset: var(--spacing-2);
24325
+
24326
+ position: relative;
24327
+ display: grid;
24328
+ grid-template-columns: auto minmax(0, 1fr);
24329
+ min-width: 0;
24330
+ overflow: hidden;
24331
+ border: 1px solid var(--color-border-strong);
24332
+ border-radius: var(--radius-md);
24333
+ background: var(--color-surface-background);
24334
+ font-family: var(--font-family-mono);
24335
+ font-size: var(--font-size-xs);
24336
+ line-height: var(--font-line-height-normal);
24337
+ transition:
24338
+ border-color var(--motion-duration-fast) var(--motion-easing-default),
24339
+ box-shadow var(--motion-duration-fast) var(--motion-easing-default);
24340
+ }
24341
+
24342
+ .crewlet-source-editor:hover {
24343
+ border-color: var(--color-border-strong-hover);
24344
+ }
24345
+
24346
+ .crewlet-source-editor:focus-within {
24347
+ border-color: var(--color-brand-accent);
24348
+ box-shadow: 0 0 0 2px var(--color-brand-accent-soft);
24349
+ }
24350
+
24351
+ .crewlet-source-editor.is-fill {
24352
+ height: 100%;
24353
+ }
24354
+
24355
+ .crewlet-source-editor__gutter {
24356
+ position: relative;
24357
+ overflow: hidden;
24358
+ border-right: 1px solid var(--color-border-default);
24359
+ background: var(--color-surface-subtle);
24360
+ user-select: none;
24361
+ }
24362
+
24363
+ .crewlet-source-editor__numbers {
24364
+ display: grid;
24365
+ padding: var(--crewlet-source-inset) 0;
24366
+ will-change: transform;
24367
+ }
24368
+
24369
+ .crewlet-source-editor__number {
24370
+ /* Wide enough for the longest number, so the text never shifts as lines are added. */
24371
+ min-width: calc(var(--crewlet-source-digits, 2) * 1ch + var(--spacing-2) * 2);
24372
+ padding: 0 var(--spacing-2);
24373
+ text-align: right;
24374
+ font-variant-numeric: tabular-nums;
24375
+ color: var(--color-text-tertiary);
24376
+ }
24377
+
24378
+ .crewlet-source-editor__number.is-danger {
24379
+ color: var(--color-feedback-danger-ink);
24380
+ font-weight: var(--font-weight-semibold);
24381
+ box-shadow: inset 2px 0 0 var(--color-feedback-danger-ink);
24382
+ }
24383
+
24384
+ .crewlet-source-editor__number.is-warning {
24385
+ color: var(--color-feedback-warning-ink);
24386
+ font-weight: var(--font-weight-semibold);
24387
+ box-shadow: inset 2px 0 0 var(--color-feedback-warning-ink);
24388
+ }
24389
+
24390
+ .crewlet-source-editor__body {
24391
+ position: relative;
24392
+ display: grid;
24393
+ min-width: 0;
24394
+ }
24395
+
24396
+ .crewlet-source-editor__marks {
24397
+ position: absolute;
24398
+ inset: 0;
24399
+ overflow: hidden;
24400
+ pointer-events: none;
24401
+ }
24402
+
24403
+ .crewlet-source-editor__marks > div {
24404
+ position: relative;
24405
+ will-change: transform;
24406
+ }
24407
+
24408
+ .crewlet-source-editor__mark {
24409
+ position: absolute;
24410
+ top: calc(var(--crewlet-source-inset) + var(--crewlet-source-line) * 1lh);
24411
+ left: 0;
24412
+ right: 0;
24413
+ height: 1lh;
24414
+ }
24415
+
24416
+ .crewlet-source-editor__mark.is-danger {
24417
+ background: var(--color-feedback-danger-soft);
24418
+ }
24419
+
24420
+ .crewlet-source-editor__mark.is-warning {
24421
+ background: var(--color-feedback-warning-soft);
24422
+ }
24423
+
24424
+ .crewlet-source-editor .crewlet-source-editor__field {
24425
+ position: relative;
24426
+ display: block;
24427
+ width: 100%;
24428
+ min-height: 0;
24429
+ margin: 0;
24430
+ padding: var(--crewlet-source-inset) var(--spacing-3);
24431
+ border: 0;
24432
+ border-radius: 0;
24433
+ background: transparent;
24434
+ color: var(--color-text-primary);
24435
+ font: inherit;
24436
+ white-space: pre;
24437
+ overflow: auto;
24438
+ resize: none;
24439
+ tab-size: 2;
24440
+ caret-color: var(--color-brand-accent);
24441
+ }
24442
+
24443
+ .crewlet-source-editor.is-fill .crewlet-source-editor__field {
24444
+ height: 100%;
24445
+ }
24446
+
24447
+ .crewlet-source-editor .crewlet-source-editor__field::placeholder {
24448
+ color: var(--color-text-tertiary);
24449
+ }
24450
+
24451
+ /* The ring is the box's, above. A transparent outline stays, because forced
24452
+ colors drops the box's shadow and paints an outline in its place. */
24453
+ .crewlet-source-editor .crewlet-source-editor__field:focus-visible {
24454
+ outline: 2px solid transparent;
24455
+ outline-offset: -2px;
24456
+ }
24457
+
24458
+ .crewlet-source-editor .crewlet-source-editor__field[readonly] {
24459
+ color: var(--color-text-secondary);
24460
+ }
24461
+
24462
+ @media (forced-colors: active) {
24463
+ .crewlet-source-editor__mark {
24464
+ background: Highlight;
24465
+ opacity: 0.25;
24466
+ }
24467
+ }
24468
+
24469
+ @media (prefers-reduced-motion: reduce) {
24470
+ .crewlet-source-editor {
24471
+ transition: none;
24472
+ }
24473
+ }
24474
+
24475
+
23884
24476
  /* StatCard-4T7TMWMN.css */
23885
24477
  /*
23886
24478
  * The stat tile.
@@ -26731,7 +27323,7 @@ b.crewlet-switcher__match {
26731
27323
  }
26732
27324
 
26733
27325
 
26734
- /* ThemeGallery-NITASULQ.css */
27326
+ /* ThemeGallery-HSUKBDWY.css */
26735
27327
  /*
26736
27328
  * The gallery of themes: each group's heading over a grid of cards.
26737
27329
  *
@@ -26826,6 +27418,15 @@ b.crewlet-switcher__match {
26826
27418
  }
26827
27419
  }
26828
27420
 
27421
+ /* A THUMBNAIL THE CALLER DRAWS (`renderPreview`) fills the card's width, as
27422
+ the swatch does, and is clipped to the card's inner corner. */
27423
+ .crewlet-theme-gallery__preview {
27424
+ display: block;
27425
+ overflow: hidden;
27426
+ border-radius: var(--radius-sm);
27427
+ pointer-events: none;
27428
+ }
27429
+
26829
27430
 
26830
27431
  /* ThemeSwatch-4DL457ZB.css */
26831
27432
  /*