castle-web-cli 0.4.128 → 0.4.130

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 (157) hide show
  1. package/dist/agent-prompts.js +4 -4
  2. package/dist/filesChanged.d.ts +2 -0
  3. package/dist/filesChanged.js +6 -2
  4. package/dist/ide.js +15 -4
  5. package/dist/importBrowse.js +1 -0
  6. package/dist/index.js +10 -4
  7. package/dist/init.js +63 -15
  8. package/dist/native/loop.js +1 -1
  9. package/dist/native/tools.js +1 -1
  10. package/dist/serve.d.ts +1 -0
  11. package/dist/serve.js +20 -1
  12. package/dist/shell/assets/index-BpOLUyVO.js +441 -0
  13. package/dist/shell/assets/{index-CAq6f9B5.css → index-D6K-0YDB.css} +1 -1
  14. package/dist/shell/index.html +2 -2
  15. package/kits/physics-2d/CLAUDE.md +40 -23
  16. package/kits/physics-2d/behaviors/Joints.jsx +4 -3
  17. package/kits/physics-2d/behaviors/SoundPlayer.jsx +266 -0
  18. package/kits/physics-2d/behaviors/Sprite.jsx +3 -3
  19. package/kits/physics-2d/behaviors/Video.jsx +4 -3
  20. package/kits/physics-2d/castle.json +1 -1
  21. package/kits/physics-2d/editors/PlayOnly.jsx +15 -6
  22. package/kits/physics-2d/editors/PxArtEditor.jsx +95 -31
  23. package/kits/physics-2d/editors/SceneEditor.jsx +5 -5
  24. package/kits/physics-2d/editors/SingleEditor.jsx +37 -8
  25. package/kits/physics-2d/editors/StyleEditor.jsx +7 -4
  26. package/kits/physics-2d/editors/pixelEditorChrome.jsx +7 -7
  27. package/kits/physics-2d/editors/pixelInspector.jsx +13 -7
  28. package/kits/physics-2d/editors/pxArtTimeline.jsx +29 -11
  29. package/kits/physics-2d/editors/pxArtTimeline.module.css +11 -0
  30. package/kits/physics-2d/engine/audioContext.js +41 -0
  31. package/kits/physics-2d/engine/autoInspector.jsx +50 -33
  32. package/kits/physics-2d/engine/blueprint.js +15 -3
  33. package/kits/physics-2d/engine/liveReload.js +33 -21
  34. package/kits/physics-2d/engine/media.js +29 -39
  35. package/kits/physics-2d/engine/sound.js +316 -0
  36. package/kits/physics-2d/engine/systemRegistry.js +1 -1
  37. package/kits/physics-2d/engine/ui.jsx +274 -5
  38. package/kits/physics-2d/engine/ui.module.css +137 -16
  39. package/kits/physics-2d/scripts/testsounds.mjs +84 -0
  40. package/kits/physics-2d/systems/media.js +31 -15
  41. package/kits/physics-3d/CLAUDE.md +109 -0
  42. package/kits/physics-3d/behaviors/Body.jsx +51 -0
  43. package/kits/physics-3d/behaviors/Door.jsx +31 -0
  44. package/kits/physics-3d/behaviors/Lookable.jsx +11 -0
  45. package/kits/physics-3d/behaviors/Model.jsx +14 -0
  46. package/kits/physics-3d/behaviors/Pickup.jsx +39 -0
  47. package/kits/physics-3d/behaviors/Player.jsx +172 -0
  48. package/kits/physics-3d/behaviors/Portal.jsx +19 -0
  49. package/kits/physics-3d/behaviors/Shape.jsx +75 -0
  50. package/kits/physics-3d/behaviors/Solid.jsx +11 -0
  51. package/kits/physics-3d/behaviors/Transform.jsx +24 -0
  52. package/kits/physics-3d/blueprints/barrel.scene +15 -0
  53. package/kits/physics-3d/blueprints/crate.scene +29 -0
  54. package/kits/physics-3d/blueprints/door.scene +35 -0
  55. package/kits/physics-3d/blueprints/gem.scene +26 -0
  56. package/kits/physics-3d/blueprints/pillar.scene +25 -0
  57. package/kits/physics-3d/blueprints/platform.scene +23 -0
  58. package/kits/physics-3d/blueprints/player.scene +29 -0
  59. package/kits/physics-3d/blueprints/portal.scene +21 -0
  60. package/kits/physics-3d/blueprints/rock.scene +14 -0
  61. package/kits/physics-3d/blueprints/statue.scene +26 -0
  62. package/kits/physics-3d/blueprints/tree.scene +14 -0
  63. package/kits/physics-3d/blueprints/wall.scene +26 -0
  64. package/kits/{basic-2d → physics-3d}/castle.json +23 -5
  65. package/kits/physics-3d/docs/pxmodel-format.md +111 -0
  66. package/kits/physics-3d/drawings/crate.pxart +26 -0
  67. package/kits/physics-3d/drawings/door-edge.pxart +26 -0
  68. package/kits/physics-3d/drawings/door.pxart +27 -0
  69. package/kits/physics-3d/drawings/face.pxart +26 -0
  70. package/kits/physics-3d/drawings/floor.pxart +27 -0
  71. package/kits/physics-3d/drawings/platform.pxart +27 -0
  72. package/kits/physics-3d/drawings/statue.pxart +27 -0
  73. package/kits/physics-3d/drawings/wall.pxart +27 -0
  74. package/kits/physics-3d/engine3d/PlayOnly3D.jsx +32 -0
  75. package/kits/physics-3d/engine3d/PxModelEditor.jsx +619 -0
  76. package/kits/physics-3d/engine3d/Scene3DEditor.jsx +618 -0
  77. package/kits/physics-3d/engine3d/Scene3DPlayer.jsx +309 -0
  78. package/kits/physics-3d/engine3d/editor3dData.js +114 -0
  79. package/kits/physics-3d/engine3d/editor3dInspector.jsx +404 -0
  80. package/kits/physics-3d/engine3d/editorChrome.jsx +218 -0
  81. package/kits/physics-3d/engine3d/editorWorld.js +249 -0
  82. package/kits/physics-3d/engine3d/materials.js +174 -0
  83. package/kits/physics-3d/engine3d/meshops.js +123 -0
  84. package/kits/physics-3d/engine3d/modelEditorWorld.js +439 -0
  85. package/kits/physics-3d/engine3d/modelFiles.js +139 -0
  86. package/kits/physics-3d/engine3d/pxmodel.js +265 -0
  87. package/kits/physics-3d/engine3d/thumbnails.js +137 -0
  88. package/kits/physics-3d/engine3d/world3d.js +216 -0
  89. package/kits/{basic-2d → physics-3d}/eslint.config.js +10 -25
  90. package/kits/physics-3d/index.html +20 -0
  91. package/kits/physics-3d/main.jsx +30 -0
  92. package/kits/physics-3d/models/barrel.pxmodel +10 -0
  93. package/kits/physics-3d/models/player.pxmodel +222 -0
  94. package/kits/physics-3d/models/rock.pxmodel +30 -0
  95. package/kits/physics-3d/models/tree.pxmodel +10 -0
  96. package/kits/{basic-2d → physics-3d}/package-lock.json +140 -119
  97. package/kits/{basic-2d → physics-3d}/package.json +11 -9
  98. package/kits/{basic-2d → physics-3d}/pnpm-lock.yaml +162 -137
  99. package/kits/physics-3d/scenes/main.scene +414 -0
  100. package/kits/physics-3d/scenes/model-lab.scene +127 -0
  101. package/kits/physics-3d/systems/physics3d.js +356 -0
  102. package/package.json +5 -2
  103. package/dist/shell/assets/index-DKu9ejyh.js +0 -436
  104. package/kits/basic-2d/CLAUDE.md +0 -221
  105. package/kits/basic-2d/behaviors/Camera.jsx +0 -43
  106. package/kits/basic-2d/behaviors/Collider.jsx +0 -213
  107. package/kits/basic-2d/behaviors/Layout.jsx +0 -53
  108. package/kits/basic-2d/behaviors/Sprite.jsx +0 -357
  109. package/kits/basic-2d/behaviors/tint.js +0 -47
  110. package/kits/basic-2d/blueprints/cauldron.scene +0 -20
  111. package/kits/basic-2d/docs/pxart-format.md +0 -377
  112. package/kits/basic-2d/drawings/cauldron.pxart +0 -113
  113. package/kits/basic-2d/editors/BlueprintLibrary.jsx +0 -270
  114. package/kits/basic-2d/editors/ErrorBoundary.jsx +0 -59
  115. package/kits/basic-2d/editors/PlayOnly.jsx +0 -31
  116. package/kits/basic-2d/editors/PxArtEditor.jsx +0 -1092
  117. package/kits/basic-2d/editors/SceneEditor.jsx +0 -1780
  118. package/kits/basic-2d/editors/SelectionOverlay.jsx +0 -909
  119. package/kits/basic-2d/editors/SingleEditor.jsx +0 -122
  120. package/kits/basic-2d/editors/behaviorRegistry.js +0 -34
  121. package/kits/basic-2d/editors/editorHistory.js +0 -157
  122. package/kits/basic-2d/editors/inspectorSheet.js +0 -13
  123. package/kits/basic-2d/editors/pixelCanvas.js +0 -11
  124. package/kits/basic-2d/editors/pixelEditorChrome.jsx +0 -74
  125. package/kits/basic-2d/editors/pixelGeometry.js +0 -140
  126. package/kits/basic-2d/editors/pixelInspector.jsx +0 -633
  127. package/kits/basic-2d/editors/pxArtEditorModel.js +0 -732
  128. package/kits/basic-2d/editors/pxArtPlayback.js +0 -92
  129. package/kits/basic-2d/editors/pxArtTimeline.jsx +0 -752
  130. package/kits/basic-2d/editors/pxArtTimeline.module.css +0 -506
  131. package/kits/basic-2d/editors/pxArtTools.js +0 -232
  132. package/kits/basic-2d/editors/useArtboardFit.js +0 -105
  133. package/kits/basic-2d/engine/ScenePlayer.jsx +0 -209
  134. package/kits/basic-2d/engine/SceneUI.jsx +0 -59
  135. package/kits/basic-2d/engine/assets.js +0 -15
  136. package/kits/basic-2d/engine/autoInspector.jsx +0 -70
  137. package/kits/basic-2d/engine/behaviorExtensions.js +0 -32
  138. package/kits/basic-2d/engine/blueprint.js +0 -557
  139. package/kits/basic-2d/engine/collider.js +0 -200
  140. package/kits/basic-2d/engine/files.js +0 -141
  141. package/kits/basic-2d/engine/liveReload.js +0 -88
  142. package/kits/basic-2d/engine/pxart.js +0 -1032
  143. package/kits/basic-2d/engine/pxartSmooth.js +0 -222
  144. package/kits/basic-2d/engine/scene.js +0 -696
  145. package/kits/basic-2d/engine/spriteGeometry.js +0 -32
  146. package/kits/basic-2d/engine/systemRegistry.js +0 -16
  147. package/kits/basic-2d/engine/ui.jsx +0 -695
  148. package/kits/basic-2d/engine/ui.module.css +0 -2287
  149. package/kits/basic-2d/index.html +0 -24
  150. package/kits/basic-2d/main.jsx +0 -24
  151. package/kits/basic-2d/scenes/main.scene +0 -16
  152. package/kits/basic-2d/scripts/draw.mjs +0 -121
  153. package/kits/physics-2d/behaviors/Sound.jsx +0 -163
  154. package/kits/physics-2d/behaviors/Tone.jsx +0 -95
  155. package/kits/physics-2d/engine/tone.js +0 -112
  156. /package/kits/{basic-2d → physics-3d}/.prettierrc +0 -0
  157. /package/kits/{basic-2d → physics-3d}/vite.config.js +0 -0
