intelligent-system-design-language 0.3.22 → 0.3.23

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 (91) hide show
  1. package/.claude/agents/langium-language-designer.md +38 -38
  2. package/.claude/agents/typescript-vscode-expert.md +29 -29
  3. package/.claude/agents/ui-ux-designer.md +36 -36
  4. package/.claude/settings.local.json +33 -33
  5. package/.idea/inspectionProfiles/Project_Default.xml +6 -6
  6. package/.idea/isdl.iml +13 -13
  7. package/.idea/modules.xml +8 -8
  8. package/.idea/vcs.xml +6 -6
  9. package/.idea/watcherTasks.xml +3 -3
  10. package/.vscodeignore +18 -18
  11. package/LICENSE +673 -673
  12. package/README.md +86 -86
  13. package/bin/cli.js +4 -4
  14. package/bin/lsp.js +8 -8
  15. package/out/_backgrounds.scss +91 -91
  16. package/out/_handlebars.scss +497 -497
  17. package/out/_isdlStyles.scss +1444 -1444
  18. package/out/_vuetifyOverrides.scss +425 -425
  19. package/out/_vuetifyStyles.scss +31957 -31957
  20. package/out/cli/components/_backgrounds.scss +91 -91
  21. package/out/cli/components/_handlebars.scss +497 -497
  22. package/out/cli/components/_isdlStyles.scss +1444 -1444
  23. package/out/cli/components/_vuetifyOverrides.scss +425 -425
  24. package/out/cli/components/_vuetifyStyles.scss +31957 -31957
  25. package/out/cli/components/active-effect-sheet-generator.js +453 -453
  26. package/out/cli/components/chat-card-generator.js +654 -654
  27. package/out/cli/components/css-generator.js +4 -4
  28. package/out/cli/components/damage-roll-generator.js +160 -160
  29. package/out/cli/components/datamodel-generator.js +257 -257
  30. package/out/cli/components/derived-data-generator.js +923 -923
  31. package/out/cli/components/hotbar-drop-hook-generator.js +82 -82
  32. package/out/cli/components/init-hook-generator.js +495 -495
  33. package/out/cli/components/measured-template-preview.js +221 -221
  34. package/out/cli/components/method-generator.js +548 -548
  35. package/out/cli/components/ready-hook-generator.js +404 -404
  36. package/out/cli/components/token-generator.js +116 -116
  37. package/out/cli/components/vue/base-components/vue-attribute.js +138 -138
  38. package/out/cli/components/vue/base-components/vue-boolean.js +64 -64
  39. package/out/cli/components/vue/base-components/vue-calculator.js +93 -93
  40. package/out/cli/components/vue/base-components/vue-damage-application.js +356 -356
  41. package/out/cli/components/vue/base-components/vue-damage-bonuses.js +165 -165
  42. package/out/cli/components/vue/base-components/vue-damage-resistances.js +196 -196
  43. package/out/cli/components/vue/base-components/vue-damage-track.js +121 -121
  44. package/out/cli/components/vue/base-components/vue-date-time.js +42 -42
  45. package/out/cli/components/vue/base-components/vue-dice.js +98 -98
  46. package/out/cli/components/vue/base-components/vue-die.js +73 -73
  47. package/out/cli/components/vue/base-components/vue-document-choice.js +149 -149
  48. package/out/cli/components/vue/base-components/vue-document-choices.js +179 -179
  49. package/out/cli/components/vue/base-components/vue-document-link.js +60 -60
  50. package/out/cli/components/vue/base-components/vue-extended-choice.js +88 -88
  51. package/out/cli/components/vue/base-components/vue-inventory.js +519 -519
  52. package/out/cli/components/vue/base-components/vue-macro-choice.js +138 -138
  53. package/out/cli/components/vue/base-components/vue-measured-template.js +530 -530
  54. package/out/cli/components/vue/base-components/vue-money.js +483 -483
  55. package/out/cli/components/vue/base-components/vue-number.js +174 -174
  56. package/out/cli/components/vue/base-components/vue-paperdoll.js +43 -43
  57. package/out/cli/components/vue/base-components/vue-parent-property-reference.js +76 -76
  58. package/out/cli/components/vue/base-components/vue-prosemirror.js +18 -18
  59. package/out/cli/components/vue/base-components/vue-resource.js +136 -136
  60. package/out/cli/components/vue/base-components/vue-roll-visualizer.js +285 -285
  61. package/out/cli/components/vue/base-components/vue-self-property-reference.js +62 -62
  62. package/out/cli/components/vue/base-components/vue-string-choice.js +98 -98
  63. package/out/cli/components/vue/base-components/vue-string-choices.js +203 -203
  64. package/out/cli/components/vue/base-components/vue-string.js +60 -60
  65. package/out/cli/components/vue/base-components/vue-text-field.js +53 -53
  66. package/out/cli/components/vue/base-components/vue-tracker.js +431 -431
  67. package/out/cli/components/vue/vue-action-component-generator.js +64 -64
  68. package/out/cli/components/vue/vue-active-effect-sheet-generator.js +856 -856
  69. package/out/cli/components/vue/vue-datatable-sheet-class-generator.js +292 -292
  70. package/out/cli/components/vue/vue-datatable2-component-generator.js +824 -824
  71. package/out/cli/components/vue/vue-document-creation-app.js +121 -121
  72. package/out/cli/components/vue/vue-document-creation-sheet.js +94 -94
  73. package/out/cli/components/vue/vue-generator.js +40 -40
  74. package/out/cli/components/vue/vue-mixin.js +296 -296
  75. package/out/cli/components/vue/vue-pinned-datatable-component-generator.js +260 -260
  76. package/out/cli/components/vue/vue-prompt-generator.js +80 -80
  77. package/out/cli/components/vue/vue-prompt-sheet-class-generator.js +317 -317
  78. package/out/cli/components/vue/vue-sheet-application-generator.js +1171 -1171
  79. package/out/cli/components/vue/vue-sheet-class-generator.js +510 -510
  80. package/out/cli/generator.js +438 -438
  81. package/out/extension/github/githubManager.js +35 -35
  82. package/out/extension/github/githubQuickActions.js +120 -120
  83. package/out/extension/github/system-workflow.yml +47 -47
  84. package/out/extension/main.cjs.map +1 -1
  85. package/out/extension/package.json +419 -419
  86. package/out/language/generated/grammar.js +14240 -14240
  87. package/out/language/main.cjs.map +1 -1
  88. package/out/package.json +419 -419
  89. package/out/progressbar.min.js +6 -6
  90. package/out/styles.scss +762 -762
  91. package/package.json +419 -419
