intelligent-system-design-language 0.3.21 → 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 (116) 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 -1381
  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 -1381
  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 -651
  27. package/out/cli/components/chat-card-generator.js.map +1 -1
  28. package/out/cli/components/css-generator.js +4 -4
  29. package/out/cli/components/damage-roll-generator.js +160 -160
  30. package/out/cli/components/datamodel-generator.js +264 -257
  31. package/out/cli/components/datamodel-generator.js.map +1 -1
  32. package/out/cli/components/derived-data-generator.js +923 -923
  33. package/out/cli/components/hotbar-drop-hook-generator.js +82 -82
  34. package/out/cli/components/init-hook-generator.js +495 -495
  35. package/out/cli/components/language-generator.js +1 -1
  36. package/out/cli/components/language-generator.js.map +1 -1
  37. package/out/cli/components/measured-template-preview.js +221 -221
  38. package/out/cli/components/method-generator.js +979 -887
  39. package/out/cli/components/method-generator.js.map +1 -1
  40. package/out/cli/components/ready-hook-generator.js +404 -404
  41. package/out/cli/components/token-generator.js +116 -116
  42. package/out/cli/components/vue/base-components/vue-attribute.js +138 -138
  43. package/out/cli/components/vue/base-components/vue-boolean.js +64 -64
  44. package/out/cli/components/vue/base-components/vue-calculator.js +93 -93
  45. package/out/cli/components/vue/base-components/vue-damage-application.js +356 -356
  46. package/out/cli/components/vue/base-components/vue-damage-bonuses.js +165 -165
  47. package/out/cli/components/vue/base-components/vue-damage-resistances.js +196 -196
  48. package/out/cli/components/vue/base-components/vue-damage-track.js +121 -121
  49. package/out/cli/components/vue/base-components/vue-date-time.js +42 -42
  50. package/out/cli/components/vue/base-components/vue-dice.js +98 -98
  51. package/out/cli/components/vue/base-components/vue-die.js +73 -73
  52. package/out/cli/components/vue/base-components/vue-document-choice.js +149 -149
  53. package/out/cli/components/vue/base-components/vue-document-choices.js +179 -179
  54. package/out/cli/components/vue/base-components/vue-document-link.js +60 -60
  55. package/out/cli/components/vue/base-components/vue-extended-choice.js +88 -88
  56. package/out/cli/components/vue/base-components/vue-inventory.js +519 -519
  57. package/out/cli/components/vue/base-components/vue-macro-choice.js +138 -138
  58. package/out/cli/components/vue/base-components/vue-measured-template.js +530 -530
  59. package/out/cli/components/vue/base-components/vue-money.js +483 -483
  60. package/out/cli/components/vue/base-components/vue-number.js +174 -174
  61. package/out/cli/components/vue/base-components/vue-paperdoll.js +43 -43
  62. package/out/cli/components/vue/base-components/vue-parent-property-reference.js +76 -76
  63. package/out/cli/components/vue/base-components/vue-prosemirror.js +18 -18
  64. package/out/cli/components/vue/base-components/vue-resource.js +136 -136
  65. package/out/cli/components/vue/base-components/vue-roll-visualizer.js +286 -109
  66. package/out/cli/components/vue/base-components/vue-roll-visualizer.js.map +1 -1
  67. package/out/cli/components/vue/base-components/vue-self-property-reference.js +62 -62
  68. package/out/cli/components/vue/base-components/vue-string-choice.js +98 -98
  69. package/out/cli/components/vue/base-components/vue-string-choices.js +203 -203
  70. package/out/cli/components/vue/base-components/vue-string.js +60 -60
  71. package/out/cli/components/vue/base-components/vue-text-field.js +53 -53
  72. package/out/cli/components/vue/base-components/vue-tracker.js +431 -431
  73. package/out/cli/components/vue/vue-action-component-generator.js +64 -64
  74. package/out/cli/components/vue/vue-active-effect-sheet-generator.js +856 -856
  75. package/out/cli/components/vue/vue-datatable-sheet-class-generator.js +292 -292
  76. package/out/cli/components/vue/vue-datatable2-component-generator.js +824 -824
  77. package/out/cli/components/vue/vue-document-creation-app.js +121 -121
  78. package/out/cli/components/vue/vue-document-creation-sheet.js +94 -94
  79. package/out/cli/components/vue/vue-generator.js +40 -40
  80. package/out/cli/components/vue/vue-mixin.js +296 -296
  81. package/out/cli/components/vue/vue-pinned-datatable-component-generator.js +260 -260
  82. package/out/cli/components/vue/vue-prompt-generator.js +91 -76
  83. package/out/cli/components/vue/vue-prompt-generator.js.map +1 -1
  84. package/out/cli/components/vue/vue-prompt-sheet-class-generator.js +317 -317
  85. package/out/cli/components/vue/vue-sheet-application-generator.js +1177 -1167
  86. package/out/cli/components/vue/vue-sheet-application-generator.js.map +1 -1
  87. package/out/cli/components/vue/vue-sheet-class-generator.js +510 -510
  88. package/out/cli/generator.js +438 -433
  89. package/out/cli/generator.js.map +1 -1
  90. package/out/extension/github/githubAuthProvider.js +71 -29
  91. package/out/extension/github/githubAuthProvider.js.map +1 -1
  92. package/out/extension/github/githubGistManager.js +4 -3
  93. package/out/extension/github/githubGistManager.js.map +1 -1
  94. package/out/extension/github/githubManager.js +40 -38
  95. package/out/extension/github/githubManager.js.map +1 -1
  96. package/out/extension/github/githubQuickActions.js +120 -120
  97. package/out/extension/github/system-workflow.yml +47 -47
  98. package/out/extension/main.cjs +909 -532
  99. package/out/extension/main.cjs.map +3 -3
  100. package/out/extension/package.json +419 -419
  101. package/out/language/generated/ast.js +51 -2
  102. package/out/language/generated/ast.js.map +1 -1
  103. package/out/language/generated/grammar.js +14240 -13991
  104. package/out/language/generated/grammar.js.map +1 -1
  105. package/out/language/intelligent-system-design-language-validator.js +32 -2
  106. package/out/language/intelligent-system-design-language-validator.js.map +1 -1
  107. package/out/language/isdl-scope-provider.js +14 -1
  108. package/out/language/isdl-scope-provider.js.map +1 -1
  109. package/out/language/main.cjs +913 -569
  110. package/out/language/main.cjs.map +3 -3
  111. package/out/package.json +419 -419
  112. package/out/progressbar.min.js +6 -6
  113. package/out/styles.scss +762 -747
  114. package/out/test/validating/diagnostics.test.js +40 -0
  115. package/out/test/validating/diagnostics.test.js.map +1 -1
  116. package/package.json +419 -419