@@ -1,506 +0,0 @@
1
- /* Layers x frames timeline panel for the PxArt editor. Sits below the artboard
2
- in the editor's left column: a toolbar row, a horizontally-scrolling
3
- layers(rows) x frames(columns) grid, then the tags panel. Colors reuse the
4
- shared inspector CSS variables from engine/ui.module.css. */
5
-
6
- /* The editor's left column: artboard region stacked above the timeline. Takes
7
- grid column 1 of the shared .drawingEditor grid (the inspector is column 2). */
8
- .editorLeft {
9
- grid-column: 1;
10
- grid-row: 1;
11
- display: flex;
12
- flex-direction: column;
13
- min-width: 0;
14
- min-height: 0;
15
- }
16
-
17
- .artboardRegion {
18
- flex: 1 1 0;
19
- min-height: 0;
20
- display: flex;
21
- overflow: hidden;
22
- }
23
-
24
- @container editor (max-width: 620px) {
25
- .barLabel {
26
- display: none;
27
- }
28
- }
29
-
30
- /* Height is driven by an inline style from the resize handle (see
31
- pxArtTimeline.jsx); flex-shrink stays 0 so the artboard region above keeps
32
- the remainder. */
33
- .timeline {
34
- position: relative;
35
- flex: 0 0 auto;
36
- display: flex;
37
- flex-direction: column;
38
- min-height: 0;
39
- border-top: 1px solid var(--castle-inspector-divider);
40
- background: var(--castle-workspace-bg);
41
- color: var(--castle-inspector-text);
42
- font-size: 13px;
43
- overflow: hidden;
44
- }
45
-
46
- /* Drag target sitting over the top divider. Absolute so it consumes no layout.
47
- Neutral hover/active treatment (no accent/purple highlight) to stay
48
- consistent with the editor's existing chrome. */
49
- .resizeHandle {
50
- position: absolute;
51
- top: -3px;
52
- left: 0;
53
- right: 0;
54
- height: 7px;
55
- cursor: row-resize;
56
- background: transparent;
57
- z-index: 5;
58
- touch-action: none;
59
- }
60
-
61
- .resizeHandle:hover {
62
- background: var(--castle-inspector-border);
63
- }
64
-
65
- .resizeHandleActive,
66
- .resizeHandleActive:hover {
67
- background: var(--castle-inspector-muted);
68
- }
69
-
70
- .bar {
71
- display: flex;
72
- align-items: center;
73
- flex-wrap: wrap;
74
- gap: 14px;
75
- padding: 8px;
76
- border-bottom: 1px solid var(--castle-inspector-divider);
77
- }
78
-
79
- .barGroup {
80
- display: flex;
81
- align-items: center;
82
- gap: 6px;
83
- }
84
-
85
- .barLabel {
86
- color: var(--castle-inspector-muted);
87
- font-size: 12px;
88
- text-transform: uppercase;
89
- letter-spacing: 0.04em;
90
- }
91
-
92
- .barSpacer {
93
- flex: 1 1 auto;
94
- }
95
-
96
- .barUnit {
97
- color: var(--castle-inspector-muted);
98
- font-size: 11px;
99
- }
100
-
101
- .globalDuration {
102
- width: 56px;
103
- border: 1px solid var(--castle-inspector-border);
104
- border-radius: var(--castle-radius);
105
- background: var(--castle-inspector-input-bg);
106
- color: var(--castle-inspector-text);
107
- padding: 4px 6px;
108
- text-align: center;
109
- }
110
-
111
- /* Icon-only label (stopwatch) sitting next to the global duration input, in
112
- place of the old "Duration … ms · all frames" text. */
113
- .durationIcon {
114
- display: inline-flex;
115
- align-items: center;
116
- color: var(--castle-inspector-muted);
117
- }
118
-
119
- .durationGlyph {
120
- width: 14px;
121
- height: 14px;
122
- fill: currentColor;
123
- }
124
-
125
- .miniInput {
126
- width: 64px;
127
- border: 1px solid var(--castle-inspector-border);
128
- border-radius: var(--castle-radius);
129
- background: var(--castle-inspector-input-bg);
130
- color: var(--castle-inspector-text);
131
- padding: 4px 6px;
132
- }
133
-
134
- .scroll {
135
- flex: 1 1 0;
136
- min-height: 0;
137
- overflow: auto;
138
- }
139
-
140
- .grid {
141
- display: inline-flex;
142
- flex-direction: column;
143
- min-width: 100%;
144
- }
145
-
146
- .row {
147
- display: flex;
148
- align-items: stretch;
149
- }
150
-
151
- /* Grid separators: every grid element (corner, frame headers, layer headers,
152
- and art cells) draws a SINGLE 1px right+bottom divider. Interior edges are
153
- each owned by exactly one element (no two borders meet), so there are no
154
- doubled/thicker seams. The grid's outer top is the toolbar's existing bottom
155
- divider; outer right/bottom come from the last cells. */
156
- .corner {
157
- flex: 0 0 168px;
158
- border-right: 1px solid var(--castle-inspector-divider);
159
- border-bottom: 1px solid var(--castle-inspector-divider);
160
- background: var(--castle-workspace-bg);
161
- position: sticky;
162
- left: 0;
163
- z-index: 2;
164
- }
165
-
166
- .frameHead {
167
- flex: 0 0 52px;
168
- display: flex;
169
- flex-direction: column;
170
- align-items: center;
171
- gap: 2px;
172
- padding: 4px 3px;
173
- border-right: 1px solid var(--castle-inspector-divider);
174
- border-bottom: 1px solid var(--castle-inspector-divider);
175
- background: transparent;
176
- color: var(--castle-inspector-muted);
177
- cursor: pointer;
178
- }
179
-
180
- .frameHeadActive {
181
- background: var(--castle-black);
182
- color: var(--castle-text);
183
- }
184
-
185
- .frameNum {
186
- font-variant-numeric: tabular-nums;
187
- font-size: 12px;
188
- }
189
-
190
- .durationInput {
191
- width: 44px;
192
- border: 1px solid var(--castle-inspector-border);
193
- border-radius: 3px;
194
- background: var(--castle-inspector-input-bg);
195
- color: var(--castle-inspector-text);
196
- padding: 1px 3px;
197
- font-size: 11px;
198
- text-align: center;
199
- }
200
-
201
- /* An OVERRIDDEN frame duration: accented + bold so it reads distinctly from the
202
- greyed placeholder shown by frames that inherit the global. */
203
- .durationOverride {
204
- color: var(--castle-text);
205
- font-weight: 600;
206
- border-color: var(--castle-blue);
207
- }
208
-
209
- .layerHead {
210
- flex: 0 0 168px;
211
- display: flex;
212
- flex-direction: column;
213
- justify-content: center;
214
- gap: 4px;
215
- padding: 4px 8px;
216
- border-right: 1px solid var(--castle-inspector-divider);
217
- border-bottom: 1px solid var(--castle-inspector-divider);
218
- background: var(--castle-workspace-bg);
219
- position: sticky;
220
- left: 0;
221
- z-index: 1;
222
- cursor: pointer;
223
- }
224
-
225
- .layerHeadActive {
226
- background: var(--castle-black);
227
- }
228
-
229
- .layerTopRow {
230
- display: flex;
231
- align-items: center;
232
- gap: 6px;
233
- }
234
-
235
- .visBtn {
236
- flex: 0 0 auto;
237
- width: 22px;
238
- height: 22px;
239
- display: inline-flex;
240
- align-items: center;
241
- justify-content: center;
242
- border: 1px solid var(--castle-inspector-border);
243
- border-radius: var(--castle-radius);
244
- background: var(--castle-inspector-button-bg);
245
- color: var(--castle-inspector-text);
246
- cursor: pointer;
247
- padding: 0;
248
- }
249
-
250
- .visBtn:hover {
251
- background: var(--castle-inspector-input-bg);
252
- }
253
-
254
- .visBtn svg {
255
- width: 12px;
256
- height: 12px;
257
- }
258
-
259
- /* Inline FA eye / eye-slash glyph for the visibility toggle (see FaGlyph). */
260
- .visGlyph {
261
- width: 12px;
262
- height: 12px;
263
- fill: currentColor;
264
- }
265
-
266
- /* Hidden layer: the visibility toggle borrows the standard disabled LOOK
267
- (0.35 dimming, matching the undo button) without being disabled -- this
268
- button stays interactive and toggles default <-> disabled-look. */
269
- .visOff {
270
- opacity: 0.35;
271
- }
272
-
273
- /* Static layer-name label (rename was removed from the UI). */
274
- .name {
275
- flex: 1 1 auto;
276
- min-width: 0;
277
- overflow: hidden;
278
- text-overflow: ellipsis;
279
- white-space: nowrap;
280
- background: none;
281
- border: 0;
282
- color: inherit;
283
- text-align: left;
284
- padding: 0;
285
- }
286
-
287
- /* Slim opacity slider: a thin custom track + small thumb so the layer header
288
- cell stays no taller than the art (thumbnail) cells in its row. */
289
- .opacity {
290
- width: 100%;
291
- height: 12px;
292
- margin: 0;
293
- cursor: pointer;
294
- appearance: none;
295
- -webkit-appearance: none;
296
- background: transparent;
297
- accent-color: var(--castle-selected);
298
- }
299
-
300
- .opacity::-webkit-slider-runnable-track {
301
- height: 3px;
302
- border-radius: 2px;
303
- background: var(--castle-inspector-border);
304
- }
305
-
306
- .opacity::-webkit-slider-thumb {
307
- -webkit-appearance: none;
308
- appearance: none;
309
- width: 10px;
310
- height: 10px;
311
- margin-top: -3.5px;
312
- border-radius: 50%;
313
- background: var(--castle-selected);
314
- }
315
-
316
- .opacity::-moz-range-track {
317
- height: 3px;
318
- border-radius: 2px;
319
- background: var(--castle-inspector-border);
320
- }
321
-
322
- .opacity::-moz-range-thumb {
323
- width: 10px;
324
- height: 10px;
325
- border: 0;
326
- border-radius: 50%;
327
- background: var(--castle-selected);
328
- }
329
-
330
- /* The cell is a real <button>, so wipe the UA button chrome first. Crucially
331
- `border: 0` clears the default TOP/LEFT borders the UA otherwise keeps (we only
332
- override right/bottom below) — those surviving defaults were the "heavier /
333
- doubled" top-left edge. The reset comes BEFORE the divider longhands so our
334
- right+bottom separators still apply; the selected-cell inset stroke lives on
335
- .cellActive (box-shadow) and is unaffected by this border reset. */
336
- .cell {
337
- appearance: none;
338
- -webkit-appearance: none;
339
- margin: 0;
340
- border: 0;
341
- background: none;
342
- font: inherit;
343
- color: inherit;
344
- text-align: center;
345
- box-sizing: border-box;
346
- flex: 0 0 52px;
347
- height: 52px;
348
- display: flex;
349
- align-items: center;
350
- justify-content: center;
351
- padding: 4px;
352
- border-right: 1px solid var(--castle-inspector-divider);
353
- border-bottom: 1px solid var(--castle-inspector-divider);
354
- cursor: pointer;
355
- position: relative;
356
- }
357
-
358
- .cellActive {
359
- background: rgb(141 183 255 / 0.16);
360
- box-shadow: inset 0 0 0 2px var(--castle-blue);
361
- }
362
-
363
- .thumb {
364
- width: 100%;
365
- height: 100%;
366
- }
367
-
368
- .thumbCanvas {
369
- width: 100%;
370
- height: 100%;
371
- image-rendering: pixelated;
372
- display: block;
373
- }
374
-
375
- /* Empty/absent cell: plain and empty. The cell's own grid separators (see the
376
- .corner/.cell border rules) still bound it; there's no dashed interior. */
377
- .empty {
378
- width: 100%;
379
- height: 100%;
380
- background: transparent;
381
- }
382
-
383
- .linkBadge {
384
- position: absolute;
385
- left: 5px;
386
- top: 5px;
387
- width: 14px;
388
- height: 14px;
389
- display: inline-flex;
390
- align-items: center;
391
- justify-content: center;
392
- /* Match the thumb/.linkRing corner rounding (2px). A larger radius left a
393
- sliver of the parent's rounded corner peeking behind the badge. */
394
- border-radius: 2px;
395
- background: var(--castle-blue);
396
- color: var(--castle-selected-ink);
397
- }
398
-
399
- .linkBadge svg {
400
- width: 9px;
401
- height: 9px;
402
- }
403
-
404
- .linkRing {
405
- box-shadow: inset 0 0 0 1px var(--castle-blue);
406
- border-radius: 2px;
407
- }
408
-
409
- /* Fade only the linked cell's thumbnail IMAGE (the canvas) to signal a shared
410
- image. Scoped to the canvas inside a linked thumb, so the blue ring
411
- (.linkRing box-shadow) and the link badge (.linkBadge) stay full opacity. */
412
- .linkRing .thumbCanvas {
413
- opacity: 0.5;
414
- }
415
-
416
- .tags {
417
- flex: 0 0 auto;
418
- max-height: 38%;
419
- overflow: auto;
420
- border-top: 1px solid var(--castle-inspector-divider);
421
- padding: 8px 12px;
422
- }
423
-
424
- .tagsHead {
425
- display: flex;
426
- align-items: center;
427
- gap: 10px;
428
- margin-bottom: 8px;
429
- }
430
-
431
- .tagRow {
432
- display: flex;
433
- align-items: center;
434
- gap: 6px;
435
- margin-bottom: 6px;
436
- }
437
-
438
- .tagName {
439
- flex: 1 1 90px;
440
- min-width: 0;
441
- border: 1px solid var(--castle-inspector-border);
442
- border-radius: 3px;
443
- background: var(--castle-inspector-input-bg);
444
- color: var(--castle-inspector-text);
445
- padding: 3px 6px;
446
- }
447
-
448
- .tagNum {
449
- width: 46px;
450
- border: 1px solid var(--castle-inspector-border);
451
- border-radius: 3px;
452
- background: var(--castle-inspector-input-bg);
453
- color: var(--castle-inspector-text);
454
- padding: 3px 4px;
455
- text-align: center;
456
- }
457
-
458
- .tagSelect {
459
- border: 1px solid var(--castle-inspector-border);
460
- border-radius: 3px;
461
- background: var(--castle-inspector-input-bg);
462
- color: var(--castle-inspector-text);
463
- padding: 3px 4px;
464
- }
465
-
466
- .tagDefault {
467
- flex: 0 0 auto;
468
- width: 24px;
469
- height: 24px;
470
- display: inline-flex;
471
- align-items: center;
472
- justify-content: center;
473
- border: 1px solid var(--castle-inspector-border);
474
- border-radius: var(--castle-radius);
475
- background: var(--castle-inspector-button-bg);
476
- color: var(--castle-inspector-muted);
477
- cursor: pointer;
478
- padding: 0;
479
- }
480
-
481
- .tagDefault:hover {
482
- background: var(--castle-inspector-input-bg);
483
- }
484
-
485
- .tagDefaultOn,
486
- .tagDefaultOn:hover {
487
- background: var(--castle-selected);
488
- border-color: var(--castle-selected);
489
- color: var(--castle-selected-ink);
490
- }
491
-
492
- .tagDefault svg {
493
- width: 12px;
494
- height: 12px;
495
- }
496
-
497
- .muted {
498
- color: var(--castle-inspector-muted);
499
- font-size: 12px;
500
- }
501
-
502
- /* Disabled right-click menu item (reuses the shared selArrangeItem chrome). */
503
- .menuItemDisabled {
504
- opacity: 0.4;
505
- cursor: default;
506
- }