_budgie.scss
ASCII text
1
/**
2
* Budgie Desktop
3
*/
4
5
// Based on:
6
// https://github.com/solus-project/budgie-desktop/tree/master/src/theme
7
8
@use "../../../theme";
9
@use "../../../theme-color";
10
@use "../../../shadow";
11
@use "../common";
12
@use "../drawing";
13
14
// Container for both the "panel" area and the shadow. Wise to keep
15
// this transparent..
16
.budgie-container {
17
background-color: transparent;
18
}
19
20
.budgie-settings-window buttonbox.inline-toolbar {
21
border-style: none none solid;
22
23
button {
24
border-radius: theme.$corner-radius;
25
26
@extend %button-flat-basic;
27
}
28
}
29
30
.budgie-popover {
31
border-style: solid;
32
border-width: 1px;
33
border-color: rgba(black, .1) rgba(black, .2) rgba(black, .3);
34
border-radius: theme.$corner-radius + 1px;
35
box-shadow: shadow.$z4;
36
background-clip: padding-box;
37
background-color: theme-color.$surface-z8;
38
39
.container {
40
padding: 2px;
41
}
42
43
border {
44
border: none;
45
background-color: transparent;
46
}
47
48
list {
49
// background-color: transparent;
50
}
51
52
row {
53
padding: 0;
54
55
&:hover {
56
box-shadow: none;
57
}
58
}
59
60
button.flat:not(.image-button) {
61
min-height: theme.$menu-item-dense-height;
62
padding: 0 8px;
63
color: theme-color.$on-surface;
64
font-weight: normal;
65
66
&:disabled {
67
color: theme-color.disabled(theme-color.$on-surface);
68
}
69
}
70
71
&.budgie-menu {
72
.container {
73
padding: 0;
74
}
75
76
// .sidebar,
77
scrollbar,
78
entry.search {
79
background-color: transparent;
80
}
81
82
entry.search {
83
border-bottom: 1px solid theme-color.divider(theme-color.$on-surface);
84
border-image: none;
85
border-radius: 0;
86
box-shadow: none;
87
font-size: 120%;
88
}
89
90
button.flat:not(.image-button) {
91
min-height: 32px;
92
padding: 0 8px;
93
border-radius: 0;
94
95
@include drawing.list-item;
96
97
&:checked {
98
background-color: theme-color.$selected-overlay;
99
}
100
101
// remove pointless indicator
102
&:checked:disabled {
103
background-color: transparent;
104
}
105
}
106
}
107
108
&.user-menu {
109
.container {
110
padding: 8px;
111
}
112
113
separator {
114
margin: 4px 0;
115
}
116
}
117
118
&.sound-popover {
119
separator {
120
margin: 3px 0;
121
}
122
}
123
124
&.night-light-indicator {
125
.container {
126
padding: 8px;
127
}
128
}
129
130
&.places-menu {
131
.container {
132
padding: 8px;
133
}
134
135
// FIXME: untested
136
.message-bar {
137
// margin-bottom: 4px;
138
}
139
140
.name-button {
141
image {
142
&:dir(ltr) {
143
margin-right: 8px - 5px;
144
}
145
146
&:dir(rtl) {
147
margin-left: 8px - 5px;
148
}
149
}
150
}
151
152
.unmount-button {
153
margin: (theme.$menu-item-dense-height - theme.$small-size) / 2;
154
padding: 0;
155
}
156
157
.places-section-header {
158
}
159
160
.places-list:not(.always-expand) {
161
margin-top: 4px;
162
padding-top: 4px;
163
border-top: 1px solid theme-color.divider(theme-color.$on-surface);
164
}
165
166
// FIXME: untested
167
.unlock-area {
168
entry {
169
}
170
171
button {
172
}
173
}
174
175
// use such sizes for consistency with other hard-coded dim-label sizes
176
.alternative-label {
177
padding: 3px;
178
font-size: 15px;
179
}
180
}
181
182
&.workspace-popover {
183
.container {
184
padding: 8px;
185
}
186
187
separator {
188
margin: 4px 0;
189
}
190
191
flowboxchild {
192
padding: 0;
193
}
194
}
195
}
196
197
// FIXME: workspace has unnecessary/unknown margin
198
.workspace-switcher {
199
.workspace-layout {
200
border: 0 solid theme-color.divider(theme-color.$on-panel);
201
202
.top &,
203
.bottom & {
204
&:dir(ltr) {
205
border-left-width: 1px;
206
}
207
208
&:dir(rtl) {
209
border-right-width: 1px;
210
}
211
}
212
213
.left &,
214
.right & {
215
border-top-width: 1px;
216
}
217
}
218
219
.workspace-item,
220
.workspace-add-button {
221
border: 0 solid theme-color.divider(theme-color.$on-panel);
222
223
.top &,
224
.bottom & {
225
&:dir(ltr) {
226
border-right-width: 1px;
227
}
228
229
&:dir(rtl) {
230
border-left-width: 1px;
231
}
232
}
233
234
.left &,
235
.right & {
236
border-bottom-width: 1px;
237
}
238
}
239
240
.workspace-item {
241
transition: theme.$transition;
242
243
&.current-workspace {
244
background-color: theme-color.activated-overlay(theme-color.$on-panel);
245
}
246
}
247
248
.workspace-add-button {
249
&:hover {
250
box-shadow: none;
251
}
252
253
&:active {
254
background-image: none;
255
}
256
257
&:active image {
258
margin: 1px 0 -1px;
259
}
260
}
261
262
.workspace-icon-button {
263
// to overwrite the .budgie-panel button style below
264
.budgie-panel & {
265
min-height: 24px;
266
min-width: 24px;
267
padding: 0;
268
border-radius: theme.$corner-radius;
269
}
270
}
271
}
272
273
// Menu Button
274
button.budgie-menu-launcher {
275
// padding: 0 2px;
276
}
277
278
// Raven Trigger
279
button.raven-trigger {
280
// padding: 0 4px;
281
}
282
283
// Panel
284
.budgie-panel {
285
transition: background-color theme.$state-duration theme.$ease-out;
286
background-color: theme-color.$panel;
287
color: theme-color.hint(theme-color.$on-panel);
288
font-weight: 500;
289
290
&.transparent {
291
background-color: theme-color.$scrim;
292
color: theme-color.hint(theme-color.$on-scrim);
293
}
294
295
button {
296
min-height: 16px;
297
min-width: 16px;
298
padding: 0;
299
border-radius: 0;
300
color: theme-color.hint(theme-color.$on-panel);
301
@include drawing.ink-color(theme-color.$on-panel, $button-style: "flat");
302
303
&:disabled {
304
background-color: transparent;
305
color: theme-color.disabled-hint(theme-color.$on-panel);
306
}
307
308
&:checked {
309
$background-color: theme-color.activated-overlay(theme-color.$on-panel);
310
color: theme-color.$on-panel;
311
@include drawing.ink-color(theme-color.$on-panel, $button-style: "flat", $on: $background-color);
312
313
&:disabled {
314
background-color: theme-color.activated-overlay(theme-color.$on-panel);
315
color: theme-color.disabled(theme-color.$on-panel);
316
}
317
}
318
}
319
320
&.horizontal button {
321
padding: 0 4px;
322
}
323
324
&.vertical button {
325
padding: 4px 0;
326
}
327
328
separator {
329
background-color: theme-color.stroke(theme-color.$on-panel);
330
}
331
332
// used to indicate unread notifications
333
.alert {
334
color: theme-color.error(theme-color.$on-panel);
335
}
336
337
// End Section needs to be fancy
338
.end-region {
339
// background-color: rgba(0,0,0,0.2);
340
}
341
342
// budgie-pixel-saver-applet
343
.titlebar:not(headerbar) {
344
min-height: 0;
345
padding: 0;
346
box-shadow: none;
347
background-color: transparent;
348
color: theme-color.$on-panel;
349
350
button:not(.suggested-action):not(.destructive-action) {
351
color: theme-color.hint(theme-color.$on-panel);
352
}
353
}
354
355
// Tasklist
356
#tasklist-button {
357
padding: 0 4px;
358
359
@extend %underscores;
360
}
361
362
&.vertical #tasklist-button {
363
min-height: 32px;
364
}
365
366
// Icon Tasklist
367
button.flat.launcher {
368
padding: 0;
369
370
@extend %underscores;
371
372
// for indicator colors
373
&:not(:checked) {
374
color: theme-color.disabled(theme-color.$on-panel);
375
376
&:disabled {
377
color: theme-color.disabled-hint(theme-color.$on-panel);
378
}
379
}
380
}
381
382
.unpinned button.flat.launcher,
383
.pinned button.flat.launcher.running {
384
@extend %underscores-checked;
385
}
386
}
387
388
$underscores-list:
389
(top, center calc(1px), 2 0 0 0 / 2px 0 0 0),
390
(bottom, center calc(100% - 1px), 0 0 2 0 / 0 0 2px 0),
391
(left, calc(1px) center, 0 0 0 2 / 0 0 0 2px),
392
(right, calc(100% - 1px) center, 0 2 0 0 / 0 2px 0 0);
393
394
%underscores {
395
@each $pos, $b_pos, $b_wid in $underscores-list {
396
.#{$pos} & {
397
& {
398
border-image:
399
radial-gradient(
400
circle closest-corner at #{$b_pos},
401
currentcolor 0%,
402
transparent 0%
403
) 0 0 0 0 / 0 0 0 0;
404
}
405
406
@at-root %underscores-checked,
407
&:checked {
408
border-image:
409
radial-gradient(
410
circle closest-corner at #{$b_pos},
411
currentcolor 100%,
412
transparent 0%
413
) #{$b_wid};
414
}
415
}
416
}
417
}
418
419
frame.raven-frame > border {
420
border-style: none;
421
box-shadow: shadow.$z16;
422
}
423
424
$pos_list: (top: bottom, bottom: top, left: right, right: left);
425
426
@each $pos, $b_pos in $pos_list {
427
// Panel borders
428
.#{$pos} .budgie-panel {
429
// border-#{$b_pos}: 1px solid divider($on-surface);
430
}
431
432
// Raven borders
433
.#{$pos} frame.raven-frame > border {
434
margin-#{$b_pos}: 32px;
435
// border-#{$b_pos}: 1px solid divider($on-surface);
436
}
437
438
// Shadows
439
.#{$pos} .shadow-block {
440
// background-image: linear-gradient(to $b_pos, divider($on-surface), transparent);
441
}
442
}
443
444
// Raven
445
.raven {
446
background-color: theme-color.$surface-z8;
447
448
list {
449
// background-color: transparent;
450
}
451
452
// remove extra space between box and .raven-header.bottom
453
> box:not(:only-child) {
454
margin-bottom: -10px;
455
}
456
457
.raven-header {
458
min-height: theme.$medium-size;
459
padding: 3px;
460
461
// Adopt tabs style only for .top
462
&.top {
463
padding: 0;
464
border-bottom: 1px solid theme-color.divider(theme-color.$on-surface);
465
466
stackswitcher.linked > button {
467
@extend %button-flat-activatable;
468
469
margin: -4px 0 -5px; // remove unwanted vertical margins
470
padding: 0 16px;
471
min-height: theme.$large-size;
472
border-image:
473
radial-gradient(
474
circle closest-corner at center calc(100% - 1px),
475
theme-color.$primary 0%,
476
transparent 0%
477
) 0 0 0 / 0 0 0;
478
border-radius: 0;
479
480
&:checked {
481
border-image:
482
radial-gradient(
483
circle closest-corner at center calc(100% - 1px),
484
theme-color.$primary 100%,
485
transparent 0%
486
) 0 0 2 / 0 0 2px;
487
background-color: transparent;
488
}
489
}
490
}
491
492
&.bottom {
493
border-top: 1px solid theme-color.divider(theme-color.$on-surface);
494
}
495
}
496
497
stack {
498
// remove extra space in Notifications stack
499
.raven-header {
500
margin-top: -6px;
501
}
502
503
// remove extra spaces in Applets stack
504
scrolledwindow .raven-header {
505
margin-top: -8px;
506
}
507
}
508
509
.expander-button {
510
border-radius: theme.$circular-radius;
511
}
512
513
.raven-background {
514
// applet background between two headers
515
&.middle {
516
// border-bottom-style: none;
517
}
518
519
// Adopt Choice chips style
520
stackswitcher.linked > button {
521
margin: -2px 8px 9px;
522
padding: 0 12px;
523
min-height: 32px;
524
border-radius: theme.$circular-radius;
525
color: theme-color.hint(theme-color.$on-surface);
526
font-weight: normal;
527
@include drawing.ink-color(theme-color.$on-surface, $button-style: "flat", $on: theme-color.fill(theme-color.$on-surface));
528
529
&:checked {
530
color: theme-color.$primary;
531
@include drawing.ink-color(theme-color.$primary, $button-style: "flat", $on: theme-color.activated-overlay(theme-color.$primary));
532
}
533
534
&:not(:first-child) {
535
margin-left: 0;
536
}
537
}
538
539
// Default music icon
540
> overlay > widget > image {
541
color: theme-color.fill(theme-color.$on-surface);
542
}
543
}
544
545
revealer > .raven-background {
546
border-bottom: 1px solid theme-color.divider(theme-color.$on-surface);
547
}
548
549
.raven-header + .raven-background {
550
border-top: 1px solid theme-color.divider(theme-color.$on-surface);
551
}
552
553
// Application block in Notifications stack
554
viewport.frame > list > row {
555
// Remove all effects. This should be just a container.
556
padding: 0;
557
box-shadow: none;
558
background: none;
559
560
&:not(:first-child) {
561
border-top: 1px solid theme-color.divider(theme-color.$on-surface);
562
}
563
564
> box {
565
// Remove awkward hard-coded margins
566
margin-top: -5px;
567
margin-left: -5px;
568
margin-bottom: -5px;
569
570
// Application header
571
> box {
572
padding: 6px;
573
margin-bottom: -10px; // Remove hard-coded spacing
574
}
575
576
// Notifications
577
> list > row {
578
padding: 8px;
579
580
> box {
581
margin-bottom: -5px; // Remove hard-coded margin-bottom
582
583
> box {
584
// Title
585
> label {
586
font-weight: bold;
587
}
588
589
// Close button
590
> button.image-button {
591
padding: 0;
592
}
593
}
594
595
> label {
596
margin-top: -6px; // For less spacing: 10 -> 4
597
font-size: smaller;
598
}
599
}
600
}
601
}
602
}
603
604
.powerstrip button {
605
margin: 2px 0 1px;
606
padding: (theme.$large-size - 24px) / 2;
607
}
608
609
.option-subtitle {
610
font-size: smaller;
611
}
612
}
613
614
// Calendar
615
calendar.raven-calendar {
616
// padding: 3px;
617
border-style: none;
618
background-color: transparent;
619
620
&:selected {
621
border-radius: theme.$corner-radius;
622
background-color: theme-color.$selected-overlay;
623
}
624
}
625
626
// MPRIS Applet
627
.raven-mpris {
628
background-color: theme-color.$scrim;
629
color: theme-color.$on-scrim;
630
631
label {
632
min-height: 24px;
633
}
634
635
button.image-button {
636
padding: (theme.$large-size - 24px) / 2;
637
color: theme-color.hint(theme-color.$on-scrim);
638
@include drawing.ink-color(theme-color.$on-scrim, $button-style: "flat");
639
}
640
}
641
642
// Notifications
643
.budgie-notification-window {
644
background-color: transparent;
645
}
646
647
.budgie-notification {
648
.notification-title {
649
font-size: 120%;
650
}
651
652
.notification-body {
653
color: theme-color.hint(theme-color.$on-surface);
654
}
655
}
656
657
// On Screen Display in Budgie
658
.budgie-osd-window {
659
@extend .budgie-notification-window;
660
}
661
662
// Internal part of the OSD
663
.budgie-osd {
664
.budgie-osd-text {
665
font-size: 120%;
666
}
667
}
668
669
// Alt+tab switcher in Budgie
670
.budgie-switcher-window {
671
@extend .budgie-notification-window;
672
}
673
674
// Internal part of the Switcher
675
.budgie-switcher {
676
@extend .budgie-notification;
677
}
678
679
.drop-shadow {
680
margin: 5px 9px;
681
padding: 3px;
682
border-radius: theme.$corner-radius;
683
box-shadow: shadow.$z4, inset 0 1px theme-color.highlight(theme-color.$surface-z8);
684
background-color: theme-color.$surface-z8;
685
686
button {
687
@extend %button-flat;
688
689
&.text-button:not(:disabled) {
690
color: theme-color.$primary;
691
@include drawing.ink-color(theme-color.$primary, $button-style: "flat");
692
}
693
}
694
695
.linked > button {
696
margin-right: theme.$container-padding;
697
}
698
}
699
700
%budgie_dialog {
701
border-radius: theme.$corner-radius;
702
box-shadow: inset 0 1px theme-color.highlight(theme-color.$surface-z8);
703
background-color: theme-color.$surface-z8;
704
705
decoration {
706
border-radius: theme.$corner-radius;
707
}
708
}
709
710
// Session Dialog
711
.budgie-session-dialog {
712
@extend %budgie_dialog;
713
714
> box {
715
padding: 8px;
716
}
717
718
// Hide power icon
719
image {
720
margin: -8px;
721
-gtk-icon-transform: scale(0);
722
}
723
724
label:not(:last-child),
725
.dialog-title {
726
margin-bottom: 8px;
727
font-size: 20px;
728
font-weight: 500;
729
}
730
731
.dialog-title + label {
732
color: theme-color.hint(theme-color.$on-surface);
733
}
734
735
.linked.horizontal > button {
736
@extend %button-flat;
737
738
&:not(:last-child) {
739
margin-right: 8px;
740
}
741
742
&:not(:disabled) {
743
color: theme-color.$primary;
744
@include drawing.ink-color(theme-color.$primary, $button-style: "flat");
745
}
746
}
747
}
748
749
// PolKit Dialog
750
.budgie-polkit-dialog {
751
@extend %budgie_dialog;
752
753
.message {
754
color: theme-color.hint(theme-color.$on-surface);
755
}
756
757
.failure {
758
color: theme-color.$error;
759
}
760
}
761
762
// Run Dialog
763
.budgie-run-dialog {
764
@extend %budgie_dialog;
765
766
entry.search {
767
font-size: 120%;
768
padding: theme.$container-padding 8px + theme.$container-padding;
769
border-image: none;
770
box-shadow: none;
771
background-color: transparent;
772
}
773
774
list {
775
padding: 4px 0;
776
// background-color: transparent;
777
778
.dim-label {
779
color: inherit;
780
}
781
}
782
783
scrolledwindow {
784
border-top: 1px solid theme-color.divider(theme-color.$on-surface);
785
}
786
787
scrollbar {
788
&.right,
789
&.bottom {
790
border-bottom-right-radius: theme.$corner-radius;
791
}
792
793
&.left,
794
&.bottom {
795
border-bottom-left-radius: theme.$corner-radius;
796
}
797
}
798
}
799