@meshmakers/octo-ui 3.3.610 → 3.3.630

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.
@@ -0,0 +1,4708 @@
1
+ @use "sass:color";
2
+ @use "variables" as *;
3
+ @use "lcars-flat-btn" as *;
4
+ @use "lcars-input" as *;
5
+ @use "lcars-button" as *;
6
+
7
+ @mixin styles {
8
+ // Direct dockview element overrides - needed because ViewEncapsulation blocks global styles
9
+ // These must be at the root level to properly cascade into the dockview library
10
+ .dv-dockview,
11
+ .dv-grid-view {
12
+ background-color: var(--deep-sea) !important;
13
+ }
14
+
15
+ .dv-tabs-container,
16
+ .dv-tabs-and-actions-container {
17
+ background-color: var(--iron-navy) !important;
18
+ border-bottom: 1px solid var(--octo-mint-20) !important;
19
+ }
20
+
21
+ .dv-tab {
22
+ background-color: var(--iron-navy) !important;
23
+ color: var(--ash-blue) !important;
24
+ font-family: "Montserrat", "Roboto", sans-serif !important;
25
+ font-weight: 500 !important;
26
+ text-transform: uppercase !important;
27
+ font-size: 11px !important;
28
+ letter-spacing: 0.5px !important;
29
+ transition: all 0.15s ease !important;
30
+ border: none !important;
31
+
32
+ &.dv-active-tab {
33
+ background-color: var(--surface-elevated) !important;
34
+ color: var(--octo-mint) !important;
35
+ border-bottom: 2px solid var(--octo-mint) !important;
36
+ }
37
+
38
+ &:hover:not(.dv-active-tab) {
39
+ background-color: var(--octo-mint-15) !important;
40
+ color: var(--octo-text-color) !important;
41
+ }
42
+ }
43
+
44
+ .dv-default-tab-action {
45
+ color: var(--ash-blue) !important;
46
+
47
+ &:hover {
48
+ color: var(--octo-mint) !important;
49
+ background-color: var(--octo-mint-20) !important;
50
+ }
51
+ }
52
+
53
+ .dv-groupview,
54
+ .dv-content-container {
55
+ background-color: var(--surface-elevated) !important;
56
+ }
57
+
58
+ .dv-sash {
59
+ background-color: var(--octo-mint-20) !important;
60
+
61
+ &:hover,
62
+ &.dv-active {
63
+ background-color: var(--octo-mint) !important;
64
+ box-shadow: 0 0 8px var(--octo-mint-50);
65
+ }
66
+ }
67
+
68
+ .dv-tabs-overflow-container {
69
+ background-color: var(--iron-navy) !important;
70
+ border: 1px solid var(--octo-mint-30) !important;
71
+ box-shadow:
72
+ 0 4px 20px rgba(0, 0, 0, 0.4),
73
+ 0 0 15px var(--octo-mint-10) !important;
74
+ }
75
+
76
+ // Dockview panel content areas
77
+ mm-elements-panel,
78
+ mm-symbols-panel,
79
+ mm-properties-panel,
80
+ mm-transform-panel,
81
+ mm-animations-panel,
82
+ mm-simulation-panel-wrapper,
83
+ mm-settings-panel,
84
+ mm-exposures-panel,
85
+ mm-styles-panel {
86
+ display: flex !important;
87
+ flex-direction: column !important;
88
+ height: 100% !important;
89
+ background: var(--surface-elevated) !important;
90
+ color: var(--octo-text-color) !important;
91
+ }
92
+
93
+ // Styles Panel LCARS theming (overrides library defaults)
94
+ // Use ::ng-deep to penetrate Angular's ViewEncapsulation
95
+ ::ng-deep mm-styles-panel {
96
+ .panel-container {
97
+ background: var(--surface-elevated) !important;
98
+ overflow-y: auto !important;
99
+ min-height: 0 !important;
100
+ }
101
+
102
+ .panel-toolbar {
103
+ border-bottom-color: var(--octo-mint-20) !important;
104
+ flex-shrink: 0 !important;
105
+ }
106
+
107
+ .style-list {
108
+ flex: 0 0 auto !important;
109
+ }
110
+
111
+ .style-editor {
112
+ flex: 0 0 auto !important;
113
+ }
114
+
115
+ .panel-footer {
116
+ flex-shrink: 0 !important;
117
+ }
118
+
119
+ .add-button {
120
+ background: var(--iron-navy) !important;
121
+ border-color: var(--octo-mint-30) !important;
122
+ color: var(--ash-blue) !important;
123
+
124
+ &:hover {
125
+ background: var(--octo-mint-15) !important;
126
+ border-color: var(--octo-mint) !important;
127
+ color: var(--octo-mint) !important;
128
+ }
129
+ }
130
+
131
+ .style-item {
132
+ background: var(--surface-elevated) !important;
133
+ border-color: var(--octo-mint-20) !important;
134
+
135
+ &:hover {
136
+ background: var(--iron-navy) !important;
137
+ border-color: var(--octo-mint) !important;
138
+ }
139
+
140
+ &.selected {
141
+ background: var(--octo-mint-15) !important;
142
+ border-color: var(--octo-mint) !important;
143
+ }
144
+ }
145
+
146
+ .style-name {
147
+ color: var(--octo-text-color) !important;
148
+ }
149
+
150
+ .delete-button {
151
+ color: var(--ash-blue) !important;
152
+
153
+ &:hover {
154
+ background: var(--bubblegum-20) !important;
155
+ color: var(--bubblegum) !important;
156
+ }
157
+ }
158
+
159
+ .empty-state {
160
+ color: var(--ash-blue) !important;
161
+ }
162
+
163
+ .style-editor {
164
+ background: var(--iron-navy) !important;
165
+ border-top-color: var(--octo-mint-20) !important;
166
+ }
167
+
168
+ .editor-section h4 {
169
+ color: var(--ash-blue) !important;
170
+ }
171
+
172
+ .form-group {
173
+ label {
174
+ color: var(--ash-blue) !important;
175
+ }
176
+ input[type="text"],
177
+ input[type="number"] {
178
+ @include lcars-input;
179
+ }
180
+ input[type="color"] {
181
+ border-color: var(--octo-mint-30) !important;
182
+ }
183
+ }
184
+ .line-type-select {
185
+ @include lcars-input;
186
+ }
187
+
188
+ .line-preview {
189
+ background: var(--deep-sea) !important;
190
+ border-color: var(--octo-mint-30) !important;
191
+ }
192
+
193
+ .opacity-value {
194
+ color: var(--ash-blue) !important;
195
+ }
196
+
197
+ .panel-footer {
198
+ background: var(--iron-navy) !important;
199
+ border-top-color: var(--octo-mint-20) !important;
200
+
201
+ .hint {
202
+ color: var(--ash-blue-70) !important;
203
+ }
204
+ }
205
+ }
206
+
207
+ // Element Palette styling (inside dockview panels)
208
+ .element-palette,
209
+ .symbols-palette {
210
+ background: var(--surface-elevated) !important;
211
+
212
+ .palette-search input {
213
+ @include lcars-input;
214
+ &::placeholder {
215
+ color: var(--ash-blue) !important;
216
+ }
217
+ }
218
+
219
+ .palette-content {
220
+ background: var(--surface-elevated) !important;
221
+ }
222
+
223
+ .palette-category {
224
+ background: transparent !important;
225
+ border-bottom: 1px solid var(--octo-mint-10) !important;
226
+
227
+ .category-header {
228
+ background: var(--iron-navy-50) !important;
229
+ color: var(--ash-blue) !important;
230
+ font-family: "Montserrat", "Roboto", sans-serif !important;
231
+ font-size: 11px !important;
232
+ text-transform: uppercase !important;
233
+ letter-spacing: 0.5px !important;
234
+ padding: 8px 12px !important;
235
+ cursor: pointer;
236
+ transition: all 0.15s ease;
237
+
238
+ &:hover {
239
+ background: var(--octo-mint-10) !important;
240
+ color: var(--octo-text-color) !important;
241
+ }
242
+
243
+ .category-icon {
244
+ color: var(--ash-blue) !important;
245
+ }
246
+
247
+ .category-name {
248
+ color: inherit !important;
249
+ }
250
+
251
+ .category-count {
252
+ color: var(--ash-blue-70) !important;
253
+ }
254
+ }
255
+
256
+ .category-elements {
257
+ background: var(--surface-elevated) !important;
258
+ padding: 8px !important;
259
+ }
260
+ }
261
+
262
+ .palette-element {
263
+ background: var(--iron-navy-50) !important;
264
+ border: 1px solid var(--octo-mint-15) !important;
265
+ border-radius: 4px !important;
266
+ color: var(--octo-text-color) !important;
267
+ transition: all 0.15s ease !important;
268
+ cursor: pointer;
269
+
270
+ &:hover {
271
+ background: var(--octo-mint-15) !important;
272
+ border-color: var(--octo-mint-40) !important;
273
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2) !important;
274
+ }
275
+
276
+ .element-preview {
277
+ svg {
278
+ stroke: var(--octo-mint) !important;
279
+ fill: none !important;
280
+ }
281
+ }
282
+
283
+ .element-label {
284
+ color: var(--ash-blue) !important;
285
+ font-size: 10px !important;
286
+ text-transform: uppercase !important;
287
+ }
288
+ }
289
+ }
290
+
291
+ // Property Inspector styling
292
+ .property-inspector {
293
+ background: var(--surface-elevated) !important;
294
+
295
+ .inspector-content {
296
+ background: var(--surface-elevated) !important;
297
+ color: var(--octo-text-color) !important;
298
+ }
299
+
300
+ .no-selection,
301
+ .multi-selection {
302
+ color: var(--ash-blue) !important;
303
+ font-family: "Montserrat", "Roboto", sans-serif !important;
304
+
305
+ .hint {
306
+ color: var(--ash-blue-70) !important;
307
+ }
308
+ }
309
+
310
+ // Section headers
311
+ .section-header {
312
+ color: var(--octo-mint) !important;
313
+ border-bottom-color: var(--octo-mint-20) !important;
314
+ font-family: "Montserrat", "Roboto", sans-serif !important;
315
+ }
316
+
317
+ // Labels
318
+ .property-row label {
319
+ color: var(--ash-blue) !important;
320
+ }
321
+
322
+ // Text inputs, number inputs, selects
323
+ .property-row input[type="text"],
324
+ .property-row input[type="number"],
325
+ .property-row select,
326
+ .style-class-select,
327
+ .line-type-select {
328
+ @include lcars-input;
329
+ }
330
+
331
+ .property-row select option,
332
+ .style-class-select option,
333
+ .line-type-select option {
334
+ background: var(--deep-sea) !important;
335
+ color: var(--octo-text-color) !important;
336
+ }
337
+
338
+ // Checkboxes
339
+ .property-row input[type="checkbox"] {
340
+ accent-color: var(--octo-mint) !important;
341
+ }
342
+
343
+ // Color inputs
344
+ .property-row input[type="color"] {
345
+ background: var(--deep-sea) !important;
346
+ border: 1px solid var(--octo-mint-30) !important;
347
+ border-radius: 4px !important;
348
+ }
349
+
350
+ // Type badge
351
+ .type-badge {
352
+ background: var(--octo-mint-15) !important;
353
+ color: var(--octo-mint) !important;
354
+ border: 1px solid var(--octo-mint-30) !important;
355
+ }
356
+
357
+ // Opacity value text
358
+ .opacity-value {
359
+ color: var(--ash-blue) !important;
360
+ }
361
+
362
+ // Info values
363
+ .info-value {
364
+ color: var(--octo-text-color) !important;
365
+ }
366
+
367
+ // Line preview
368
+ .line-preview {
369
+ background: var(--iron-navy) !important;
370
+ border-color: var(--octo-mint-20) !important;
371
+ }
372
+
373
+ // Opacity slider
374
+ .opacity-slider {
375
+ background: linear-gradient(
376
+ to right,
377
+ transparent,
378
+ var(--octo-mint)
379
+ ) !important;
380
+
381
+ &::-webkit-slider-thumb {
382
+ background: var(--octo-mint) !important;
383
+ border-color: var(--surface-elevated) !important;
384
+ }
385
+
386
+ &::-moz-range-thumb {
387
+ background: var(--octo-mint) !important;
388
+ border-color: var(--surface-elevated) !important;
389
+ }
390
+ }
391
+
392
+ // Image preview container
393
+ .image-preview-container {
394
+ background: var(--iron-navy) !important;
395
+ border-color: var(--octo-mint-20) !important;
396
+ }
397
+
398
+ // File upload button
399
+ .file-upload-button {
400
+ background: linear-gradient(
401
+ 180deg,
402
+ var(--octo-mint-15),
403
+ var(--octo-mint-05)
404
+ ) !important;
405
+ border: 1px solid var(--octo-mint-30) !important;
406
+ color: var(--octo-mint) !important;
407
+
408
+ &:hover {
409
+ background: linear-gradient(
410
+ 180deg,
411
+ var(--octo-mint-25),
412
+ var(--octo-mint-15)
413
+ ) !important;
414
+ border-color: var(--octo-mint) !important;
415
+ }
416
+ }
417
+
418
+ .file-type-hint {
419
+ color: var(--ash-blue-70) !important;
420
+ }
421
+
422
+ // Exposed properties
423
+ .exposed-property label {
424
+ color: var(--octo-text-color) !important;
425
+ }
426
+
427
+ .default-value {
428
+ color: var(--ash-blue) !important;
429
+ }
430
+
431
+ .exposed-hint {
432
+ color: var(--ash-blue-70) !important;
433
+ }
434
+ }
435
+
436
+ // Animation Editor styling
437
+ .animation-editor {
438
+ background: var(--surface-elevated) !important;
439
+
440
+ .editor-toolbar {
441
+ background: var(--iron-navy) !important;
442
+ border-bottom: 1px solid var(--octo-mint-20) !important;
443
+ }
444
+
445
+ .section-content {
446
+ background: var(--surface-elevated) !important;
447
+ }
448
+
449
+ .empty-state {
450
+ color: var(--ash-blue) !important;
451
+
452
+ button {
453
+ background: linear-gradient(
454
+ 180deg,
455
+ var(--octo-mint-15),
456
+ var(--octo-mint-05)
457
+ ) !important;
458
+ border: 1px solid var(--octo-mint-30) !important;
459
+ color: var(--octo-mint) !important;
460
+
461
+ &:hover {
462
+ background: linear-gradient(
463
+ 180deg,
464
+ var(--octo-mint-25),
465
+ var(--octo-mint-15)
466
+ ) !important;
467
+ border-color: var(--octo-mint) !important;
468
+ }
469
+ }
470
+ }
471
+
472
+ // Animation items
473
+ .animation-item {
474
+ background: var(--iron-navy-50) !important;
475
+ border-color: var(--octo-mint-15) !important;
476
+
477
+ &:hover {
478
+ background: var(--iron-navy-70) !important;
479
+ }
480
+
481
+ &.expanded {
482
+ border-color: var(--octo-mint-30) !important;
483
+ }
484
+ }
485
+
486
+ .item-header {
487
+ color: var(--octo-text-color) !important;
488
+
489
+ &:hover {
490
+ background: var(--octo-mint-10) !important;
491
+ }
492
+ }
493
+
494
+ .item-info {
495
+ color: var(--ash-blue) !important;
496
+ }
497
+
498
+ // Action buttons - always visible, not just on hover
499
+ .item-actions {
500
+ opacity: 1 !important;
501
+
502
+ .k-button {
503
+ background: transparent !important;
504
+ border: none !important;
505
+ color: var(--ash-blue) !important;
506
+
507
+ &:hover {
508
+ color: var(--octo-mint) !important;
509
+ background: var(--octo-mint-10) !important;
510
+ }
511
+
512
+ .k-svg-icon,
513
+ .k-icon {
514
+ color: inherit !important;
515
+ }
516
+ }
517
+
518
+ // Delete button with red/pink accent on hover
519
+ .k-button:last-child:hover {
520
+ color: #ec658f !important;
521
+ background: var(--bubblegum-10) !important;
522
+ }
523
+ }
524
+
525
+ // Edit form
526
+ .item-edit-form {
527
+ background: var(--iron-navy) !important;
528
+ border-top-color: var(--octo-mint-20) !important;
529
+ }
530
+
531
+ .form-row label {
532
+ color: var(--ash-blue) !important;
533
+ }
534
+
535
+ .form-row.hint-row {
536
+ background: var(--octo-mint-10) !important;
537
+ }
538
+
539
+ .hint-text {
540
+ color: var(--octo-mint) !important;
541
+ }
542
+
543
+ .input-with-unit .unit {
544
+ color: var(--ash-blue) !important;
545
+ }
546
+
547
+ // Anchor grid
548
+ .anchor-point {
549
+ background: var(--deep-sea) !important;
550
+ border-color: var(--octo-mint-30) !important;
551
+
552
+ &:hover {
553
+ border-color: var(--octo-mint) !important;
554
+ }
555
+
556
+ &.selected {
557
+ border-color: var(--octo-mint) !important;
558
+ background: var(--octo-mint-20) !important;
559
+ }
560
+ }
561
+
562
+ .anchor-dot {
563
+ background: var(--ash-blue) !important;
564
+ }
565
+
566
+ .anchor-point.selected .anchor-dot {
567
+ background: var(--octo-mint) !important;
568
+ }
569
+
570
+ // Preset picker
571
+ .preset-picker {
572
+ background: var(--surface-elevated) !important;
573
+ border-color: var(--octo-mint) !important;
574
+ }
575
+
576
+ .preset-header {
577
+ background: var(--octo-mint-15) !important;
578
+ border-bottom-color: var(--octo-mint-30) !important;
579
+ color: var(--octo-text-color) !important;
580
+ }
581
+
582
+ .group-name {
583
+ color: var(--ash-blue) !important;
584
+ }
585
+
586
+ .preset-button {
587
+ background: var(--deep-sea) !important;
588
+ border-color: var(--octo-mint-30) !important;
589
+ color: var(--octo-text-color) !important;
590
+
591
+ &:hover {
592
+ border-color: var(--octo-mint) !important;
593
+ background: var(--octo-mint-15) !important;
594
+ }
595
+ }
596
+
597
+ // Path textarea
598
+ .path-textarea {
599
+ background: var(--deep-sea) !important;
600
+ border-color: var(--octo-mint-30) !important;
601
+ color: var(--octo-text-color) !important;
602
+
603
+ &:focus {
604
+ border-color: var(--octo-mint) !important;
605
+ outline: none !important;
606
+ }
607
+ }
608
+ }
609
+
610
+ // Transform Property Editor (Exposures Panel) styling
611
+ .transform-property-editor {
612
+ background: var(--surface-elevated) !important;
613
+
614
+ .editor-toolbar {
615
+ background: var(--iron-navy) !important;
616
+ border-bottom: 1px solid var(--octo-mint-20) !important;
617
+ }
618
+
619
+ .properties-list {
620
+ background: var(--surface-elevated) !important;
621
+ }
622
+
623
+ .empty-state {
624
+ color: var(--ash-blue) !important;
625
+
626
+ .hint {
627
+ color: var(--ash-blue-70) !important;
628
+ }
629
+ }
630
+
631
+ // Property cards
632
+ .property-card {
633
+ background: var(--iron-navy) !important;
634
+ border: 1px solid var(--octo-mint-20) !important;
635
+ border-radius: 8px !important;
636
+
637
+ &:hover {
638
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;
639
+ }
640
+
641
+ &.editing {
642
+ border-color: var(--octo-mint) !important;
643
+ box-shadow: 0 2px 8px var(--octo-mint-20) !important;
644
+ }
645
+ }
646
+
647
+ .property-name {
648
+ color: var(--octo-text-color) !important;
649
+ }
650
+
651
+ .property-type-badge {
652
+ background: var(--octo-mint-15) !important;
653
+ color: var(--octo-mint) !important;
654
+ }
655
+
656
+ .property-unit {
657
+ color: var(--ash-blue) !important;
658
+ }
659
+
660
+ .property-details {
661
+ color: var(--ash-blue) !important;
662
+ }
663
+
664
+ .bindings-count {
665
+ background: var(--octo-mint-10) !important;
666
+ color: var(--ash-blue) !important;
667
+ }
668
+
669
+ .property-description {
670
+ color: var(--ash-blue-70) !important;
671
+ }
672
+
673
+ .color-swatch {
674
+ border-color: var(--octo-mint-30) !important;
675
+ }
676
+
677
+ // Edit form
678
+ .property-edit-form {
679
+ background: var(--iron-navy) !important;
680
+
681
+ .form-row label {
682
+ color: var(--ash-blue) !important;
683
+ }
684
+
685
+ .form-row input[type="text"],
686
+ .form-row input[type="number"],
687
+ .form-row select {
688
+ background: var(--deep-sea) !important;
689
+ border: 1px solid var(--octo-mint-30) !important;
690
+ color: var(--octo-text-color) !important;
691
+
692
+ &:focus {
693
+ border-color: var(--octo-mint) !important;
694
+ box-shadow: var(--lcars-input-focus) !important;
695
+ outline: none !important;
696
+ }
697
+
698
+ option {
699
+ background: var(--deep-sea) !important;
700
+ color: var(--octo-text-color) !important;
701
+ }
702
+ }
703
+
704
+ .form-row input[type="color"] {
705
+ background: var(--deep-sea) !important;
706
+ border: 1px solid var(--octo-mint-30) !important;
707
+ }
708
+
709
+ .form-row input[type="checkbox"] {
710
+ accent-color: var(--octo-mint) !important;
711
+ }
712
+
713
+ .form-actions {
714
+ border-top-color: var(--octo-mint-20) !important;
715
+ }
716
+ }
717
+ }
718
+
719
+ // Simulation Panel styling
720
+ .simulation-panel {
721
+ background: var(--surface-elevated) !important;
722
+
723
+ .panel-toolbar {
724
+ background: var(--iron-navy) !important;
725
+ border-bottom: 1px solid var(--octo-mint-20) !important;
726
+
727
+ .k-button {
728
+ color: var(--ash-blue) !important;
729
+
730
+ &:hover {
731
+ color: var(--octo-mint) !important;
732
+ background: var(--octo-mint-10) !important;
733
+ }
734
+ }
735
+ }
736
+
737
+ .panel-content {
738
+ background: var(--surface-elevated) !important;
739
+ }
740
+
741
+ // Property control cards
742
+ .property-control {
743
+ background: var(--iron-navy) !important;
744
+ border: 1px solid var(--octo-mint-20) !important;
745
+
746
+ &:hover {
747
+ border-color: var(--octo-mint-40) !important;
748
+ }
749
+ }
750
+
751
+ .control-header {
752
+ .property-name {
753
+ color: var(--octo-text-color) !important;
754
+ }
755
+
756
+ .property-unit {
757
+ color: var(--ash-blue) !important;
758
+ }
759
+ }
760
+
761
+ // Number control (slider + input)
762
+ .number-control {
763
+ .value-slider {
764
+ background: linear-gradient(
765
+ to right,
766
+ var(--octo-mint-20),
767
+ var(--octo-mint)
768
+ ) !important;
769
+
770
+ &::-webkit-slider-thumb {
771
+ background: var(--octo-mint) !important;
772
+ border-color: var(--deep-sea) !important;
773
+ box-shadow: 0 0 8px var(--octo-mint-50) !important;
774
+ }
775
+
776
+ &::-moz-range-thumb {
777
+ background: var(--octo-mint) !important;
778
+ border-color: var(--deep-sea) !important;
779
+ box-shadow: 0 0 8px var(--octo-mint-50) !important;
780
+ }
781
+ }
782
+
783
+ .value-input {
784
+ background: var(--deep-sea) !important;
785
+ border: 1px solid var(--octo-mint-30) !important;
786
+ color: var(--octo-text-color) !important;
787
+
788
+ &:focus {
789
+ border-color: var(--octo-mint) !important;
790
+ box-shadow: var(--lcars-input-focus) !important;
791
+ }
792
+ }
793
+ }
794
+
795
+ .value-range {
796
+ color: var(--ash-blue) !important;
797
+ }
798
+
799
+ // Color control
800
+ .color-control {
801
+ input[type="color"] {
802
+ border-color: var(--octo-mint-30) !important;
803
+ }
804
+
805
+ .color-input {
806
+ background: var(--deep-sea) !important;
807
+ border: 1px solid var(--octo-mint-30) !important;
808
+ color: var(--octo-mint) !important;
809
+
810
+ &:focus {
811
+ border-color: var(--octo-mint) !important;
812
+ }
813
+ }
814
+ }
815
+
816
+ // Boolean control
817
+ .boolean-control {
818
+ .toggle-label input[type="checkbox"] {
819
+ accent-color: var(--octo-mint) !important;
820
+ }
821
+
822
+ .toggle-text {
823
+ color: var(--ash-blue) !important;
824
+ }
825
+ }
826
+
827
+ // String control
828
+ .string-control input {
829
+ background: var(--deep-sea) !important;
830
+ border: 1px solid var(--octo-mint-30) !important;
831
+ color: var(--octo-text-color) !important;
832
+
833
+ &:focus {
834
+ border-color: var(--octo-mint) !important;
835
+ box-shadow: var(--lcars-input-focus) !important;
836
+ }
837
+ }
838
+
839
+ // Reset button - always visible
840
+ .reset-button {
841
+ opacity: 1 !important;
842
+ color: var(--ash-blue) !important;
843
+
844
+ &:hover {
845
+ color: var(--octo-mint) !important;
846
+ background: var(--octo-mint-10) !important;
847
+ }
848
+ }
849
+ }
850
+
851
+ // Styles Panel styling - CSS variables are now set globally in :root
852
+
853
+ // Settings Panel styling
854
+ .panel-container {
855
+ background: var(--surface-elevated) !important;
856
+
857
+ .settings-section {
858
+ border-bottom-color: var(--octo-mint-20) !important;
859
+
860
+ h4 {
861
+ color: var(--octo-mint) !important;
862
+ }
863
+ }
864
+
865
+ .form-group {
866
+ label {
867
+ color: var(--ash-blue) !important;
868
+ }
869
+
870
+ input,
871
+ textarea {
872
+ background: var(--deep-sea) !important;
873
+ border: 1px solid var(--octo-mint-30) !important;
874
+ color: var(--octo-text-color) !important;
875
+
876
+ &::placeholder {
877
+ color: var(--ash-blue) !important;
878
+ }
879
+
880
+ &:focus {
881
+ border-color: var(--octo-mint) !important;
882
+ box-shadow: var(--lcars-input-focus) !important;
883
+ }
884
+ }
885
+
886
+ // Kendo TextBox
887
+ .k-textbox,
888
+ .k-input {
889
+ background: var(--deep-sea) !important;
890
+ border-color: var(--octo-mint-30) !important;
891
+ color: var(--octo-text-color) !important;
892
+ }
893
+
894
+ // Kendo NumericTextBox
895
+ .k-numerictextbox,
896
+ kendo-numerictextbox {
897
+ background: var(--deep-sea) !important;
898
+ border-color: var(--octo-mint-30) !important;
899
+
900
+ .k-input-inner {
901
+ background: transparent !important;
902
+ color: var(--octo-text-color) !important;
903
+ }
904
+
905
+ .k-input-button,
906
+ .k-spinner-increase,
907
+ .k-spinner-decrease {
908
+ background: var(--octo-mint-10) !important;
909
+ border-color: var(--octo-mint-30) !important;
910
+ color: var(--octo-mint) !important;
911
+
912
+ &:hover {
913
+ background: var(--octo-mint-20) !important;
914
+ }
915
+ }
916
+ }
917
+
918
+ // Kendo TextArea
919
+ .k-textarea,
920
+ kendo-textarea {
921
+ background: var(--deep-sea) !important;
922
+ border-color: var(--octo-mint-30) !important;
923
+
924
+ textarea {
925
+ background: transparent !important;
926
+ color: var(--octo-text-color) !important;
927
+ }
928
+ }
929
+ }
930
+ }
931
+
932
+ // Symbol Library Panel styling
933
+ .symbol-library-panel {
934
+ background: var(--surface-elevated) !important;
935
+
936
+ .panel-search {
937
+ border-bottom: 1px solid var(--octo-mint-20) !important;
938
+
939
+ input {
940
+ background: var(--deep-sea) !important;
941
+ border: 1px solid var(--octo-mint-30) !important;
942
+ color: var(--octo-text-color) !important;
943
+
944
+ &::placeholder {
945
+ color: var(--ash-blue) !important;
946
+ }
947
+
948
+ &:focus {
949
+ border-color: var(--octo-mint) !important;
950
+ box-shadow: var(--lcars-input-focus) !important;
951
+ }
952
+ }
953
+ }
954
+
955
+ .panel-content {
956
+ background: var(--surface-elevated) !important;
957
+ }
958
+
959
+ // Loading state
960
+ .loading {
961
+ color: var(--ash-blue) !important;
962
+ }
963
+
964
+ .loading-spinner {
965
+ border-color: var(--octo-mint-20) !important;
966
+ border-top-color: var(--octo-mint) !important;
967
+ }
968
+
969
+ // Error state
970
+ .error {
971
+ color: #ec658f !important;
972
+ }
973
+
974
+ .error-icon {
975
+ background: rgba(236, 101, 143, 0.2) !important;
976
+ color: #ec658f !important;
977
+ }
978
+
979
+ .retry-btn {
980
+ background: transparent !important;
981
+ border: 1px solid #ec658f !important;
982
+ color: #ec658f !important;
983
+
984
+ &:hover {
985
+ background: var(--bubblegum-10) !important;
986
+ }
987
+ }
988
+
989
+ // Library sections
990
+ .library-section {
991
+ background: transparent !important;
992
+ }
993
+
994
+ .library-header {
995
+ background: var(--iron-navy) !important;
996
+ border: 1px solid var(--octo-mint-20) !important;
997
+
998
+ &:hover {
999
+ background: var(--octo-mint-10) !important;
1000
+ border-color: var(--octo-mint-40) !important;
1001
+ }
1002
+ }
1003
+
1004
+ .expand-icon {
1005
+ color: var(--octo-mint) !important;
1006
+ }
1007
+
1008
+ .library-name {
1009
+ color: var(--octo-text-color) !important;
1010
+ }
1011
+
1012
+ .library-count {
1013
+ color: var(--ash-blue) !important;
1014
+ }
1015
+
1016
+ // Symbol items
1017
+ .library-symbols {
1018
+ background: transparent !important;
1019
+ }
1020
+
1021
+ .symbol-item {
1022
+ background: var(--iron-navy) !important;
1023
+ border: 1px solid var(--octo-mint-20) !important;
1024
+
1025
+ &:hover {
1026
+ border-color: var(--octo-mint) !important;
1027
+ box-shadow: 0 0 12px var(--octo-mint-30) !important;
1028
+ }
1029
+ }
1030
+
1031
+ .symbol-preview {
1032
+ // Use a lighter background so dark symbols remain visible
1033
+ background: #4a5568 !important;
1034
+ border: 1px solid var(--octo-mint-15) !important;
1035
+ }
1036
+
1037
+ .symbol-label {
1038
+ color: var(--ash-blue) !important;
1039
+ }
1040
+
1041
+ // Empty/no results states
1042
+ .empty-library,
1043
+ .no-results {
1044
+ color: var(--ash-blue) !important;
1045
+ }
1046
+ }
1047
+
1048
+ // Binding Editor Dialog styling
1049
+ .binding-editor-content {
1050
+ background: var(--surface-elevated) !important;
1051
+
1052
+ .list-header {
1053
+ border-bottom-color: var(--octo-mint-20) !important;
1054
+ color: var(--octo-text-color) !important;
1055
+ }
1056
+
1057
+ .empty-state {
1058
+ background: var(--iron-navy) !important;
1059
+ color: var(--ash-blue) !important;
1060
+
1061
+ .hint {
1062
+ color: var(--ash-blue-70) !important;
1063
+ }
1064
+ }
1065
+
1066
+ // Binding cards
1067
+ .binding-card {
1068
+ background: var(--iron-navy) !important;
1069
+ border: 1px solid var(--octo-mint-20) !important;
1070
+
1071
+ &.expanded {
1072
+ border-color: var(--octo-mint) !important;
1073
+ }
1074
+ }
1075
+
1076
+ .binding-header {
1077
+ background: var(--iron-navy-80) !important;
1078
+
1079
+ &:hover {
1080
+ background: var(--octo-mint-10) !important;
1081
+ }
1082
+ }
1083
+
1084
+ .target-name {
1085
+ color: var(--octo-text-color) !important;
1086
+ }
1087
+
1088
+ .effect-badge {
1089
+ background: var(--octo-mint-15) !important;
1090
+ color: var(--octo-mint) !important;
1091
+ }
1092
+
1093
+ // Binding form
1094
+ .binding-form {
1095
+ border-top-color: var(--octo-mint-20) !important;
1096
+ background: var(--surface-elevated) !important;
1097
+
1098
+ .form-row label {
1099
+ color: var(--ash-blue) !important;
1100
+ }
1101
+
1102
+ .form-row select,
1103
+ .form-row input[type="text"],
1104
+ .form-row input[type="number"] {
1105
+ background: var(--deep-sea) !important;
1106
+ border: 1px solid var(--octo-mint-30) !important;
1107
+ color: var(--octo-text-color) !important;
1108
+
1109
+ &:focus {
1110
+ border-color: var(--octo-mint) !important;
1111
+ box-shadow: var(--lcars-input-focus) !important;
1112
+ outline: none !important;
1113
+ }
1114
+
1115
+ option,
1116
+ optgroup {
1117
+ background: var(--deep-sea) !important;
1118
+ color: var(--octo-text-color) !important;
1119
+ }
1120
+ }
1121
+ }
1122
+
1123
+ // Expression hint
1124
+ .expression-hint {
1125
+ color: var(--ash-blue-70) !important;
1126
+
1127
+ code {
1128
+ background: var(--deep-sea) !important;
1129
+ color: var(--octo-mint) !important;
1130
+ }
1131
+ }
1132
+
1133
+ // Expression preview
1134
+ .expression-preview {
1135
+ background: var(--iron-navy) !important;
1136
+ border-radius: 6px !important;
1137
+
1138
+ > label {
1139
+ color: var(--ash-blue) !important;
1140
+ }
1141
+
1142
+ .preview-input,
1143
+ .preview-output {
1144
+ color: var(--ash-blue) !important;
1145
+ }
1146
+
1147
+ .preview-input input[type="number"] {
1148
+ background: var(--deep-sea) !important;
1149
+ border: 1px solid var(--octo-mint-30) !important;
1150
+ color: var(--octo-text-color) !important;
1151
+ }
1152
+
1153
+ .preview-input input[type="checkbox"] {
1154
+ accent-color: var(--octo-mint) !important;
1155
+ }
1156
+
1157
+ .boolean-label {
1158
+ color: var(--octo-text-color) !important;
1159
+ }
1160
+
1161
+ .preview-arrow {
1162
+ color: var(--ash-blue) !important;
1163
+ }
1164
+
1165
+ .preview-output .output-value {
1166
+ color: var(--octo-mint) !important;
1167
+ }
1168
+
1169
+ .preview-output.error .output-value {
1170
+ color: #ec658f !important;
1171
+ }
1172
+ }
1173
+
1174
+ // Anchor grid
1175
+ .anchor-grid {
1176
+ background: var(--octo-mint-10) !important;
1177
+ }
1178
+
1179
+ .anchor-point {
1180
+ background: var(--deep-sea) !important;
1181
+ border: none !important;
1182
+
1183
+ &:hover {
1184
+ background: var(--octo-mint-20) !important;
1185
+ }
1186
+
1187
+ &.selected {
1188
+ background: var(--octo-mint) !important;
1189
+ }
1190
+ }
1191
+
1192
+ .anchor-dot {
1193
+ background: var(--ash-blue) !important;
1194
+ }
1195
+
1196
+ .anchor-point.selected .anchor-dot {
1197
+ background: var(--deep-sea) !important;
1198
+ }
1199
+
1200
+ .anchor-point:hover .anchor-dot {
1201
+ background: var(--octo-mint) !important;
1202
+ }
1203
+
1204
+ .anchor-point.selected:hover .anchor-dot {
1205
+ background: var(--deep-sea) !important;
1206
+ }
1207
+
1208
+ .anchor-label {
1209
+ color: var(--ash-blue) !important;
1210
+ }
1211
+ }
1212
+
1213
+ // Global Kendo inputs styling for process designer panels
1214
+ mm-process-designer,
1215
+ mm-symbol-editor,
1216
+ mm-symbol-editor-page {
1217
+ // Kendo TextBox
1218
+ .k-textbox,
1219
+ .k-input,
1220
+ kendo-textbox input,
1221
+ kendo-numerictextbox input {
1222
+ background: var(--deep-sea) !important;
1223
+ border-color: var(--octo-mint-30) !important;
1224
+ color: var(--octo-text-color) !important;
1225
+
1226
+ &:focus,
1227
+ &.k-focus {
1228
+ border-color: var(--octo-mint) !important;
1229
+ box-shadow: var(--lcars-input-focus) !important;
1230
+ }
1231
+ }
1232
+
1233
+ // Kendo DropDownList
1234
+ .k-dropdownlist,
1235
+ kendo-dropdownlist {
1236
+ background: var(--deep-sea) !important;
1237
+ border-color: var(--octo-mint-30) !important;
1238
+ color: var(--octo-text-color) !important;
1239
+
1240
+ .k-input-inner {
1241
+ background: transparent !important;
1242
+ color: var(--octo-text-color) !important;
1243
+ }
1244
+
1245
+ .k-button {
1246
+ background: transparent !important;
1247
+ border-color: transparent !important;
1248
+ color: var(--ash-blue) !important;
1249
+
1250
+ &:hover {
1251
+ color: var(--octo-mint) !important;
1252
+ }
1253
+ }
1254
+
1255
+ &:focus,
1256
+ &.k-focus {
1257
+ border-color: var(--octo-mint) !important;
1258
+ box-shadow: var(--lcars-input-focus) !important;
1259
+ }
1260
+ }
1261
+
1262
+ // Kendo NumericTextBox
1263
+ .k-numerictextbox {
1264
+ background: var(--deep-sea) !important;
1265
+ border-color: var(--octo-mint-30) !important;
1266
+
1267
+ .k-input-inner {
1268
+ background: transparent !important;
1269
+ color: var(--octo-text-color) !important;
1270
+ }
1271
+
1272
+ .k-input-button,
1273
+ .k-spinner-increase,
1274
+ .k-spinner-decrease {
1275
+ background: var(--octo-mint-10) !important;
1276
+ border-color: var(--octo-mint-30) !important;
1277
+ color: var(--octo-mint) !important;
1278
+
1279
+ &:hover {
1280
+ background: var(--octo-mint-20) !important;
1281
+ }
1282
+ }
1283
+ }
1284
+ }
1285
+
1286
+ // SVG Import Dialog styling
1287
+ .svg-file-group,
1288
+ .form-group.svg-file-group {
1289
+ background: var(--surface-elevated) !important;
1290
+ border: 2px dashed var(--octo-mint-30) !important;
1291
+ border-radius: 8px !important;
1292
+ padding: 16px !important;
1293
+ transition: all 0.2s ease;
1294
+
1295
+ &:hover {
1296
+ border-color: var(--octo-mint-50) !important;
1297
+ background: var(--octo-mint-05) !important;
1298
+ }
1299
+
1300
+ // File input button
1301
+ button {
1302
+ background: linear-gradient(
1303
+ 180deg,
1304
+ var(--octo-mint-15),
1305
+ var(--octo-mint-05)
1306
+ ) !important;
1307
+ border: 1px solid var(--octo-mint-30) !important;
1308
+ color: var(--octo-mint) !important;
1309
+
1310
+ &:hover {
1311
+ background: linear-gradient(
1312
+ 180deg,
1313
+ var(--octo-mint-25),
1314
+ var(--octo-mint-15)
1315
+ ) !important;
1316
+ border-color: var(--octo-mint) !important;
1317
+ box-shadow: 0 0 10px var(--octo-mint-30) !important;
1318
+ }
1319
+ }
1320
+ }
1321
+
1322
+ // SVG Scale group styling
1323
+ .svg-scale-group,
1324
+ .form-group.svg-scale-group {
1325
+ background: var(--surface-elevated) !important;
1326
+ border: 1px solid var(--octo-mint-20) !important;
1327
+ border-radius: 8px !important;
1328
+ padding: 12px 16px !important;
1329
+
1330
+ label {
1331
+ color: var(--ash-blue) !important;
1332
+ }
1333
+
1334
+ .scale-info,
1335
+ .dimension-info {
1336
+ color: var(--ash-blue) !important;
1337
+ }
1338
+
1339
+ // Kendo numeric textbox
1340
+ .k-numerictextbox {
1341
+ background: var(--deep-sea) !important;
1342
+ border-color: var(--octo-mint-30) !important;
1343
+
1344
+ .k-input-inner {
1345
+ background: var(--deep-sea) !important;
1346
+ color: var(--octo-text-color) !important;
1347
+ }
1348
+
1349
+ .k-input-button {
1350
+ background: var(--octo-mint-10) !important;
1351
+ border-color: var(--octo-mint-30) !important;
1352
+ color: var(--octo-mint) !important;
1353
+
1354
+ &:hover {
1355
+ background: var(--octo-mint-20) !important;
1356
+ }
1357
+ }
1358
+ }
1359
+
1360
+ // Reset button
1361
+ button.reset-btn,
1362
+ .reset-button {
1363
+ background: transparent !important;
1364
+ border: 1px solid var(--ash-blue-30) !important;
1365
+ color: var(--ash-blue) !important;
1366
+
1367
+ &:hover {
1368
+ background: var(--ash-blue-10) !important;
1369
+ border-color: var(--ash-blue) !important;
1370
+ }
1371
+ }
1372
+ }
1373
+
1374
+ // Symbol import dialog content
1375
+ .import-svg-dialog,
1376
+ .symbol-import-dialog {
1377
+ .dialog-content {
1378
+ background: var(--deep-sea) !important;
1379
+ }
1380
+
1381
+ .form-group {
1382
+ label {
1383
+ color: var(--ash-blue) !important;
1384
+ }
1385
+
1386
+ input[type="text"] {
1387
+ background: var(--deep-sea) !important;
1388
+ border: 1px solid var(--octo-mint-30) !important;
1389
+ color: var(--octo-text-color) !important;
1390
+
1391
+ &:focus {
1392
+ border-color: var(--octo-mint) !important;
1393
+ box-shadow: var(--lcars-input-focus) !important;
1394
+ }
1395
+ }
1396
+ }
1397
+
1398
+ .preview-container {
1399
+ background: var(--iron-navy) !important;
1400
+ border: 1px solid var(--octo-mint-20) !important;
1401
+ }
1402
+ }
1403
+
1404
+ // Process Designer & Symbol Editor - LCARS overrides
1405
+ mm-process-designer,
1406
+ mm-symbol-editor,
1407
+ mm-symbol-editor-page {
1408
+ // Override designer CSS variables for LCARS theme
1409
+ --designer-bg: #{$deep-sea} !important;
1410
+ --designer-surface: #{$surface-elevated} !important;
1411
+ --designer-surface-alt: #{$iron-navy} !important;
1412
+ --designer-border: rgba(100, 206, 185, 0.2) !important;
1413
+ --designer-text: #ffffff !important;
1414
+ --designer-text-muted: #{$ash-blue} !important;
1415
+ --designer-accent: #{$octo-mint} !important;
1416
+ --designer-accent-secondary: #{$neo-cyan} !important;
1417
+ --designer-canvas-bg: #{$surface-elevated} !important;
1418
+ --designer-hover-bg: rgba(100, 206, 185, 0.1) !important;
1419
+
1420
+ // Canvas-specific colors (SVG canvas fill and grid)
1421
+ --designer-canvas-color: #{$iron-navy} !important;
1422
+ --designer-grid-color: rgba(100, 206, 185, 0.15) !important;
1423
+
1424
+ // Editor-specific variables (inherited from designer)
1425
+ --editor-bg: #{$deep-sea} !important;
1426
+ --editor-surface: #{$surface-elevated} !important;
1427
+ --editor-surface-alt: #{$iron-navy} !important;
1428
+ --editor-border: rgba(100, 206, 185, 0.2) !important;
1429
+ --editor-text: #ffffff !important;
1430
+ --editor-text-muted: #{$ash-blue} !important;
1431
+ --editor-accent: #{$octo-mint} !important;
1432
+ --editor-hover-bg: rgba(100, 206, 185, 0.1) !important;
1433
+
1434
+ // Force backgrounds directly on elements
1435
+ background: #{$deep-sea} !important;
1436
+ }
1437
+
1438
+ // Force LCARS styling on process designer internal elements
1439
+ ::ng-deep {
1440
+ mm-process-designer,
1441
+ mm-symbol-editor {
1442
+ .process-designer {
1443
+ background: #{$deep-sea} !important;
1444
+ }
1445
+
1446
+ .designer-canvas-container {
1447
+ background: #{$surface-elevated} !important;
1448
+ }
1449
+
1450
+ // Canvas SVG background - LCARS dark theme
1451
+ .canvas-background {
1452
+ fill: #{$iron-navy} !important;
1453
+ }
1454
+
1455
+ // Grid lines - subtle mint-colored grid
1456
+ .designer-grid-line {
1457
+ stroke: rgba(100, 206, 185, 0.15) !important;
1458
+ }
1459
+
1460
+ .designer-sidebar,
1461
+ .designer-inspector-container {
1462
+ background: #{$surface-elevated} !important;
1463
+ border-color: rgba(100, 206, 185, 0.2) !important;
1464
+ }
1465
+
1466
+ .sidebar-tab {
1467
+ background: #{$iron-navy} !important;
1468
+ color: #{$ash-blue} !important;
1469
+
1470
+ &.active {
1471
+ background: #{$surface-elevated} !important;
1472
+ color: #{$octo-mint} !important;
1473
+ border-bottom-color: #{$octo-mint} !important;
1474
+ }
1475
+ }
1476
+
1477
+ .designer-statusbar {
1478
+ background: #{$iron-navy} !important;
1479
+ border-color: rgba(100, 206, 185, 0.2) !important;
1480
+ color: #{$ash-blue} !important;
1481
+ }
1482
+
1483
+ .dockview-panels-container {
1484
+ background: #{$surface-elevated} !important;
1485
+ border-color: rgba(100, 206, 185, 0.2) !important;
1486
+ }
1487
+ }
1488
+
1489
+ mm-symbol-editor-page {
1490
+ .symbol-editor-page-container {
1491
+ background: #{$deep-sea} !important;
1492
+ }
1493
+
1494
+ .editor-header {
1495
+ background: #{$iron-navy} !important;
1496
+ border-color: rgba(100, 206, 185, 0.2) !important;
1497
+ }
1498
+
1499
+ .symbol-title {
1500
+ color: var(--octo-text-color) !important;
1501
+ }
1502
+
1503
+ .library-name {
1504
+ color: #{$ash-blue} !important;
1505
+ }
1506
+ }
1507
+
1508
+ // Symbol editor container
1509
+ mm-symbol-editor {
1510
+ .symbol-editor-container {
1511
+ background: #{$deep-sea} !important;
1512
+ }
1513
+
1514
+ .properties-panel {
1515
+ background: #{$surface-elevated} !important;
1516
+ border-color: rgba(100, 206, 185, 0.2) !important;
1517
+ }
1518
+
1519
+ .panel-header {
1520
+ background: #{$iron-navy} !important;
1521
+ border-color: rgba(100, 206, 185, 0.2) !important;
1522
+ }
1523
+
1524
+ .panel-title {
1525
+ color: var(--octo-text-color) !important;
1526
+ }
1527
+
1528
+ .panel-collapsed {
1529
+ background: #{$iron-navy} !important;
1530
+ border-color: rgba(100, 206, 185, 0.2) !important;
1531
+ }
1532
+
1533
+ .collapsed-label,
1534
+ .collapsed-icon {
1535
+ color: #{$ash-blue} !important;
1536
+ }
1537
+ }
1538
+ }
1539
+
1540
+ // Process Widget (MeshBoard) - LCARS overrides
1541
+ mm-process-widget {
1542
+ // Override CSS variables used by the process widget
1543
+ --process-bg: #{$iron-navy};
1544
+ --process-canvas-bg: #{$iron-navy};
1545
+
1546
+ .process-widget {
1547
+ background-color: #{$iron-navy} !important;
1548
+ }
1549
+
1550
+ .diagram-container {
1551
+ background-color: #{$iron-navy} !important;
1552
+ }
1553
+
1554
+ .loading-overlay {
1555
+ color: #{$ash-blue} !important;
1556
+ }
1557
+
1558
+ .loading-spinner {
1559
+ border-color: rgba(100, 206, 185, 0.2) !important;
1560
+ border-top-color: #{$octo-mint} !important;
1561
+ }
1562
+
1563
+ .error-container {
1564
+ color: #{$bubblegum} !important;
1565
+ }
1566
+
1567
+ .no-config {
1568
+ color: #{$ash-blue} !important;
1569
+ }
1570
+ }
1571
+
1572
+ // Global
1573
+
1574
+ html,
1575
+ body {
1576
+ margin: 0;
1577
+ padding: 0;
1578
+ height: 100%;
1579
+ overflow: hidden;
1580
+ }
1581
+
1582
+ body {
1583
+ background-color: var(--kendo-color-app-surface, var(--deep-sea, #1a2230));
1584
+ color: var(--kendo-color-on-app-surface, var(--octo-text-color, #ffffff));
1585
+ font-family: var(--lcars-font-primary);
1586
+ }
1587
+
1588
+ // LCARS panels
1589
+
1590
+ .lcars-panel {
1591
+ background: var(--lcars-panel-bg);
1592
+ border: var(--lcars-panel-border);
1593
+ border-radius: var(--lcars-radius-md);
1594
+ padding: 16px;
1595
+ position: relative;
1596
+
1597
+ &::before {
1598
+ content: "";
1599
+ position: absolute;
1600
+ top: 0;
1601
+ left: 0;
1602
+ right: 0;
1603
+ height: 3px;
1604
+ background: linear-gradient(
1605
+ 90deg,
1606
+ var(--octo-mint),
1607
+ var(--neo-cyan),
1608
+ var(--royal-violet)
1609
+ );
1610
+ border-radius: var(--lcars-radius-md) var(--lcars-radius-md) 0 0;
1611
+ }
1612
+ }
1613
+
1614
+ // LCARS-style header bar
1615
+ .lcars-header-bar {
1616
+ display: flex;
1617
+ align-items: center;
1618
+ gap: 12px;
1619
+ padding: 8px 16px;
1620
+ background: linear-gradient(90deg, var(--iron-navy), transparent);
1621
+ border-left: 4px solid var(--octo-mint);
1622
+ margin-bottom: 16px;
1623
+
1624
+ &::after {
1625
+ content: "";
1626
+ flex: 1;
1627
+ height: 2px;
1628
+ background: linear-gradient(90deg, var(--octo-mint), transparent);
1629
+ }
1630
+ }
1631
+
1632
+ // LCARS asymmetric panel (characteristic rounded corner on one side)
1633
+ .lcars-panel-asymmetric {
1634
+ background: var(--lcars-panel-bg);
1635
+ border: var(--lcars-panel-border);
1636
+ border-radius: var(--lcars-radius-xl) var(--lcars-radius-sm)
1637
+ var(--lcars-radius-sm) var(--lcars-radius-xl);
1638
+ padding: 16px;
1639
+ padding-left: 24px;
1640
+ }
1641
+
1642
+ // Kendo overrides
1643
+
1644
+ // AppBar
1645
+ .k-appbar {
1646
+ background: linear-gradient(
1647
+ 180deg,
1648
+ var(--iron-navy),
1649
+ color.adjust($iron-navy, $lightness: -5%)
1650
+ ) !important;
1651
+ border-bottom: 1px solid var(--octo-mint-30);
1652
+ box-shadow:
1653
+ 0 2px 8px rgba(0, 0, 0, 0.3),
1654
+ 0 0 20px var(--octo-mint-10);
1655
+ }
1656
+
1657
+ // Buttons - LCARS style
1658
+ .k-button {
1659
+ font-family: var(--lcars-font-primary);
1660
+ font-weight: 500;
1661
+ text-transform: uppercase;
1662
+ letter-spacing: 0.5px;
1663
+ border-radius: var(--lcars-radius-sm);
1664
+ transition: all var(--lcars-transition-fast);
1665
+
1666
+ &.k-button-solid-primary {
1667
+ background: linear-gradient(
1668
+ 180deg,
1669
+ var(--octo-mint-30),
1670
+ var(--octo-mint-15)
1671
+ );
1672
+ border: 1px solid var(--octo-mint-50);
1673
+ color: var(--octo-text-color);
1674
+
1675
+ .k-svg-icon,
1676
+ .k-icon,
1677
+ svg {
1678
+ fill: #ffffff;
1679
+ color: var(--octo-text-color);
1680
+ }
1681
+
1682
+ &:hover:not(:disabled) {
1683
+ background: linear-gradient(
1684
+ 180deg,
1685
+ var(--octo-mint-45),
1686
+ var(--octo-mint-25)
1687
+ );
1688
+ border-color: var(--octo-mint);
1689
+ box-shadow: 0 0 15px var(--octo-mint-40);
1690
+ }
1691
+
1692
+ &:active:not(:disabled) {
1693
+ background: linear-gradient(
1694
+ 180deg,
1695
+ var(--octo-mint-50),
1696
+ var(--octo-mint-30)
1697
+ );
1698
+ }
1699
+ }
1700
+
1701
+ &.k-button-solid-secondary {
1702
+ background: linear-gradient(
1703
+ 180deg,
1704
+ var(--neo-cyan),
1705
+ color.adjust($neo-cyan, $lightness: -10%)
1706
+ );
1707
+
1708
+ &:hover {
1709
+ box-shadow: var(--lcars-glow-cyan);
1710
+ }
1711
+ }
1712
+
1713
+ // Default/base solid buttons (no themeColor specified)
1714
+ &.k-button-solid-base {
1715
+ background: linear-gradient(
1716
+ 180deg,
1717
+ var(--octo-mint-15),
1718
+ var(--octo-mint-05)
1719
+ );
1720
+ border: 1px solid var(--octo-mint-30);
1721
+ color: var(--octo-mint);
1722
+
1723
+ .k-svg-icon,
1724
+ .k-icon,
1725
+ svg {
1726
+ fill: var(--octo-mint);
1727
+ color: var(--octo-mint);
1728
+ }
1729
+
1730
+ &:hover:not(:disabled) {
1731
+ background: linear-gradient(
1732
+ 180deg,
1733
+ var(--octo-mint-25),
1734
+ var(--octo-mint-15)
1735
+ );
1736
+ border-color: var(--octo-mint-50);
1737
+ box-shadow: 0 0 10px var(--octo-mint-30);
1738
+ }
1739
+
1740
+ &:active:not(:disabled) {
1741
+ background: linear-gradient(
1742
+ 180deg,
1743
+ var(--octo-mint-30),
1744
+ var(--octo-mint-20)
1745
+ );
1746
+ }
1747
+
1748
+ &:disabled {
1749
+ opacity: 0.5;
1750
+ color: var(--ash-blue);
1751
+ border-color: var(--ash-blue-30);
1752
+ background: var(--ash-blue-10);
1753
+
1754
+ .k-svg-icon,
1755
+ .k-icon,
1756
+ svg {
1757
+ fill: var(--ash-blue);
1758
+ color: var(--ash-blue);
1759
+ }
1760
+ }
1761
+ }
1762
+
1763
+ // Solid error buttons (themeColor="error")
1764
+ &.k-button-solid-error {
1765
+ background: linear-gradient(
1766
+ 180deg,
1767
+ var(--bubblegum-20),
1768
+ var(--bubblegum-10)
1769
+ );
1770
+ border: 1px solid var(--bubblegum-40);
1771
+ color: var(--bubblegum);
1772
+
1773
+ .k-svg-icon,
1774
+ .k-icon,
1775
+ svg {
1776
+ fill: var(--bubblegum);
1777
+ color: var(--bubblegum);
1778
+ }
1779
+
1780
+ &:hover:not(:disabled) {
1781
+ background: linear-gradient(
1782
+ 180deg,
1783
+ var(--bubblegum-30),
1784
+ var(--bubblegum-20)
1785
+ );
1786
+ border-color: var(--bubblegum-60);
1787
+ box-shadow: 0 0 10px var(--bubblegum-40);
1788
+ }
1789
+
1790
+ &:active:not(:disabled) {
1791
+ background: linear-gradient(
1792
+ 180deg,
1793
+ var(--bubblegum-40),
1794
+ var(--bubblegum-30)
1795
+ );
1796
+ }
1797
+
1798
+ &:disabled {
1799
+ opacity: 0.5;
1800
+ }
1801
+ }
1802
+
1803
+ &.k-button-outline {
1804
+ border-width: 2px;
1805
+
1806
+ &:hover {
1807
+ box-shadow: var(--lcars-glow-primary);
1808
+ }
1809
+ }
1810
+
1811
+ // Outline base buttons - ensure visibility on dark background
1812
+ &.k-button-outline-base {
1813
+ color: var(--ash-blue);
1814
+ border-color: var(--ash-blue-50);
1815
+ background: transparent;
1816
+
1817
+ .k-svg-icon,
1818
+ .k-icon,
1819
+ svg {
1820
+ fill: var(--ash-blue);
1821
+ color: var(--ash-blue);
1822
+ }
1823
+
1824
+ &:hover:not(:disabled) {
1825
+ color: var(--octo-mint);
1826
+ border-color: var(--octo-mint-50);
1827
+ background: var(--octo-mint-10);
1828
+ box-shadow: var(--lcars-glow-primary);
1829
+
1830
+ .k-svg-icon,
1831
+ .k-icon,
1832
+ svg {
1833
+ fill: var(--octo-mint);
1834
+ color: var(--octo-mint);
1835
+ }
1836
+ }
1837
+
1838
+ &:active:not(:disabled) {
1839
+ background: var(--octo-mint-15);
1840
+ }
1841
+ }
1842
+
1843
+ // Outline primary buttons - for selected state
1844
+ &.k-button-outline-primary {
1845
+ color: var(--octo-mint);
1846
+ border-color: var(--octo-mint-50);
1847
+ background: transparent;
1848
+
1849
+ .k-svg-icon,
1850
+ .k-icon,
1851
+ svg {
1852
+ fill: var(--octo-mint);
1853
+ color: var(--octo-mint);
1854
+ }
1855
+
1856
+ &:hover:not(:disabled) {
1857
+ background: var(--octo-mint-15);
1858
+ box-shadow: var(--lcars-glow-primary);
1859
+ }
1860
+ }
1861
+
1862
+ // Flat error buttons (delete/remove actions) - make visible on dark background
1863
+ &.k-button-flat-error {
1864
+ color: var(--bubblegum) !important;
1865
+ background: var(--bubblegum-10);
1866
+ border: 1px solid var(--bubblegum-30);
1867
+
1868
+ .k-svg-icon,
1869
+ .k-icon,
1870
+ svg {
1871
+ fill: var(--bubblegum) !important;
1872
+ color: var(--bubblegum) !important;
1873
+ }
1874
+
1875
+ &:hover {
1876
+ background: var(--bubblegum-20);
1877
+ border-color: var(--bubblegum-50);
1878
+ box-shadow: 0 0 8px var(--bubblegum-40);
1879
+ }
1880
+
1881
+ &:active {
1882
+ background: var(--bubblegum-30);
1883
+ }
1884
+ }
1885
+
1886
+ // General flat buttons - ensure visibility
1887
+ &.k-button-flat {
1888
+ &:not(.k-button-flat-error):not(.k-button-flat-primary) {
1889
+ color: var(--ash-blue);
1890
+
1891
+ .k-svg-icon,
1892
+ .k-icon,
1893
+ svg {
1894
+ fill: var(--ash-blue);
1895
+ color: var(--ash-blue);
1896
+ }
1897
+
1898
+ &:hover {
1899
+ background: var(--ash-blue-15);
1900
+ color: var(--octo-mint);
1901
+
1902
+ .k-svg-icon,
1903
+ .k-icon,
1904
+ svg {
1905
+ fill: var(--octo-mint);
1906
+ color: var(--octo-mint);
1907
+ }
1908
+ }
1909
+ }
1910
+ }
1911
+ }
1912
+
1913
+ // Grid - LCARS style
1914
+ .k-grid {
1915
+ border: var(--lcars-panel-border);
1916
+ border-radius: var(--lcars-radius-md);
1917
+ overflow: hidden;
1918
+
1919
+ .k-grid-header {
1920
+ background: linear-gradient(
1921
+ 180deg,
1922
+ var(--iron-navy),
1923
+ var(--surface-elevated)
1924
+ );
1925
+ border-bottom: 2px solid var(--octo-mint-30);
1926
+
1927
+ th {
1928
+ font-family: var(--lcars-font-primary);
1929
+ font-weight: 600;
1930
+ text-transform: uppercase;
1931
+ font-size: 0.85em;
1932
+ letter-spacing: 0.5px;
1933
+ color: var(--octo-mint);
1934
+ }
1935
+ }
1936
+
1937
+ .k-grid-content {
1938
+ background: var(--deep-sea-80);
1939
+
1940
+ tr {
1941
+ transition: background var(--lcars-transition-fast);
1942
+
1943
+ &:hover {
1944
+ background: var(--octo-mint-08) !important;
1945
+ }
1946
+
1947
+ &.k-selected {
1948
+ background: var(--octo-mint-15) !important;
1949
+ border-left: 3px solid var(--octo-mint);
1950
+ }
1951
+ }
1952
+ }
1953
+
1954
+ .k-pager {
1955
+ background: var(--iron-navy);
1956
+ border-top: 1px solid var(--octo-mint-20);
1957
+ }
1958
+ }
1959
+
1960
+ // TreeView - LCARS style
1961
+ .k-treeview {
1962
+ .k-treeview-item {
1963
+ .k-treeview-leaf {
1964
+ border-radius: var(--lcars-radius-sm);
1965
+ transition: all var(--lcars-transition-fast);
1966
+
1967
+ &:hover {
1968
+ background: var(--octo-mint-10);
1969
+ }
1970
+
1971
+ &.k-selected {
1972
+ background: var(--octo-mint-20);
1973
+ border-left: 3px solid var(--octo-mint);
1974
+ box-shadow: inset 0 0 10px var(--octo-mint-10);
1975
+ }
1976
+ }
1977
+ }
1978
+ }
1979
+
1980
+ // Input fields - LCARS style
1981
+ .k-input,
1982
+ .k-picker,
1983
+ .k-textbox {
1984
+ background: var(--deep-sea-80);
1985
+ border: 1px solid var(--ash-blue-30);
1986
+ border-radius: var(--lcars-radius-sm);
1987
+ transition: all var(--lcars-transition-fast);
1988
+
1989
+ &:hover {
1990
+ border-color: var(--octo-mint-50);
1991
+ }
1992
+
1993
+ &:focus,
1994
+ &.k-focus {
1995
+ border-color: var(--octo-mint);
1996
+ box-shadow: var(--lcars-glow-primary);
1997
+ }
1998
+ }
1999
+
2000
+ // Form fields - LCARS style (global for all dialogs)
2001
+ kendo-formfield,
2002
+ .k-form-field {
2003
+ kendo-label,
2004
+ .k-label,
2005
+ > label {
2006
+ color: var(--ash-blue) !important;
2007
+ font-family: var(--lcars-font-primary);
2008
+ font-weight: 500;
2009
+ }
2010
+
2011
+ kendo-formhint,
2012
+ .k-form-hint {
2013
+ color: var(--ash-blue-70) !important;
2014
+ }
2015
+
2016
+ kendo-formerror,
2017
+ .k-form-error {
2018
+ color: var(--bubblegum) !important;
2019
+ }
2020
+ }
2021
+
2022
+ // Standalone labels - LCARS style
2023
+ .k-label,
2024
+ kendo-label {
2025
+ color: var(--ash-blue) !important;
2026
+ }
2027
+
2028
+ // Checkbox labels
2029
+ .k-checkbox-label,
2030
+ label.k-checkbox-label {
2031
+ color: var(--octo-text-color) !important;
2032
+ }
2033
+
2034
+ // Kendo dialog - scrolling fix
2035
+
2036
+ // Target the actual dialog element directly with high specificity
2037
+ .k-dialog-wrapper .k-window.k-dialog,
2038
+ .k-dialog-wrapper > .k-dialog,
2039
+ div.k-window.k-dialog {
2040
+ max-height: 85vh !important;
2041
+ display: flex !important;
2042
+ flex-direction: column !important;
2043
+ }
2044
+
2045
+ // Title bar stays at top
2046
+ .k-dialog-wrapper .k-window-titlebar,
2047
+ .k-dialog-wrapper .k-dialog-titlebar,
2048
+ .k-window.k-dialog > kendo-dialog-titlebar {
2049
+ flex-shrink: 0 !important;
2050
+ }
2051
+
2052
+ // Content area scrolls
2053
+ .k-dialog-wrapper .k-window-content,
2054
+ .k-dialog-wrapper .k-dialog-content,
2055
+ .k-window.k-dialog > .k-dialog-content {
2056
+ overflow-y: auto !important;
2057
+ flex: 1 1 auto !important;
2058
+ min-height: 0 !important;
2059
+ max-height: calc(85vh - 110px) !important;
2060
+ }
2061
+
2062
+ // Action buttons stay at bottom
2063
+ .k-dialog-wrapper kendo-dialog-actions,
2064
+ .k-dialog-wrapper .k-dialog-actions,
2065
+ .k-window.k-dialog > .k-dialog-actions {
2066
+ flex-shrink: 0 !important;
2067
+ }
2068
+
2069
+ // Config dialog form fields (custom classes used in widget config dialogs)
2070
+ .config-form {
2071
+ // Scrolling support - flex layout in .config-container handles sizing
2072
+ flex: 1;
2073
+ min-height: 0;
2074
+ overflow-y: auto !important;
2075
+
2076
+ .form-field {
2077
+ > label {
2078
+ color: var(--ash-blue) !important;
2079
+ font-family: var(--lcars-font-primary);
2080
+ font-weight: 500;
2081
+
2082
+ .required {
2083
+ color: var(--bubblegum) !important;
2084
+ }
2085
+ }
2086
+
2087
+ .field-hint {
2088
+ color: var(--ash-blue-70) !important;
2089
+ }
2090
+
2091
+ .switch-label {
2092
+ color: var(--octo-text-color) !important;
2093
+ }
2094
+ }
2095
+
2096
+ .form-section {
2097
+ h4 {
2098
+ color: var(--octo-mint) !important;
2099
+ font-family: var(--lcars-font-primary);
2100
+ border-bottom-color: var(--octo-mint-20) !important;
2101
+ }
2102
+ }
2103
+
2104
+ // Data Source Type radio group
2105
+ .data-source-type {
2106
+ .radio-group {
2107
+ .radio-label {
2108
+ color: var(--octo-text-color) !important;
2109
+
2110
+ span {
2111
+ color: var(--octo-text-color) !important;
2112
+ }
2113
+
2114
+ input[type="radio"] {
2115
+ accent-color: var(--octo-mint);
2116
+ }
2117
+ }
2118
+ }
2119
+ }
2120
+
2121
+ // Config cards (Columns, Sorting, Filters, Options, Query Info)
2122
+ .config-card {
2123
+ background: var(--surface-elevated-60) !important;
2124
+ border-color: var(--octo-mint-20) !important;
2125
+
2126
+ .card-header {
2127
+ .card-title {
2128
+ color: var(--octo-mint) !important;
2129
+ font-family: var(--lcars-font-primary);
2130
+ }
2131
+
2132
+ .card-count {
2133
+ color: var(--ash-blue) !important;
2134
+ }
2135
+
2136
+ kendo-svgicon,
2137
+ .k-svg-icon {
2138
+ color: var(--octo-mint) !important;
2139
+ }
2140
+ }
2141
+
2142
+ .card-content {
2143
+ .config-summary {
2144
+ color: rgba(#ffffff, 0.9) !important;
2145
+ }
2146
+ }
2147
+
2148
+ // Query info styling
2149
+ &.query-info,
2150
+ .query-info {
2151
+ .info-row {
2152
+ .info-label {
2153
+ color: var(--ash-blue) !important;
2154
+ }
2155
+
2156
+ .info-value {
2157
+ color: var(--octo-text-color) !important;
2158
+ }
2159
+ }
2160
+ }
2161
+
2162
+ // Options card
2163
+ &.options-card {
2164
+ .checkbox-field label {
2165
+ color: var(--octo-text-color) !important;
2166
+ }
2167
+ }
2168
+ }
2169
+
2170
+ // Query combobox items
2171
+ .query-item {
2172
+ .query-name {
2173
+ color: var(--octo-text-color) !important;
2174
+ }
2175
+
2176
+ .query-description {
2177
+ color: var(--ash-blue) !important;
2178
+ }
2179
+ }
2180
+
2181
+ // Loading indicator
2182
+ .loading-indicator {
2183
+ color: var(--octo-mint) !important;
2184
+ }
2185
+
2186
+ // Config sections (used in Pie Chart, Bar Chart, etc.)
2187
+ .config-section {
2188
+ background: var(--surface-elevated-60) !important;
2189
+ border-color: var(--octo-mint-20) !important;
2190
+
2191
+ .section-title {
2192
+ color: var(--octo-mint) !important;
2193
+ font-family: var(--lcars-font-primary);
2194
+ }
2195
+
2196
+ .section-hint {
2197
+ color: var(--ash-blue) !important;
2198
+ }
2199
+ }
2200
+
2201
+ // Form sections (used in Stats Grid Config Dialog, etc.)
2202
+ .form-section {
2203
+ background: var(--surface-elevated-60) !important;
2204
+ border-color: var(--octo-mint-20) !important;
2205
+
2206
+ .section-header {
2207
+ h4 {
2208
+ color: var(--octo-mint) !important;
2209
+ font-family: var(--lcars-font-primary);
2210
+ }
2211
+ }
2212
+
2213
+ .empty-state {
2214
+ color: var(--ash-blue) !important;
2215
+ }
2216
+ }
2217
+
2218
+ // Stat items (used in Stats Grid Config Dialog)
2219
+ .stat-item {
2220
+ background: var(--surface-elevated-80) !important;
2221
+ border-color: var(--octo-mint-20) !important;
2222
+
2223
+ .stat-number {
2224
+ color: var(--octo-mint) !important;
2225
+ }
2226
+ }
2227
+ }
2228
+
2229
+ // Widget Config Dialogs - proper sizing and scrolling (same pattern as meshboard-settings-dialog)
2230
+ .k-window.k-dialog:has(.config-form),
2231
+ .k-dialog:has(.config-form) {
2232
+ max-height: 90vh !important;
2233
+
2234
+ .k-window-content.k-dialog-content,
2235
+ .k-dialog-content {
2236
+ overflow: hidden !important;
2237
+ display: flex !important;
2238
+ flex-direction: column !important;
2239
+ flex: 1 !important;
2240
+ min-height: 0 !important;
2241
+ height: auto !important;
2242
+ max-height: none !important; // Override generic dialog max-height for resizable config dialogs
2243
+ }
2244
+ }
2245
+
2246
+ // Input buttons (DatePicker calendar, NumericTextBox spinners, etc.) - LCARS style
2247
+ .k-input-button,
2248
+ .sort-button,
2249
+ .k-spinner-increase,
2250
+ .k-spinner-decrease {
2251
+ background: var(--octo-mint-10) !important;
2252
+ border-color: var(--octo-mint-30) !important;
2253
+ color: var(--octo-mint) !important;
2254
+
2255
+ // Make SVG icons visible
2256
+ .k-svg-icon,
2257
+ .k-icon,
2258
+ svg {
2259
+ fill: var(--octo-mint) !important;
2260
+ color: var(--octo-mint) !important;
2261
+ }
2262
+
2263
+ &:hover {
2264
+ background: var(--octo-mint-20) !important;
2265
+ border-color: var(--octo-mint-50) !important;
2266
+ }
2267
+
2268
+ &:active {
2269
+ background: var(--octo-mint-30) !important;
2270
+ }
2271
+ }
2272
+
2273
+ // Dropdown/Popup - LCARS style
2274
+ .k-popup {
2275
+ background: var(--iron-navy);
2276
+ border: 1px solid var(--octo-mint-30);
2277
+ border-radius: var(--lcars-radius-md);
2278
+ box-shadow:
2279
+ 0 8px 32px rgba(0, 0, 0, 0.4),
2280
+ 0 0 20px var(--octo-mint-10);
2281
+
2282
+ .k-list-item {
2283
+ padding: 6px 12px !important;
2284
+ font-size: 0.8125rem !important; // 13px - compact to match app styling
2285
+ line-height: 1.4 !important;
2286
+ min-height: auto !important;
2287
+ transition: background var(--lcars-transition-fast);
2288
+
2289
+ &:hover {
2290
+ background: var(--octo-mint-15);
2291
+ }
2292
+
2293
+ &.k-selected {
2294
+ background: var(--octo-mint-25);
2295
+ color: var(--octo-mint);
2296
+ }
2297
+ }
2298
+ }
2299
+
2300
+ // Dialog - LCARS style
2301
+ .k-dialog {
2302
+ border: 1px solid var(--octo-mint-30);
2303
+ border-radius: var(--lcars-radius-lg);
2304
+ box-shadow:
2305
+ 0 16px 64px rgba(0, 0, 0, 0.5),
2306
+ 0 0 40px var(--octo-mint-15);
2307
+ overflow: hidden;
2308
+
2309
+ .k-dialog-titlebar {
2310
+ background: linear-gradient(
2311
+ 90deg,
2312
+ var(--iron-navy),
2313
+ var(--surface-elevated)
2314
+ );
2315
+ border-bottom: 2px solid var(--octo-mint);
2316
+ font-family: var(--lcars-font-primary);
2317
+ font-weight: 600;
2318
+ text-transform: uppercase;
2319
+ letter-spacing: 1px;
2320
+
2321
+ &::before {
2322
+ content: "";
2323
+ position: absolute;
2324
+ left: 0;
2325
+ top: 0;
2326
+ bottom: 0;
2327
+ width: 4px;
2328
+ background: var(--octo-mint);
2329
+ }
2330
+ }
2331
+
2332
+ .k-dialog-content,
2333
+ .k-window-content {
2334
+ background: var(--deep-sea);
2335
+ display: flex;
2336
+ flex-direction: column;
2337
+ overflow: hidden;
2338
+
2339
+ // Allow content to fill available space
2340
+ > * {
2341
+ flex: 1;
2342
+ min-height: 0;
2343
+ overflow: hidden;
2344
+ }
2345
+ }
2346
+
2347
+ .k-dialog-actions {
2348
+ background: var(--iron-navy);
2349
+ border-top: 1px solid var(--octo-mint-20);
2350
+ flex-shrink: 0;
2351
+
2352
+ .k-button {
2353
+ @include lcars-button;
2354
+
2355
+ // Override Kendo flat/outline button styles for consistent LCARS look
2356
+ &.k-button-flat,
2357
+ &.k-button-outline {
2358
+ @include lcars-flat-btn;
2359
+ }
2360
+ }
2361
+ }
2362
+ }
2363
+
2364
+ // Window action buttons (WindowService dialogs) - LCARS style
2365
+ .k-window > .k-actions {
2366
+ background: var(--iron-navy);
2367
+ border-top: 1px solid var(--octo-mint-20);
2368
+
2369
+ .k-button {
2370
+ @include lcars-button;
2371
+
2372
+ &.k-button-flat,
2373
+ &.k-button-outline {
2374
+ @include lcars-flat-btn;
2375
+ }
2376
+ }
2377
+ }
2378
+
2379
+ // Widget config dialog buttons (inside window content) - LCARS style
2380
+ // MeshBoard library exposes `mm-dialog-actions` on all dialog button containers
2381
+ // and `mm-toolbar-actions` on toolbar button areas for consistent host-app styling.
2382
+ .k-window-content {
2383
+ // Standard MeshBoard dialog actions + legacy class names for backward compat
2384
+ .mm-dialog-actions .k-button,
2385
+ .action-bar .k-button,
2386
+ .dialog-actions .k-button,
2387
+ .toolbar .k-button,
2388
+ .dialog-button.k-button {
2389
+ @include lcars-button;
2390
+
2391
+ &.k-button-flat {
2392
+ @include lcars-flat-btn;
2393
+ }
2394
+ }
2395
+ }
2396
+
2397
+ // Dialog Danger variant - for production/staging confirmation dialogs
2398
+ .mm-dialog-danger .k-dialog {
2399
+ border-color: var(--bubblegum-50);
2400
+ box-shadow:
2401
+ 0 16px 64px rgba(0, 0, 0, 0.5),
2402
+ 0 0 40px var(--bubblegum-20);
2403
+
2404
+ .k-dialog-titlebar {
2405
+ border-bottom-color: var(--bubblegum);
2406
+ color: var(--bubblegum);
2407
+
2408
+ &::before {
2409
+ background: var(--bubblegum);
2410
+ }
2411
+ }
2412
+
2413
+ .k-dialog-actions {
2414
+ border-top-color: var(--bubblegum-30);
2415
+ }
2416
+ }
2417
+
2418
+ // Drawer - LCARS style
2419
+ .k-drawer {
2420
+ background: linear-gradient(180deg, var(--iron-navy), var(--deep-sea));
2421
+ border-right: 1px solid var(--octo-mint-20);
2422
+
2423
+ .k-drawer-wrapper {
2424
+ overflow-x: hidden;
2425
+ overflow-y: auto;
2426
+ }
2427
+
2428
+ .k-drawer-items {
2429
+ padding: 4px 0;
2430
+ }
2431
+
2432
+ .k-drawer-item {
2433
+ border-radius: 0 var(--lcars-radius-md) var(--lcars-radius-md) 0;
2434
+ margin: 2px 4px 2px 0;
2435
+ padding: 10px 12px;
2436
+ min-height: 44px;
2437
+ transition: all var(--lcars-transition-fast);
2438
+ display: flex;
2439
+ align-items: center;
2440
+ justify-content: flex-start;
2441
+ gap: 12px;
2442
+ overflow: hidden;
2443
+
2444
+ // Icon sizing
2445
+ .k-icon,
2446
+ .k-svg-icon,
2447
+ kendo-svgicon {
2448
+ flex-shrink: 0;
2449
+ width: 24px;
2450
+ height: 24px;
2451
+ min-width: 24px;
2452
+ }
2453
+
2454
+ // Text styling
2455
+ .k-item-text {
2456
+ white-space: nowrap;
2457
+ overflow: hidden;
2458
+ text-overflow: ellipsis;
2459
+ }
2460
+
2461
+ &:hover {
2462
+ background: var(--octo-mint-10);
2463
+ }
2464
+
2465
+ &.k-selected {
2466
+ background: linear-gradient(90deg, var(--octo-mint-20), transparent);
2467
+ border-left: 3px solid var(--octo-mint);
2468
+ color: var(--octo-mint);
2469
+ }
2470
+
2471
+ // Separator styling
2472
+ &.k-drawer-separator {
2473
+ height: 1px;
2474
+ min-height: 1px;
2475
+ padding: 0;
2476
+ margin: 8px 12px;
2477
+ background: linear-gradient(90deg, var(--octo-mint-30), transparent);
2478
+ }
2479
+ }
2480
+
2481
+ // Collapsed state (mini mode)
2482
+ &[style*="flex-basis: 50px"],
2483
+ &[style*="flex-basis:50px"] {
2484
+ .k-drawer-item {
2485
+ justify-content: center;
2486
+ padding: 10px 0;
2487
+ margin: 2px 0;
2488
+ border-radius: 0;
2489
+
2490
+ .k-icon,
2491
+ .k-svg-icon,
2492
+ kendo-svgicon {
2493
+ margin: 0;
2494
+ }
2495
+
2496
+ &.k-selected {
2497
+ border-left: 3px solid var(--octo-mint);
2498
+ padding-left: 0;
2499
+ }
2500
+ }
2501
+ }
2502
+ }
2503
+
2504
+ // Tabs - LCARS style
2505
+ .k-tabstrip {
2506
+ .k-tabstrip-items {
2507
+ border-bottom: 2px solid var(--ash-blue-20);
2508
+
2509
+ .k-item {
2510
+ font-family: var(--lcars-font-primary);
2511
+ font-weight: 500;
2512
+ text-transform: uppercase;
2513
+ letter-spacing: 0.5px;
2514
+ border-radius: var(--lcars-radius-md) var(--lcars-radius-md) 0 0;
2515
+ transition: all var(--lcars-transition-fast);
2516
+
2517
+ &:hover {
2518
+ background: var(--octo-mint-10);
2519
+ }
2520
+
2521
+ &.k-active {
2522
+ background: var(--iron-navy);
2523
+ border-bottom: 3px solid var(--octo-mint);
2524
+ color: var(--octo-mint);
2525
+ }
2526
+ }
2527
+ }
2528
+ }
2529
+
2530
+ // Cards - LCARS style
2531
+ .k-card {
2532
+ background: var(--lcars-panel-bg);
2533
+ border: var(--lcars-panel-border);
2534
+ border-radius: var(--lcars-radius-md);
2535
+ overflow: hidden;
2536
+
2537
+ .k-card-header {
2538
+ background: linear-gradient(90deg, var(--iron-navy), transparent);
2539
+ border-left: 4px solid var(--octo-mint);
2540
+ font-family: var(--lcars-font-primary);
2541
+ font-weight: 600;
2542
+ }
2543
+ }
2544
+
2545
+ // Tooltip - LCARS style
2546
+ .k-tooltip {
2547
+ background: var(--iron-navy);
2548
+ border: 1px solid var(--octo-mint-40);
2549
+ border-radius: var(--lcars-radius-sm);
2550
+ box-shadow:
2551
+ 0 4px 16px rgba(0, 0, 0, 0.3),
2552
+ var(--lcars-glow-primary);
2553
+ }
2554
+
2555
+ // Progress indicators - LCARS style
2556
+ .k-progressbar {
2557
+ background: var(--ash-blue-20);
2558
+ border-radius: var(--lcars-radius-pill);
2559
+ overflow: hidden;
2560
+
2561
+ .k-selected {
2562
+ background: linear-gradient(90deg, var(--octo-mint), var(--neo-cyan));
2563
+ box-shadow: var(--lcars-glow-primary);
2564
+ }
2565
+ }
2566
+
2567
+ // Chip/Badge - LCARS style
2568
+ .k-chip {
2569
+ font-family: var(--lcars-font-primary);
2570
+ font-weight: 500;
2571
+ border-radius: var(--lcars-radius-sm);
2572
+
2573
+ &.k-chip-solid-primary {
2574
+ background: linear-gradient(
2575
+ 180deg,
2576
+ var(--octo-mint),
2577
+ color.adjust($octo-mint, $lightness: -10%)
2578
+ );
2579
+ }
2580
+ }
2581
+
2582
+ // LCARS utilities
2583
+
2584
+ // Glow effects
2585
+ .lcars-glow-mint {
2586
+ box-shadow: var(--lcars-glow-primary);
2587
+ }
2588
+ .lcars-glow-cyan {
2589
+ box-shadow: var(--lcars-glow-cyan);
2590
+ }
2591
+ .lcars-glow-violet {
2592
+ box-shadow: var(--lcars-glow-violet);
2593
+ }
2594
+ .lcars-glow-pink {
2595
+ box-shadow: var(--lcars-glow-pink);
2596
+ }
2597
+
2598
+ // Text colors
2599
+ .lcars-text-mint {
2600
+ color: var(--octo-mint);
2601
+ }
2602
+ .lcars-text-cyan {
2603
+ color: var(--neo-cyan);
2604
+ }
2605
+ .lcars-text-violet {
2606
+ color: var(--royal-violet);
2607
+ }
2608
+ .lcars-text-pink {
2609
+ color: var(--bubblegum);
2610
+ }
2611
+ .lcars-text-toffee {
2612
+ color: var(--toffee);
2613
+ }
2614
+
2615
+ // Background colors
2616
+ .lcars-bg-panel {
2617
+ background: var(--lcars-panel-bg);
2618
+ }
2619
+ .lcars-bg-deep {
2620
+ background: var(--deep-sea);
2621
+ }
2622
+ .lcars-bg-navy {
2623
+ background: var(--iron-navy);
2624
+ }
2625
+
2626
+ // Borders
2627
+ .lcars-border-mint {
2628
+ border-color: var(--octo-mint);
2629
+ }
2630
+ .lcars-border-glow {
2631
+ border: 1px solid var(--octo-mint-40);
2632
+ box-shadow: var(--lcars-glow-primary);
2633
+ }
2634
+
2635
+ // LCARS decorative elements
2636
+ .lcars-divider {
2637
+ height: 2px;
2638
+ background: linear-gradient(
2639
+ 90deg,
2640
+ var(--octo-mint),
2641
+ var(--neo-cyan),
2642
+ transparent
2643
+ );
2644
+ margin: 16px 0;
2645
+ }
2646
+
2647
+ .lcars-corner-accent {
2648
+ position: relative;
2649
+
2650
+ &::before {
2651
+ content: "";
2652
+ position: absolute;
2653
+ top: 0;
2654
+ left: 0;
2655
+ width: 40px;
2656
+ height: 40px;
2657
+ border-left: 3px solid var(--octo-mint);
2658
+ border-top: 3px solid var(--octo-mint);
2659
+ border-radius: var(--lcars-radius-md) 0 0 0;
2660
+ }
2661
+ }
2662
+
2663
+ // Scan line animation (subtle LCARS effect)
2664
+ .lcars-scanline {
2665
+ position: relative;
2666
+ overflow: hidden;
2667
+
2668
+ &::after {
2669
+ content: "";
2670
+ position: absolute;
2671
+ top: 0;
2672
+ left: -100%;
2673
+ width: 100%;
2674
+ height: 100%;
2675
+ background: linear-gradient(
2676
+ 90deg,
2677
+ transparent,
2678
+ var(--octo-mint-05),
2679
+ transparent
2680
+ );
2681
+ animation: lcars-scan 3s ease-in-out infinite;
2682
+ }
2683
+ }
2684
+
2685
+ @keyframes lcars-scan {
2686
+ 0% {
2687
+ left: -100%;
2688
+ }
2689
+ 100% {
2690
+ left: 100%;
2691
+ }
2692
+ }
2693
+
2694
+ // Pulse animation for active/alert elements
2695
+ @keyframes lcars-pulse {
2696
+ 0%,
2697
+ 100% {
2698
+ opacity: 1;
2699
+ }
2700
+ 50% {
2701
+ opacity: 0.7;
2702
+ }
2703
+ }
2704
+
2705
+ .lcars-pulse {
2706
+ animation: lcars-pulse 2s ease-in-out infinite;
2707
+ }
2708
+
2709
+ // Layout
2710
+
2711
+ .octo-body {
2712
+ padding-left: 5px;
2713
+ padding-right: 5px;
2714
+ display: flex;
2715
+ flex-direction: column;
2716
+ flex: 1;
2717
+ min-height: 0;
2718
+ overflow-y: auto;
2719
+ overflow-x: hidden;
2720
+
2721
+ // Force always-visible scrollbar by using ::-webkit-scrollbar
2722
+ // Reset standard properties so webkit pseudo-elements take effect (Chrome 121+)
2723
+ scrollbar-width: initial;
2724
+ scrollbar-color: auto;
2725
+
2726
+ &::-webkit-scrollbar {
2727
+ width: 10px;
2728
+ -webkit-appearance: none;
2729
+ }
2730
+
2731
+ &::-webkit-scrollbar-thumb {
2732
+ background: var(--ash-blue-80);
2733
+ border-radius: 4px;
2734
+ border: 1px solid var(--octo-mint-30);
2735
+
2736
+ &:hover {
2737
+ background: var(--octo-mint);
2738
+ }
2739
+ }
2740
+
2741
+ &::-webkit-scrollbar-track {
2742
+ background: var(--iron-navy-60);
2743
+ border-radius: 4px;
2744
+ }
2745
+
2746
+ // Override form container to not handle its own scrolling -
2747
+ // let .octo-body handle it to avoid broken height chains
2748
+ .mm-base-form-container {
2749
+ height: auto;
2750
+ overflow: visible;
2751
+ }
2752
+ }
2753
+
2754
+ .octo-header {
2755
+ padding-left: 5px;
2756
+ padding-right: 5px;
2757
+ }
2758
+
2759
+ kendo-drawer-container {
2760
+ display: flex;
2761
+ height: calc(100vh - 56px);
2762
+ align-items: stretch !important;
2763
+ }
2764
+
2765
+ kendo-drawer-content {
2766
+ display: flex !important;
2767
+ flex-direction: column !important;
2768
+ flex: 1 1 0% !important;
2769
+ height: 100% !important;
2770
+ min-height: 0 !important;
2771
+ overflow: hidden !important;
2772
+ align-self: stretch !important;
2773
+ }
2774
+
2775
+ .octo-full {
2776
+ display: flex;
2777
+ flex-direction: row;
2778
+ height: 100%;
2779
+ width: 100%;
2780
+ overflow: hidden;
2781
+ min-height: 600px;
2782
+ }
2783
+
2784
+ // Scrollbars
2785
+
2786
+ ::-webkit-scrollbar {
2787
+ width: 8px;
2788
+ height: 8px;
2789
+ }
2790
+
2791
+ ::-webkit-scrollbar-track {
2792
+ background: var(--deep-sea-50);
2793
+ border-radius: var(--lcars-radius-sm);
2794
+ }
2795
+
2796
+ ::-webkit-scrollbar-thumb {
2797
+ background: linear-gradient(180deg, var(--iron-navy), var(--ash-blue));
2798
+ border-radius: var(--lcars-radius-sm);
2799
+ border: 1px solid var(--octo-mint-20);
2800
+
2801
+ &:hover {
2802
+ background: linear-gradient(180deg, var(--ash-blue), var(--octo-mint));
2803
+ }
2804
+ }
2805
+
2806
+ // Firefox scrollbar
2807
+ * {
2808
+ scrollbar-width: thin;
2809
+ scrollbar-color: var(--iron-navy) var(--deep-sea-50);
2810
+ }
2811
+
2812
+ // Login popup
2813
+
2814
+ mm-login-app-bar-section {
2815
+ --mm-login-bg-start: #{$iron-navy};
2816
+ --mm-login-bg-end: #{$surface-elevated};
2817
+ --mm-login-accent: #{$octo-mint};
2818
+ --mm-login-accent-rgb: 100, 206, 185;
2819
+ --mm-login-text: #ffffff;
2820
+ --mm-login-btn-primary-start: #{$octo-mint};
2821
+ --mm-login-btn-primary-end: #{color.adjust($octo-mint, $lightness: -10%)};
2822
+ --mm-login-btn-primary-text: #{$deep-sea};
2823
+ --mm-login-font: var(--lcars-font-primary);
2824
+ }
2825
+
2826
+ // Style the popup container itself
2827
+ .k-popup {
2828
+ background: var(--iron-navy) !important;
2829
+ border: 1px solid var(--octo-mint-30) !important;
2830
+ border-radius: 8px !important;
2831
+ box-shadow:
2832
+ 0 8px 32px rgba(0, 0, 0, 0.4),
2833
+ 0 0 20px var(--octo-mint-10) !important;
2834
+ // Allow scrolling in dropdowns - do NOT use overflow: hidden
2835
+
2836
+ // Login popup content — rendered in body, so CSS variables from
2837
+ // mm-login-app-bar-section :host don't cascade here. Style directly.
2838
+ > .content {
2839
+ --mm-login-bg-start: #{$iron-navy};
2840
+ --mm-login-bg-end: #{$surface-elevated};
2841
+ --mm-login-accent: #{$octo-mint};
2842
+ --mm-login-accent-rgb: 100, 206, 185;
2843
+ --mm-login-text: #ffffff;
2844
+ --mm-login-btn-primary-start: #{$octo-mint};
2845
+ --mm-login-btn-primary-end: #{color.adjust($octo-mint, $lightness: -10%)};
2846
+ --mm-login-btn-primary-text: #{$deep-sea};
2847
+ --mm-login-font: var(--lcars-font-primary);
2848
+
2849
+ background: linear-gradient(
2850
+ 180deg,
2851
+ var(--iron-navy),
2852
+ var(--surface-elevated)
2853
+ ) !important;
2854
+
2855
+ .user-avatar {
2856
+ border: 2px solid var(--octo-mint-40) !important;
2857
+ box-shadow: 0 0 15px var(--octo-mint-30) !important;
2858
+
2859
+ .k-avatar-text {
2860
+ font-family: var(
2861
+ --lcars-font-primary,
2862
+ "Montserrat",
2863
+ sans-serif
2864
+ ) !important;
2865
+ font-weight: 600 !important;
2866
+ text-transform: uppercase !important;
2867
+ }
2868
+ }
2869
+
2870
+ .user-name {
2871
+ font-family: var(
2872
+ --lcars-font-primary,
2873
+ "Montserrat",
2874
+ sans-serif
2875
+ ) !important;
2876
+ color: var(--octo-text-color) !important;
2877
+ }
2878
+
2879
+ .buttons {
2880
+ .k-button {
2881
+ font-family: var(
2882
+ --lcars-font-primary,
2883
+ "Montserrat",
2884
+ sans-serif
2885
+ ) !important;
2886
+ }
2887
+
2888
+ button.k-button-solid-primary {
2889
+ background: linear-gradient(
2890
+ 180deg,
2891
+ var(--octo-mint),
2892
+ color.adjust($octo-mint, $lightness: -10%)
2893
+ ) !important;
2894
+ border: none !important;
2895
+ color: var(--deep-sea) !important;
2896
+
2897
+ &:hover {
2898
+ background: linear-gradient(
2899
+ 180deg,
2900
+ color.adjust($octo-mint, $lightness: 5%),
2901
+ var(--octo-mint)
2902
+ ) !important;
2903
+ box-shadow: 0 0 15px var(--octo-mint-50) !important;
2904
+ }
2905
+ }
2906
+
2907
+ a.k-button-solid {
2908
+ background: var(--octo-mint-10) !important;
2909
+ border: 1px solid var(--octo-mint-30) !important;
2910
+ color: var(--octo-mint) !important;
2911
+
2912
+ &:hover {
2913
+ background: var(--octo-mint-20) !important;
2914
+ box-shadow: 0 0 10px var(--octo-mint-30) !important;
2915
+ }
2916
+ }
2917
+ }
2918
+ }
2919
+ }
2920
+
2921
+ // Context menu
2922
+ .k-context-menu,
2923
+ .k-menu.k-context-menu {
2924
+ background: var(--iron-navy);
2925
+ border: 1px solid var(--octo-mint-30);
2926
+ border-radius: 8px;
2927
+ box-shadow:
2928
+ 0 8px 32px rgba(0, 0, 0, 0.5),
2929
+ 0 0 20px var(--octo-mint-15);
2930
+ padding: 8px 0;
2931
+ min-width: 180px;
2932
+ overflow: hidden;
2933
+
2934
+ // Menu items
2935
+ .k-menu-item {
2936
+ margin: 0;
2937
+
2938
+ .k-menu-link {
2939
+ padding: 10px 16px;
2940
+ color: var(--ash-blue);
2941
+ font-family: var(--lcars-font-primary);
2942
+ font-size: 0.85rem;
2943
+ font-weight: 500;
2944
+ text-transform: uppercase;
2945
+ letter-spacing: 0.5px;
2946
+ transition: all 0.15s ease;
2947
+ display: flex;
2948
+ align-items: center;
2949
+ gap: 12px;
2950
+
2951
+ .k-menu-link-text {
2952
+ flex: 1;
2953
+ }
2954
+
2955
+ .k-svg-icon,
2956
+ .k-icon,
2957
+ svg {
2958
+ fill: var(--ash-blue);
2959
+ color: var(--ash-blue);
2960
+ width: 18px;
2961
+ height: 18px;
2962
+ transition: all 0.15s ease;
2963
+ }
2964
+ }
2965
+
2966
+ // Hover state
2967
+ &:hover > .k-menu-link,
2968
+ &.k-hover > .k-menu-link {
2969
+ background: linear-gradient(
2970
+ 90deg,
2971
+ var(--octo-mint-20),
2972
+ var(--octo-mint-05)
2973
+ );
2974
+ color: var(--octo-mint);
2975
+
2976
+ .k-svg-icon,
2977
+ .k-icon,
2978
+ svg {
2979
+ fill: var(--octo-mint);
2980
+ color: var(--octo-mint);
2981
+ }
2982
+ }
2983
+
2984
+ // Focus state
2985
+ &:focus > .k-menu-link,
2986
+ &.k-focus > .k-menu-link {
2987
+ background: var(--octo-mint-15);
2988
+ box-shadow: inset 3px 0 0 var(--octo-mint);
2989
+ }
2990
+
2991
+ // Delete/destructive action styling
2992
+ &[data-command="delete"],
2993
+ &.destructive {
2994
+ .k-menu-link {
2995
+ color: var(--bubblegum);
2996
+
2997
+ .k-svg-icon,
2998
+ .k-icon,
2999
+ svg {
3000
+ fill: var(--bubblegum);
3001
+ color: var(--bubblegum);
3002
+ }
3003
+ }
3004
+
3005
+ &:hover > .k-menu-link {
3006
+ background: linear-gradient(
3007
+ 90deg,
3008
+ var(--bubblegum-20),
3009
+ var(--bubblegum-05)
3010
+ );
3011
+ color: var(--bubblegum);
3012
+
3013
+ .k-svg-icon,
3014
+ .k-icon,
3015
+ svg {
3016
+ fill: var(--bubblegum);
3017
+ color: var(--bubblegum);
3018
+ }
3019
+ }
3020
+ }
3021
+ }
3022
+
3023
+ // Separator
3024
+ .k-menu-separator,
3025
+ .k-separator {
3026
+ margin: 8px 12px;
3027
+ height: 1px;
3028
+ background: linear-gradient(
3029
+ 90deg,
3030
+ transparent,
3031
+ var(--octo-mint-30),
3032
+ transparent
3033
+ );
3034
+ border: none;
3035
+ }
3036
+ }
3037
+
3038
+ // Context menu popup wrapper
3039
+ .k-menu-popup {
3040
+ .k-context-menu {
3041
+ background: var(--iron-navy);
3042
+ }
3043
+ }
3044
+
3045
+ // Animation container for context menu
3046
+ .k-animation-container {
3047
+ &:has(.k-context-menu) {
3048
+ border-radius: 8px;
3049
+ overflow: hidden;
3050
+ }
3051
+ }
3052
+
3053
+ // List view
3054
+
3055
+ // Command cell (action buttons) - prevents ugly wrapping and ensures vertical centering
3056
+ td.k-command-cell {
3057
+ vertical-align: middle !important;
3058
+
3059
+ > div {
3060
+ display: flex;
3061
+ flex-wrap: wrap;
3062
+ gap: 4px;
3063
+ align-items: center;
3064
+ justify-content: center;
3065
+ }
3066
+
3067
+ .k-button {
3068
+ padding: 4px 8px;
3069
+ min-width: auto;
3070
+ }
3071
+
3072
+ // Context menu button (three-dot icon) - override Kendo default gray background
3073
+ .k-icon-button {
3074
+ background: transparent;
3075
+ border-color: var(--octo-mint-30);
3076
+ color: var(--octo-mint);
3077
+
3078
+ &:hover {
3079
+ background: var(--octo-mint-10);
3080
+ border-color: var(--octo-mint-50);
3081
+ }
3082
+ }
3083
+ }
3084
+
3085
+ // List view toolbar styling
3086
+ .list-view-toolbar {
3087
+ background: linear-gradient(90deg, var(--octo-mint-10), transparent);
3088
+ border-bottom: 1px solid var(--octo-mint-20);
3089
+ padding: 12px 16px;
3090
+
3091
+ .k-button {
3092
+ @include lcars-button;
3093
+ }
3094
+ }
3095
+
3096
+ // Kendo grid toolbar (rendered by mm-list-view / kendo-grid internally)
3097
+ .k-grid-toolbar {
3098
+ .k-button {
3099
+ @include lcars-button;
3100
+ }
3101
+ }
3102
+
3103
+ // Page toolbar styling - for detail/editor pages
3104
+ // Use this class on any toolbar div in detail components
3105
+ .page-toolbar {
3106
+ display: flex;
3107
+ justify-content: space-between;
3108
+ align-items: center;
3109
+ padding: 8px 0;
3110
+ flex-shrink: 0;
3111
+ gap: 8px;
3112
+
3113
+ .toolbar-left,
3114
+ .toolbar-right {
3115
+ display: flex;
3116
+ gap: 8px;
3117
+ align-items: center;
3118
+ }
3119
+
3120
+ .k-button {
3121
+ @include lcars-button;
3122
+ }
3123
+
3124
+ // Responsive
3125
+ @media (max-width: 768px) {
3126
+ flex-direction: column;
3127
+
3128
+ .toolbar-left,
3129
+ .toolbar-right {
3130
+ width: 100%;
3131
+ justify-content: center;
3132
+ flex-wrap: wrap;
3133
+ }
3134
+ }
3135
+ }
3136
+
3137
+ // LCARS Page Layout Pattern
3138
+ // Use for all page-level list components
3139
+ .lcars-page-header {
3140
+ display: flex;
3141
+ align-items: center;
3142
+ gap: 16px;
3143
+ padding: 12px 0;
3144
+ flex-shrink: 0;
3145
+ }
3146
+
3147
+ .lcars-header-accent {
3148
+ width: 8px;
3149
+ height: 56px;
3150
+ background: linear-gradient(180deg, var(--octo-mint), var(--neo-cyan));
3151
+ border-radius: 4px 0 0 4px;
3152
+ box-shadow: 0 0 15px var(--octo-mint-50);
3153
+ flex-shrink: 0;
3154
+ }
3155
+
3156
+ .header-content {
3157
+ display: flex;
3158
+ flex-direction: column;
3159
+ gap: 4px;
3160
+ }
3161
+
3162
+ .page-title {
3163
+ display: flex;
3164
+ align-items: baseline;
3165
+ gap: 12px;
3166
+ margin: 0;
3167
+ font-family: var(--lcars-font-primary);
3168
+
3169
+ .title-prefix {
3170
+ font-size: 0.7rem;
3171
+ font-weight: 600;
3172
+ letter-spacing: 3px;
3173
+ color: var(--ash-blue);
3174
+ text-transform: uppercase;
3175
+ }
3176
+
3177
+ .title-main {
3178
+ font-size: 1.5rem;
3179
+ font-weight: 600;
3180
+ letter-spacing: 2px;
3181
+ color: var(--octo-text-color);
3182
+ text-transform: uppercase;
3183
+ }
3184
+ }
3185
+
3186
+ .header-stats {
3187
+ display: flex;
3188
+ gap: 16px;
3189
+ }
3190
+
3191
+ .stat-badge {
3192
+ display: flex;
3193
+ align-items: center;
3194
+ gap: 8px;
3195
+ padding: 4px 12px;
3196
+ background: var(--octo-mint-10);
3197
+ border: 1px solid var(--octo-mint-30);
3198
+ border-radius: 4px;
3199
+
3200
+ .badge-icon {
3201
+ font-size: 0.6rem;
3202
+ color: var(--octo-mint);
3203
+ animation: lcars-pulse 2s ease-in-out infinite;
3204
+ }
3205
+
3206
+ .badge-label {
3207
+ font-size: 0.75rem;
3208
+ font-weight: 500;
3209
+ color: var(--octo-mint);
3210
+ text-transform: uppercase;
3211
+ letter-spacing: 1px;
3212
+ }
3213
+ }
3214
+
3215
+ .lcars-header-line {
3216
+ flex: 1;
3217
+ height: 2px;
3218
+ background: linear-gradient(
3219
+ 90deg,
3220
+ var(--octo-mint),
3221
+ var(--neo-cyan),
3222
+ transparent
3223
+ );
3224
+ border-radius: 1px;
3225
+ align-self: center;
3226
+ }
3227
+
3228
+ // Content Panel
3229
+ .lcars-content-panel {
3230
+ flex: 1;
3231
+ display: flex;
3232
+ flex-direction: column;
3233
+ position: relative;
3234
+ background: var(--surface-elevated-40);
3235
+ border: 1px solid var(--octo-mint-20);
3236
+ border-radius: 8px;
3237
+ overflow: hidden;
3238
+ min-height: 0;
3239
+
3240
+ &:hover {
3241
+ border-color: var(--octo-mint-35);
3242
+ box-shadow:
3243
+ 0 4px 30px rgba(0, 0, 0, 0.3),
3244
+ 0 0 30px var(--octo-mint-08);
3245
+ }
3246
+
3247
+ // Ensure child components fill available space
3248
+ mm-list-view,
3249
+ mm-base-tree-detail {
3250
+ flex: 1;
3251
+ display: flex;
3252
+ flex-direction: column;
3253
+ min-height: 0;
3254
+ }
3255
+ }
3256
+
3257
+ .panel-accent-top {
3258
+ height: 3px;
3259
+ background: linear-gradient(
3260
+ 90deg,
3261
+ var(--octo-mint),
3262
+ var(--neo-cyan),
3263
+ var(--royal-violet)
3264
+ );
3265
+ flex-shrink: 0;
3266
+ }
3267
+
3268
+ .panel-accent-bottom {
3269
+ height: 2px;
3270
+ background: linear-gradient(
3271
+ 90deg,
3272
+ transparent,
3273
+ var(--octo-mint-30),
3274
+ transparent
3275
+ );
3276
+ flex-shrink: 0;
3277
+ }
3278
+
3279
+ // LCARS Footer
3280
+ .lcars-footer {
3281
+ display: flex;
3282
+ align-items: center;
3283
+ gap: 8px;
3284
+ padding: 8px 0;
3285
+ flex-shrink: 0;
3286
+ }
3287
+
3288
+ .footer-bar {
3289
+ height: 8px;
3290
+ border-radius: 4px;
3291
+ transition: all 0.3s ease;
3292
+
3293
+ &.bar-1 {
3294
+ width: 60px;
3295
+ background: linear-gradient(90deg, var(--octo-mint), var(--neo-cyan));
3296
+ box-shadow: 0 0 8px var(--octo-mint-40);
3297
+ }
3298
+
3299
+ &.bar-2 {
3300
+ width: 40px;
3301
+ background: var(--royal-violet);
3302
+ box-shadow: 0 0 8px var(--royal-violet-40);
3303
+ }
3304
+
3305
+ &.bar-3 {
3306
+ width: 24px;
3307
+ background: var(--toffee);
3308
+ box-shadow: 0 0 8px var(--toffee-40);
3309
+ }
3310
+ }
3311
+
3312
+ .footer-spacer {
3313
+ flex: 1;
3314
+ }
3315
+
3316
+ .footer-indicator {
3317
+ display: flex;
3318
+ align-items: center;
3319
+ gap: 8px;
3320
+ padding: 4px 12px;
3321
+ background: rgba(55, 180, 0, 0.1);
3322
+ border: 1px solid rgba(55, 180, 0, 0.3);
3323
+ border-radius: 4px;
3324
+
3325
+ .indicator-dot {
3326
+ width: 8px;
3327
+ height: 8px;
3328
+ border-radius: 50%;
3329
+ background: #37b400;
3330
+ box-shadow: 0 0 10px rgba(55, 180, 0, 0.6);
3331
+ animation: lcars-pulse 2s ease-in-out infinite;
3332
+ }
3333
+
3334
+ .indicator-text {
3335
+ font-family: var(--lcars-font-primary);
3336
+ font-size: 0.7rem;
3337
+ font-weight: 600;
3338
+ letter-spacing: 2px;
3339
+ color: #37b400;
3340
+ text-transform: uppercase;
3341
+ }
3342
+ }
3343
+
3344
+ // Responsive LCARS Page Layout
3345
+ @media (max-width: 1024px) {
3346
+ .page-title .title-main {
3347
+ font-size: 1.25rem;
3348
+ }
3349
+
3350
+ .lcars-header-accent {
3351
+ height: 48px;
3352
+ }
3353
+ }
3354
+
3355
+ @media (max-width: 768px) {
3356
+ .lcars-page-header {
3357
+ flex-wrap: wrap;
3358
+ gap: 10px;
3359
+ }
3360
+
3361
+ .lcars-header-accent {
3362
+ width: 6px;
3363
+ height: 40px;
3364
+ }
3365
+
3366
+ .page-title {
3367
+ flex-direction: column;
3368
+ gap: 2px;
3369
+
3370
+ .title-prefix {
3371
+ font-size: 0.6rem;
3372
+ }
3373
+
3374
+ .title-main {
3375
+ font-size: 1.1rem;
3376
+ }
3377
+ }
3378
+
3379
+ .header-stats {
3380
+ display: none;
3381
+ }
3382
+
3383
+ .lcars-header-line {
3384
+ width: 100%;
3385
+ order: 3;
3386
+ }
3387
+
3388
+ .lcars-footer {
3389
+ flex-wrap: wrap;
3390
+ gap: 6px;
3391
+
3392
+ .footer-bar {
3393
+ height: 6px;
3394
+
3395
+ &.bar-1 {
3396
+ width: 40px;
3397
+ }
3398
+ &.bar-2 {
3399
+ width: 28px;
3400
+ }
3401
+ &.bar-3 {
3402
+ width: 18px;
3403
+ }
3404
+ }
3405
+ }
3406
+
3407
+ .footer-indicator {
3408
+ padding: 3px 8px;
3409
+
3410
+ .indicator-text {
3411
+ font-size: 0.6rem;
3412
+ }
3413
+ }
3414
+ }
3415
+
3416
+ @media (max-width: 480px) {
3417
+ .page-title .title-main {
3418
+ font-size: 0.95rem;
3419
+ letter-spacing: 1px;
3420
+ }
3421
+
3422
+ .footer-bar {
3423
+ &.bar-2,
3424
+ &.bar-3 {
3425
+ display: none;
3426
+ }
3427
+ }
3428
+ }
3429
+
3430
+ // mm-base-form
3431
+ .mm-base-form-container {
3432
+ // Override form CSS custom properties for LCARS theme
3433
+ --mm-form-bg: rgba(31, 46, 64, 0.6);
3434
+ --mm-form-bg-alt: rgba(31, 46, 64, 0.8);
3435
+ --mm-form-border: var(--octo-mint-20);
3436
+ --mm-form-border-subtle: var(--octo-mint-15);
3437
+ --mm-form-text: #ffffff;
3438
+ --mm-form-text-subtle: var(--ash-blue);
3439
+ --mm-form-text-label: var(--ash-blue);
3440
+ --mm-form-accent: var(--octo-mint);
3441
+ --mm-form-error: #ec658f;
3442
+ --mm-form-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
3443
+ --mm-form-overlay-bg: rgba(7, 23, 43, 0.95);
3444
+
3445
+ background: linear-gradient(180deg, var(--deep-sea-95), var(--deep-sea));
3446
+
3447
+ // Extra padding at bottom for scroll visibility
3448
+ padding-bottom: 32px !important;
3449
+
3450
+ // Form wrapper LCARS styling
3451
+ .mm-form-wrapper {
3452
+ border-radius: 8px;
3453
+ width: 100% !important;
3454
+ max-width: 1400px !important;
3455
+ margin: 0 0 64px 0 !important; // Left-align with bottom margin for scroll space
3456
+
3457
+ &::before {
3458
+ content: "";
3459
+ display: block;
3460
+ height: 3px;
3461
+ background: linear-gradient(
3462
+ 90deg,
3463
+ var(--octo-mint),
3464
+ var(--neo-cyan),
3465
+ var(--royal-violet)
3466
+ );
3467
+ border-radius: 8px 8px 0 0;
3468
+ }
3469
+ }
3470
+
3471
+ // Form header LCARS styling
3472
+ .mm-form-header {
3473
+ background: var(--octo-mint-05);
3474
+ border-bottom-color: var(--octo-mint-20);
3475
+
3476
+ .mm-form-title {
3477
+ font-family: var(--lcars-font-primary);
3478
+ text-transform: uppercase;
3479
+ letter-spacing: 1px;
3480
+ color: var(--octo-text-color);
3481
+ }
3482
+ }
3483
+
3484
+ // Form actions - LCARS button styling
3485
+ .mm-form-actions {
3486
+ background: var(--octo-mint-05);
3487
+ border-top-color: var(--octo-mint-20);
3488
+
3489
+ .k-button {
3490
+ @include lcars-button;
3491
+ }
3492
+ }
3493
+ }
3494
+
3495
+ // Markdown Widget & Config Dialog - LCARS theme via CSS variable overrides
3496
+ mm-markdown-widget,
3497
+ mm-markdown-config-dialog {
3498
+ --mm-prose-text: #c8d0d8;
3499
+ --mm-prose-heading: #{$octo-mint};
3500
+ --mm-prose-link: #{$neo-cyan};
3501
+ --mm-prose-link-hover: #{$octo-mint};
3502
+ --mm-prose-code-bg: rgba(#{$octo-mint}, 0.1);
3503
+ --mm-prose-code-text: #{$octo-mint};
3504
+ --mm-prose-pre-bg: #{$iron-navy};
3505
+ --mm-prose-pre-border: rgba(#{$octo-mint}, 0.2);
3506
+ --mm-prose-blockquote-border: #{$royal-violet};
3507
+ --mm-prose-blockquote-bg: rgba(#{$royal-violet}, 0.1);
3508
+ --mm-prose-table-header-bg: #{$iron-navy};
3509
+ --mm-prose-table-header-text: #{$octo-mint};
3510
+ --mm-prose-table-border: rgba(#{$octo-mint}, 0.2);
3511
+ --mm-prose-table-row-even: rgba(#{$surface-elevated}, 0.3);
3512
+ --mm-prose-strong: #ffffff;
3513
+ --mm-prose-em: #{$neo-cyan};
3514
+ --mm-prose-marker-ul: #{$octo-mint};
3515
+ --mm-prose-marker-ol: #{$neo-cyan};
3516
+ --mm-prose-hr-start: #{$octo-mint};
3517
+ --mm-prose-hr-end: #{$neo-cyan};
3518
+ --mm-prose-img-border: rgba(#{$octo-mint}, 0.2);
3519
+ --mm-prose-font: var(--lcars-font-primary);
3520
+ }
3521
+
3522
+ mm-markdown-config-dialog {
3523
+ --mm-prose-editor-bg: #{$surface-elevated};
3524
+ --mm-prose-editor-text: #c8d0d8;
3525
+ --mm-prose-editor-placeholder: #6b7a8c;
3526
+ --mm-prose-editor-border: rgba(#{$octo-mint}, 0.3);
3527
+ --mm-prose-preview-border: rgba(#{$octo-mint}, 0.3);
3528
+ --mm-prose-form-bg: #{$iron-navy};
3529
+ --mm-prose-form-border: rgba(#{$octo-mint}, 0.2);
3530
+ --mm-prose-label-text: #c8d0d8;
3531
+ --mm-prose-hint-text: #{$ash-blue};
3532
+ }
3533
+
3534
+ // MeshBoard view
3535
+
3536
+ // MeshBoard View Container
3537
+ .meshboard-view {
3538
+ background: linear-gradient(
3539
+ 180deg,
3540
+ var(--deep-sea-95),
3541
+ var(--deep-sea)
3542
+ ) !important;
3543
+
3544
+ // Loading state
3545
+ .loading-container {
3546
+ .k-loading-text {
3547
+ color: var(--octo-mint);
3548
+ font-family: var(--lcars-font-primary);
3549
+ text-transform: uppercase;
3550
+ letter-spacing: 1px;
3551
+ }
3552
+ }
3553
+
3554
+ // Model unavailable / Not found state
3555
+ .model-unavailable {
3556
+ .message-card {
3557
+ background: var(--surface-elevated-90);
3558
+ border: 1px solid var(--octo-mint-30);
3559
+ border-radius: 8px;
3560
+ box-shadow:
3561
+ 0 8px 32px rgba(0, 0, 0, 0.4),
3562
+ 0 0 20px var(--octo-mint-10);
3563
+
3564
+ &::before {
3565
+ content: "";
3566
+ display: block;
3567
+ height: 3px;
3568
+ background: linear-gradient(90deg, var(--bubblegum), var(--toffee));
3569
+ border-radius: 8px 8px 0 0;
3570
+ margin: -2rem -2rem 1.5rem -2rem;
3571
+ }
3572
+
3573
+ h2 {
3574
+ color: var(--octo-text-color);
3575
+ font-family: var(--lcars-font-primary);
3576
+ text-transform: uppercase;
3577
+ letter-spacing: 1px;
3578
+ }
3579
+
3580
+ p {
3581
+ color: var(--ash-blue);
3582
+ }
3583
+
3584
+ ol {
3585
+ color: var(--ash-blue);
3586
+
3587
+ a {
3588
+ color: var(--octo-mint);
3589
+
3590
+ &:hover {
3591
+ color: var(--neo-cyan);
3592
+ text-shadow: 0 0 8px var(--octo-mint-50);
3593
+ }
3594
+ }
3595
+ }
3596
+
3597
+ kendo-svg-icon {
3598
+ color: var(--bubblegum);
3599
+ }
3600
+ }
3601
+ }
3602
+ }
3603
+
3604
+ // MeshBoard Toolbar - LCARS style
3605
+ .meshboard-toolbar {
3606
+ background: linear-gradient(
3607
+ 90deg,
3608
+ var(--iron-navy),
3609
+ var(--surface-elevated)
3610
+ ) !important;
3611
+ border-bottom: 2px solid var(--octo-mint-30) !important;
3612
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
3613
+
3614
+ .toolbar-left {
3615
+ .meshboard-title {
3616
+ color: var(--octo-text-color) !important;
3617
+ font-family: var(--lcars-font-primary);
3618
+ text-transform: uppercase;
3619
+ letter-spacing: 1px;
3620
+ }
3621
+
3622
+ .meshboard-description {
3623
+ color: var(--ash-blue) !important;
3624
+ }
3625
+ }
3626
+
3627
+ .toolbar-right,
3628
+ .mm-toolbar-actions {
3629
+ .k-button {
3630
+ @include lcars-button;
3631
+ }
3632
+ }
3633
+ }
3634
+
3635
+ // MeshBoard Empty State - LCARS style
3636
+ .meshboard-view .empty-state {
3637
+ .empty-state-content {
3638
+ background: var(--surface-elevated-60);
3639
+ border: 1px solid var(--octo-mint-20);
3640
+ border-radius: 12px;
3641
+ padding: 3rem;
3642
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
3643
+
3644
+ kendo-svg-icon {
3645
+ color: var(--octo-mint) !important;
3646
+ opacity: 0.6;
3647
+ }
3648
+
3649
+ h3 {
3650
+ color: var(--octo-text-color) !important;
3651
+ font-family: var(--lcars-font-primary);
3652
+ text-transform: uppercase;
3653
+ letter-spacing: 1px;
3654
+ }
3655
+
3656
+ p {
3657
+ color: var(--ash-blue) !important;
3658
+ }
3659
+
3660
+ .k-button {
3661
+ @include lcars-button;
3662
+ }
3663
+ }
3664
+ }
3665
+
3666
+ // Kendo TileLayout - LCARS style
3667
+ kendo-tilelayout {
3668
+ background: transparent !important;
3669
+
3670
+ kendo-tilelayout-item {
3671
+ background: var(--surface-elevated-60) !important;
3672
+ border: 1px solid var(--octo-mint-20) !important;
3673
+ border-radius: 8px !important;
3674
+ overflow: hidden;
3675
+ transition:
3676
+ border-color 0.2s ease,
3677
+ box-shadow 0.2s ease;
3678
+
3679
+ &:hover {
3680
+ border-color: var(--octo-mint-40) !important;
3681
+ box-shadow:
3682
+ 0 4px 20px rgba(0, 0, 0, 0.3),
3683
+ 0 0 15px var(--octo-mint-10);
3684
+ }
3685
+
3686
+ // Widget header
3687
+ kendo-tilelayout-item-header {
3688
+ background: linear-gradient(
3689
+ 90deg,
3690
+ var(--octo-mint-10),
3691
+ transparent
3692
+ ) !important;
3693
+ border-bottom: 1px solid var(--octo-mint-20) !important;
3694
+
3695
+ .widget-header {
3696
+ .widget-title {
3697
+ color: var(--octo-mint) !important;
3698
+ font-family: var(--lcars-font-primary);
3699
+ font-weight: 600;
3700
+ text-transform: uppercase;
3701
+ letter-spacing: 0.5px;
3702
+ font-size: 0.85rem;
3703
+ }
3704
+
3705
+ &.unconfigured {
3706
+ background: var(--toffee-15) !important;
3707
+ }
3708
+
3709
+ .unconfigured-badge {
3710
+ background: var(--toffee) !important;
3711
+ box-shadow: 0 0 8px var(--toffee-50);
3712
+ }
3713
+
3714
+ .widget-actions {
3715
+ .k-button {
3716
+ color: var(--ash-blue);
3717
+
3718
+ &:hover {
3719
+ color: var(--octo-mint);
3720
+ background: var(--octo-mint-15);
3721
+ }
3722
+ }
3723
+
3724
+ .config-widget-btn.needs-config {
3725
+ color: var(--toffee) !important;
3726
+ }
3727
+
3728
+ .remove-widget-btn {
3729
+ color: var(--bubblegum) !important;
3730
+
3731
+ &:hover {
3732
+ background: var(--bubblegum-15);
3733
+ }
3734
+ }
3735
+ }
3736
+ }
3737
+ }
3738
+
3739
+ // Widget body
3740
+ kendo-tilelayout-item-body {
3741
+ background: var(--deep-sea-50) !important;
3742
+ }
3743
+ }
3744
+ }
3745
+
3746
+ // Fix Kendo TileLayout drag offset caused by CSS zoom on kendo-drawer-content.
3747
+ // When a tile is dragged, Kendo sets position:fixed on the item and calculates
3748
+ // coordinates in viewport space. The parent zoom (from DensityService) scales
3749
+ // those coordinates, causing the dragged tile to appear offset from the cursor.
3750
+ // Counter-zooming the dragged item restores correct coordinate mapping.
3751
+ kendo-tilelayout-item[style*="position: fixed"] {
3752
+ zoom: calc(1 / var(--density-zoom, 1));
3753
+ }
3754
+
3755
+ // Fix Kendo popup positioning when CSS zoom (density) is active on kendo-drawer-content.
3756
+ // Popups with appendTo:'root' are rendered as direct children of <app-root>, outside
3757
+ // the zoomed container. The dropdown component uses wrapper.offsetWidth (inflated by
3758
+ // the zoom factor) for min-width, causing popups to be too wide and mispositioned.
3759
+ // Using transform:scale() instead of CSS zoom because:
3760
+ // - CSS zoom scales BOTH content AND the element's left/top position interpretation,
3761
+ // causing the popup to shift up-left from its intended anchor position.
3762
+ // - transform:scale() only scales the visual rendering from transform-origin,
3763
+ // keeping left/top positioning intact (calculated correctly by Kendo from
3764
+ // getBoundingClientRect of the anchor element).
3765
+ app-root > .k-animation-container {
3766
+ transform: scale(var(--density-zoom, 1));
3767
+ transform-origin: top left;
3768
+ }
3769
+
3770
+ // Widget Error State
3771
+ .widget-error {
3772
+ color: var(--bubblegum) !important;
3773
+ font-family: var(--lcars-font-primary);
3774
+ }
3775
+
3776
+ // MeshBoard widgets
3777
+
3778
+ // KPI Widget
3779
+ .kpi-widget {
3780
+ .kpi-value {
3781
+ color: var(--octo-mint) !important;
3782
+ font-family: var(--lcars-font-primary);
3783
+ text-shadow: 0 0 20px var(--octo-mint-30);
3784
+ }
3785
+
3786
+ .kpi-prefix,
3787
+ .kpi-suffix {
3788
+ color: var(--ash-blue) !important;
3789
+ }
3790
+
3791
+ .kpi-label {
3792
+ color: var(--ash-blue) !important;
3793
+ font-family: var(--lcars-font-primary);
3794
+ text-transform: uppercase;
3795
+ letter-spacing: 1px;
3796
+ }
3797
+
3798
+ .kpi-trend {
3799
+ &.trend-up {
3800
+ background: var(--octo-mint-15) !important;
3801
+ color: var(--octo-mint) !important;
3802
+ }
3803
+
3804
+ &.trend-down {
3805
+ background: var(--bubblegum-15) !important;
3806
+ color: var(--bubblegum) !important;
3807
+ }
3808
+
3809
+ &.trend-neutral {
3810
+ background: var(--ash-blue-15) !important;
3811
+ color: var(--ash-blue) !important;
3812
+ }
3813
+ }
3814
+ }
3815
+
3816
+ // Widget Group - LCARS item header styling
3817
+ .widget-group-item-header {
3818
+ background: var(--iron-navy-80) !important;
3819
+ border-bottom-color: var(--octo-mint-15) !important;
3820
+ }
3821
+
3822
+ .widget-group-item-title {
3823
+ font-family: var(--lcars-font-primary);
3824
+ letter-spacing: 0.5px;
3825
+ }
3826
+
3827
+ // Entity Associations Widget - LCARS background styling
3828
+ .group-header {
3829
+ background: var(--iron-navy-60) !important;
3830
+
3831
+ &:hover {
3832
+ background: var(--iron-navy-80) !important;
3833
+ }
3834
+ }
3835
+
3836
+ // Stats Grid Widget - LCARS theme via CSS variable overrides
3837
+ mm-stats-grid-widget {
3838
+ --mm-stat-mint-bg: rgba(#{$octo-mint}, 0.1);
3839
+ --mm-stat-mint-border: #{$octo-mint};
3840
+ --mm-stat-mint-text: #{$octo-mint};
3841
+ --mm-stat-mint-glow: 0 0 15px rgba(#{$octo-mint}, 0.4);
3842
+
3843
+ --mm-stat-cyan-bg: rgba(#{$neo-cyan}, 0.1);
3844
+ --mm-stat-cyan-border: #{$neo-cyan};
3845
+ --mm-stat-cyan-text: #{$neo-cyan};
3846
+ --mm-stat-cyan-glow: 0 0 15px rgba(#{$neo-cyan}, 0.4);
3847
+
3848
+ --mm-stat-violet-bg: rgba(#{$royal-violet}, 0.1);
3849
+ --mm-stat-violet-border: #{$royal-violet};
3850
+ --mm-stat-violet-text: #{$lilac-glow};
3851
+ --mm-stat-violet-glow: 0 0 15px rgba(#{$royal-violet}, 0.4);
3852
+
3853
+ --mm-stat-toffee-bg: rgba(#{$toffee}, 0.1);
3854
+ --mm-stat-toffee-border: #{$toffee};
3855
+ --mm-stat-toffee-text: #{$toffee};
3856
+ --mm-stat-toffee-glow: 0 0 15px rgba(#{$toffee}, 0.4);
3857
+
3858
+ --mm-stat-lilac-bg: rgba(#{$lilac-glow}, 0.1);
3859
+ --mm-stat-lilac-border: #{$lilac-glow};
3860
+ --mm-stat-lilac-text: #{$lilac-glow};
3861
+ --mm-stat-lilac-glow: 0 0 15px rgba(#{$lilac-glow}, 0.4);
3862
+
3863
+ --mm-stat-bubblegum-bg: rgba(#{$bubblegum}, 0.1);
3864
+ --mm-stat-bubblegum-border: #{$bubblegum};
3865
+ --mm-stat-bubblegum-text: #{$bubblegum};
3866
+ --mm-stat-bubblegum-glow: 0 0 15px rgba(#{$bubblegum}, 0.4);
3867
+
3868
+ --mm-stat-default-bg: rgba(#{$ash-blue}, 0.1);
3869
+ --mm-stat-default-border: #{$ash-blue};
3870
+ --mm-stat-default-text: #ffffff;
3871
+ --mm-stat-default-glow: none;
3872
+ }
3873
+
3874
+ // Additional stats-grid LCARS styling (hover, fonts, labels)
3875
+ .stats-grid {
3876
+ .stat-card {
3877
+ background: var(--surface-elevated-40) !important;
3878
+ border: 1px solid var(--octo-mint-15);
3879
+ border-radius: 8px;
3880
+
3881
+ &:hover {
3882
+ box-shadow:
3883
+ 0 4px 16px rgba(0, 0, 0, 0.3),
3884
+ 0 0 10px var(--octo-mint-15);
3885
+ border-color: var(--octo-mint-30);
3886
+ }
3887
+ }
3888
+
3889
+ .stat-value {
3890
+ font-family: var(--lcars-font-primary);
3891
+ }
3892
+
3893
+ .stat-label {
3894
+ color: var(--ash-blue) !important;
3895
+ font-family: var(--lcars-font-primary);
3896
+ }
3897
+
3898
+ .stats-error {
3899
+ color: var(--bubblegum) !important;
3900
+ }
3901
+ }
3902
+
3903
+ // Service Health Widget
3904
+ .service-health {
3905
+ background: var(--surface-elevated-40) !important;
3906
+ border: 1px solid var(--octo-mint-15);
3907
+
3908
+ &.clickable:hover {
3909
+ background: var(--surface-elevated-60) !important;
3910
+ box-shadow:
3911
+ 0 2px 12px rgba(0, 0, 0, 0.3),
3912
+ 0 0 10px var(--octo-mint-10);
3913
+ border-color: var(--octo-mint-30);
3914
+ }
3915
+
3916
+ &.healthy {
3917
+ .health-dot {
3918
+ background: var(--octo-mint) !important;
3919
+ box-shadow: 0 0 12px var(--octo-mint-60);
3920
+ }
3921
+
3922
+ .pulse-ring.pulse-active {
3923
+ border-color: var(--octo-mint) !important;
3924
+ }
3925
+
3926
+ .health-status {
3927
+ color: var(--octo-mint) !important;
3928
+ }
3929
+ }
3930
+
3931
+ &.unhealthy {
3932
+ .health-dot {
3933
+ background: var(--bubblegum) !important;
3934
+ box-shadow: 0 0 12px var(--bubblegum-60);
3935
+ }
3936
+
3937
+ .pulse-ring {
3938
+ border-color: var(--bubblegum) !important;
3939
+ }
3940
+
3941
+ .health-status {
3942
+ color: var(--bubblegum) !important;
3943
+ }
3944
+ }
3945
+
3946
+ .service-name {
3947
+ color: var(--octo-text-color) !important;
3948
+ font-family: var(--lcars-font-primary);
3949
+ }
3950
+
3951
+ .health-status {
3952
+ font-family: var(--lcars-font-primary);
3953
+ text-transform: uppercase;
3954
+ letter-spacing: 0.5px;
3955
+ }
3956
+
3957
+ .last-checked {
3958
+ color: var(--ash-blue-70) !important;
3959
+ }
3960
+ }
3961
+
3962
+ // Entity Card Widget - UML style with LCARS colors
3963
+ .entity-card {
3964
+ background: var(--surface-elevated-60) !important;
3965
+ border: 1px solid var(--octo-mint-20) !important;
3966
+
3967
+ .entity-header {
3968
+ background: linear-gradient(
3969
+ 180deg,
3970
+ var(--octo-mint-30),
3971
+ var(--octo-mint-15)
3972
+ ) !important;
3973
+ border-bottom: 2px solid var(--octo-mint);
3974
+
3975
+ .entity-stereotype {
3976
+ color: rgba(#ffffff, 0.8) !important;
3977
+ }
3978
+
3979
+ .entity-name {
3980
+ color: var(--octo-text-color) !important;
3981
+ font-family: var(--lcars-font-primary);
3982
+ }
3983
+ }
3984
+
3985
+ .entity-attributes {
3986
+ background: var(--deep-sea-50);
3987
+
3988
+ .attribute-row {
3989
+ border-bottom-color: var(--octo-mint-10) !important;
3990
+
3991
+ &:hover {
3992
+ background: var(--octo-mint-08) !important;
3993
+ }
3994
+ }
3995
+
3996
+ .attribute-name {
3997
+ color: var(--ash-blue) !important;
3998
+ }
3999
+
4000
+ .attribute-value {
4001
+ color: var(--octo-text-color) !important;
4002
+ }
4003
+ }
4004
+
4005
+ .entity-footer {
4006
+ background: var(--iron-navy-50) !important;
4007
+ border-top-color: var(--octo-mint-20) !important;
4008
+
4009
+ .entity-id {
4010
+ color: var(--ash-blue) !important;
4011
+ font-family: var(--lcars-font-mono);
4012
+ }
4013
+ }
4014
+ }
4015
+
4016
+ // Status Indicator Widget
4017
+ .status-indicator {
4018
+ .status-badge {
4019
+ font-family: var(--lcars-font-primary);
4020
+ box-shadow: 0 0 15px rgba(0, 0, 0, 0.3);
4021
+ }
4022
+
4023
+ .status-text {
4024
+ text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
4025
+ }
4026
+
4027
+ .status-error {
4028
+ color: var(--bubblegum) !important;
4029
+ }
4030
+ }
4031
+
4032
+ // MeshBoard dialogs
4033
+
4034
+ // Add Widget Dialog
4035
+ .add-widget-dialog {
4036
+ .dialog-content {
4037
+ .dialog-description {
4038
+ color: var(--ash-blue) !important;
4039
+ }
4040
+
4041
+ .widget-types-list {
4042
+ background: var(--deep-sea-50) !important;
4043
+ border-color: var(--octo-mint-20) !important;
4044
+
4045
+ .list-header {
4046
+ background: linear-gradient(
4047
+ 90deg,
4048
+ var(--octo-mint-10),
4049
+ transparent
4050
+ ) !important;
4051
+ border-bottom-color: var(--octo-mint-20) !important;
4052
+ color: var(--octo-mint) !important;
4053
+ font-family: var(--lcars-font-primary);
4054
+ text-transform: uppercase;
4055
+ letter-spacing: 0.5px;
4056
+ }
4057
+
4058
+ .widget-type-item {
4059
+ border-bottom-color: var(--octo-mint-10) !important;
4060
+
4061
+ &:hover {
4062
+ background: var(--octo-mint-08) !important;
4063
+ }
4064
+
4065
+ &.selected {
4066
+ background: var(--octo-mint-15) !important;
4067
+ box-shadow: inset 3px 0 0 var(--octo-mint) !important;
4068
+ }
4069
+
4070
+ .widget-icon {
4071
+ background: var(--octo-mint-10) !important;
4072
+ color: var(--octo-mint) !important;
4073
+ }
4074
+
4075
+ &.selected .widget-icon {
4076
+ background: var(--octo-mint) !important;
4077
+ color: var(--deep-sea) !important;
4078
+ }
4079
+
4080
+ .widget-info {
4081
+ .widget-label {
4082
+ color: var(--octo-text-color) !important;
4083
+ }
4084
+
4085
+ .widget-description {
4086
+ color: var(--ash-blue) !important;
4087
+ }
4088
+ }
4089
+
4090
+ .selected-indicator {
4091
+ color: var(--octo-mint) !important;
4092
+ }
4093
+ }
4094
+ }
4095
+ }
4096
+
4097
+ .dialog-actions {
4098
+ border-top-color: var(--octo-mint-20) !important;
4099
+ }
4100
+ }
4101
+
4102
+ // MeshBoard Manager Dialog
4103
+ .meshboard-manager-dialog {
4104
+ .dialog-header {
4105
+ .dialog-description {
4106
+ color: var(--ash-blue) !important;
4107
+ }
4108
+
4109
+ .header-actions .k-button {
4110
+ @include lcars-button;
4111
+ }
4112
+ }
4113
+
4114
+ .create-form {
4115
+ background: var(--surface-elevated-50) !important;
4116
+ border-color: var(--octo-mint-20) !important;
4117
+
4118
+ .form-title {
4119
+ color: var(--octo-mint) !important;
4120
+ font-family: var(--lcars-font-primary);
4121
+ text-transform: uppercase;
4122
+ letter-spacing: 0.5px;
4123
+ }
4124
+
4125
+ .form-actions .k-button {
4126
+ @include lcars-button;
4127
+ }
4128
+ }
4129
+
4130
+ .meshboards-list {
4131
+ background: var(--deep-sea-50) !important;
4132
+ border-color: var(--octo-mint-20) !important;
4133
+
4134
+ .loading-state,
4135
+ .empty-state {
4136
+ color: var(--ash-blue) !important;
4137
+
4138
+ h3 {
4139
+ color: var(--octo-text-color) !important;
4140
+ }
4141
+
4142
+ p {
4143
+ color: var(--ash-blue) !important;
4144
+ }
4145
+
4146
+ kendo-svg-icon {
4147
+ color: var(--octo-mint) !important;
4148
+ opacity: 0.5;
4149
+ }
4150
+ }
4151
+
4152
+ .meshboard-item {
4153
+ border-bottom-color: var(--octo-mint-10) !important;
4154
+
4155
+ &:not(.active):not(.editing):hover {
4156
+ background: var(--octo-mint-08) !important;
4157
+ }
4158
+
4159
+ &.active {
4160
+ background: var(--octo-mint-15) !important;
4161
+ box-shadow: inset 4px 0 0 var(--octo-mint) !important;
4162
+ }
4163
+
4164
+ &.editing {
4165
+ background: var(--surface-elevated-60) !important;
4166
+ }
4167
+
4168
+ .item-content {
4169
+ .item-icon {
4170
+ background: var(--octo-mint-10) !important;
4171
+ color: var(--octo-mint) !important;
4172
+ }
4173
+
4174
+ .item-info {
4175
+ .item-name {
4176
+ color: var(--octo-text-color) !important;
4177
+
4178
+ .active-badge {
4179
+ background: var(--octo-mint) !important;
4180
+ color: var(--deep-sea) !important;
4181
+ }
4182
+ }
4183
+
4184
+ .item-description {
4185
+ color: var(--ash-blue) !important;
4186
+ }
4187
+ }
4188
+
4189
+ &::after {
4190
+ color: var(--octo-mint-50) !important;
4191
+ }
4192
+ }
4193
+
4194
+ &.active .item-content .item-icon {
4195
+ background: var(--octo-mint) !important;
4196
+ color: var(--deep-sea) !important;
4197
+ }
4198
+
4199
+ .item-edit {
4200
+ .edit-actions .k-button {
4201
+ @include lcars-button;
4202
+ }
4203
+ }
4204
+ }
4205
+ }
4206
+ }
4207
+
4208
+ // MeshBoard Settings Dialog
4209
+ .meshboard-settings-dialog {
4210
+ overflow: hidden;
4211
+ display: flex;
4212
+ flex-direction: column;
4213
+ height: 100%;
4214
+ max-height: none;
4215
+
4216
+ .settings-form {
4217
+ flex: 1;
4218
+ min-height: 0;
4219
+ overflow-y: auto !important;
4220
+ padding: 1.5rem;
4221
+ max-height: calc(80vh - 140px); // Account for dialog header and footer
4222
+
4223
+ .form-group {
4224
+ label {
4225
+ color: var(--ash-blue) !important;
4226
+ font-family: var(--lcars-font-primary);
4227
+ text-transform: uppercase;
4228
+ letter-spacing: 0.5px;
4229
+ font-size: 0.8rem;
4230
+ }
4231
+ }
4232
+
4233
+ .section-title {
4234
+ color: var(--octo-mint) !important;
4235
+ border-bottom-color: var(--octo-mint-20) !important;
4236
+ font-family: var(--lcars-font-primary);
4237
+ }
4238
+
4239
+ kendo-formfield {
4240
+ kendo-label {
4241
+ color: var(--ash-blue) !important;
4242
+ font-family: var(--lcars-font-primary);
4243
+ text-transform: uppercase;
4244
+ letter-spacing: 0.5px;
4245
+ font-size: 0.8rem;
4246
+ }
4247
+
4248
+ kendo-formhint {
4249
+ color: var(--ash-blue-70) !important;
4250
+ }
4251
+ }
4252
+ }
4253
+
4254
+ kendo-dialog-actions {
4255
+ flex-shrink: 0;
4256
+ background: var(--iron-navy) !important;
4257
+ border-top-color: var(--octo-mint-20) !important;
4258
+ }
4259
+ }
4260
+
4261
+ // MeshBoard Settings Dialog - proper sizing and scrolling
4262
+ .k-window.k-dialog:has(.meshboard-settings-dialog),
4263
+ .k-dialog:has(.meshboard-settings-dialog) {
4264
+ width: 800px !important;
4265
+ max-width: 90vw !important;
4266
+ height: auto !important;
4267
+ min-height: 400px !important;
4268
+ max-height: 90vh !important;
4269
+
4270
+ .k-window-content.k-dialog-content,
4271
+ .k-dialog-content {
4272
+ overflow: hidden !important;
4273
+ display: flex !important;
4274
+ flex-direction: column !important;
4275
+ padding: 0 !important;
4276
+ flex: 1 !important;
4277
+ min-height: 0 !important;
4278
+ height: auto !important;
4279
+ }
4280
+ }
4281
+
4282
+ // MeshBoard Manager Dialog
4283
+ .k-dialog:has(.meshboard-manager-dialog) {
4284
+ .k-dialog-content {
4285
+ overflow: hidden !important;
4286
+ display: flex;
4287
+ flex-direction: column;
4288
+ padding: 0 !important;
4289
+ }
4290
+ }
4291
+
4292
+ // Variables Editor (in dialogs) - Override library component styles
4293
+ mm-variables-editor .variables-editor,
4294
+ .variables-editor {
4295
+ background: var(--surface-elevated-60) !important;
4296
+ border: 1px solid var(--octo-mint-20) !important;
4297
+ border-radius: 8px !important;
4298
+ padding: 1rem !important;
4299
+
4300
+ .variables-header {
4301
+ border-bottom: 1px solid var(--octo-mint-20) !important;
4302
+
4303
+ .section-title {
4304
+ color: var(--octo-mint) !important;
4305
+ font-family: var(--lcars-font-primary) !important;
4306
+ text-transform: uppercase;
4307
+ letter-spacing: 0.5px;
4308
+ }
4309
+ }
4310
+
4311
+ .variables-list {
4312
+ background: var(--deep-sea-50) !important;
4313
+ border-color: var(--octo-mint-20) !important;
4314
+
4315
+ .list-header {
4316
+ background: var(--octo-mint-10) !important;
4317
+ border-bottom-color: var(--octo-mint-20) !important;
4318
+ color: var(--octo-mint) !important;
4319
+ }
4320
+
4321
+ .variable-row {
4322
+ border-bottom-color: var(--octo-mint-10) !important;
4323
+
4324
+ &:hover {
4325
+ background: var(--octo-mint-05) !important;
4326
+ }
4327
+
4328
+ .error-text {
4329
+ color: var(--bubblegum) !important;
4330
+ }
4331
+ }
4332
+ }
4333
+
4334
+ .empty-state {
4335
+ background: var(--deep-sea-50) !important;
4336
+ border: 1px dashed var(--octo-mint-30) !important;
4337
+ color: var(--ash-blue) !important;
4338
+
4339
+ p {
4340
+ color: var(--ash-blue) !important;
4341
+ }
4342
+
4343
+ .hint {
4344
+ color: var(--ash-blue-70) !important;
4345
+ }
4346
+ }
4347
+
4348
+ .usage-hint {
4349
+ background: var(--deep-sea-50) !important;
4350
+ border: 1px solid var(--octo-mint-15) !important;
4351
+ color: var(--ash-blue) !important;
4352
+
4353
+ strong {
4354
+ color: var(--octo-mint) !important;
4355
+ }
4356
+
4357
+ code {
4358
+ background: var(--octo-mint-15) !important;
4359
+ color: var(--octo-mint) !important;
4360
+ font-family: var(--lcars-font-mono) !important;
4361
+ }
4362
+ }
4363
+ }
4364
+
4365
+ // Time Range Picker in MeshBoard toolbar
4366
+ mm-time-range-picker {
4367
+ .time-range-picker {
4368
+ .k-button {
4369
+ @include lcars-button;
4370
+
4371
+ &.active {
4372
+ background: var(--octo-mint-25) !important;
4373
+ border-color: var(--octo-mint) !important;
4374
+ color: var(--octo-text-color) !important;
4375
+ }
4376
+ }
4377
+
4378
+ .date-range-display {
4379
+ color: var(--ash-blue);
4380
+ font-family: var(--lcars-font-mono);
4381
+ font-size: 0.85rem;
4382
+ }
4383
+ }
4384
+ }
4385
+
4386
+ // Cron builder
4387
+ mm-cron-builder {
4388
+ // Override CSS custom properties with LCARS theme colors
4389
+ --mm-cron-bg: #{var(--surface-elevated-60)};
4390
+ --mm-cron-border: #{var(--octo-mint-20)};
4391
+ --mm-cron-border-radius: 8px;
4392
+ --mm-cron-text: #ffffff;
4393
+ --mm-cron-text-secondary: #{$ash-blue};
4394
+ --mm-cron-accent: #{$octo-mint};
4395
+ --mm-cron-accent-hover: #{color.adjust($octo-mint, $lightness: 10%)};
4396
+ --mm-cron-preview-bg: #{var(--deep-sea-80)};
4397
+ --mm-cron-tab-active-bg: #{var(--octo-mint-15)};
4398
+ --mm-cron-tab-active-border: #{$octo-mint};
4399
+ --mm-cron-error: #{$bubblegum};
4400
+ --mm-cron-success: #37b400;
4401
+ --mm-cron-code-bg: #{$deep-sea};
4402
+ --mm-cron-code-text: #{$octo-mint};
4403
+ --mm-cron-shadow:
4404
+ 0 4px 20px rgba(0, 0, 0, 0.3), 0 0 20px #{var(--octo-mint-08)};
4405
+ --mm-cron-font-family: var(--lcars-font-primary);
4406
+ --mm-cron-font-mono: var(--lcars-font-mono);
4407
+
4408
+ // Additional LCARS styling
4409
+ .cron-builder {
4410
+ border: 1px solid var(--octo-mint-25);
4411
+ transition:
4412
+ border-color 0.2s ease,
4413
+ box-shadow 0.2s ease;
4414
+
4415
+ &:hover:not(.disabled) {
4416
+ border-color: var(--octo-mint-40);
4417
+ box-shadow:
4418
+ 0 4px 30px rgba(0, 0, 0, 0.3),
4419
+ 0 0 25px var(--octo-mint-10);
4420
+ }
4421
+ }
4422
+
4423
+ // Expression display with LCARS glow
4424
+ .expression-value {
4425
+ border: 1px solid var(--octo-mint-30);
4426
+ box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.3);
4427
+
4428
+ &:not(.invalid) {
4429
+ text-shadow: 0 0 8px var(--octo-mint-50);
4430
+ }
4431
+ }
4432
+
4433
+ // Human readable preview
4434
+ .human-readable {
4435
+ background: linear-gradient(
4436
+ 135deg,
4437
+ var(--iron-navy-80),
4438
+ var(--deep-sea-90)
4439
+ );
4440
+ border: 1px solid var(--octo-mint-15);
4441
+ border-left: 3px solid var(--octo-mint);
4442
+ }
4443
+
4444
+ // Preset buttons LCARS styling
4445
+ .preset-button {
4446
+ @include lcars-button;
4447
+
4448
+ &:hover:not(:disabled) {
4449
+ border-color: var(--octo-mint);
4450
+ color: var(--octo-mint);
4451
+ box-shadow: 0 0 10px var(--octo-mint-30);
4452
+ }
4453
+ }
4454
+
4455
+ // Day toggle buttons
4456
+ .day-button {
4457
+ @include lcars-button;
4458
+
4459
+ &.k-selected,
4460
+ &[ng-reflect-selected="true"] {
4461
+ background: linear-gradient(
4462
+ 180deg,
4463
+ var(--octo-mint-30),
4464
+ var(--octo-mint-20)
4465
+ ) !important;
4466
+ border-color: var(--octo-mint) !important;
4467
+ color: var(--octo-text-color) !important;
4468
+ box-shadow: 0 0 10px var(--octo-mint-40);
4469
+ }
4470
+ }
4471
+
4472
+ // Mode buttons (daily mode, monthly mode)
4473
+ .mode-buttons button {
4474
+ @include lcars-button;
4475
+
4476
+ &.k-selected,
4477
+ &[ng-reflect-selected="true"] {
4478
+ background: linear-gradient(
4479
+ 180deg,
4480
+ var(--octo-mint-30),
4481
+ var(--octo-mint-20)
4482
+ ) !important;
4483
+ border-color: var(--octo-mint) !important;
4484
+ color: var(--octo-text-color) !important;
4485
+ box-shadow: 0 0 10px var(--octo-mint-40);
4486
+ }
4487
+ }
4488
+
4489
+ // TabStrip LCARS overrides
4490
+ ::ng-deep .k-tabstrip {
4491
+ .k-tabstrip-items-wrapper {
4492
+ background: transparent;
4493
+ border-bottom: 1px solid var(--octo-mint-20);
4494
+ }
4495
+
4496
+ .k-tabstrip-items .k-item {
4497
+ background: transparent;
4498
+ color: var(--ash-blue);
4499
+ font-family: var(--lcars-font-primary);
4500
+ font-weight: 500;
4501
+ text-transform: uppercase;
4502
+ font-size: 0.75rem;
4503
+ letter-spacing: 0.5px;
4504
+ border: none;
4505
+ transition: all 0.15s ease;
4506
+
4507
+ &:hover:not(.k-active) {
4508
+ color: var(--octo-text-color);
4509
+ background: var(--octo-mint-10);
4510
+ }
4511
+
4512
+ &.k-active {
4513
+ color: var(--octo-mint);
4514
+ background: var(--octo-mint-15);
4515
+ border-bottom: 2px solid var(--octo-mint);
4516
+ }
4517
+ }
4518
+
4519
+ .k-tabstrip-content {
4520
+ background: transparent;
4521
+ border: none;
4522
+ }
4523
+ }
4524
+
4525
+ // Dropdown styling
4526
+ ::ng-deep .k-dropdownlist {
4527
+ background: var(--deep-sea);
4528
+ border: 1px solid var(--octo-mint-20);
4529
+ color: var(--octo-text-color);
4530
+
4531
+ &:hover {
4532
+ border-color: var(--octo-mint-40);
4533
+ }
4534
+
4535
+ &.k-focus {
4536
+ border-color: var(--octo-mint);
4537
+ box-shadow: var(--lcars-input-focus);
4538
+ }
4539
+ }
4540
+
4541
+ // TextBox styling (custom tab)
4542
+ ::ng-deep .k-textbox {
4543
+ background: var(--deep-sea);
4544
+ border: 1px solid var(--octo-mint-20);
4545
+ color: var(--octo-mint);
4546
+ font-family: var(--lcars-font-mono);
4547
+
4548
+ &:hover {
4549
+ border-color: var(--octo-mint-40);
4550
+ }
4551
+
4552
+ &:focus,
4553
+ &.k-focus {
4554
+ border-color: var(--octo-mint);
4555
+ box-shadow: var(--lcars-input-focus);
4556
+ }
4557
+ }
4558
+
4559
+ // Syntax reference box
4560
+ .syntax-reference {
4561
+ background: linear-gradient(
4562
+ 135deg,
4563
+ var(--iron-navy-60),
4564
+ var(--deep-sea-80)
4565
+ );
4566
+ border: 1px solid var(--octo-mint-15);
4567
+ }
4568
+
4569
+ // Next executions list
4570
+ .next-executions-list li {
4571
+ color: var(--ash-blue);
4572
+
4573
+ &::before {
4574
+ color: var(--octo-mint);
4575
+ text-shadow: 0 0 6px var(--octo-mint-50);
4576
+ }
4577
+ }
4578
+
4579
+ // Copy button success state
4580
+ .copy-button.copied {
4581
+ color: #37b400 !important;
4582
+ text-shadow: 0 0 8px rgba(55, 180, 0, 0.5);
4583
+ }
4584
+
4585
+ // Labels
4586
+ kendo-label {
4587
+ color: var(--ash-blue);
4588
+ font-weight: 500;
4589
+ text-transform: uppercase;
4590
+ font-size: 0.75rem;
4591
+ letter-spacing: 0.5px;
4592
+ }
4593
+ }
4594
+
4595
+ // PDF export
4596
+ .k-pdf-export {
4597
+ --octo-text-color: #000;
4598
+ // Reset all backgrounds and colors to simple black and white
4599
+ &.k-grid,
4600
+ .k-grid,
4601
+ .k-grid-header,
4602
+ .k-grid-content,
4603
+ .k-grid-header-wrap,
4604
+ .k-grid-content-locked,
4605
+ .k-grid-header-locked,
4606
+ .k-table {
4607
+ background: #fff !important;
4608
+ background-color: #fff !important;
4609
+ background-image: none !important;
4610
+ color: var(--octo-text-color) !important;
4611
+ border-color: #000 !important;
4612
+ }
4613
+
4614
+ &.k-grid,
4615
+ .k-grid {
4616
+ border: 1px solid #000 !important;
4617
+ border-collapse: collapse !important;
4618
+ font-family: Arial, sans-serif !important;
4619
+ font-size: 8px !important;
4620
+ }
4621
+
4622
+ // Table layout
4623
+ .k-table,
4624
+ table {
4625
+ border-collapse: collapse !important;
4626
+ table-layout: fixed !important;
4627
+ width: 100% !important;
4628
+ }
4629
+
4630
+ // Header cells
4631
+ .k-grid-header th,
4632
+ .k-grid-header td,
4633
+ .k-header,
4634
+ th.k-header,
4635
+ .k-table-th {
4636
+ background: #e0e0e0 !important;
4637
+ background-color: #e0e0e0 !important;
4638
+ background-image: none !important;
4639
+ color: var(--octo-text-color) !important;
4640
+ border: 1px solid #000 !important;
4641
+ font-weight: bold !important;
4642
+ font-size: 8px !important;
4643
+ padding: 4px 6px !important;
4644
+ text-transform: none !important;
4645
+ letter-spacing: normal !important;
4646
+ vertical-align: middle !important;
4647
+ line-height: 1.3 !important;
4648
+ overflow: visible !important;
4649
+ white-space: normal !important;
4650
+ word-wrap: break-word !important;
4651
+ }
4652
+
4653
+ // Data cells
4654
+ .k-grid td,
4655
+ .k-grid-content td,
4656
+ .k-master-row td,
4657
+ .k-table-td {
4658
+ background: #fff !important;
4659
+ background-color: #fff !important;
4660
+ background-image: none !important;
4661
+ color: var(--octo-text-color) !important;
4662
+ border: 1px solid #000 !important;
4663
+ font-size: 8px !important;
4664
+ padding: 4px 6px !important;
4665
+ vertical-align: middle !important;
4666
+ line-height: 1.3 !important;
4667
+ overflow: visible !important;
4668
+ white-space: normal !important;
4669
+ word-wrap: break-word !important;
4670
+ word-break: break-word !important;
4671
+ }
4672
+
4673
+ // Rows
4674
+ .k-grid tr,
4675
+ .k-master-row,
4676
+ .k-alt,
4677
+ .k-table-row {
4678
+ background: #fff !important;
4679
+ background-color: #fff !important;
4680
+ background-image: none !important;
4681
+ }
4682
+
4683
+ // Remove any hover/selection styles
4684
+ .k-grid tr:hover,
4685
+ .k-grid tr.k-selected,
4686
+ .k-grid td:hover,
4687
+ .k-table-row:hover,
4688
+ .k-selected {
4689
+ background: #fff !important;
4690
+ background-color: #fff !important;
4691
+ }
4692
+
4693
+ // Hide elements that shouldn't be in PDF
4694
+ .k-grid-toolbar,
4695
+ .k-pager,
4696
+ .k-grid-pager,
4697
+ .k-command-cell,
4698
+ .k-checkbox-column,
4699
+ kendo-grid-checkbox-column,
4700
+ .status-icons-cell,
4701
+ .status-icon,
4702
+ kendo-svg-icon,
4703
+ svg {
4704
+ display: none !important;
4705
+ }
4706
+ }
4707
+ }
4708
+