@@ -1,1381 +1,1444 @@
1
- @use "./backgrounds";
2
-
3
- @mixin isdlStyles {
4
-
5
- &.isdl-prompt,
6
- .isdl-datatable {
7
- .v-application__wrap {
8
- min-height: 100%;
9
- }
10
- }
11
-
12
- &.isdl-datatable {
13
- color: black;
14
- background-repeat: repeat;
15
- @include backgrounds.topography;
16
-
17
- > .window-content {
18
- padding: 16px;
19
- }
20
-
21
- .custom-datatable {
22
- table-layout: auto !important;
23
- background: transparent;
24
- }
25
-
26
- .custom-datatable :deep(.v-data-table__table) {
27
- width: auto !important;
28
- table-layout: auto !important;
29
- background: transparent;
30
- }
31
-
32
- .custom-datatable :deep(th) {
33
- white-space: nowrap !important;
34
- overflow: hidden;
35
- text-overflow: ellipsis;
36
- min-width: fit-content;
37
- padding: 0 8px !important;
38
- background: transparent;
39
- }
40
-
41
- .custom-datatable :deep(th .v-data-table__column-header) {
42
- white-space: nowrap !important;
43
- overflow: hidden;
44
- text-overflow: ellipsis;
45
- background: transparent;
46
- }
47
-
48
- .custom-datatable :deep(td) {
49
- white-space: nowrap;
50
- overflow: hidden;
51
- text-overflow: ellipsis;
52
- vertical-align: middle;
53
- background: transparent;
54
- }
55
-
56
- .custom-datatable :deep(tr[draggable="true"]) {
57
- cursor: grab;
58
-
59
- &:active {
60
- cursor: grabbing;
61
- }
62
-
63
- &.dragging {
64
- opacity: 0.5;
65
- }
66
- }
67
-
68
- /* Allow text columns to grow naturally but with reasonable limits */
69
- .custom-datatable :deep(td .text-caption.text-truncate) {
70
- white-space: nowrap;
71
- overflow: hidden;
72
- text-overflow: ellipsis;
73
- min-width: 80px;
74
- max-width: 300px;
75
- }
76
-
77
- .column-config-list {
78
- max-height: 400px;
79
- overflow-y: auto;
80
- }
81
-
82
- .column-config-item {
83
- border: 1px solid transparent;
84
- border-radius: 4px;
85
- margin-bottom: 2px;
86
- transition: all 0.2s ease;
87
- }
88
-
89
- .column-config-item:hover {
90
- background-color: rgba(var(--v-theme-on-surface), 0.05);
91
- border-color: rgba(var(--v-theme-primary), 0.2);
92
- }
93
-
94
- .column-config-item.dragging {
95
- opacity: 0.5;
96
- transform: scale(0.98);
97
- }
98
-
99
- .drag-handle:hover {
100
- cursor: grabbing !important;
101
- }
102
- }
103
-
104
- .v-input {
105
- &:not(.document-name) {
106
- .v-input__control {
107
- background-color: #e9e9e9;
108
- }
109
- }
110
- }
111
-
112
- .v-alert__prepend {
113
- padding-top: 8px;
114
- }
115
-
116
- .v-main > .v-container {
117
- background-repeat: repeat;
118
- @include backgrounds.topography;
119
-
120
- &.edit-mode {
121
- @include backgrounds.cogs;
122
- }
123
-
124
- &.dead {
125
- @include backgrounds.skulls;
126
- }
127
-
128
- &.hideout {
129
- @include backgrounds.hideout;
130
- }
131
-
132
- &.graphpaper {
133
- @include backgrounds.graphpaper;
134
- }
135
-
136
- &.texture {
137
- @include backgrounds.texture;
138
- }
139
-
140
- &.squares {
141
- @include backgrounds.squares;
142
- }
143
-
144
- &.dominoes {
145
- @include backgrounds.dominoes;
146
- }
147
-
148
- &.temple {
149
- @include backgrounds.temple;
150
- }
151
-
152
- &.food {
153
- @include backgrounds.food;
154
- }
155
-
156
- &.anchors {
157
- @include backgrounds.anchors;
158
- }
159
-
160
- &.bubbles {
161
- @include backgrounds.bubbles;
162
- }
163
-
164
- &.diamonds {
165
- @include backgrounds.diamonds;
166
- }
167
-
168
- &.circuitboard {
169
- @include backgrounds.circuitboard;
170
- }
171
-
172
- &.bricks {
173
- @include backgrounds.bricks;
174
- }
175
-
176
- &.signal {
177
- @include backgrounds.signal;
178
- }
179
- }
180
-
181
- .v-container {
182
- min-height: 0;
183
- padding: 0;
184
-
185
- > .v-window {
186
- padding: 16px;
187
- height: 100%;
188
-
189
- > .v-window__container {
190
- > .v-window-item {
191
- height: 100%;
192
- }
193
- }
194
- }
195
- }
196
-
197
- .v-slide-group__content {
198
- > button {
199
- width: unset;
200
- }
201
- }
202
-
203
- .dt-body-center {
204
- text-align: center;
205
- }
206
-
207
- .dt-buttons {
208
- display: flex;
209
- height: 52px;
210
- align-items: center;
211
- }
212
-
213
- .dtr-control {
214
- padding: 0;
215
-
216
- > div {
217
- > div {
218
- display: flex;
219
- }
220
- }
221
- }
222
-
223
- .tabs-window {
224
- height: 100%;
225
-
226
- > .v-window__container {
227
- height: 100%;
228
- }
229
-
230
- .dt-button-background {
231
- display: none;
232
- height: 0px;
233
- }
234
- }
235
-
236
- .prose-mirror-wrapper {
237
- background-color: #dddddd;
238
- border: 1px solid #ccc;
239
- border-radius: 4px;
240
- box-shadow: inset 0px 0px 2px 0px black;
241
- padding: 1rem;
242
-
243
- .editor-menu {
244
- color: black;
245
- background: none;
246
-
247
- i {
248
- margin-right: 4px;
249
- padding-left: 3px;
250
- }
251
- }
252
-
253
- .toggle {
254
- width: 30px;
255
-
256
- > i {
257
- padding-left: 4px;
258
- }
259
- }
260
- }
261
-
262
- .resource-card,
263
- .tracker-card {
264
- min-width: 300px;
265
- margin-bottom: 1rem;
266
- flex: 1;
267
-
268
- .v-progress-linear__background {
269
- opacity: 0.2;
270
- }
271
- }
272
-
273
- .v-label {
274
- color: black;
275
- }
276
-
277
- .v-field-label--floating {
278
- font-size: 14px;
279
- font-weight: bold;
280
- }
281
-
282
- .v-text-field {
283
- .v-field__field {
284
- input {
285
- padding-left: 16px;
286
- }
287
- }
288
- }
289
-
290
- .v-number-input {
291
- .v-field__input {
292
- padding-left: 16px;
293
- padding-top: 2px;
294
- }
295
-
296
- &.calculated-number {
297
- .v-field__field {
298
- margin-right: -36px;
299
- }
300
- }
301
-
302
- .v-field__field {
303
- input {
304
- border: none;
305
- }
306
- }
307
- }
308
-
309
- .v-text-field {
310
- .v-field__field {
311
- input {
312
- border: none;
313
- }
314
- }
315
- }
316
-
317
-
318
- .v-field__input {
319
- height: 100%;
320
- }
321
-
322
- .v-field__field {
323
- > input {
324
- background: unset;
325
- }
326
- }
327
-
328
- .v-col {
329
- &.section {
330
- min-width: 332px;
331
- }
332
- }
333
-
334
- .v-row {
335
- column-gap: 1rem;
336
- height: auto;
337
-
338
- > .v-col {
339
- height: auto;
340
- padding-left: 0;
341
- padding-right: 0;
342
- }
343
- }
344
-
345
- .isdl-datatable,
346
- .datatable {
347
- background: none;
348
-
349
- > .v-card-title {
350
- background: none;
351
- }
352
-
353
- table {
354
- background: none;
355
- }
356
-
357
- thead {
358
- background: rgba(0, 0, 0, 0.5);
359
- color: var(--color-text-light-highlight);
360
- text-shadow: 1px 1px var(--color-shadow-dark);
361
- border-bottom: 1px solid var(--color-border-dark);
362
- }
363
- }
364
-
365
- .v-input {
366
- flex: 1;
367
- min-width: 150px;
368
- max-width: 600px;
369
- margin-top: 0.75rem;
370
-
371
- &.document-name {
372
- margin: 0;
373
- }
374
-
375
- > .v-input__details {
376
- display: none;
377
- }
378
- }
379
-
380
-
381
- .isdl-html {
382
- min-width: 300px;
383
- max-width: 600px;
384
- flex: 1;
385
- }
386
-
387
- // Description tab can be full width
388
- .v-tabs-window-item {
389
- .isdl-html {
390
- max-width: unset;
391
- }
392
- }
393
-
394
- .action-btn,
395
- .isdl-property,
396
- .isdl-single-document,
397
- .single-wide {
398
- flex: 1;
399
- min-width: 150px;
400
- max-width: 600px;
401
- }
402
-
403
- .action-btn {
404
- margin-top: 12px;
405
- height: 40px;
406
- flex: 1;
407
- padding: 0;
408
- align-self: center;
409
-
410
- .v-btn__content {
411
- justify-content: left;
412
- overflow: hidden;
413
- text-overflow: ellipsis;
414
- }
415
- }
416
-
417
- .isdl-tracker,
418
- .double-wide {
419
- min-width: 300px;
420
- max-width: 600px;
421
- flex: 2;
422
-
423
- .slim-number {
424
- font-size: 0.75rem;
425
- }
426
-
427
- .tracker-inner-content {
428
- > .v-progress-linear {
429
- border: 1px solid black;
430
- }
431
- }
432
- }
433
-
434
- .isdl-single-document {
435
- margin-top: 0.75rem;
436
- margin-bottom: 1rem;
437
- max-width: 300px;
438
- }
439
-
440
- .v-card {
441
- .v-card-text {
442
- column-gap: 1rem;
443
- }
444
- }
445
-
446
- .calc-button:hover {
447
- background: rgba(50, 50, 50, 0.7);
448
- }
449
-
450
- .v-field,
451
- .v-field__field {
452
- z-index: 10;
453
- }
454
-
455
- .v-btn-group {
456
- min-width: 300px;
457
- }
458
-
459
- .calculator {
460
- position: absolute;
461
- top: 50px;
462
- left: 50px;
463
- background: rgba(30, 30, 30, 0.8);
464
- padding: 10px;
465
- border-radius: 8px;
466
- box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5);
467
- backdrop-filter: blur(5px);
468
- z-index: 20;
469
-
470
- input {
471
- width: 100%;
472
- padding: 5px;
473
- font-size: 14px;
474
- border-radius: 4px;
475
- border: none;
476
- margin-bottom: 5px;
477
- background-color: #dddddd;
478
- }
479
-
480
- .calc-buttons {
481
- display: flex;
482
- }
483
-
484
- button {
485
- background: rgba(255, 255, 255, 0.4);
486
- border: none;
487
- padding: 8px;
488
- font-size: 16px;
489
- margin: 2px;
490
- cursor: pointer;
491
- border-radius: 4px;
492
-
493
- &.active {
494
- background: rgba(195, 111, 110, 0.8);
495
- }
496
- }
497
- }
498
-
499
- .dice-container {
500
- margin-top: 0.75rem;
501
- }
502
-
503
- .isdl-dice-field {
504
- .inner-input {
505
- margin: 0;
506
- }
507
-
508
- .inner-content {
509
- padding: 4px;
510
- width: 100%;
511
- align-items: center;
512
- }
513
-
514
- // Style the inner controls
515
- .dice-number-input,
516
- .dice-type-select {
517
-
518
- // Remove extra padding/margins for nested plain variants
519
- .v-field {
520
- background: transparent !important;
521
- box-shadow: none !important;
522
- }
523
-
524
- // Align input content properly
525
- .v-field__input {
526
- align-items: center;
527
- padding: 0;
528
- }
529
- }
530
-
531
- // Fine-tune number input specifically
532
- .dice-number-input {
533
- .v-number-input__control {
534
- .v-btn {
535
- min-width: 24px;
536
- width: 24px;
537
- }
538
- }
539
- }
540
-
541
- .dice-type-select {
542
- .v-field__append-inner {
543
- padding: 0;
544
- align-self: center;
545
- }
546
- }
547
-
548
- // Styling for the container div
549
- .d-flex {
550
- min-height: 40px;
551
- }
552
- }
553
-
554
- .attributeExp {
555
- display: flex;
556
- flex-direction: column;
557
- border: 3px solid #333;
558
- border-radius: 4px;
559
- min-width: 75px;
560
-
561
- &.no-mod {
562
- max-height: 70px;
563
- }
564
-
565
- > label {
566
- justify-content: center;
567
- width: 100%;
568
- font-weight: bold;
569
- }
570
-
571
- .v-input {
572
- min-width: 100px;
573
- max-width: 100%;
574
- text-align: center;
575
- margin: 0;
576
- flex: unset;
577
- }
578
-
579
- .v-field__input {
580
- padding: 0 !important;
581
- }
582
-
583
- > .mod {
584
- font-size: 26px;
585
- font-weight: bold;
586
- margin: 10px 0;
587
- text-align: center;
588
- }
589
-
590
-
591
- }
592
-
593
- .dice-overlay {
594
- position: absolute;
595
- top: 0;
596
- left: 0;
597
- right: 0;
598
- bottom: 0;
599
- background: rgba(0, 0, 0, 0.2);
600
- backdrop-filter: blur(2px);
601
- display: flex;
602
- align-items: center;
603
- justify-content: center;
604
- cursor: pointer;
605
- border-radius: 4px;
606
- transition: all 0.2s ease-in-out;
607
- z-index: 10;
608
-
609
- &.plain {
610
- height: 100%;
611
- }
612
- }
613
-
614
- .dice-overlay:hover {
615
- background: rgba(0, 0, 0, 0.4);
616
- }
617
-
618
- .dice-roll-btn {
619
- transition: transform 0.2s ease-in-out;
620
- }
621
-
622
- .dice-overlay:hover .dice-roll-btn {
623
- transform: scale(1.1);
624
- }
625
-
626
- .dice-container {
627
- position: relative;
628
- }
629
-
630
- // Image-cell action affordance: reveal a circular action button over the row image on hover,
631
- // mirroring the attribute roll overlay. Pure CSS hover so it works per-row in a data table.
632
- .isdl-image-action {
633
- position: relative;
634
- display: inline-flex;
635
- cursor: pointer;
636
- border-radius: 4px;
637
-
638
- .isdl-image-action-overlay {
639
- position: absolute;
640
- inset: 0;
641
- display: flex;
642
- align-items: center;
643
- justify-content: center;
644
- background: rgba(0, 0, 0, 0.2);
645
- backdrop-filter: blur(2px);
646
- border-radius: 4px;
647
- opacity: 0;
648
- transition: opacity 0.15s ease-in-out;
649
- z-index: 10;
650
- }
651
-
652
- .isdl-image-action-btn {
653
- transition: transform 0.2s ease-in-out;
654
- }
655
-
656
- &:hover .isdl-image-action-overlay {
657
- opacity: 1;
658
- }
659
-
660
- &:hover .isdl-image-action-btn {
661
- transform: scale(1.1);
662
- }
663
- }
664
-
665
- .isdl-paperdoll {
666
- min-width: 307px;
667
- width: 307px;
668
- max-width: 307px;
669
- margin-top: 0.75rem;
670
-
671
- .paper-doll-container {
672
- position: relative;
673
- height: 275px;
674
- width: 275px;
675
- background-size: contain;
676
- background-repeat: no-repeat;
677
- }
678
-
679
- .paper-doll-slot {
680
- position: absolute;
681
- width: 40px;
682
- height: 40px;
683
- border: 2px dashed rgba(0, 0, 0, 0.5);
684
- background: rgba(255, 255, 255, 0.1);
685
- }
686
- }
687
-
688
- .isdl-datetime {
689
- input {
690
- border: none;
691
- height: 40px;
692
- padding-left: 16px;
693
- padding-right: 0px;
694
- }
695
- }
696
-
697
- .isdl-tracker {
698
- height: auto;
699
-
700
- .tracker-content {
701
- width: 100%;
702
- height: 100%;
703
- padding: 4px;
704
- min-height: 40px;
705
- justify-content: center;
706
-
707
- .tracker-inner-content {
708
- > * {
709
- align-self: center;
710
- width: 100%;
711
- }
712
- }
713
- }
714
-
715
- &.dial,
716
- &.clock {
717
- .tracker-content {
718
- min-height: 116px;
719
- }
720
- }
721
- }
722
-
723
- .isdl-damage-bonuses, .isdl-damage-resistances {
724
- flex: 1;
725
-
726
- .v-card-text {
727
- padding: 0;
728
- }
729
- }
730
-
731
- .isdl-boolean {
732
- .field-label {
733
- display: flex;
734
- align-items: center;
735
- font-weight: 500;
736
- }
737
- }
738
-
739
- .isdl-die {
740
-
741
- .field-label {
742
- display: flex;
743
- align-items: center;
744
- font-weight: 500;
745
- }
746
- }
747
-
748
- .isdl-string-method {
749
- .field-label {
750
- display: flex;
751
- align-items: center;
752
- font-weight: 500;
753
- }
754
- }
755
-
756
- .isdl-number {
757
- .field-label {
758
- display: flex;
759
- align-items: center;
760
- font-weight: 500;
761
- }
762
- }
763
-
764
- .isdl-string-choice {
765
- .field-label {
766
- display: flex;
767
- align-items: center;
768
- font-weight: 500;
769
- }
770
- }
771
-
772
- .isdl-parent-property-reference {
773
-
774
- .field-label {
775
- display: flex;
776
- align-items: center;
777
- font-weight: 500;
778
- }
779
- }
780
-
781
- .isdl-damage-track {
782
- padding: 4px 0;
783
-
784
- .damage-track-label {
785
- font-size: 0.75rem;
786
- font-weight: 500;
787
- opacity: 0.7;
788
- margin-bottom: 4px;
789
- }
790
-
791
- .damage-track-boxes {
792
- display: flex;
793
- flex-wrap: wrap;
794
- gap: 3px;
795
- margin-bottom: 4px;
796
- }
797
-
798
- .damage-box {
799
- width: 24px;
800
- height: 24px;
801
- border: 2px solid;
802
- border-radius: 3px;
803
- display: flex;
804
- align-items: center;
805
- justify-content: center;
806
- cursor: pointer;
807
- user-select: none;
808
- font-size: 0.8rem;
809
- font-weight: bold;
810
- line-height: 1;
811
- transition: background-color 0.15s, border-color 0.15s;
812
-
813
- &:hover {
814
- opacity: 0.8;
815
- }
816
-
817
- .damage-symbol {
818
- pointer-events: none;
819
- }
820
- }
821
-
822
- .damage-track-legend {
823
- display: flex;
824
- flex-wrap: wrap;
825
- gap: 8px;
826
- font-size: 0.7rem;
827
- opacity: 0.8;
828
- }
829
-
830
- .damage-legend-item {
831
- display: flex;
832
- align-items: center;
833
- gap: 3px;
834
- }
835
- }
836
-
837
- .isdl-money-denominations {
838
-
839
- > .v-input__control {
840
- > .v-field {
841
- > .v-field__append-inner {
842
- position: fixed;
843
- top: 8px;
844
- right: 0;
845
- z-index: 100;
846
- }
847
- }
848
- }
849
-
850
- .money-content {
851
- width: 100%;
852
- height: 100%;
853
- padding: 4px;
854
- min-height: 40px;
855
- justify-content: center;
856
-
857
- .money-inner-content {
858
- > * {
859
- align-self: center;
860
- width: 100%;
861
- }
862
- }
863
- }
864
- }
865
-
866
- .isdl-measured-template {
867
-
868
- > .v-input__control {
869
- > .v-field {
870
- > .v-field__append-inner {
871
- position: fixed;
872
- top: 8px;
873
- right: 0;
874
- z-index: 100;
875
- }
876
- }
877
- }
878
-
879
- .map-icon {
880
- cursor: pointer;
881
- transition: transform 0.3s ease;
882
- transform-origin: center;
883
- }
884
-
885
- .map-icon:hover {
886
- animation: mapUnfold 0.8s ease-in-out;
887
- }
888
-
889
- @keyframes mapUnfold {
890
- 0% {
891
- transform: scale(1) rotateY(0deg);
892
- }
893
-
894
- 25% {
895
- transform: scale(0.95) rotateY(-8deg) rotateX(5deg);
896
- }
897
-
898
- 50% {
899
- transform: scale(1.05) rotateY(3deg) rotateX(-2deg);
900
- }
901
-
902
- 75% {
903
- transform: scale(1.02) rotateY(-1deg) rotateX(1deg);
904
- }
905
-
906
- 100% {
907
- transform: scale(1) rotateY(0deg) rotateX(0deg);
908
- }
909
- }
910
-
911
- /* Gentle flutter when clicked */
912
- .map-icon:active {
913
- animation: mapFlutter 0.5s ease-in-out;
914
- }
915
-
916
- @keyframes mapFlutter {
917
-
918
- 0%,
919
- 100% {
920
- transform: scale(1) rotate(0deg);
921
- }
922
-
923
- 25% {
924
- transform: scale(1.02) rotate(-2deg) translateY(-1px);
925
- }
926
-
927
- 75% {
928
- transform: scale(1.02) rotate(2deg) translateY(-1px);
929
- }
930
- }
931
-
932
- .template-canvas {
933
- border: 1px solid #ccc;
934
- border-radius: 4px;
935
- background: #f8f9fa;
936
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
937
- }
938
- }
939
-
940
- .v-autocomplete {
941
- .v-field__input {
942
- input {
943
- border: none;
944
- background: none
945
- }
946
- }
947
- }
948
- }
949
-
950
- /* Keyword References */
951
- .keyword-reference {
952
- border: 2px outset whitesmoke;
953
- border-radius: 2px;
954
- cursor: pointer;
955
- padding: 0 2px;
956
- display: inline-block;
957
-
958
- i {
959
- margin-right: 4px;
960
- }
961
- }
962
-
963
- /* Journal System Documentation Styles */
964
- .isdl-journal-section {
965
- margin-bottom: 20px;
966
-
967
- .isdl-journal-description {
968
- margin-bottom: 12px;
969
- }
970
-
971
- .isdl-journal-info-box {
972
- background: #f5f5f5;
973
- padding: 8px;
974
- border-radius: 4px;
975
- font-size: 0.9em;
976
-
977
- .isdl-journal-info-title {
978
- font-weight: bold;
979
- margin-bottom: 4px;
980
- }
981
-
982
- .isdl-journal-info-list {
983
- margin: 4px 0 0 16px;
984
- padding: 0;
985
-
986
- li {
987
- margin-bottom: 2px;
988
- }
989
- }
990
- }
991
- }
992
-
993
- .isdl-journal-entry {
994
- border-left: 4px solid #666666;
995
- padding: 12px;
996
- margin-bottom: 16px;
997
- background: rgba(255, 255, 255, 0.05);
998
- border-radius: 0 4px 4px 0;
999
-
1000
- .isdl-journal-header {
1001
- display: flex;
1002
- align-items: center;
1003
- margin-bottom: 8px;
1004
-
1005
- .isdl-journal-icon {
1006
- margin-right: 8px;
1007
- font-size: 1.2em;
1008
- }
1009
-
1010
- .isdl-journal-title {
1011
- margin: 0 !important;
1012
- flex-grow: 0;
1013
- }
1014
-
1015
- .isdl-journal-badge {
1016
- margin-left: auto;
1017
- font-size: 0.8em;
1018
- padding: 2px 6px;
1019
- border-radius: 3px;
1020
- background: rgba(0, 0, 0, 0.1);
1021
- }
1022
- }
1023
-
1024
- .isdl-journal-description {
1025
- margin-bottom: 12px;
1026
-
1027
- p {
1028
- margin: 0;
1029
- }
1030
- }
1031
-
1032
- .isdl-journal-condition {
1033
- margin-bottom: 12px;
1034
- padding: 8px;
1035
- background: #f0f9ff;
1036
- border-left: 3px solid #0ea5e9;
1037
- border-radius: 4px;
1038
-
1039
- p {
1040
- margin: 0;
1041
- }
1042
-
1043
- .isdl-journal-condition-label {
1044
- font-weight: bold;
1045
- }
1046
- }
1047
-
1048
- .isdl-journal-technical-info {
1049
- margin-top: 12px;
1050
- padding: 8px;
1051
- background: #f8f9fa;
1052
- border-radius: 4px;
1053
- font-size: 0.85em;
1054
- color: #6b7280;
1055
-
1056
- .isdl-journal-death-note {
1057
- color: #dc2626;
1058
- font-weight: bold;
1059
- }
1060
- }
1061
- }
1062
-
1063
- // Specific styling for different entry types
1064
- .isdl-keyword-entry {
1065
- @extend .isdl-journal-entry;
1066
- }
1067
-
1068
- .isdl-damage-type-entry {
1069
- @extend .isdl-journal-entry;
1070
-
1071
- .isdl-journal-title {
1072
- color: inherit; // Will use the border color
1073
- }
1074
- }
1075
-
1076
- .isdl-status-effect-entry {
1077
- @extend .isdl-journal-entry;
1078
-
1079
- .isdl-status-effect-image {
1080
- width: 32px;
1081
- height: 32px;
1082
- margin-right: 8px;
1083
- border-radius: 4px;
1084
- object-fit: cover;
1085
- }
1086
-
1087
- .isdl-journal-title {
1088
- color: inherit; // Will use the border color
1089
- }
1090
- }
1091
-
1092
- // Inventory Component Styles
1093
- .isdl-inventory {
1094
- width: 100%;
1095
- max-width: 100%;
1096
- display: flex;
1097
- flex-direction: column;
1098
- gap: 8px;
1099
-
1100
- .inventory-header {
1101
- display: flex;
1102
- align-items: center;
1103
- justify-content: space-between;
1104
- padding: 8px 12px;
1105
- background: rgba(0, 0, 0, 0.05);
1106
- border-radius: 4px;
1107
-
1108
- .header-content {
1109
- display: flex;
1110
- align-items: center;
1111
- gap: 8px;
1112
- }
1113
-
1114
- .inventory-label {
1115
- font-weight: 600;
1116
- font-size: 14px;
1117
- }
1118
-
1119
- .inventory-count {
1120
- font-size: 12px;
1121
- color: rgba(0, 0, 0, 0.6);
1122
- font-weight: 500;
1123
- }
1124
- }
1125
-
1126
- .inventory-grid-container {
1127
- display: flex;
1128
- justify-content: center;
1129
- width: 100%;
1130
- background: rgba(0, 0, 0, 0.02);
1131
- border-radius: 4px;
1132
- padding: 12px;
1133
- overflow-x: auto;
1134
-
1135
- .inventory-grid {
1136
- display: grid;
1137
- gap: 8px;
1138
- width: 100%;
1139
- margin: 0 auto;
1140
- }
1141
- }
1142
-
1143
- .inventory-slot {
1144
- position: relative;
1145
- border: 2px solid rgba(0, 0, 0, 0.2);
1146
- border-radius: 4px;
1147
- overflow: hidden;
1148
- cursor: pointer;
1149
- background: rgba(255, 255, 255, 0.5);
1150
- display: flex;
1151
- align-items: center;
1152
- justify-content: center;
1153
- transition: all 0.2s ease;
1154
- box-sizing: border-box;
1155
-
1156
- &.empty {
1157
- background: rgba(0, 0, 0, 0.05);
1158
- border-style: dashed;
1159
- cursor: default;
1160
- }
1161
-
1162
- &.create-slot {
1163
- background: rgba(76, 175, 80, 0.1);
1164
- border-color: rgba(76, 175, 80, 0.4);
1165
- border-style: dashed;
1166
- cursor: pointer;
1167
-
1168
- .create-icon {
1169
- color: rgba(76, 175, 80, 0.7);
1170
- transition: all 0.2s ease;
1171
- }
1172
-
1173
- &:hover {
1174
- background: rgba(76, 175, 80, 0.2);
1175
- border-color: rgba(76, 175, 80, 0.6);
1176
- transform: scale(1.05);
1177
-
1178
- .create-icon {
1179
- color: rgba(76, 175, 80, 1);
1180
- }
1181
- }
1182
- }
1183
-
1184
- &.filled {
1185
- cursor: grab;
1186
-
1187
- &:active {
1188
- cursor: grabbing;
1189
- }
1190
-
1191
- &:hover {
1192
- border-color: rgba(0, 0, 0, 0.5);
1193
- transform: scale(1.05);
1194
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
1195
- z-index: 10;
1196
- }
1197
- }
1198
-
1199
- &.dragging {
1200
- opacity: 0.5;
1201
- transform: scale(0.95);
1202
- }
1203
-
1204
- .slot-image {
1205
- width: 100%;
1206
- height: 100%;
1207
- object-fit: cover;
1208
- display: block;
1209
- }
1210
-
1211
- .delete-button {
1212
- position: absolute;
1213
- top: 2px;
1214
- right: 2px;
1215
- background: rgba(244, 67, 54, 0.9);
1216
- color: white;
1217
- width: 18px;
1218
- height: 18px;
1219
- border-radius: 50%;
1220
- display: flex;
1221
- align-items: center;
1222
- justify-content: center;
1223
- cursor: pointer;
1224
- opacity: 0;
1225
- transition: all 0.2s ease;
1226
- z-index: 5;
1227
-
1228
- &:hover {
1229
- background: rgba(211, 47, 47, 1);
1230
- transform: scale(1.1);
1231
- }
1232
- }
1233
-
1234
- &.filled:hover .delete-button {
1235
- opacity: 1;
1236
- }
1237
-
1238
- .quantity-badge {
1239
- position: absolute;
1240
- bottom: 2px;
1241
- right: 2px;
1242
- background: rgba(0, 0, 0, 0.8);
1243
- color: white;
1244
- font-size: 10px;
1245
- font-weight: 700;
1246
- padding: 2px 4px;
1247
- border-radius: 3px;
1248
- line-height: 1;
1249
- min-width: 16px;
1250
- text-align: center;
1251
- }
1252
- }
1253
-
1254
- .inventory-footer {
1255
- padding: 12px;
1256
- background: rgba(0, 0, 0, 0.02);
1257
- border-radius: 4px;
1258
- display: flex;
1259
- flex-direction: column;
1260
- gap: 8px;
1261
-
1262
- .footer-divider {
1263
- margin-bottom: 4px;
1264
- }
1265
-
1266
- .inventory-stat {
1267
- display: flex;
1268
- align-items: flex-start;
1269
- justify-content: space-between;
1270
- gap: 16px;
1271
-
1272
- .stat-header {
1273
- display: flex;
1274
- align-items: center;
1275
- gap: 8px;
1276
- flex-shrink: 0;
1277
-
1278
- .stat-label {
1279
- font-weight: 600;
1280
- font-size: 13px;
1281
- white-space: nowrap;
1282
- }
1283
- }
1284
-
1285
- .stat-value-container {
1286
- flex: 1;
1287
- min-width: 0;
1288
- display: flex;
1289
- flex-direction: column;
1290
- align-items: flex-end;
1291
- gap: 4px;
1292
-
1293
- .capacity-progress {
1294
- width: 100%;
1295
- max-width: 200px;
1296
- }
1297
- }
1298
-
1299
- .stat-value {
1300
- font-weight: 700;
1301
- font-size: 14px;
1302
- white-space: nowrap;
1303
- text-align: right;
1304
-
1305
- .stat-max {
1306
- font-weight: 400;
1307
- color: rgba(0, 0, 0, 0.6);
1308
- }
1309
- }
1310
- }
1311
-
1312
- .money-display {
1313
- .stat-value {
1314
- color: #d4af37; // Gold color
1315
- }
1316
- }
1317
- }
1318
-
1319
- // Inventory tooltip styles
1320
- .inventory-tooltip {
1321
- max-width: 400px;
1322
- padding: 4px;
1323
-
1324
- .tooltip-title {
1325
- font-weight: 600;
1326
- font-size: 14px;
1327
- margin-bottom: 6px;
1328
- border-bottom: 1px solid rgba(255, 255, 255, 0.2);
1329
- padding-bottom: 4px;
1330
- }
1331
-
1332
- .tooltip-description {
1333
- font-size: 12px;
1334
- line-height: 1.4;
1335
- opacity: 0.9;
1336
- margin-bottom: 6px;
1337
-
1338
- // Style rich text content
1339
- p {
1340
- margin: 0;
1341
- margin-bottom: 4px;
1342
-
1343
- &:last-child {
1344
- margin-bottom: 0;
1345
- }
1346
- }
1347
-
1348
- strong {
1349
- font-weight: 600;
1350
- }
1351
-
1352
- em {
1353
- font-style: italic;
1354
- }
1355
- }
1356
-
1357
- .tooltip-properties {
1358
- margin-top: 6px;
1359
- padding-top: 6px;
1360
- border-top: 1px solid rgba(255, 255, 255, 0.1);
1361
- font-size: 11px;
1362
-
1363
- .tooltip-property {
1364
- display: flex;
1365
- justify-content: space-between;
1366
- align-items: center;
1367
- padding: 2px 0;
1368
-
1369
- .property-label {
1370
- opacity: 0.8;
1371
- margin-right: 8px;
1372
- }
1373
-
1374
- .property-value {
1375
- font-weight: 600;
1376
- opacity: 1;
1377
- }
1378
- }
1379
- }
1380
- }
1381
- }
1
+ @use "./backgrounds";
2
+
3
+ @mixin isdlStyles {
4
+
5
+ &.isdl-prompt,
6
+ .isdl-datatable {
7
+ .v-application__wrap {
8
+ min-height: 100%;
9
+ }
10
+ }
11
+
12
+ &.isdl-datatable {
13
+ color: black;
14
+ background-repeat: repeat;
15
+ @include backgrounds.topography;
16
+
17
+ > .window-content {
18
+ padding: 16px;
19
+ }
20
+
21
+ .custom-datatable {
22
+ table-layout: auto !important;
23
+ background: transparent;
24
+ }
25
+
26
+ .custom-datatable :deep(.v-data-table__table) {
27
+ width: auto !important;
28
+ table-layout: auto !important;
29
+ background: transparent;
30
+ }
31
+
32
+ .custom-datatable :deep(th) {
33
+ white-space: nowrap !important;
34
+ overflow: hidden;
35
+ text-overflow: ellipsis;
36
+ min-width: fit-content;
37
+ padding: 0 8px !important;
38
+ background: transparent;
39
+ }
40
+
41
+ .custom-datatable :deep(th .v-data-table__column-header) {
42
+ white-space: nowrap !important;
43
+ overflow: hidden;
44
+ text-overflow: ellipsis;
45
+ background: transparent;
46
+ }
47
+
48
+ .custom-datatable :deep(td) {
49
+ white-space: nowrap;
50
+ overflow: hidden;
51
+ text-overflow: ellipsis;
52
+ vertical-align: middle;
53
+ background: transparent;
54
+ }
55
+
56
+ .custom-datatable :deep(tr[draggable="true"]) {
57
+ cursor: grab;
58
+
59
+ &:active {
60
+ cursor: grabbing;
61
+ }
62
+
63
+ &.dragging {
64
+ opacity: 0.5;
65
+ }
66
+ }
67
+
68
+ /* Allow text columns to grow naturally but with reasonable limits */
69
+ .custom-datatable :deep(td .text-caption.text-truncate) {
70
+ white-space: nowrap;
71
+ overflow: hidden;
72
+ text-overflow: ellipsis;
73
+ min-width: 80px;
74
+ max-width: 300px;
75
+ }
76
+
77
+ .column-config-list {
78
+ max-height: 400px;
79
+ overflow-y: auto;
80
+ }
81
+
82
+ .column-config-item {
83
+ border: 1px solid transparent;
84
+ border-radius: 4px;
85
+ margin-bottom: 2px;
86
+ transition: all 0.2s ease;
87
+ }
88
+
89
+ .column-config-item:hover {
90
+ background-color: rgba(var(--v-theme-on-surface), 0.05);
91
+ border-color: rgba(var(--v-theme-primary), 0.2);
92
+ }
93
+
94
+ .column-config-item.dragging {
95
+ opacity: 0.5;
96
+ transform: scale(0.98);
97
+ }
98
+
99
+ .drag-handle:hover {
100
+ cursor: grabbing !important;
101
+ }
102
+ }
103
+
104
+ .v-input {
105
+ &:not(.document-name) {
106
+ .v-input__control {
107
+ background-color: #e9e9e9;
108
+ }
109
+ }
110
+ }
111
+
112
+ .v-alert__prepend {
113
+ padding-top: 8px;
114
+ }
115
+
116
+ .v-main > .v-container {
117
+ background-repeat: repeat;
118
+ @include backgrounds.topography;
119
+
120
+ &.edit-mode {
121
+ @include backgrounds.cogs;
122
+ }
123
+
124
+ &.dead {
125
+ @include backgrounds.skulls;
126
+ }
127
+
128
+ &.hideout {
129
+ @include backgrounds.hideout;
130
+ }
131
+
132
+ &.graphpaper {
133
+ @include backgrounds.graphpaper;
134
+ }
135
+
136
+ &.texture {
137
+ @include backgrounds.texture;
138
+ }
139
+
140
+ &.squares {
141
+ @include backgrounds.squares;
142
+ }
143
+
144
+ &.dominoes {
145
+ @include backgrounds.dominoes;
146
+ }
147
+
148
+ &.temple {
149
+ @include backgrounds.temple;
150
+ }
151
+
152
+ &.food {
153
+ @include backgrounds.food;
154
+ }
155
+
156
+ &.anchors {
157
+ @include backgrounds.anchors;
158
+ }
159
+
160
+ &.bubbles {
161
+ @include backgrounds.bubbles;
162
+ }
163
+
164
+ &.diamonds {
165
+ @include backgrounds.diamonds;
166
+ }
167
+
168
+ &.circuitboard {
169
+ @include backgrounds.circuitboard;
170
+ }
171
+
172
+ &.bricks {
173
+ @include backgrounds.bricks;
174
+ }
175
+
176
+ &.signal {
177
+ @include backgrounds.signal;
178
+ }
179
+ }
180
+
181
+ .v-container {
182
+ min-height: 0;
183
+ padding: 0;
184
+
185
+ > .v-window {
186
+ padding: 16px;
187
+ height: 100%;
188
+
189
+ > .v-window__container {
190
+ > .v-window-item {
191
+ height: 100%;
192
+ }
193
+ }
194
+ }
195
+ }
196
+
197
+ .v-slide-group__content {
198
+ > button {
199
+ width: unset;
200
+ }
201
+ }
202
+
203
+ .dt-body-center {
204
+ text-align: center;
205
+ }
206
+
207
+ .dt-buttons {
208
+ display: flex;
209
+ height: 52px;
210
+ align-items: center;
211
+ }
212
+
213
+ .dtr-control {
214
+ padding: 0;
215
+
216
+ > div {
217
+ > div {
218
+ display: flex;
219
+ }
220
+ }
221
+ }
222
+
223
+ .tabs-window {
224
+ height: 100%;
225
+
226
+ > .v-window__container {
227
+ height: 100%;
228
+ }
229
+
230
+ .dt-button-background {
231
+ display: none;
232
+ height: 0px;
233
+ }
234
+ }
235
+
236
+ .prose-mirror-wrapper {
237
+ background-color: #dddddd;
238
+ border: 1px solid #ccc;
239
+ border-radius: 4px;
240
+ box-shadow: inset 0px 0px 2px 0px black;
241
+ padding: 1rem;
242
+
243
+ .editor-menu {
244
+ color: black;
245
+ background: none;
246
+
247
+ i {
248
+ margin-right: 4px;
249
+ padding-left: 3px;
250
+ }
251
+ }
252
+
253
+ .toggle {
254
+ width: 30px;
255
+
256
+ > i {
257
+ padding-left: 4px;
258
+ }
259
+ }
260
+ }
261
+
262
+ .resource-card,
263
+ .tracker-card {
264
+ min-width: 300px;
265
+ margin-bottom: 1rem;
266
+ flex: 1;
267
+
268
+ .v-progress-linear__background {
269
+ opacity: 0.2;
270
+ }
271
+ }
272
+
273
+ .v-label {
274
+ color: black;
275
+ }
276
+
277
+ .v-field-label--floating {
278
+ font-size: 14px;
279
+ font-weight: bold;
280
+ }
281
+
282
+ .v-text-field {
283
+ .v-field__field {
284
+ input {
285
+ padding-left: 16px;
286
+ }
287
+ }
288
+ }
289
+
290
+ .v-number-input {
291
+ .v-field__input {
292
+ padding-left: 16px;
293
+ padding-top: 2px;
294
+ }
295
+
296
+ &.calculated-number {
297
+ .v-field__field {
298
+ margin-right: -36px;
299
+ }
300
+ }
301
+
302
+ .v-field__field {
303
+ input {
304
+ border: none;
305
+ }
306
+ }
307
+ }
308
+
309
+ .v-text-field {
310
+ .v-field__field {
311
+ input {
312
+ border: none;
313
+ }
314
+ }
315
+ }
316
+
317
+
318
+ .v-field__input {
319
+ height: 100%;
320
+ }
321
+
322
+ .v-field__field {
323
+ > input {
324
+ background: unset;
325
+ }
326
+ }
327
+
328
+ .v-col {
329
+ &.section {
330
+ min-width: 332px;
331
+ }
332
+ }
333
+
334
+ .v-row {
335
+ column-gap: 1rem;
336
+ height: auto;
337
+
338
+ > .v-col {
339
+ height: auto;
340
+ padding-left: 0;
341
+ padding-right: 0;
342
+ }
343
+ }
344
+
345
+ .isdl-datatable,
346
+ .datatable {
347
+ background: none;
348
+
349
+ > .v-card-title {
350
+ background: none;
351
+ }
352
+
353
+ table {
354
+ background: none;
355
+ }
356
+
357
+ thead {
358
+ background: rgba(0, 0, 0, 0.5);
359
+ color: var(--color-text-light-highlight);
360
+ text-shadow: 1px 1px var(--color-shadow-dark);
361
+ border-bottom: 1px solid var(--color-border-dark);
362
+ }
363
+ }
364
+
365
+ .v-input {
366
+ flex: 1;
367
+ min-width: 150px;
368
+ max-width: 600px;
369
+ margin-top: 0.75rem;
370
+
371
+ &.document-name {
372
+ margin: 0;
373
+ }
374
+
375
+ > .v-input__details {
376
+ display: none;
377
+ }
378
+ }
379
+
380
+
381
+ .isdl-html {
382
+ min-width: 300px;
383
+ max-width: 600px;
384
+ flex: 1;
385
+ }
386
+
387
+ // Description tab can be full width
388
+ .v-tabs-window-item {
389
+ .isdl-html {
390
+ max-width: unset;
391
+ }
392
+ }
393
+
394
+ .action-btn,
395
+ .isdl-property,
396
+ .isdl-single-document,
397
+ .single-wide {
398
+ flex: 1;
399
+ min-width: 150px;
400
+ max-width: 600px;
401
+ }
402
+
403
+ .action-btn {
404
+ margin-top: 12px;
405
+ height: 40px;
406
+ flex: 1;
407
+ padding: 0;
408
+ align-self: center;
409
+
410
+ .v-btn__content {
411
+ justify-content: left;
412
+ overflow: hidden;
413
+ text-overflow: ellipsis;
414
+ }
415
+ }
416
+
417
+ .isdl-tracker,
418
+ .double-wide {
419
+ min-width: 300px;
420
+ max-width: 600px;
421
+ flex: 2;
422
+
423
+ .slim-number {
424
+ font-size: 0.75rem;
425
+ }
426
+
427
+ .tracker-inner-content {
428
+ > .v-progress-linear {
429
+ border: 1px solid black;
430
+ }
431
+ }
432
+ }
433
+
434
+ .isdl-single-document {
435
+ margin-top: 0.75rem;
436
+ margin-bottom: 1rem;
437
+ max-width: 300px;
438
+ }
439
+
440
+ .v-card {
441
+ .v-card-text {
442
+ column-gap: 1rem;
443
+ }
444
+ }
445
+
446
+ .calc-button:hover {
447
+ background: rgba(50, 50, 50, 0.7);
448
+ }
449
+
450
+ .v-field,
451
+ .v-field__field {
452
+ z-index: 10;
453
+ }
454
+
455
+ .v-btn-group {
456
+ min-width: 300px;
457
+ }
458
+
459
+ .calculator {
460
+ position: absolute;
461
+ top: 50px;
462
+ left: 50px;
463
+ background: rgba(30, 30, 30, 0.8);
464
+ padding: 10px;
465
+ border-radius: 8px;
466
+ box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5);
467
+ backdrop-filter: blur(5px);
468
+ z-index: 20;
469
+
470
+ input {
471
+ width: 100%;
472
+ padding: 5px;
473
+ font-size: 14px;
474
+ border-radius: 4px;
475
+ border: none;
476
+ margin-bottom: 5px;
477
+ background-color: #dddddd;
478
+ }
479
+
480
+ .calc-buttons {
481
+ display: flex;
482
+ }
483
+
484
+ button {
485
+ background: rgba(255, 255, 255, 0.4);
486
+ border: none;
487
+ padding: 8px;
488
+ font-size: 16px;
489
+ margin: 2px;
490
+ cursor: pointer;
491
+ border-radius: 4px;
492
+
493
+ &.active {
494
+ background: rgba(195, 111, 110, 0.8);
495
+ }
496
+ }
497
+ }
498
+
499
+ .dice-container {
500
+ margin-top: 0.75rem;
501
+ }
502
+
503
+ .isdl-dice-field {
504
+ .inner-input {
505
+ margin: 0;
506
+ }
507
+
508
+ .inner-content {
509
+ padding: 4px;
510
+ width: 100%;
511
+ align-items: center;
512
+ }
513
+
514
+ // Style the inner controls
515
+ .dice-number-input,
516
+ .dice-type-select {
517
+
518
+ // Remove extra padding/margins for nested plain variants
519
+ .v-field {
520
+ background: transparent !important;
521
+ box-shadow: none !important;
522
+ }
523
+
524
+ // Align input content properly
525
+ .v-field__input {
526
+ align-items: center;
527
+ padding: 0;
528
+ }
529
+ }
530
+
531
+ // Fine-tune number input specifically
532
+ .dice-number-input {
533
+ .v-number-input__control {
534
+ .v-btn {
535
+ min-width: 24px;
536
+ width: 24px;
537
+ }
538
+ }
539
+ }
540
+
541
+ .dice-type-select {
542
+ .v-field__append-inner {
543
+ padding: 0;
544
+ align-self: center;
545
+ }
546
+ }
547
+
548
+ // Styling for the container div
549
+ .d-flex {
550
+ min-height: 40px;
551
+ }
552
+ }
553
+
554
+ .attributeExp {
555
+ display: flex;
556
+ flex-direction: column;
557
+ border: 3px solid #333;
558
+ border-radius: 4px;
559
+ min-width: 75px;
560
+
561
+ &.no-mod {
562
+ max-height: 70px;
563
+ }
564
+
565
+ > label {
566
+ justify-content: center;
567
+ width: 100%;
568
+ font-weight: bold;
569
+ }
570
+
571
+ .v-input {
572
+ min-width: 100px;
573
+ max-width: 100%;
574
+ text-align: center;
575
+ margin: 0;
576
+ flex: unset;
577
+ }
578
+
579
+ .v-field__input {
580
+ padding: 0 !important;
581
+ }
582
+
583
+ > .mod {
584
+ font-size: 26px;
585
+ font-weight: bold;
586
+ margin: 10px 0;
587
+ text-align: center;
588
+ }
589
+
590
+
591
+ }
592
+
593
+ .dice-overlay {
594
+ position: absolute;
595
+ top: 0;
596
+ left: 0;
597
+ right: 0;
598
+ bottom: 0;
599
+ background: rgba(0, 0, 0, 0.2);
600
+ backdrop-filter: blur(2px);
601
+ display: flex;
602
+ align-items: center;
603
+ justify-content: center;
604
+ cursor: pointer;
605
+ border-radius: 4px;
606
+ transition: all 0.2s ease-in-out;
607
+ z-index: 10;
608
+
609
+ &.plain {
610
+ height: 100%;
611
+ }
612
+ }
613
+
614
+ .dice-overlay:hover {
615
+ background: rgba(0, 0, 0, 0.4);
616
+ }
617
+
618
+ .dice-roll-btn {
619
+ transition: transform 0.2s ease-in-out;
620
+ }
621
+
622
+ .dice-overlay:hover .dice-roll-btn {
623
+ transform: scale(1.1);
624
+ }
625
+
626
+ .dice-container {
627
+ position: relative;
628
+ }
629
+
630
+ // Image-cell action affordance: reveal a circular action button over the row image on hover,
631
+ // mirroring the attribute roll overlay. Pure CSS hover so it works per-row in a data table.
632
+ .isdl-image-action {
633
+ position: relative;
634
+ display: inline-flex;
635
+ cursor: pointer;
636
+ border-radius: 4px;
637
+
638
+ .isdl-image-action-overlay {
639
+ position: absolute;
640
+ inset: 0;
641
+ display: flex;
642
+ align-items: center;
643
+ justify-content: center;
644
+ background: rgba(0, 0, 0, 0.2);
645
+ backdrop-filter: blur(2px);
646
+ border-radius: 4px;
647
+ opacity: 0;
648
+ transition: opacity 0.15s ease-in-out;
649
+ z-index: 10;
650
+ }
651
+
652
+ .isdl-image-action-btn {
653
+ transition: transform 0.2s ease-in-out;
654
+ }
655
+
656
+ &:hover .isdl-image-action-overlay {
657
+ opacity: 1;
658
+ }
659
+
660
+ &:hover .isdl-image-action-btn {
661
+ transform: scale(1.1);
662
+ }
663
+ }
664
+
665
+ .isdl-paperdoll {
666
+ min-width: 307px;
667
+ width: 307px;
668
+ max-width: 307px;
669
+ margin-top: 0.75rem;
670
+
671
+ .paper-doll-container {
672
+ position: relative;
673
+ height: 275px;
674
+ width: 275px;
675
+ background-size: contain;
676
+ background-repeat: no-repeat;
677
+ }
678
+
679
+ .paper-doll-slot {
680
+ position: absolute;
681
+ width: 40px;
682
+ height: 40px;
683
+ border: 2px dashed rgba(0, 0, 0, 0.5);
684
+ background: rgba(255, 255, 255, 0.1);
685
+ }
686
+ }
687
+
688
+ .isdl-datetime {
689
+ input {
690
+ border: none;
691
+ height: 40px;
692
+ padding-left: 16px;
693
+ padding-right: 0px;
694
+ }
695
+ }
696
+
697
+ .isdl-tracker {
698
+ height: auto;
699
+
700
+ .tracker-content {
701
+ width: 100%;
702
+ height: 100%;
703
+ padding: 4px;
704
+ min-height: 40px;
705
+ justify-content: center;
706
+
707
+ .tracker-inner-content {
708
+ > * {
709
+ align-self: center;
710
+ width: 100%;
711
+ }
712
+ }
713
+ }
714
+
715
+ &.dial,
716
+ &.clock {
717
+ .tracker-content {
718
+ min-height: 116px;
719
+ }
720
+ }
721
+ }
722
+
723
+ .isdl-damage-bonuses, .isdl-damage-resistances {
724
+ flex: 1;
725
+
726
+ .v-card-text {
727
+ padding: 0;
728
+ }
729
+ }
730
+
731
+ .isdl-boolean {
732
+ .field-label {
733
+ display: flex;
734
+ align-items: center;
735
+ font-weight: 500;
736
+ }
737
+ }
738
+
739
+ .isdl-die {
740
+
741
+ .field-label {
742
+ display: flex;
743
+ align-items: center;
744
+ font-weight: 500;
745
+ }
746
+ }
747
+
748
+ .isdl-string-method {
749
+ .field-label {
750
+ display: flex;
751
+ align-items: center;
752
+ font-weight: 500;
753
+ }
754
+ }
755
+
756
+ .isdl-number {
757
+ .field-label {
758
+ display: flex;
759
+ align-items: center;
760
+ font-weight: 500;
761
+ }
762
+ }
763
+
764
+ .isdl-string-choice {
765
+ .field-label {
766
+ display: flex;
767
+ align-items: center;
768
+ font-weight: 500;
769
+ }
770
+ }
771
+
772
+ .isdl-parent-property-reference {
773
+
774
+ .field-label {
775
+ display: flex;
776
+ align-items: center;
777
+ font-weight: 500;
778
+ }
779
+ }
780
+
781
+ .isdl-damage-track {
782
+ padding: 4px 0;
783
+
784
+ .damage-track-label {
785
+ font-size: 0.75rem;
786
+ font-weight: 500;
787
+ opacity: 0.7;
788
+ margin-bottom: 4px;
789
+ }
790
+
791
+ .damage-track-boxes {
792
+ display: flex;
793
+ flex-wrap: wrap;
794
+ gap: 3px;
795
+ margin-bottom: 4px;
796
+ }
797
+
798
+ .damage-box {
799
+ width: 24px;
800
+ height: 24px;
801
+ border: 2px solid;
802
+ border-radius: 3px;
803
+ display: flex;
804
+ align-items: center;
805
+ justify-content: center;
806
+ cursor: pointer;
807
+ user-select: none;
808
+ font-size: 0.8rem;
809
+ font-weight: bold;
810
+ line-height: 1;
811
+ transition: background-color 0.15s, border-color 0.15s;
812
+
813
+ &:hover {
814
+ opacity: 0.8;
815
+ }
816
+
817
+ .damage-symbol {
818
+ pointer-events: none;
819
+ }
820
+ }
821
+
822
+ .damage-track-legend {
823
+ display: flex;
824
+ flex-wrap: wrap;
825
+ gap: 8px;
826
+ font-size: 0.7rem;
827
+ opacity: 0.8;
828
+ }
829
+
830
+ .damage-legend-item {
831
+ display: flex;
832
+ align-items: center;
833
+ gap: 3px;
834
+ }
835
+ }
836
+
837
+ .isdl-money-denominations {
838
+
839
+ > .v-input__control {
840
+ > .v-field {
841
+ > .v-field__append-inner {
842
+ position: fixed;
843
+ top: 8px;
844
+ right: 0;
845
+ z-index: 100;
846
+ }
847
+ }
848
+ }
849
+
850
+ .money-content {
851
+ width: 100%;
852
+ height: 100%;
853
+ padding: 4px;
854
+ min-height: 40px;
855
+ justify-content: center;
856
+
857
+ .money-inner-content {
858
+ > * {
859
+ align-self: center;
860
+ width: 100%;
861
+ }
862
+ }
863
+ }
864
+ }
865
+
866
+ .isdl-measured-template {
867
+
868
+ > .v-input__control {
869
+ > .v-field {
870
+ > .v-field__append-inner {
871
+ position: fixed;
872
+ top: 8px;
873
+ right: 0;
874
+ z-index: 100;
875
+ }
876
+ }
877
+ }
878
+
879
+ .map-icon {
880
+ cursor: pointer;
881
+ transition: transform 0.3s ease;
882
+ transform-origin: center;
883
+ }
884
+
885
+ .map-icon:hover {
886
+ animation: mapUnfold 0.8s ease-in-out;
887
+ }
888
+
889
+ @keyframes mapUnfold {
890
+ 0% {
891
+ transform: scale(1) rotateY(0deg);
892
+ }
893
+
894
+ 25% {
895
+ transform: scale(0.95) rotateY(-8deg) rotateX(5deg);
896
+ }
897
+
898
+ 50% {
899
+ transform: scale(1.05) rotateY(3deg) rotateX(-2deg);
900
+ }
901
+
902
+ 75% {
903
+ transform: scale(1.02) rotateY(-1deg) rotateX(1deg);
904
+ }
905
+
906
+ 100% {
907
+ transform: scale(1) rotateY(0deg) rotateX(0deg);
908
+ }
909
+ }
910
+
911
+ /* Gentle flutter when clicked */
912
+ .map-icon:active {
913
+ animation: mapFlutter 0.5s ease-in-out;
914
+ }
915
+
916
+ @keyframes mapFlutter {
917
+
918
+ 0%,
919
+ 100% {
920
+ transform: scale(1) rotate(0deg);
921
+ }
922
+
923
+ 25% {
924
+ transform: scale(1.02) rotate(-2deg) translateY(-1px);
925
+ }
926
+
927
+ 75% {
928
+ transform: scale(1.02) rotate(2deg) translateY(-1px);
929
+ }
930
+ }
931
+
932
+ .template-canvas {
933
+ border: 1px solid #ccc;
934
+ border-radius: 4px;
935
+ background: #f8f9fa;
936
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
937
+ }
938
+ }
939
+
940
+ .v-autocomplete {
941
+ .v-field__input {
942
+ input {
943
+ border: none;
944
+ background: none
945
+ }
946
+ }
947
+ }
948
+
949
+ /* Roll Visualizer -- compact distribution preview for a dice formula */
950
+ .isdl-roll-visualizer {
951
+ display: flex;
952
+ flex-direction: column;
953
+ /* Floor so the graph is always meaningfully visible; can still grow taller to
954
+ fill a stretched cell (see the svg flex rule below). */
955
+ min-height: 140px;
956
+ margin: 8px 4px;
957
+ padding: 6px 10px;
958
+ /* Solid surface so the preview reads as a panel rather than blending into the
959
+ textured sheet background. */
960
+ background-color: rgb(var(--v-theme-surface));
961
+
962
+ .isdl-roll-visualizer__header {
963
+ flex: 0 0 auto;
964
+ display: flex;
965
+ justify-content: space-between;
966
+ align-items: baseline;
967
+ gap: 8px;
968
+ }
969
+
970
+ .isdl-roll-visualizer__label {
971
+ font-weight: 600;
972
+ font-size: 0.85rem;
973
+ }
974
+
975
+ .isdl-roll-visualizer__avg {
976
+ font-weight: 700;
977
+ font-size: 1.1rem;
978
+ line-height: 1;
979
+ }
980
+
981
+ /* The sparkline svg renders as a direct child (no .v-sparkline class). Let it grow
982
+ to fill any extra card height -- e.g. when stretched to match a taller sibling --
983
+ rather than sitting at a fixed small height. preserveAspectRatio="none" on the
984
+ sparkline lets it stretch vertically instead of letterboxing. */
985
+ > svg {
986
+ flex: 1 1 auto;
987
+ width: 100%;
988
+ min-height: 48px;
989
+ }
990
+
991
+ .isdl-roll-visualizer__empty {
992
+ flex: 1 1 auto;
993
+ opacity: 0.7;
994
+ padding: 8px 0;
995
+ }
996
+
997
+ .isdl-roll-visualizer__footer {
998
+ flex: 0 0 auto;
999
+ display: flex;
1000
+ justify-content: space-between;
1001
+ align-items: center;
1002
+ opacity: 0.85;
1003
+ gap: 8px;
1004
+ }
1005
+
1006
+ .isdl-roll-visualizer__approx {
1007
+ opacity: 0.7;
1008
+ font-style: italic;
1009
+ }
1010
+ }
1011
+ }
1012
+
1013
+ /* Keyword References */
1014
+ .keyword-reference {
1015
+ border: 2px outset whitesmoke;
1016
+ border-radius: 2px;
1017
+ cursor: pointer;
1018
+ padding: 0 2px;
1019
+ display: inline-block;
1020
+
1021
+ i {
1022
+ margin-right: 4px;
1023
+ }
1024
+ }
1025
+
1026
+ /* Journal System Documentation Styles */
1027
+ .isdl-journal-section {
1028
+ margin-bottom: 20px;
1029
+
1030
+ .isdl-journal-description {
1031
+ margin-bottom: 12px;
1032
+ }
1033
+
1034
+ .isdl-journal-info-box {
1035
+ background: #f5f5f5;
1036
+ padding: 8px;
1037
+ border-radius: 4px;
1038
+ font-size: 0.9em;
1039
+
1040
+ .isdl-journal-info-title {
1041
+ font-weight: bold;
1042
+ margin-bottom: 4px;
1043
+ }
1044
+
1045
+ .isdl-journal-info-list {
1046
+ margin: 4px 0 0 16px;
1047
+ padding: 0;
1048
+
1049
+ li {
1050
+ margin-bottom: 2px;
1051
+ }
1052
+ }
1053
+ }
1054
+ }
1055
+
1056
+ .isdl-journal-entry {
1057
+ border-left: 4px solid #666666;
1058
+ padding: 12px;
1059
+ margin-bottom: 16px;
1060
+ background: rgba(255, 255, 255, 0.05);
1061
+ border-radius: 0 4px 4px 0;
1062
+
1063
+ .isdl-journal-header {
1064
+ display: flex;
1065
+ align-items: center;
1066
+ margin-bottom: 8px;
1067
+
1068
+ .isdl-journal-icon {
1069
+ margin-right: 8px;
1070
+ font-size: 1.2em;
1071
+ }
1072
+
1073
+ .isdl-journal-title {
1074
+ margin: 0 !important;
1075
+ flex-grow: 0;
1076
+ }
1077
+
1078
+ .isdl-journal-badge {
1079
+ margin-left: auto;
1080
+ font-size: 0.8em;
1081
+ padding: 2px 6px;
1082
+ border-radius: 3px;
1083
+ background: rgba(0, 0, 0, 0.1);
1084
+ }
1085
+ }
1086
+
1087
+ .isdl-journal-description {
1088
+ margin-bottom: 12px;
1089
+
1090
+ p {
1091
+ margin: 0;
1092
+ }
1093
+ }
1094
+
1095
+ .isdl-journal-condition {
1096
+ margin-bottom: 12px;
1097
+ padding: 8px;
1098
+ background: #f0f9ff;
1099
+ border-left: 3px solid #0ea5e9;
1100
+ border-radius: 4px;
1101
+
1102
+ p {
1103
+ margin: 0;
1104
+ }
1105
+
1106
+ .isdl-journal-condition-label {
1107
+ font-weight: bold;
1108
+ }
1109
+ }
1110
+
1111
+ .isdl-journal-technical-info {
1112
+ margin-top: 12px;
1113
+ padding: 8px;
1114
+ background: #f8f9fa;
1115
+ border-radius: 4px;
1116
+ font-size: 0.85em;
1117
+ color: #6b7280;
1118
+
1119
+ .isdl-journal-death-note {
1120
+ color: #dc2626;
1121
+ font-weight: bold;
1122
+ }
1123
+ }
1124
+ }
1125
+
1126
+ // Specific styling for different entry types
1127
+ .isdl-keyword-entry {
1128
+ @extend .isdl-journal-entry;
1129
+ }
1130
+
1131
+ .isdl-damage-type-entry {
1132
+ @extend .isdl-journal-entry;
1133
+
1134
+ .isdl-journal-title {
1135
+ color: inherit; // Will use the border color
1136
+ }
1137
+ }
1138
+
1139
+ .isdl-status-effect-entry {
1140
+ @extend .isdl-journal-entry;
1141
+
1142
+ .isdl-status-effect-image {
1143
+ width: 32px;
1144
+ height: 32px;
1145
+ margin-right: 8px;
1146
+ border-radius: 4px;
1147
+ object-fit: cover;
1148
+ }
1149
+
1150
+ .isdl-journal-title {
1151
+ color: inherit; // Will use the border color
1152
+ }
1153
+ }
1154
+
1155
+ // Inventory Component Styles
1156
+ .isdl-inventory {
1157
+ width: 100%;
1158
+ max-width: 100%;
1159
+ display: flex;
1160
+ flex-direction: column;
1161
+ gap: 8px;
1162
+
1163
+ .inventory-header {
1164
+ display: flex;
1165
+ align-items: center;
1166
+ justify-content: space-between;
1167
+ padding: 8px 12px;
1168
+ background: rgba(0, 0, 0, 0.05);
1169
+ border-radius: 4px;
1170
+
1171
+ .header-content {
1172
+ display: flex;
1173
+ align-items: center;
1174
+ gap: 8px;
1175
+ }
1176
+
1177
+ .inventory-label {
1178
+ font-weight: 600;
1179
+ font-size: 14px;
1180
+ }
1181
+
1182
+ .inventory-count {
1183
+ font-size: 12px;
1184
+ color: rgba(0, 0, 0, 0.6);
1185
+ font-weight: 500;
1186
+ }
1187
+ }
1188
+
1189
+ .inventory-grid-container {
1190
+ display: flex;
1191
+ justify-content: center;
1192
+ width: 100%;
1193
+ background: rgba(0, 0, 0, 0.02);
1194
+ border-radius: 4px;
1195
+ padding: 12px;
1196
+ overflow-x: auto;
1197
+
1198
+ .inventory-grid {
1199
+ display: grid;
1200
+ gap: 8px;
1201
+ width: 100%;
1202
+ margin: 0 auto;
1203
+ }
1204
+ }
1205
+
1206
+ .inventory-slot {
1207
+ position: relative;
1208
+ border: 2px solid rgba(0, 0, 0, 0.2);
1209
+ border-radius: 4px;
1210
+ overflow: hidden;
1211
+ cursor: pointer;
1212
+ background: rgba(255, 255, 255, 0.5);
1213
+ display: flex;
1214
+ align-items: center;
1215
+ justify-content: center;
1216
+ transition: all 0.2s ease;
1217
+ box-sizing: border-box;
1218
+
1219
+ &.empty {
1220
+ background: rgba(0, 0, 0, 0.05);
1221
+ border-style: dashed;
1222
+ cursor: default;
1223
+ }
1224
+
1225
+ &.create-slot {
1226
+ background: rgba(76, 175, 80, 0.1);
1227
+ border-color: rgba(76, 175, 80, 0.4);
1228
+ border-style: dashed;
1229
+ cursor: pointer;
1230
+
1231
+ .create-icon {
1232
+ color: rgba(76, 175, 80, 0.7);
1233
+ transition: all 0.2s ease;
1234
+ }
1235
+
1236
+ &:hover {
1237
+ background: rgba(76, 175, 80, 0.2);
1238
+ border-color: rgba(76, 175, 80, 0.6);
1239
+ transform: scale(1.05);
1240
+
1241
+ .create-icon {
1242
+ color: rgba(76, 175, 80, 1);
1243
+ }
1244
+ }
1245
+ }
1246
+
1247
+ &.filled {
1248
+ cursor: grab;
1249
+
1250
+ &:active {
1251
+ cursor: grabbing;
1252
+ }
1253
+
1254
+ &:hover {
1255
+ border-color: rgba(0, 0, 0, 0.5);
1256
+ transform: scale(1.05);
1257
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
1258
+ z-index: 10;
1259
+ }
1260
+ }
1261
+
1262
+ &.dragging {
1263
+ opacity: 0.5;
1264
+ transform: scale(0.95);
1265
+ }
1266
+
1267
+ .slot-image {
1268
+ width: 100%;
1269
+ height: 100%;
1270
+ object-fit: cover;
1271
+ display: block;
1272
+ }
1273
+
1274
+ .delete-button {
1275
+ position: absolute;
1276
+ top: 2px;
1277
+ right: 2px;
1278
+ background: rgba(244, 67, 54, 0.9);
1279
+ color: white;
1280
+ width: 18px;
1281
+ height: 18px;
1282
+ border-radius: 50%;
1283
+ display: flex;
1284
+ align-items: center;
1285
+ justify-content: center;
1286
+ cursor: pointer;
1287
+ opacity: 0;
1288
+ transition: all 0.2s ease;
1289
+ z-index: 5;
1290
+
1291
+ &:hover {
1292
+ background: rgba(211, 47, 47, 1);
1293
+ transform: scale(1.1);
1294
+ }
1295
+ }
1296
+
1297
+ &.filled:hover .delete-button {
1298
+ opacity: 1;
1299
+ }
1300
+
1301
+ .quantity-badge {
1302
+ position: absolute;
1303
+ bottom: 2px;
1304
+ right: 2px;
1305
+ background: rgba(0, 0, 0, 0.8);
1306
+ color: white;
1307
+ font-size: 10px;
1308
+ font-weight: 700;
1309
+ padding: 2px 4px;
1310
+ border-radius: 3px;
1311
+ line-height: 1;
1312
+ min-width: 16px;
1313
+ text-align: center;
1314
+ }
1315
+ }
1316
+
1317
+ .inventory-footer {
1318
+ padding: 12px;
1319
+ background: rgba(0, 0, 0, 0.02);
1320
+ border-radius: 4px;
1321
+ display: flex;
1322
+ flex-direction: column;
1323
+ gap: 8px;
1324
+
1325
+ .footer-divider {
1326
+ margin-bottom: 4px;
1327
+ }
1328
+
1329
+ .inventory-stat {
1330
+ display: flex;
1331
+ align-items: flex-start;
1332
+ justify-content: space-between;
1333
+ gap: 16px;
1334
+
1335
+ .stat-header {
1336
+ display: flex;
1337
+ align-items: center;
1338
+ gap: 8px;
1339
+ flex-shrink: 0;
1340
+
1341
+ .stat-label {
1342
+ font-weight: 600;
1343
+ font-size: 13px;
1344
+ white-space: nowrap;
1345
+ }
1346
+ }
1347
+
1348
+ .stat-value-container {
1349
+ flex: 1;
1350
+ min-width: 0;
1351
+ display: flex;
1352
+ flex-direction: column;
1353
+ align-items: flex-end;
1354
+ gap: 4px;
1355
+
1356
+ .capacity-progress {
1357
+ width: 100%;
1358
+ max-width: 200px;
1359
+ }
1360
+ }
1361
+
1362
+ .stat-value {
1363
+ font-weight: 700;
1364
+ font-size: 14px;
1365
+ white-space: nowrap;
1366
+ text-align: right;
1367
+
1368
+ .stat-max {
1369
+ font-weight: 400;
1370
+ color: rgba(0, 0, 0, 0.6);
1371
+ }
1372
+ }
1373
+ }
1374
+
1375
+ .money-display {
1376
+ .stat-value {
1377
+ color: #d4af37; // Gold color
1378
+ }
1379
+ }
1380
+ }
1381
+
1382
+ // Inventory tooltip styles
1383
+ .inventory-tooltip {
1384
+ max-width: 400px;
1385
+ padding: 4px;
1386
+
1387
+ .tooltip-title {
1388
+ font-weight: 600;
1389
+ font-size: 14px;
1390
+ margin-bottom: 6px;
1391
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
1392
+ padding-bottom: 4px;
1393
+ }
1394
+
1395
+ .tooltip-description {
1396
+ font-size: 12px;
1397
+ line-height: 1.4;
1398
+ opacity: 0.9;
1399
+ margin-bottom: 6px;
1400
+
1401
+ // Style rich text content
1402
+ p {
1403
+ margin: 0;
1404
+ margin-bottom: 4px;
1405
+
1406
+ &:last-child {
1407
+ margin-bottom: 0;
1408
+ }
1409
+ }
1410
+
1411
+ strong {
1412
+ font-weight: 600;
1413
+ }
1414
+
1415
+ em {
1416
+ font-style: italic;
1417
+ }
1418
+ }
1419
+
1420
+ .tooltip-properties {
1421
+ margin-top: 6px;
1422
+ padding-top: 6px;
1423
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
1424
+ font-size: 11px;
1425
+
1426
+ .tooltip-property {
1427
+ display: flex;
1428
+ justify-content: space-between;
1429
+ align-items: center;
1430
+ padding: 2px 0;
1431
+
1432
+ .property-label {
1433
+ opacity: 0.8;
1434
+ margin-right: 8px;
1435
+ }
1436
+
1437
+ .property-value {
1438
+ font-weight: 600;
1439
+ opacity: 1;
1440
+ }
1441
+ }
1442
+ }
1443
+ }
1444
+ }