@meshmakers/octo-ui 3.3.610 → 3.3.620

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