@clipkit/editor 1.0.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 (248) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +51 -0
  3. package/dist/Editor.d.ts +3 -0
  4. package/dist/Editor.d.ts.map +1 -0
  5. package/dist/Editor.js +73 -0
  6. package/dist/Editor.js.map +1 -0
  7. package/dist/ExportDialog.d.ts +12 -0
  8. package/dist/ExportDialog.d.ts.map +1 -0
  9. package/dist/ExportDialog.js +30 -0
  10. package/dist/ExportDialog.js.map +1 -0
  11. package/dist/MotionPathOverlay.d.ts +5 -0
  12. package/dist/MotionPathOverlay.d.ts.map +1 -0
  13. package/dist/MotionPathOverlay.js +156 -0
  14. package/dist/MotionPathOverlay.js.map +1 -0
  15. package/dist/PerfHud.d.ts +2 -0
  16. package/dist/PerfHud.d.ts.map +1 -0
  17. package/dist/PerfHud.js +85 -0
  18. package/dist/PerfHud.js.map +1 -0
  19. package/dist/Stage.d.ts +2 -0
  20. package/dist/Stage.d.ts.map +1 -0
  21. package/dist/Stage.js +406 -0
  22. package/dist/Stage.js.map +1 -0
  23. package/dist/StageOverlay.d.ts +7 -0
  24. package/dist/StageOverlay.d.ts.map +1 -0
  25. package/dist/StageOverlay.js +508 -0
  26. package/dist/StageOverlay.js.map +1 -0
  27. package/dist/commands.d.ts +18 -0
  28. package/dist/commands.d.ts.map +1 -0
  29. package/dist/commands.js +103 -0
  30. package/dist/commands.js.map +1 -0
  31. package/dist/configuration.d.ts +9 -0
  32. package/dist/configuration.d.ts.map +1 -0
  33. package/dist/configuration.js +21 -0
  34. package/dist/configuration.js.map +1 -0
  35. package/dist/controls/AnimationsStack.d.ts +8 -0
  36. package/dist/controls/AnimationsStack.d.ts.map +1 -0
  37. package/dist/controls/AnimationsStack.js +188 -0
  38. package/dist/controls/AnimationsStack.js.map +1 -0
  39. package/dist/controls/CameraControl.d.ts +19 -0
  40. package/dist/controls/CameraControl.d.ts.map +1 -0
  41. package/dist/controls/CameraControl.js +47 -0
  42. package/dist/controls/CameraControl.js.map +1 -0
  43. package/dist/controls/CaptionLengthControl.d.ts +5 -0
  44. package/dist/controls/CaptionLengthControl.d.ts.map +1 -0
  45. package/dist/controls/CaptionLengthControl.js +11 -0
  46. package/dist/controls/CaptionLengthControl.js.map +1 -0
  47. package/dist/controls/CaptionTranscribe.d.ts +2 -0
  48. package/dist/controls/CaptionTranscribe.d.ts.map +1 -0
  49. package/dist/controls/CaptionTranscribe.js +95 -0
  50. package/dist/controls/CaptionTranscribe.js.map +1 -0
  51. package/dist/controls/ColorPicker.d.ts +17 -0
  52. package/dist/controls/ColorPicker.d.ts.map +1 -0
  53. package/dist/controls/ColorPicker.js +354 -0
  54. package/dist/controls/ColorPicker.js.map +1 -0
  55. package/dist/controls/ControlRenderer.d.ts +20 -0
  56. package/dist/controls/ControlRenderer.d.ts.map +1 -0
  57. package/dist/controls/ControlRenderer.js +106 -0
  58. package/dist/controls/ControlRenderer.js.map +1 -0
  59. package/dist/controls/CropControl.d.ts +2 -0
  60. package/dist/controls/CropControl.d.ts.map +1 -0
  61. package/dist/controls/CropControl.js +177 -0
  62. package/dist/controls/CropControl.js.map +1 -0
  63. package/dist/controls/EffectsStack.d.ts +8 -0
  64. package/dist/controls/EffectsStack.d.ts.map +1 -0
  65. package/dist/controls/EffectsStack.js +89 -0
  66. package/dist/controls/EffectsStack.js.map +1 -0
  67. package/dist/controls/GradeControl.d.ts +2 -0
  68. package/dist/controls/GradeControl.d.ts.map +1 -0
  69. package/dist/controls/GradeControl.js +120 -0
  70. package/dist/controls/GradeControl.js.map +1 -0
  71. package/dist/controls/KeyframeDiamond.d.ts +11 -0
  72. package/dist/controls/KeyframeDiamond.d.ts.map +1 -0
  73. package/dist/controls/KeyframeDiamond.js +87 -0
  74. package/dist/controls/KeyframeDiamond.js.map +1 -0
  75. package/dist/controls/LightingControls.d.ts +24 -0
  76. package/dist/controls/LightingControls.d.ts.map +1 -0
  77. package/dist/controls/LightingControls.js +108 -0
  78. package/dist/controls/LightingControls.js.map +1 -0
  79. package/dist/controls/ShapePresetControl.d.ts +4 -0
  80. package/dist/controls/ShapePresetControl.d.ts.map +1 -0
  81. package/dist/controls/ShapePresetControl.js +30 -0
  82. package/dist/controls/ShapePresetControl.js.map +1 -0
  83. package/dist/controls/ValueField.d.ts +10 -0
  84. package/dist/controls/ValueField.d.ts.map +1 -0
  85. package/dist/controls/ValueField.js +158 -0
  86. package/dist/controls/ValueField.js.map +1 -0
  87. package/dist/controls/VolumeControl.d.ts +10 -0
  88. package/dist/controls/VolumeControl.d.ts.map +1 -0
  89. package/dist/controls/VolumeControl.js +75 -0
  90. package/dist/controls/VolumeControl.js.map +1 -0
  91. package/dist/controls/compound.d.ts +46 -0
  92. package/dist/controls/compound.d.ts.map +1 -0
  93. package/dist/controls/compound.js +160 -0
  94. package/dist/controls/compound.js.map +1 -0
  95. package/dist/controls/layout.d.ts +38 -0
  96. package/dist/controls/layout.d.ts.map +1 -0
  97. package/dist/controls/layout.js +162 -0
  98. package/dist/controls/layout.js.map +1 -0
  99. package/dist/controls/primitives.d.ts +83 -0
  100. package/dist/controls/primitives.d.ts.map +1 -0
  101. package/dist/controls/primitives.js +194 -0
  102. package/dist/controls/primitives.js.map +1 -0
  103. package/dist/controls/transcribe.worker.d.ts +2 -0
  104. package/dist/controls/transcribe.worker.d.ts.map +1 -0
  105. package/dist/controls/transcribe.worker.js +22 -0
  106. package/dist/controls/transcribe.worker.js.map +1 -0
  107. package/dist/frame/AddElementBar.d.ts +2 -0
  108. package/dist/frame/AddElementBar.d.ts.map +1 -0
  109. package/dist/frame/AddElementBar.js +103 -0
  110. package/dist/frame/AddElementBar.js.map +1 -0
  111. package/dist/frame/Breadcrumbs.d.ts +2 -0
  112. package/dist/frame/Breadcrumbs.d.ts.map +1 -0
  113. package/dist/frame/Breadcrumbs.js +32 -0
  114. package/dist/frame/Breadcrumbs.js.map +1 -0
  115. package/dist/frame/GroupFlash.d.ts +2 -0
  116. package/dist/frame/GroupFlash.d.ts.map +1 -0
  117. package/dist/frame/GroupFlash.js +65 -0
  118. package/dist/frame/GroupFlash.js.map +1 -0
  119. package/dist/frame/Resizable.d.ts +12 -0
  120. package/dist/frame/Resizable.d.ts.map +1 -0
  121. package/dist/frame/Resizable.js +37 -0
  122. package/dist/frame/Resizable.js.map +1 -0
  123. package/dist/frame/Section.d.ts +23 -0
  124. package/dist/frame/Section.d.ts.map +1 -0
  125. package/dist/frame/Section.js +23 -0
  126. package/dist/frame/Section.js.map +1 -0
  127. package/dist/frame/ZoomControl.d.ts +9 -0
  128. package/dist/frame/ZoomControl.d.ts.map +1 -0
  129. package/dist/frame/ZoomControl.js +15 -0
  130. package/dist/frame/ZoomControl.js.map +1 -0
  131. package/dist/index.d.ts +9 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +13 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/lib/camera-gizmo.d.ts +15 -0
  136. package/dist/lib/camera-gizmo.d.ts.map +1 -0
  137. package/dist/lib/camera-gizmo.js +57 -0
  138. package/dist/lib/camera-gizmo.js.map +1 -0
  139. package/dist/lib/camera-tool.d.ts +43 -0
  140. package/dist/lib/camera-tool.d.ts.map +1 -0
  141. package/dist/lib/camera-tool.js +80 -0
  142. package/dist/lib/camera-tool.js.map +1 -0
  143. package/dist/lib/caption-segments.d.ts +17 -0
  144. package/dist/lib/caption-segments.d.ts.map +1 -0
  145. package/dist/lib/caption-segments.js +50 -0
  146. package/dist/lib/caption-segments.js.map +1 -0
  147. package/dist/lib/group.d.ts +12 -0
  148. package/dist/lib/group.d.ts.map +1 -0
  149. package/dist/lib/group.js +61 -0
  150. package/dist/lib/group.js.map +1 -0
  151. package/dist/lib/keyframes.d.ts +29 -0
  152. package/dist/lib/keyframes.d.ts.map +1 -0
  153. package/dist/lib/keyframes.js +92 -0
  154. package/dist/lib/keyframes.js.map +1 -0
  155. package/dist/lib/sfx-preview.d.ts +18 -0
  156. package/dist/lib/sfx-preview.d.ts.map +1 -0
  157. package/dist/lib/sfx-preview.js +74 -0
  158. package/dist/lib/sfx-preview.js.map +1 -0
  159. package/dist/lib/shape-presets.d.ts +35 -0
  160. package/dist/lib/shape-presets.d.ts.map +1 -0
  161. package/dist/lib/shape-presets.js +81 -0
  162. package/dist/lib/shape-presets.js.map +1 -0
  163. package/dist/lib/ungroup.d.ts +12 -0
  164. package/dist/lib/ungroup.d.ts.map +1 -0
  165. package/dist/lib/ungroup.js +40 -0
  166. package/dist/lib/ungroup.js.map +1 -0
  167. package/dist/lib/utils.d.ts +3 -0
  168. package/dist/lib/utils.d.ts.map +1 -0
  169. package/dist/lib/utils.js +9 -0
  170. package/dist/lib/utils.js.map +1 -0
  171. package/dist/panels/AssetsPanel.d.ts +2 -0
  172. package/dist/panels/AssetsPanel.d.ts.map +1 -0
  173. package/dist/panels/AssetsPanel.js +108 -0
  174. package/dist/panels/AssetsPanel.js.map +1 -0
  175. package/dist/panels/InspectorPanel.d.ts +2 -0
  176. package/dist/panels/InspectorPanel.d.ts.map +1 -0
  177. package/dist/panels/InspectorPanel.js +286 -0
  178. package/dist/panels/InspectorPanel.js.map +1 -0
  179. package/dist/panels/InterpolationPanel.d.ts +2 -0
  180. package/dist/panels/InterpolationPanel.d.ts.map +1 -0
  181. package/dist/panels/InterpolationPanel.js +226 -0
  182. package/dist/panels/InterpolationPanel.js.map +1 -0
  183. package/dist/panels/LayersTree.d.ts +4 -0
  184. package/dist/panels/LayersTree.d.ts.map +1 -0
  185. package/dist/panels/LayersTree.js +137 -0
  186. package/dist/panels/LayersTree.js.map +1 -0
  187. package/dist/panels/LeftRail.d.ts +6 -0
  188. package/dist/panels/LeftRail.d.ts.map +1 -0
  189. package/dist/panels/LeftRail.js +35 -0
  190. package/dist/panels/LeftRail.js.map +1 -0
  191. package/dist/panels/SourcePanel.d.ts +2 -0
  192. package/dist/panels/SourcePanel.d.ts.map +1 -0
  193. package/dist/panels/SourcePanel.js +470 -0
  194. package/dist/panels/SourcePanel.js.map +1 -0
  195. package/dist/panels/TimelinePanel.d.ts +11 -0
  196. package/dist/panels/TimelinePanel.d.ts.map +1 -0
  197. package/dist/panels/TimelinePanel.js +98 -0
  198. package/dist/panels/TimelinePanel.js.map +1 -0
  199. package/dist/panels/assets/SfxBrowser.d.ts +2 -0
  200. package/dist/panels/assets/SfxBrowser.d.ts.map +1 -0
  201. package/dist/panels/assets/SfxBrowser.js +49 -0
  202. package/dist/panels/assets/SfxBrowser.js.map +1 -0
  203. package/dist/panels/assets/use-assets.d.ts +11 -0
  204. package/dist/panels/assets/use-assets.d.ts.map +1 -0
  205. package/dist/panels/assets/use-assets.js +84 -0
  206. package/dist/panels/assets/use-assets.js.map +1 -0
  207. package/dist/panels/assets/use-sfx.d.ts +6 -0
  208. package/dist/panels/assets/use-sfx.d.ts.map +1 -0
  209. package/dist/panels/assets/use-sfx.js +47 -0
  210. package/dist/panels/assets/use-sfx.js.map +1 -0
  211. package/dist/panels/timeline/CanvasTimeline.d.ts +7 -0
  212. package/dist/panels/timeline/CanvasTimeline.d.ts.map +1 -0
  213. package/dist/panels/timeline/CanvasTimeline.js +1536 -0
  214. package/dist/panels/timeline/CanvasTimeline.js.map +1 -0
  215. package/dist/panels/timeline/Clip.d.ts +37 -0
  216. package/dist/panels/timeline/Clip.d.ts.map +1 -0
  217. package/dist/panels/timeline/Clip.js +176 -0
  218. package/dist/panels/timeline/Clip.js.map +1 -0
  219. package/dist/panels/timeline/CurveEditor.d.ts +2 -0
  220. package/dist/panels/timeline/CurveEditor.d.ts.map +1 -0
  221. package/dist/panels/timeline/CurveEditor.js +233 -0
  222. package/dist/panels/timeline/CurveEditor.js.map +1 -0
  223. package/dist/panels/timeline/MixerRail.d.ts +7 -0
  224. package/dist/panels/timeline/MixerRail.d.ts.map +1 -0
  225. package/dist/panels/timeline/MixerRail.js +295 -0
  226. package/dist/panels/timeline/MixerRail.js.map +1 -0
  227. package/dist/panels/timeline/Waveform.d.ts +11 -0
  228. package/dist/panels/timeline/Waveform.d.ts.map +1 -0
  229. package/dist/panels/timeline/Waveform.js +63 -0
  230. package/dist/panels/timeline/Waveform.js.map +1 -0
  231. package/dist/panels/timeline/clip-style.d.ts +10 -0
  232. package/dist/panels/timeline/clip-style.d.ts.map +1 -0
  233. package/dist/panels/timeline/clip-style.js +20 -0
  234. package/dist/panels/timeline/clip-style.js.map +1 -0
  235. package/dist/panels/timeline/filmstrip.d.ts +7 -0
  236. package/dist/panels/timeline/filmstrip.d.ts.map +1 -0
  237. package/dist/panels/timeline/filmstrip.js +135 -0
  238. package/dist/panels/timeline/filmstrip.js.map +1 -0
  239. package/dist/panels/timeline/timeline-layout.d.ts +65 -0
  240. package/dist/panels/timeline/timeline-layout.d.ts.map +1 -0
  241. package/dist/panels/timeline/timeline-layout.js +118 -0
  242. package/dist/panels/timeline/timeline-layout.js.map +1 -0
  243. package/dist/types.d.ts +68 -0
  244. package/dist/types.d.ts.map +1 -0
  245. package/dist/types.js +3 -0
  246. package/dist/types.js.map +1 -0
  247. package/package.json +56 -0
  248. package/src/styles.css +185 -0