package/out/styles.scss CHANGED
@@ -1,763 +1,763 @@
1
- @use "./backgrounds";
2
- @use "./handlebars";
3
- @use "./vuetifyStyles";
4
- @use "./vuetifyOverrides";
5
- @use "./isdlStyles";
6
-
7
- /* -------------------------------------------- */
8
- /* Vuetify Overrides */
9
- /* -------------------------------------------- */
10
-
11
- .#{$dynamic-id}.vue-application {
12
-
13
- html {
14
- overflow-x: hidden;
15
- overflow-y: scroll;
16
- }
17
- }
18
-
19
- /* -------------------------------------------- */
20
- /* System Stylesheet */
21
- /* -------------------------------------------- */
22
-
23
- .#{$dynamic-id}.handlebars-sheet {
24
- @include handlebars.handlebarsSheet;
25
- }
26
-
27
- .v-overlay-container {
28
- @include vuetifyStyles.vuetifyStyles;
29
- @include vuetifyOverrides.vuetifyOverrides;
30
-
31
- --v-theme-overlay-multiplier: 1;
32
- --v-disabled-opacity: 0.7;
33
- }
34
-
35
- // Copy of Foundry app styles for vue apps
36
- .#{$dynamic-id}.vue-application {
37
-
38
- --color-text-primary: var(--color-light-2);
39
- --color-header-background: rgba(0, 0, 0, 0.5);
40
- --color-border: var(--color-cool-4);
41
- --color-fieldset-border: var(--color-light-6);
42
- --color-form-hint: var(--color-light-5);
43
- --color-form-hint-hover: var(--color-light-4);
44
- --color-form-label: var(--color-light-4);
45
- --color-form-label-hover: var(--color-light-2);
46
- --color-select-option-bg: transparent;
47
- --v-theme-overlay-multiplier: 1;
48
- --v-disabled-opacity: 0.7;
49
-
50
-
51
- .window-content {
52
- @include vuetifyStyles.vuetifyStyles;
53
- @include vuetifyOverrides.vuetifyOverrides;
54
-
55
- --color-text-primary: var(--color-light-2);
56
- --color-header-background: rgba(0, 0, 0, 0.5);
57
- --color-border: var(--color-cool-4);
58
- --color-fieldset-border: var(--color-light-6);
59
- --color-form-hint: var(--color-light-5);
60
- --color-form-hint-hover: var(--color-light-4);
61
- --color-form-label: var(--color-light-4);
62
- --color-form-label-hover: var(--color-light-2);
63
- --color-select-option-bg: transparent;
64
- --v-theme-overlay-multiplier: 1;
65
- --v-disabled-opacity: 0.7;
66
-
67
- overflow-y: scroll;
68
-
69
- input[type="text"]:focus,
70
- input[type="number"]:focus,
71
- input[type="password"]:focus,
72
- input[type="date"]:focus,
73
- input[type="time"]:focus,
74
- input[type="search"]:focus {
75
- box-shadow: none;
76
- }
77
-
78
- .v-application {
79
- @include isdlStyles.isdlStyles;
80
- }
81
- }
82
-
83
- &.document-creation {
84
-
85
- .window-content {
86
- overflow: hidden;
87
- }
88
-
89
- // With the window sized to content (height: auto), neutralize Vuetify's 100vh
90
- // min-heights so the layout collapses to the form instead of leaving dark space.
91
- .v-application__wrap {
92
- min-height: unset;
93
- }
94
-
95
- .v-main {
96
- flex: 1 1 auto;
97
- min-height: 0;
98
- }
99
-
100
- .v-container {
101
- padding: 1rem;
102
- }
103
- }
104
-
105
- &.isdl-prompt {
106
-
107
- // Cap prompt windows at 80% of the viewport (overrides the base max-height: 100%).
108
- max-height: 80vh;
109
-
110
- // When a prompt exceeds the cap, scroll the content. We scroll at .window-content
111
- // rather than an inner field-list scroller because the window is height:auto and
112
- // max-height is NOT a definite height, so a percentage/flex height cascade can't
113
- // bound an inner scroller. window-content has a real used height, so it scrolls
114
- // reliably; the Submit/Cancel footer stays visible via position: sticky.
115
- .window-content {
116
- overflow-y: auto;
117
- overflow-x: hidden;
118
- }
119
-
120
- .isdl-prompt-footer {
121
- position: sticky;
122
- bottom: 0;
123
- z-index: 2;
124
- background: rgb(var(--v-theme-surface));
125
- border-top: 1px solid rgba(0, 0, 0, 0.12);
126
- }
127
-
128
- .v-application__wrap {
129
- min-height: unset;
130
- }
131
-
132
- .v-main {
133
- flex: 1 1 auto;
134
- min-height: 0;
135
- }
136
- }
137
-
138
- &.active-effect {
139
- .v-col {
140
- padding: 0;
141
- }
142
-
143
- .v-card {
144
- padding: 0.25rem;
145
-
146
- > .v-card-title {
147
- padding-top: 0;
148
- padding-bottom: 0;
149
- }
150
- }
151
-
152
- .v-autocomplete__selection {
153
- .v-chip__close {
154
- border: none;
155
- background: none;
156
- }
157
- }
158
-
159
- }
160
-
161
- position: absolute;
162
- z-index: var(--z-index-window);
163
- transform-origin: top left;
164
- display: flex;
165
- flex-direction: column;
166
- flex-wrap: nowrap;
167
- min-width: 200px;
168
- max-height: 100%;
169
- max-width: 100%;
170
- overflow: hidden;
171
- background: var(--background);
172
- font-size: var(--font-size-14);
173
- color: var(--color-text-primary);
174
- border: 1px solid var(--color-border);
175
- border-radius: 6px;
176
- box-shadow: 0 0 10px #000;
177
-
178
- > .window-resize-handle {
179
- position: absolute;
180
- inset: auto 0px 0px auto;
181
- width: 11px;
182
- height: 11px;
183
- cursor: nwse-resize;
184
- background: transparent url(/ui/resize-handle.webp) no-repeat center / contain;
185
- }
186
-
187
- > .window-header {
188
- --button-size: 24px;
189
- display: flex;
190
- flex-wrap: nowrap;
191
- align-items: center;
192
- flex: 0 0 var(--header-height);
193
- position: relative;
194
- overflow: hidden;
195
- padding: 0 0.5rem;
196
- gap: 0.25rem;
197
- z-index: 1;
198
- cursor: grab;
199
- background: var(--color-cool-5-90);
200
- font-size: var(--font-size-13);
201
- color: var(--color-light-1);
202
- border-bottom: 1px solid var(--color-border);
203
- font: unset;
204
-
205
- > .window-title {
206
- flex: 1;
207
- font-size: inherit;
208
- font-family: inherit;
209
- font-weight: inherit;
210
- text-shadow: none;
211
- margin: 0;
212
- line-height: var(--header-height);
213
- border: none;
214
- overflow: hidden;
215
- text-align: left;
216
- white-space: nowrap;
217
- text-overflow: ellipsis;
218
- }
219
-
220
- > .header-control {
221
- flex: 0 0 var(--button-size);
222
- height: var(--button-size);
223
- padding: 0;
224
- margin: 0;
225
- border: none;
226
- color: var(--color-light-text-heading);
227
- background: none;
228
- }
229
- }
230
-
231
- > .controls-dropdown {
232
- position: absolute;
233
- overflow: hidden auto;
234
- top: var(--header-height);
235
- right: 0;
236
- width: max-content;
237
- min-width: 100px;
238
- max-width: 300px;
239
- max-height: 0;
240
- z-index: 1;
241
- list-style: none;
242
- margin: 0 0.25rem;
243
- padding: 0;
244
- background: var(--background);
245
- border-radius: 0 0 4px 4px;
246
- transition: max-height 0.5s;
247
- pointer-events: none;
248
-
249
- > .header-control {
250
- margin: 0.25rem;
251
-
252
- > button {
253
- --button-background-color: none;
254
- --button-text-color: var(--color-text-primary);
255
- width: 100%;
256
- display: flex;
257
- justify-content: space-between;
258
- border: none;
259
- font-size: var(--font-size-12);
260
- color: var(--button-text-color);
261
- background: var(--button-background-color);
262
-
263
- > i {
264
- line-height: 28px;
265
- }
266
- }
267
- }
268
-
269
- &.expanded {
270
- max-height: calc(100% - var(--header-height));
271
- pointer-events: all;
272
- box-shadow: 0 0 8px var(--color-cool-3);
273
- }
274
- }
275
-
276
- > .window-content {
277
- backdrop-filter: blur(4px);
278
- }
279
-
280
-
281
- }
282
-
283
-
284
- .#{$dynamic-id} {
285
-
286
-
287
- --header-height: 36px;
288
- --minimized-width: 200px;
289
- --background: var(--color-cool-5-90);
290
- --color-text-primary: var(--color-light-2);
291
- --color-header-background: rgba(0, 0, 0, 0.5);
292
- --color-border: var(--color-cool-4);
293
- --color-fieldset-border: var(--color-light-6);
294
- --color-form-hint: var(--color-light-5);
295
- --color-form-hint-hover: var(--color-light-4);
296
- --color-form-label: var(--color-light-4);
297
- --color-form-label-hover: var(--color-light-2);
298
- --color-select-option-bg: transparent;
299
- --color-text-light-highlight: #f0f0e0;
300
- --color-text-light-heading: #c9c7b8;
301
- --color-text-light-primary: #b5b3a4;
302
- --color-text-dark-primary: #191813;
303
- --color-text-dark-secondary: #4b4a44;
304
- --color-text-dark-header: #23221d;
305
- --color-text-dark-inactive: #7a7971;
306
- --color-text-hyperlink: #ff6400;
307
- --color-text-selection: #f7f3e8;
308
- --color-text-selection-bg: #777;
309
- --color-text-light-0: #fff;
310
- --color-text-light-1: #eee;
311
- --color-text-light-2: #ddd;
312
- --color-text-light-3: #ccc;
313
- --color-text-light-4: #bbb;
314
- --color-text-light-5: #aaa;
315
- --color-text-light-6: #999;
316
- --color-text-light-7: #888;
317
- --color-text-dark-1: #111;
318
- --color-text-dark-2: #222;
319
- --color-text-dark-3: #444;
320
- --color-text-dark-4: #555;
321
- --color-text-dark-5: #666;
322
- --color-text-dark-6: #777;
323
- --color-border-light-1: #ddd;
324
- --color-border-light-2: #999;
325
- --color-border-dark-1: #111;
326
- --color-border-dark-2: #222;
327
- --color-border-dark-3: #333;
328
- --color-border-dark-4: #444;
329
- --color-border-dark-5: #666;
330
- --color-shadow-primary: #ff0000;
331
- --color-shadow-highlight: #ff6400;
332
- --color-shadow-dark: #000;
333
- --color-underline-inactive: #7a7971;
334
- --color-underline-active: #44191A;
335
- --color-underline-header: #782e22;
336
- --color-border-light-highlight: #f0f0e0;
337
- --color-border-light-primary: #b5b3a4;
338
- --color-border-light-secondary: #c9c7b8;
339
- --color-border-light-tertiary: #7a7971;
340
- --color-border-dark: #000;
341
- --color-border-dark-primary: #191813;
342
- --color-border-dark-secondary: #23221d;
343
- --color-border-dark-tertiary: #4b4a44;
344
- --color-border-highlight: #ff6400;
345
- --color-border-highlight-alt: #ff0000;
346
- --color-bg-btn-minor-inactive: #c9c7b8;
347
- --color-bg-btn-minor-active: #b5b3a4;
348
- --color-select-option-bg: #dad8cc;
349
- --color-checkbox-checked: #666;
350
- --color-ownership-none: #5500ff;
351
- --color-ownership-observer: #7a7971;
352
- --color-ownership-owner: #b5b3a4;
353
- --sidebar-width: 300px;
354
- --sidebar-header-height: 32px;
355
- --sidebar-item-height: 48px;
356
- --hotbar-height: 52px;
357
- --hotbar-width: 578px;
358
- --macro-size: 50px;
359
- --color-scrollbar: #782e22;
360
- --color-scrollbar-track: transparent;
361
- --color-scrollbar-border: #ff6400;
362
- --players-width: 200px;
363
- --form-field-height: 26px;
364
- --font-primary: "Signika", sans-serif;
365
- --line-height-12: 0.75rem;
366
- --line-height-16: 1rem;
367
- --line-height-20: 1.25rem;
368
- --line-height-30: 1.875rem;
369
-
370
- &.create-document {
371
- ol.unlist {
372
- display: grid;
373
- grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
374
- gap: 1rem;
375
- list-style: none;
376
-
377
- label {
378
- display: block;
379
- padding-bottom: 5px;
380
- }
381
-
382
- img {
383
- border-bottom: none;
384
- }
385
- }
386
- }
387
-
388
- &.chat-card {
389
-
390
- .chat-header {
391
- border: 2px solid gray;
392
- border-radius: 2px;
393
- align-items: center;
394
- transition: max-height 500ms ease;
395
-
396
- .name {
397
- font-size: 16px;
398
- font-weight: bold;
399
- }
400
-
401
- .type {
402
- font-style: italic;
403
- font-size: 14px;
404
- }
405
-
406
- > header {
407
- align-items: center;
408
-
409
- > img {
410
- flex: 0;
411
- border-radius: 0;
412
- margin-right: 1rem;
413
- }
414
-
415
- > i {
416
- flex: 0;
417
- }
418
- }
419
- }
420
-
421
- i {
422
- transition: all 250ms ease;
423
- margin-right: 0.25rem;
424
- }
425
-
426
- .collapsible-content {
427
- transition: height 500ms ease;
428
- padding: 0.25rem;
429
- }
430
-
431
- .collapsible > header {
432
- cursor: pointer;
433
- }
434
-
435
- .collapsed {
436
- max-height: 54px;
437
- overflow: hidden;
438
-
439
- .collapse-icon {
440
- transform: rotate(-90deg);
441
- }
442
-
443
- .collapsible-content {
444
- opacity: 0;
445
- height: 0px;
446
- }
447
- }
448
-
449
- .chat-info {
450
- color: black;
451
- .wide {
452
- flex-basis: 100%;
453
-
454
- > dd {
455
- padding-left: 0.5rem;
456
- }
457
- }
458
-
459
- dl {
460
- display: flex;
461
- flex-wrap: wrap;
462
- margin: 0.5em 0;
463
- color: black;
464
- text-shadow: none;
465
- }
466
-
467
- dt {
468
- flex-basis: 25%;
469
- color: black;
470
- text-shadow: none;
471
- }
472
-
473
- dd {
474
- flex-basis: 25%;
475
- margin: 0;
476
- padding: 0 0 10px 0;
477
-
478
- > p {
479
- line-height: 1.5rem;
480
- }
481
- }
482
-
483
- .dice-roll {
484
- .dice-total {
485
- height: 35px;
486
- line-height: 35px;
487
- margin-bottom: 0.5rem;
488
- font-weight: normal;
489
- font-size: 16px;
490
- text-align: left;
491
-
492
- > i {
493
- padding-left: 0.5rem;
494
- line-height: 35px;
495
- position: absolute;
496
- }
497
-
498
- .dice-info {
499
- display: inline-block;
500
- width: 200px;
501
- white-space: nowrap;
502
- overflow: hidden;
503
- text-overflow: ellipsis;
504
- margin-left: 30px;
505
- }
506
-
507
- > .label {
508
- font-weight: bold;
509
- }
510
-
511
- > .result {
512
- font-size: 20px;
513
- font-weight: bold;
514
- right: 10px;
515
- position: absolute;
516
- border-left: 1px solid gray;
517
- padding-left: 10px;
518
- line-height: 33px;
519
- }
520
- }
521
-
522
- // Enhanced styling for damage rolls
523
- &.damage-roll {
524
- position: relative;
525
-
526
- .dice-total {
527
- .damage-type {
528
- font-weight: normal;
529
- font-size: 14px;
530
- margin-left: 8px;
531
- opacity: 0.9;
532
- }
533
- }
534
-
535
- .damage-metadata {
536
- margin-top: 0.25rem;
537
- margin-left: 0.25px;
538
- font-size: 12px;
539
- color: var(--color-text-dark-1);
540
-
541
- .damage-property {
542
- display: inline-block;
543
- padding: 2px 6px;
544
- background: rgba(0, 0, 0, 0.2);
545
- border-radius: 3px;
546
- border: 1px solid rgba(255, 255, 255, 0.1);
547
- }
548
- }
549
-
550
- }
551
- }
552
-
553
- .measured-template {
554
- display: flex;
555
-
556
- .measured-template-button {
557
- flex: 0 0 100%;
558
- height: 35px;
559
- line-height: 35px;
560
- margin: 0;
561
- margin-bottom: 0.5rem;
562
- font-weight: normal;
563
- font-size: 16px;
564
- text-align: left;
565
- position: relative;
566
- background: rgba(0, 0, 0, 0.1);
567
- --color-border-light-2: #999;
568
- border: 1px solid var(--color-border-light-2);
569
- border-radius: 3px;
570
- box-shadow: 0 0 2px #FFF inset;
571
- word-break: break-all;
572
-
573
- > i {
574
- padding-left: 0.5rem;
575
- line-height: 30px;
576
- position: absolute;
577
- }
578
-
579
- .summary {
580
- display: inline-block;
581
- width: 100%;
582
- white-space: nowrap;
583
- overflow: hidden;
584
- text-overflow: ellipsis;
585
- margin-left: 8px;
586
- font-size: 16px;
587
- font-weight: normal;
588
-
589
- > .result {
590
- font-size: 20px;
591
- font-weight: bold;
592
- right: 2px;
593
- position: absolute;
594
- border-left: 1px solid gray;
595
- padding-left: 7px;
596
- height: 34px;
597
-
598
- > i {
599
- &:hover {
600
- cursor: pointer;
601
- box-shadow: 0 0 10px var(--color-shadow-highlight);
602
- }
603
- }
604
- }
605
- }
606
- }
607
- }
608
-
609
- .chat-info-tags {
610
- display: grid;
611
- grid-template-columns: repeat(4, auto);
612
- gap: 5px;
613
- /* Space between items */
614
-
615
- .tag {
616
- border: 2px outset whitesmoke;
617
- border-radius: 2px;
618
- display: flex;
619
- flex-direction: column;
620
- font-size: 12px;
621
- text-align: center;
622
-
623
- .label {
624
- font-weight: bold;
625
- }
626
- }
627
- }
628
- }
629
-
630
- .chat-effects {
631
-
632
- .title {
633
- margin-top: 1rem;
634
- font-size: 1.25em;
635
- border-bottom: 1px solid var(--color-underline-header);
636
- color: var(--color-text-dark-primary);
637
-
638
- > i {
639
- right: 1rem;
640
- }
641
- }
642
-
643
- img {
644
- flex: 0;
645
- }
646
-
647
- .effect {
648
- .name {
649
- margin-left: 0.5rem;
650
- line-height: 30px;
651
- font-size: 16px;
652
- }
653
-
654
- &:not(:last-child) {
655
- border-bottom: 1px dashed gray;
656
- margin-bottom: 0.75rem;
657
- padding-bottom: 0.25rem;
658
- }
659
-
660
- &:hover {
661
- cursor: pointer;
662
- border: 1px dashed var(--color-shadow-primary);
663
- }
664
- }
665
- }
666
- }
667
- }
668
-
669
-
670
- /* ----------------------------------------- */
671
- /* Context Dropdown Menu
672
- /* ----------------------------------------- */
673
- #context-menu2 {
674
- width: max-content;
675
- height: max-content;
676
- min-width: 200px;
677
- max-width: 360px;
678
- // Rendered to <body> with explicit viewport coordinates (see ContextMenu2._setPosition) so
679
- // the menu escapes the chat log's overflow clipping and any transformed sheet ancestor.
680
- position: fixed;
681
- background: linear-gradient(180deg, rgba(24, 23, 20, 0.8) 0%, rgba(35, 34, 29, 0.8) 100%);
682
- border: 1px solid #000;
683
- box-shadow: 0 0 20px -2px #000;
684
- border-radius: 5px;
685
- color: #EEE;
686
- z-index: 100000;
687
-
688
- h2 {
689
- font-family: 'warnock-pro', sans-serif;
690
- line-height: 44px;
691
- padding: 0 5px;
692
- border-bottom: 1px solid var(--color-border-highlight);
693
- text-shadow: none;
694
- }
695
- }
696
-
697
- // Positioning is set inline from the target's viewport rect (ContextMenu2._setPosition);
698
- // these classes remain only as open-direction markers for the slide animation.
699
- #context-menu2.expand-down {
700
- transform-origin: top;
701
- }
702
-
703
- #context-menu2.expand-up {
704
- transform-origin: bottom;
705
- }
706
-
707
- #context-menu2 ol.context-items {
708
- list-style: none;
709
- margin: 0;
710
- padding: 0;
711
- }
712
-
713
- #context-menu2 li.context-item {
714
- padding: 0 5px;
715
- line-height: 32px;
716
- text-shadow: none;
717
- }
718
-
719
- #context-menu2 li.context-item:hover {
720
- color: #FFF;
721
- text-shadow: 0 0 4px red;
722
- }
723
-
724
- #context-menu2 li.context-item > i {
725
- margin-right: 5px;
726
- }
727
-
728
- // The menu now mounts on <body>, so its damage-apply buttons/modifiers (which only exist in
729
- // the chat context) are styled by id alone rather than via a #chat-log ancestor selector.
730
- #context-menu2 {
731
- button {
732
- font-size: 12px;
733
- background: transparent;
734
- color: #fff;
735
- border: 1px dashed var(--color-border-highlight);
736
- box-shadow: none;
737
- opacity: 0.5;
738
- background: rgba(160, 157, 231, 0.5);
739
-
740
- &.active,
741
- &:hover {
742
- border: 1px solid var(--color-border-highlight);
743
- color: #fff;
744
- opacity: 1;
745
- box-shadow: inset 0 0 10px 0px var(--color-shadow-primary);
746
- }
747
-
748
- &:hover {
749
- border: 1px solid #35a7e9;
750
- box-shadow: inset 0 0 8px 2px var(--color-shadow-primary);
751
- }
752
- }
753
-
754
- .reroll,
755
- .modifiers {
756
- border-top: 1px solid var(--color-border-highlight);
757
- }
758
-
759
- .modifiers {
760
- margin: 6px 0 0;
761
- padding-top: 6px;
762
- }
1
+ @use "./backgrounds";
2
+ @use "./handlebars";
3
+ @use "./vuetifyStyles";
4
+ @use "./vuetifyOverrides";
5
+ @use "./isdlStyles";
6
+
7
+ /* -------------------------------------------- */
8
+ /* Vuetify Overrides */
9
+ /* -------------------------------------------- */
10
+
11
+ .#{$dynamic-id}.vue-application {
12
+
13
+ html {
14
+ overflow-x: hidden;
15
+ overflow-y: scroll;
16
+ }
17
+ }
18
+
19
+ /* -------------------------------------------- */
20
+ /* System Stylesheet */
21
+ /* -------------------------------------------- */
22
+
23
+ .#{$dynamic-id}.handlebars-sheet {
24
+ @include handlebars.handlebarsSheet;
25
+ }
26
+
27
+ .v-overlay-container {
28
+ @include vuetifyStyles.vuetifyStyles;
29
+ @include vuetifyOverrides.vuetifyOverrides;
30
+
31
+ --v-theme-overlay-multiplier: 1;
32
+ --v-disabled-opacity: 0.7;
33
+ }
34
+
35
+ // Copy of Foundry app styles for vue apps
36
+ .#{$dynamic-id}.vue-application {
37
+
38
+ --color-text-primary: var(--color-light-2);
39
+ --color-header-background: rgba(0, 0, 0, 0.5);
40
+ --color-border: var(--color-cool-4);
41
+ --color-fieldset-border: var(--color-light-6);
42
+ --color-form-hint: var(--color-light-5);
43
+ --color-form-hint-hover: var(--color-light-4);
44
+ --color-form-label: var(--color-light-4);
45
+ --color-form-label-hover: var(--color-light-2);
46
+ --color-select-option-bg: transparent;
47
+ --v-theme-overlay-multiplier: 1;
48
+ --v-disabled-opacity: 0.7;
49
+
50
+
51
+ .window-content {
52
+ @include vuetifyStyles.vuetifyStyles;
53
+ @include vuetifyOverrides.vuetifyOverrides;
54
+
55
+ --color-text-primary: var(--color-light-2);
56
+ --color-header-background: rgba(0, 0, 0, 0.5);
57
+ --color-border: var(--color-cool-4);
58
+ --color-fieldset-border: var(--color-light-6);
59
+ --color-form-hint: var(--color-light-5);
60
+ --color-form-hint-hover: var(--color-light-4);
61
+ --color-form-label: var(--color-light-4);
62
+ --color-form-label-hover: var(--color-light-2);
63
+ --color-select-option-bg: transparent;
64
+ --v-theme-overlay-multiplier: 1;
65
+ --v-disabled-opacity: 0.7;
66
+
67
+ overflow-y: scroll;
68
+
69
+ input[type="text"]:focus,
70
+ input[type="number"]:focus,
71
+ input[type="password"]:focus,
72
+ input[type="date"]:focus,
73
+ input[type="time"]:focus,
74
+ input[type="search"]:focus {
75
+ box-shadow: none;
76
+ }
77
+
78
+ .v-application {
79
+ @include isdlStyles.isdlStyles;
80
+ }
81
+ }
82
+
83
+ &.document-creation {
84
+
85
+ .window-content {
86
+ overflow: hidden;
87
+ }
88
+
89
+ // With the window sized to content (height: auto), neutralize Vuetify's 100vh
90
+ // min-heights so the layout collapses to the form instead of leaving dark space.
91
+ .v-application__wrap {
92
+ min-height: unset;
93
+ }
94
+
95
+ .v-main {
96
+ flex: 1 1 auto;
97
+ min-height: 0;
98
+ }
99
+
100
+ .v-container {
101
+ padding: 1rem;
102
+ }
103
+ }
104
+
105
+ &.isdl-prompt {
106
+
107
+ // Cap prompt windows at 80% of the viewport (overrides the base max-height: 100%).
108
+ max-height: 80vh;
109
+
110
+ // When a prompt exceeds the cap, scroll the content. We scroll at .window-content
111
+ // rather than an inner field-list scroller because the window is height:auto and
112
+ // max-height is NOT a definite height, so a percentage/flex height cascade can't
113
+ // bound an inner scroller. window-content has a real used height, so it scrolls
114
+ // reliably; the Submit/Cancel footer stays visible via position: sticky.
115
+ .window-content {
116
+ overflow-y: auto;
117
+ overflow-x: hidden;
118
+ }
119
+
120
+ .isdl-prompt-footer {
121
+ position: sticky;
122
+ bottom: 0;
123
+ z-index: 2;
124
+ background: rgb(var(--v-theme-surface));
125
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
126
+ }
127
+
128
+ .v-application__wrap {
129
+ min-height: unset;
130
+ }
131
+
132
+ .v-main {
133
+ flex: 1 1 auto;
134
+ min-height: 0;
135
+ }
136
+ }
137
+
138
+ &.active-effect {
139
+ .v-col {
140
+ padding: 0;
141
+ }
142
+
143
+ .v-card {
144
+ padding: 0.25rem;
145
+
146
+ > .v-card-title {
147
+ padding-top: 0;
148
+ padding-bottom: 0;
149
+ }
150
+ }
151
+
152
+ .v-autocomplete__selection {
153
+ .v-chip__close {
154
+ border: none;
155
+ background: none;
156
+ }
157
+ }
158
+
159
+ }
160
+
161
+ position: absolute;
162
+ z-index: var(--z-index-window);
163
+ transform-origin: top left;
164
+ display: flex;
165
+ flex-direction: column;
166
+ flex-wrap: nowrap;
167
+ min-width: 200px;
168
+ max-height: 100%;
169
+ max-width: 100%;
170
+ overflow: hidden;
171
+ background: var(--background);
172
+ font-size: var(--font-size-14);
173
+ color: var(--color-text-primary);
174
+ border: 1px solid var(--color-border);
175
+ border-radius: 6px;
176
+ box-shadow: 0 0 10px #000;
177
+
178
+ > .window-resize-handle {
179
+ position: absolute;
180
+ inset: auto 0px 0px auto;
181
+ width: 11px;
182
+ height: 11px;
183
+ cursor: nwse-resize;
184
+ background: transparent url(/ui/resize-handle.webp) no-repeat center / contain;
185
+ }
186
+
187
+ > .window-header {
188
+ --button-size: 24px;
189
+ display: flex;
190
+ flex-wrap: nowrap;
191
+ align-items: center;
192
+ flex: 0 0 var(--header-height);
193
+ position: relative;
194
+ overflow: hidden;
195
+ padding: 0 0.5rem;
196
+ gap: 0.25rem;
197
+ z-index: 1;
198
+ cursor: grab;
199
+ background: var(--color-cool-5-90);
200
+ font-size: var(--font-size-13);
201
+ color: var(--color-light-1);
202
+ border-bottom: 1px solid var(--color-border);
203
+ font: unset;
204
+
205
+ > .window-title {
206
+ flex: 1;
207
+ font-size: inherit;
208
+ font-family: inherit;
209
+ font-weight: inherit;
210
+ text-shadow: none;
211
+ margin: 0;
212
+ line-height: var(--header-height);
213
+ border: none;
214
+ overflow: hidden;
215
+ text-align: left;
216
+ white-space: nowrap;
217
+ text-overflow: ellipsis;
218
+ }
219
+
220
+ > .header-control {
221
+ flex: 0 0 var(--button-size);
222
+ height: var(--button-size);
223
+ padding: 0;
224
+ margin: 0;
225
+ border: none;
226
+ color: var(--color-light-text-heading);
227
+ background: none;
228
+ }
229
+ }
230
+
231
+ > .controls-dropdown {
232
+ position: absolute;
233
+ overflow: hidden auto;
234
+ top: var(--header-height);
235
+ right: 0;
236
+ width: max-content;
237
+ min-width: 100px;
238
+ max-width: 300px;
239
+ max-height: 0;
240
+ z-index: 1;
241
+ list-style: none;
242
+ margin: 0 0.25rem;
243
+ padding: 0;
244
+ background: var(--background);
245
+ border-radius: 0 0 4px 4px;
246
+ transition: max-height 0.5s;
247
+ pointer-events: none;
248
+
249
+ > .header-control {
250
+ margin: 0.25rem;
251
+
252
+ > button {
253
+ --button-background-color: none;
254
+ --button-text-color: var(--color-text-primary);
255
+ width: 100%;
256
+ display: flex;
257
+ justify-content: space-between;
258
+ border: none;
259
+ font-size: var(--font-size-12);
260
+ color: var(--button-text-color);
261
+ background: var(--button-background-color);
262
+
263
+ > i {
264
+ line-height: 28px;
265
+ }
266
+ }
267
+ }
268
+
269
+ &.expanded {
270
+ max-height: calc(100% - var(--header-height));
271
+ pointer-events: all;
272
+ box-shadow: 0 0 8px var(--color-cool-3);
273
+ }
274
+ }
275
+
276
+ > .window-content {
277
+ backdrop-filter: blur(4px);
278
+ }
279
+
280
+
281
+ }
282
+
283
+
284
+ .#{$dynamic-id} {
285
+
286
+
287
+ --header-height: 36px;
288
+ --minimized-width: 200px;
289
+ --background: var(--color-cool-5-90);
290
+ --color-text-primary: var(--color-light-2);
291
+ --color-header-background: rgba(0, 0, 0, 0.5);
292
+ --color-border: var(--color-cool-4);
293
+ --color-fieldset-border: var(--color-light-6);
294
+ --color-form-hint: var(--color-light-5);
295
+ --color-form-hint-hover: var(--color-light-4);
296
+ --color-form-label: var(--color-light-4);
297
+ --color-form-label-hover: var(--color-light-2);
298
+ --color-select-option-bg: transparent;
299
+ --color-text-light-highlight: #f0f0e0;
300
+ --color-text-light-heading: #c9c7b8;
301
+ --color-text-light-primary: #b5b3a4;
302
+ --color-text-dark-primary: #191813;
303
+ --color-text-dark-secondary: #4b4a44;
304
+ --color-text-dark-header: #23221d;
305
+ --color-text-dark-inactive: #7a7971;
306
+ --color-text-hyperlink: #ff6400;
307
+ --color-text-selection: #f7f3e8;
308
+ --color-text-selection-bg: #777;
309
+ --color-text-light-0: #fff;
310
+ --color-text-light-1: #eee;
311
+ --color-text-light-2: #ddd;
312
+ --color-text-light-3: #ccc;
313
+ --color-text-light-4: #bbb;
314
+ --color-text-light-5: #aaa;
315
+ --color-text-light-6: #999;
316
+ --color-text-light-7: #888;
317
+ --color-text-dark-1: #111;
318
+ --color-text-dark-2: #222;
319
+ --color-text-dark-3: #444;
320
+ --color-text-dark-4: #555;
321
+ --color-text-dark-5: #666;
322
+ --color-text-dark-6: #777;
323
+ --color-border-light-1: #ddd;
324
+ --color-border-light-2: #999;
325
+ --color-border-dark-1: #111;
326
+ --color-border-dark-2: #222;
327
+ --color-border-dark-3: #333;
328
+ --color-border-dark-4: #444;
329
+ --color-border-dark-5: #666;
330
+ --color-shadow-primary: #ff0000;
331
+ --color-shadow-highlight: #ff6400;
332
+ --color-shadow-dark: #000;
333
+ --color-underline-inactive: #7a7971;
334
+ --color-underline-active: #44191A;
335
+ --color-underline-header: #782e22;
336
+ --color-border-light-highlight: #f0f0e0;
337
+ --color-border-light-primary: #b5b3a4;
338
+ --color-border-light-secondary: #c9c7b8;
339
+ --color-border-light-tertiary: #7a7971;
340
+ --color-border-dark: #000;
341
+ --color-border-dark-primary: #191813;
342
+ --color-border-dark-secondary: #23221d;
343
+ --color-border-dark-tertiary: #4b4a44;
344
+ --color-border-highlight: #ff6400;
345
+ --color-border-highlight-alt: #ff0000;
346
+ --color-bg-btn-minor-inactive: #c9c7b8;
347
+ --color-bg-btn-minor-active: #b5b3a4;
348
+ --color-select-option-bg: #dad8cc;
349
+ --color-checkbox-checked: #666;
350
+ --color-ownership-none: #5500ff;
351
+ --color-ownership-observer: #7a7971;
352
+ --color-ownership-owner: #b5b3a4;
353
+ --sidebar-width: 300px;
354
+ --sidebar-header-height: 32px;
355
+ --sidebar-item-height: 48px;
356
+ --hotbar-height: 52px;
357
+ --hotbar-width: 578px;
358
+ --macro-size: 50px;
359
+ --color-scrollbar: #782e22;
360
+ --color-scrollbar-track: transparent;
361
+ --color-scrollbar-border: #ff6400;
362
+ --players-width: 200px;
363
+ --form-field-height: 26px;
364
+ --font-primary: "Signika", sans-serif;
365
+ --line-height-12: 0.75rem;
366
+ --line-height-16: 1rem;
367
+ --line-height-20: 1.25rem;
368
+ --line-height-30: 1.875rem;
369
+
370
+ &.create-document {
371
+ ol.unlist {
372
+ display: grid;
373
+ grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
374
+ gap: 1rem;
375
+ list-style: none;
376
+
377
+ label {
378
+ display: block;
379
+ padding-bottom: 5px;
380
+ }
381
+
382
+ img {
383
+ border-bottom: none;
384
+ }
385
+ }
386
+ }
387
+
388
+ &.chat-card {
389
+
390
+ .chat-header {
391
+ border: 2px solid gray;
392
+ border-radius: 2px;
393
+ align-items: center;
394
+ transition: max-height 500ms ease;
395
+
396
+ .name {
397
+ font-size: 16px;
398
+ font-weight: bold;
399
+ }
400
+
401
+ .type {
402
+ font-style: italic;
403
+ font-size: 14px;
404
+ }
405
+
406
+ > header {
407
+ align-items: center;
408
+
409
+ > img {
410
+ flex: 0;
411
+ border-radius: 0;
412
+ margin-right: 1rem;
413
+ }
414
+
415
+ > i {
416
+ flex: 0;
417
+ }
418
+ }
419
+ }
420
+
421
+ i {
422
+ transition: all 250ms ease;
423
+ margin-right: 0.25rem;
424
+ }
425
+
426
+ .collapsible-content {
427
+ transition: height 500ms ease;
428
+ padding: 0.25rem;
429
+ }
430
+
431
+ .collapsible > header {
432
+ cursor: pointer;
433
+ }
434
+
435
+ .collapsed {
436
+ max-height: 54px;
437
+ overflow: hidden;
438
+
439
+ .collapse-icon {
440
+ transform: rotate(-90deg);
441
+ }
442
+
443
+ .collapsible-content {
444
+ opacity: 0;
445
+ height: 0px;
446
+ }
447
+ }
448
+
449
+ .chat-info {
450
+ color: black;
451
+ .wide {
452
+ flex-basis: 100%;
453
+
454
+ > dd {
455
+ padding-left: 0.5rem;
456
+ }
457
+ }
458
+
459
+ dl {
460
+ display: flex;
461
+ flex-wrap: wrap;
462
+ margin: 0.5em 0;
463
+ color: black;
464
+ text-shadow: none;
465
+ }
466
+
467
+ dt {
468
+ flex-basis: 25%;
469
+ color: black;
470
+ text-shadow: none;
471
+ }
472
+
473
+ dd {
474
+ flex-basis: 25%;
475
+ margin: 0;
476
+ padding: 0 0 10px 0;
477
+
478
+ > p {
479
+ line-height: 1.5rem;
480
+ }
481
+ }
482
+
483
+ .dice-roll {
484
+ .dice-total {
485
+ height: 35px;
486
+ line-height: 35px;
487
+ margin-bottom: 0.5rem;
488
+ font-weight: normal;
489
+ font-size: 16px;
490
+ text-align: left;
491
+
492
+ > i {
493
+ padding-left: 0.5rem;
494
+ line-height: 35px;
495
+ position: absolute;
496
+ }
497
+
498
+ .dice-info {
499
+ display: inline-block;
500
+ width: 200px;
501
+ white-space: nowrap;
502
+ overflow: hidden;
503
+ text-overflow: ellipsis;
504
+ margin-left: 30px;
505
+ }
506
+
507
+ > .label {
508
+ font-weight: bold;
509
+ }
510
+
511
+ > .result {
512
+ font-size: 20px;
513
+ font-weight: bold;
514
+ right: 10px;
515
+ position: absolute;
516
+ border-left: 1px solid gray;
517
+ padding-left: 10px;
518
+ line-height: 33px;
519
+ }
520
+ }
521
+
522
+ // Enhanced styling for damage rolls
523
+ &.damage-roll {
524
+ position: relative;
525
+
526
+ .dice-total {
527
+ .damage-type {
528
+ font-weight: normal;
529
+ font-size: 14px;
530
+ margin-left: 8px;
531
+ opacity: 0.9;
532
+ }
533
+ }
534
+
535
+ .damage-metadata {
536
+ margin-top: 0.25rem;
537
+ margin-left: 0.25px;
538
+ font-size: 12px;
539
+ color: var(--color-text-dark-1);
540
+
541
+ .damage-property {
542
+ display: inline-block;
543
+ padding: 2px 6px;
544
+ background: rgba(0, 0, 0, 0.2);
545
+ border-radius: 3px;
546
+ border: 1px solid rgba(255, 255, 255, 0.1);
547
+ }
548
+ }
549
+
550
+ }
551
+ }
552
+
553
+ .measured-template {
554
+ display: flex;
555
+
556
+ .measured-template-button {
557
+ flex: 0 0 100%;
558
+ height: 35px;
559
+ line-height: 35px;
560
+ margin: 0;
561
+ margin-bottom: 0.5rem;
562
+ font-weight: normal;
563
+ font-size: 16px;
564
+ text-align: left;
565
+ position: relative;
566
+ background: rgba(0, 0, 0, 0.1);
567
+ --color-border-light-2: #999;
568
+ border: 1px solid var(--color-border-light-2);
569
+ border-radius: 3px;
570
+ box-shadow: 0 0 2px #FFF inset;
571
+ word-break: break-all;
572
+
573
+ > i {
574
+ padding-left: 0.5rem;
575
+ line-height: 30px;
576
+ position: absolute;
577
+ }
578
+
579
+ .summary {
580
+ display: inline-block;
581
+ width: 100%;
582
+ white-space: nowrap;
583
+ overflow: hidden;
584
+ text-overflow: ellipsis;
585
+ margin-left: 8px;
586
+ font-size: 16px;
587
+ font-weight: normal;
588
+
589
+ > .result {
590
+ font-size: 20px;
591
+ font-weight: bold;
592
+ right: 2px;
593
+ position: absolute;
594
+ border-left: 1px solid gray;
595
+ padding-left: 7px;
596
+ height: 34px;
597
+
598
+ > i {
599
+ &:hover {
600
+ cursor: pointer;
601
+ box-shadow: 0 0 10px var(--color-shadow-highlight);
602
+ }
603
+ }
604
+ }
605
+ }
606
+ }
607
+ }
608
+
609
+ .chat-info-tags {
610
+ display: grid;
611
+ grid-template-columns: repeat(4, auto);
612
+ gap: 5px;
613
+ /* Space between items */
614
+
615
+ .tag {
616
+ border: 2px outset whitesmoke;
617
+ border-radius: 2px;
618
+ display: flex;
619
+ flex-direction: column;
620
+ font-size: 12px;
621
+ text-align: center;
622
+
623
+ .label {
624
+ font-weight: bold;
625
+ }
626
+ }
627
+ }
628
+ }
629
+
630
+ .chat-effects {
631
+
632
+ .title {
633
+ margin-top: 1rem;
634
+ font-size: 1.25em;
635
+ border-bottom: 1px solid var(--color-underline-header);
636
+ color: var(--color-text-dark-primary);
637
+
638
+ > i {
639
+ right: 1rem;
640
+ }
641
+ }
642
+
643
+ img {
644
+ flex: 0;
645
+ }
646
+
647
+ .effect {
648
+ .name {
649
+ margin-left: 0.5rem;
650
+ line-height: 30px;
651
+ font-size: 16px;
652
+ }
653
+
654
+ &:not(:last-child) {
655
+ border-bottom: 1px dashed gray;
656
+ margin-bottom: 0.75rem;
657
+ padding-bottom: 0.25rem;
658
+ }
659
+
660
+ &:hover {
661
+ cursor: pointer;
662
+ border: 1px dashed var(--color-shadow-primary);
663
+ }
664
+ }
665
+ }
666
+ }
667
+ }
668
+
669
+
670
+ /* ----------------------------------------- */
671
+ /* Context Dropdown Menu
672
+ /* ----------------------------------------- */
673
+ #context-menu2 {
674
+ width: max-content;
675
+ height: max-content;
676
+ min-width: 200px;
677
+ max-width: 360px;
678
+ // Rendered to <body> with explicit viewport coordinates (see ContextMenu2._setPosition) so
679
+ // the menu escapes the chat log's overflow clipping and any transformed sheet ancestor.
680
+ position: fixed;
681
+ background: linear-gradient(180deg, rgba(24, 23, 20, 0.8) 0%, rgba(35, 34, 29, 0.8) 100%);
682
+ border: 1px solid #000;
683
+ box-shadow: 0 0 20px -2px #000;
684
+ border-radius: 5px;
685
+ color: #EEE;
686
+ z-index: 100000;
687
+
688
+ h2 {
689
+ font-family: 'warnock-pro', sans-serif;
690
+ line-height: 44px;
691
+ padding: 0 5px;
692
+ border-bottom: 1px solid var(--color-border-highlight);
693
+ text-shadow: none;
694
+ }
695
+ }
696
+
697
+ // Positioning is set inline from the target's viewport rect (ContextMenu2._setPosition);
698
+ // these classes remain only as open-direction markers for the slide animation.
699
+ #context-menu2.expand-down {
700
+ transform-origin: top;
701
+ }
702
+
703
+ #context-menu2.expand-up {
704
+ transform-origin: bottom;
705
+ }
706
+
707
+ #context-menu2 ol.context-items {
708
+ list-style: none;
709
+ margin: 0;
710
+ padding: 0;
711
+ }
712
+
713
+ #context-menu2 li.context-item {
714
+ padding: 0 5px;
715
+ line-height: 32px;
716
+ text-shadow: none;
717
+ }
718
+
719
+ #context-menu2 li.context-item:hover {
720
+ color: #FFF;
721
+ text-shadow: 0 0 4px red;
722
+ }
723
+
724
+ #context-menu2 li.context-item > i {
725
+ margin-right: 5px;
726
+ }
727
+
728
+ // The menu now mounts on <body>, so its damage-apply buttons/modifiers (which only exist in
729
+ // the chat context) are styled by id alone rather than via a #chat-log ancestor selector.
730
+ #context-menu2 {
731
+ button {
732
+ font-size: 12px;
733
+ background: transparent;
734
+ color: #fff;
735
+ border: 1px dashed var(--color-border-highlight);
736
+ box-shadow: none;
737
+ opacity: 0.5;
738
+ background: rgba(160, 157, 231, 0.5);
739
+
740
+ &.active,
741
+ &:hover {
742
+ border: 1px solid var(--color-border-highlight);
743
+ color: #fff;
744
+ opacity: 1;
745
+ box-shadow: inset 0 0 10px 0px var(--color-shadow-primary);
746
+ }
747
+
748
+ &:hover {
749
+ border: 1px solid #35a7e9;
750
+ box-shadow: inset 0 0 8px 2px var(--color-shadow-primary);
751
+ }
752
+ }
753
+
754
+ .reroll,
755
+ .modifiers {
756
+ border-top: 1px solid var(--color-border-highlight);
757
+ }
758
+
759
+ .modifiers {
760
+ margin: 6px 0 0;
761
+ padding-top: 6px;
762
+ }
763
763
  }