package/src/styles.css ADDED
@@ -0,0 +1,185 @@
1
+ /* @clipkit/editor — Tailwind v4 + shadcn-aligned design tokens.
2
+ *
3
+ * Consumers import this once: `import '@clipkit/editor/styles.css'`.
4
+ * The editor scopes its tree under `.clipkit-editor`; design tokens
5
+ * become Tailwind utilities via the `@theme` block below.
6
+ *
7
+ * Token names follow shadcn/ui's conventions (`--background`,
8
+ * `--foreground`, `--muted-foreground`, `--primary`, `--destructive`,
9
+ * etc.) so the editor blends into any shadcn-themed host app without
10
+ * a custom remap — hosts that override the same variable names will
11
+ * automatically theme the editor's internals.
12
+ */
13
+
14
+ @import "tailwindcss";
15
+
16
+ /* Scan the editor's own JSX for class usage so Tailwind knows which
17
+ utilities to emit. Relative to this CSS file. */
18
+ @source "./**/*.{ts,tsx}";
19
+
20
+ @theme {
21
+ /* ── Color palette (dark defaults, shadcn-aligned names) ─────────
22
+ `bg-background`, `text-foreground`, `bg-card`, `text-muted-
23
+ foreground`, `bg-primary`, `text-destructive`, etc. — exactly
24
+ the surface names a shadcn-using host already knows. */
25
+ /* The WEBSITE's palette (re-ruled by Ian 2026-06-11, supersedes the
26
+ Figma #2C2C2C ramp): panels on the site's elevated surfaces
27
+ (#141414/#181818, #232323 hairlines), canvas recessed at the
28
+ site's base #0A0A0A, site red as destructive. */
29
+ --color-background: #141414;
30
+ --color-foreground: #fafafa;
31
+ --color-card: #181818;
32
+ --color-card-foreground: #fafafa;
33
+ /* Popovers sit at the inspector's base surface so the lighter
34
+ #1f1f1f field wells read clearly inside them (ruled by Ian
35
+ 2026-06-12); a brighter border (below) separates the floating
36
+ panel from whatever's behind it. */
37
+ --color-popover: #141414;
38
+ --color-popover-foreground: #fafafa;
39
+ /* Brighter than --color-border for floating-panel outlines. */
40
+ --color-popover-border: #3a3a3a;
41
+ --color-primary: #fafafa;
42
+ --color-primary-foreground: #0a0a0a;
43
+ --color-secondary: #161616;
44
+ --color-secondary-foreground: #fafafa;
45
+ --color-muted: #161616;
46
+ --color-muted-foreground: #8a8a8a;
47
+ --color-accent: #161616;
48
+ --color-accent-foreground: #fafafa;
49
+ --color-destructive: #ef4444;
50
+ --color-destructive-foreground: #fafafa;
51
+ --color-border: #232323;
52
+ --color-input: #232323;
53
+ --color-ring: #2e2e2e;
54
+ /* Text-selection band (Source pane / any editable). A muted medium
55
+ blue-gray: clearly visible over the dark bg, and bright enough that
56
+ the syntax colors — including the blue strings — stay legible on it
57
+ (an opaque accent reads better than a translucent tint that clashes
58
+ hue-for-hue with the selected text). */
59
+ --color-selection: #34506e;
60
+
61
+ /* ── Editor-specific tokens (no shadcn equivalent) ─────────────── */
62
+ --color-stage: #0a0a0a;
63
+ --color-stage-checker-a: #111111;
64
+ --color-stage-checker-b: #0e0e0e;
65
+ --color-yellow: #ffb800;
66
+ /* Input wells — filled chips, lighter than the panel (the Figma
67
+ mock's field treatment; ruled by Ian 2026-06-11). */
68
+ --color-field: #1f1f1f;
69
+ --color-field-hover: #262626;
70
+
71
+ /* ── Radii ──────────────────────────────────────────────────────── */
72
+ --radius-md: 8px;
73
+ --radius-lg: 12px;
74
+ }
75
+
76
+ /* Light-mode token overrides. Scoped to the editor's own subtree
77
+ so embedding in a page with its own theme doesn't leak either
78
+ direction. Variable names match the dark defaults; only the
79
+ values change. */
80
+ .clipkit-editor[data-theme='light'] {
81
+ /* The website's warm light theme: super-light gray #FAF8F3 with the
82
+ dark-brown #181717 foreground and warm hairlines. */
83
+ --color-background: #faf8f3;
84
+ --color-foreground: #181717;
85
+ --color-card: #ffffff;
86
+ --color-card-foreground: #181717;
87
+ --color-popover: #faf8f3;
88
+ --color-popover-foreground: #181717;
89
+ --color-popover-border: #cfc8b6;
90
+ --color-primary: #181717;
91
+ --color-primary-foreground: #faf8f3;
92
+ --color-secondary: #f4f1e9;
93
+ --color-secondary-foreground: #181717;
94
+ --color-muted: #f4f1e9;
95
+ --color-muted-foreground: #6a6864;
96
+ --color-accent: #f4f1e9;
97
+ --color-accent-foreground: #181717;
98
+ --color-destructive: #c25555;
99
+ --color-destructive-foreground: #faf8f3;
100
+ --color-border: #e5e0d2;
101
+ --color-input: #e5e0d2;
102
+ --color-ring: #d6d0bf;
103
+ --color-selection: #bcd6f5; /* light blue — dark syntax reads on it */
104
+
105
+ --color-stage: #efebe0;
106
+ --color-stage-checker-a: #f4f1e9;
107
+ --color-stage-checker-b: #efebe0;
108
+ --color-yellow: #c99a3b;
109
+ --color-field: #f4f1e9;
110
+ --color-field-hover: #ece7d8;
111
+ }
112
+
113
+ /* ── Scrollbars ─────────────────────────────────────────────────────
114
+ `color-scheme` flips macOS / iOS overlay scrollbars (and all
115
+ OS-drawn UI). ::-webkit-scrollbar handles non-overlay browsers. */
116
+ .clipkit-editor {
117
+ color-scheme: dark;
118
+ scrollbar-color: var(--color-border) transparent;
119
+ scrollbar-width: thin;
120
+ }
121
+ .clipkit-editor[data-theme='light'] {
122
+ color-scheme: light;
123
+ }
124
+ .clipkit-editor *::-webkit-scrollbar {
125
+ width: 10px;
126
+ height: 10px;
127
+ }
128
+ .clipkit-editor *::-webkit-scrollbar-track {
129
+ background: transparent;
130
+ }
131
+ .clipkit-editor *::-webkit-scrollbar-thumb {
132
+ background: var(--color-border);
133
+ border-radius: 5px;
134
+ border: 2px solid transparent;
135
+ background-clip: content-box;
136
+ }
137
+ .clipkit-editor *::-webkit-scrollbar-thumb:hover {
138
+ background: var(--color-muted-foreground);
139
+ background-clip: content-box;
140
+ }
141
+ .clipkit-editor *::-webkit-scrollbar-corner {
142
+ background: transparent;
143
+ }
144
+
145
+
146
+ /* Playhead accent (the refs' blue marker, distinct from destructive). */
147
+ .clipkit-editor {
148
+ --color-playhead: #5c9be0; /* the site's --info blue */
149
+ }
150
+ .clipkit-editor[data-theme='light'] {
151
+ --color-playhead: #3f7fc4;
152
+ }
153
+
154
+ /* Source-pane (CodeMirror) syntax tokens — quiet, near-monochrome
155
+ with the site's info blue for strings and yellow for numbers. */
156
+ .clipkit-editor {
157
+ --color-syntax-key: #c8c8c8;
158
+ --color-syntax-string: #5c9be0;
159
+ --color-syntax-number: #d9a94a;
160
+ --color-syntax-bool: #b18ae0;
161
+ }
162
+ .clipkit-editor[data-theme='light'] {
163
+ --color-syntax-key: #4a4844;
164
+ --color-syntax-string: #3f7fc4;
165
+ --color-syntax-number: #a87a1f;
166
+ --color-syntax-bool: #7a4fc0;
167
+ }
168
+
169
+ /* Source pane: the native selection paints only a (transparent) background
170
+ so each token keeps its own syntax color; CodeMirror's drawn band
171
+ (--color-selection) is the visible highlight behind the text. No `color`
172
+ is set here — with the global forced color removed (apps/web globals.css),
173
+ selected text keeps its per-token color. */
174
+ .clipkit-editor .cm-content ::selection {
175
+ background: transparent !important;
176
+ }
177
+ .clipkit-editor .cm-content ::-moz-selection {
178
+ background: transparent !important;
179
+ }
180
+
181
+ /* Group-enter flash on the breadcrumb control border (Breadcrumbs.tsx). */
182
+ @keyframes clipkit-crumb-flash {
183
+ 0%, 18% { box-shadow: 0 0 0 2px var(--color-foreground); }
184
+ 100% { box-shadow: 0 0 0 0 transparent; }
185
+ }