_common-3.20.scss
ASCII text
1
* {
2
// padding: 0;
3
background-clip: padding-box;
4
5
-GtkToolButton-icon-spacing: 0;
6
-GtkTextView-error-underline-color: $error;
7
8
// The size for scrollbars. The slider is 2px smaller, but we keep it
9
// up so that the whole area is sensitive to button presses for the
10
// slider. The stepper button is larger in both directions, the slider
11
// only in the width
12
13
-GtkScrolledWindow-scrollbar-spacing: 0;
14
15
-GtkToolItemGroup-expander-size: 11;
16
17
-GtkWidget-text-handle-width: 24;
18
-GtkWidget-text-handle-height: 24;
19
20
-GtkDialog-button-spacing: 4;
21
-GtkDialog-action-area-border: 0;
22
23
// We use the outline properties to signal the focus properties
24
// to the adwaita engine: using real CSS properties is faster,
25
// and we don't use any outlines for now.
26
27
outline-style: solid;
28
outline-width: 2px;
29
outline-color: transparent;
30
outline-offset: -4px;
31
-gtk-outline-radius: $corner-radius;
32
33
-gtk-secondary-caret-color: $primary;
34
35
&:focus { outline-color: $overlay-checked; }
36
}
37
38
39
/***************
40
* Base States *
41
***************/
42
.background {
43
background-color: $background;
44
color: $text;
45
}
46
47
/*
48
These wildcard seems unavoidable, need to investigate.
49
Wildcards are bad and troublesome, use them with care,
50
or better, just don't.
51
Everytime a wildcard is used a kitten dies, painfully.
52
*/
53
54
*:disabled { -gtk-icon-effect: dim; }
55
56
.gtkstyle-fallback {
57
background-color: $background;
58
color: $text;
59
60
&:hover {
61
background-color: darken($background, 5%);
62
color: $text;
63
}
64
65
&:active {
66
background-color: darken($background, 10%);
67
color: $text;
68
}
69
70
&:disabled {
71
background-color: $background;
72
color: $text-disabled;
73
}
74
75
&:selected {
76
background-color: $primary;
77
color: on($primary);
78
}
79
}
80
81
.view {
82
// @extend row.activatable;
83
84
background-color: $base;
85
color: $text;
86
87
&:hover { box-shadow: inset 0 0 0 9999px $overlay-hover; }
88
89
&:selected:hover { box-shadow: inset 0 0 0 9999px rgba($primary, 0.08); }
90
91
&:disabled { color: $text-disabled; }
92
93
&:hover, &:selected { border-radius: $corner-radius; }
94
95
selection,
96
&:selected { @extend %selected_items; }
97
}
98
99
textview {
100
// FIXME: we need to override background-color to ensure text rendering
101
text { background-color: $base; }
102
103
border {
104
background-color: $base-alt;
105
color: $text-secondary; // FIXME: not working
106
}
107
}
108
109
// iconview { @extend .view; }
110
111
.rubberband,
112
rubberband {
113
border: 1px solid $primary-alt;
114
background-color: rgba($primary-alt, 0.3);
115
}
116
117
flowbox {
118
rubberband { @extend rubberband; }
119
120
flowboxchild {
121
padding: 4px;
122
border-radius: $corner-radius;
123
124
&:selected { @extend %selected_items; }
125
}
126
}
127
128
.content-view .tile {
129
// margin: 2px;
130
// padding: 0;
131
// border-radius: 0;
132
// background-color: black;
133
134
&:selected {
135
background-color: transparent;
136
}
137
}
138
139
label {
140
caret-color: currentColor; // this shouldn't be needed.
141
142
&.separator {
143
@extend .dim-label;
144
145
color: $text;
146
}
147
148
selection { @extend %selected_items; }
149
150
&:disabled {
151
color: $text-disabled;
152
153
// selection { @extend %selected_items:disabled; }
154
155
headerbar &,
156
tab &,
157
button & { color: inherit; }
158
}
159
}
160
161
.dim-label { opacity: 0.6; }
162
163
assistant {
164
.sidebar {
165
padding: 4px 0;
166
// background-color: $base;
167
// border-top: 1px solid $border;
168
}
169
170
// &.csd .sidebar { border-top-style: none; }
171
172
.sidebar label {
173
min-height: $medium-size;
174
padding: 0 12px;
175
color: $text-disabled;
176
font-weight: 500;
177
178
&.highlight { color: $text; }
179
}
180
}
181
182
// %osd, .osd { opacity: 0.9; }
183
184
185
/*********************
186
* Spinner Animation *
187
*********************/
188
@keyframes spin {
189
to { -gtk-icon-transform: rotate(1turn); }
190
}
191
192
spinner {
193
background: none;
194
opacity: 0; // non spinning spinner makes no sense
195
-gtk-icon-source: -gtk-icontheme('process-working-symbolic');
196
197
&:checked {
198
opacity: 1;
199
animation: spin 1s linear infinite;
200
201
&:disabled { opacity: 0.5; }
202
}
203
}
204
205
206
/****************
207
* Text Entries *
208
****************/
209
%entry,
210
entry {
211
%entry_basic, & {
212
min-height: $medium-size;
213
padding: 0 8px;
214
border-radius: $corner-radius $corner-radius 0 0;
215
caret-color: currentColor; // this shouldn't be needed.
216
217
@include entry(normal);
218
219
&:focus { @include entry(focus); }
220
221
&:disabled { @include entry(disabled); }
222
223
&.flat {
224
min-height: 0;
225
padding: 2px;
226
border-radius: 0;
227
background-color: transparent;
228
}
229
230
image { // icons inside the entry
231
// @extend %simple_flat_button;
232
233
// min-height: $small-size;
234
// min-width: $small-size;
235
// border-radius: $circular-radius;
236
// -gtk-outline-radius: $circular-radius;
237
color: $text-secondary;
238
239
&:hover, &:active { color: $text; }
240
241
&:disabled { color: $text-disabled; }
242
243
&.left {
244
margin-left: ($medium-size - 16px) / 2 - 8px;
245
margin-right: 6px;
246
}
247
248
&.right {
249
margin-left: 6px;
250
margin-right: ($medium-size - 16px) / 2 - 8px;
251
}
252
}
253
254
undershoot {
255
&.left { @include undershoot(left); }
256
257
&.right { @include undershoot(right); }
258
}
259
260
selection { @extend %selected_items; }
261
262
// entry error and warning style
263
@each $e_type, $e_color in (error, $error),
264
(warning, $warning) {
265
&.#{$e_type} {
266
@include entry(normal, $e_color);
267
268
&:focus { @include entry(focus, $e_color); }
269
270
&:disabled { @include entry(disabled, $e_color); }
271
}
272
}
273
274
&:drop(active) {
275
// box-shadow: inset 0 0 0 2px $primary;
276
}
277
278
.osd & {
279
}
280
}
281
282
progress {
283
margin: 2px -8px;
284
border-bottom: 2px solid $primary;
285
background-color: transparent;
286
}
287
288
// linked entries
289
.linked:not(.vertical) > & { @extend %linked_entry; }
290
291
// Vertically linked entries
292
.linked.vertical > & { @extend %linked_vertical_entry; }
293
}
294
295
%entry_raised {
296
border-radius: $corner-radius;
297
298
@include entry(raised-normal);
299
300
&:focus { @include entry(raised-focus); }
301
302
&:disabled { @include entry(raised-disabled); }
303
304
// entry error and warning style
305
@each $e_type, $e_color in (error, $error),
306
(warning, $warning) {
307
&.#{$e_type} {
308
@include entry(raised-normal, $e_color);
309
310
&:focus { @include entry(raised-focus, $e_color); }
311
312
&:disabled { @include entry(raised-disabled, $e_color); }
313
314
image {
315
color: on($e_color, secondary);
316
317
&:hover, &:active { color: on($e_color); }
318
319
&:disabled { color: on($e_color, disabled); }
320
}
321
}
322
}
323
}
324
325
treeview entry {
326
&.flat, & {
327
background-color: $base;
328
329
&, &:focus {
330
border-image: none;
331
box-shadow: none;
332
}
333
}
334
}
335
336
.entry-tag {
337
margin: 2px;
338
border-radius: $circular-radius;
339
box-shadow: none;
340
background-color: $divider;
341
color: $text;
342
343
&:hover { background-image: image($divider); }
344
345
// side margins: compensate the entry padding with a negative margin
346
// then the negative margin itself
347
:dir(ltr) & {
348
margin-left: 4px;
349
margin-right: 0;
350
padding-left: 12px;
351
padding-right: 8px;
352
}
353
354
:dir(rtl) & {
355
margin-left: 0;
356
margin-right: 4px;
357
padding-left: 8px;
358
padding-right: 12px;
359
}
360
361
// seems any sizing doesn't work
362
&.button {
363
box-shadow: none;
364
background-color: transparent;
365
366
&:not(:hover):not(:active) { color: $text-secondary; }
367
}
368
}
369
370
371
/***********
372
* Buttons *
373
***********/
374
// stuff for .needs-attention
375
@keyframes needs_attention {
376
from {
377
background-image: -gtk-gradient(radial,
378
center center, 0,
379
center center, 0.001,
380
to($primary),
381
to(transparent));
382
}
383
384
to {
385
background-image: -gtk-gradient(radial,
386
center center, 0,
387
center center, 0.5,
388
to($primary),
389
to(transparent));
390
}
391
}
392
393
%button,
394
button {
395
@at-root %button_basic, & {
396
min-height: 24px;
397
min-width: 16px;
398
padding: ($medium-size - 24px) / 2 ($medium-size - 16px) / 2;
399
border-radius: $corner-radius;
400
font-weight: 500;
401
402
@include button(normal);
403
404
&:hover { @include button(hover); }
405
406
&:active { @include button(active); }
407
408
&:disabled { @include button(disabled); }
409
410
&:checked { @include button(checked); }
411
412
&:checked:disabled { @include button(checked-disabled); }
413
414
@at-root %flat_button, &.flat {
415
@at-root %simple_flat_button, & {
416
@include button(flat-normal);
417
418
&:hover { @include button(flat-hover); }
419
420
&:active { @include button(flat-active); }
421
422
&:disabled { @include button(flat-disabled); }
423
}
424
425
&:checked { @include button(flat-checked); }
426
427
&:checked:disabled { @include button(flat-checked-disabled); }
428
}
429
430
&.text-button {
431
padding-left: 16px;
432
padding-right: 16px;
433
}
434
435
&.image-button {
436
min-width: 24px;
437
padding: ($medium-size - 24px) / 2;
438
439
@extend %circular_button;
440
}
441
442
&.text-button.image-button {
443
border-radius: $corner-radius;
444
-gtk-outline-radius: $corner-radius;
445
446
label {
447
&:first-child { margin-left: 16px - ($medium-size - 24px) / 2; }
448
449
&:last-child { margin-right: 16px - ($medium-size - 24px) / 2; }
450
}
451
452
image:not(:only-child) { margin: 0 (24px - 16px) / 2; }
453
}
454
455
.linked > & { @extend %linked; }
456
457
.linked.vertical > & { @extend %linked_vertical; }
458
459
.linked > &.flat,
460
.linked.vertical > &.flat {
461
border-radius: $corner-radius;
462
463
&.image-button { @extend %circular_button; }
464
465
&.text-button.image-button {
466
border-radius: $corner-radius;
467
-gtk-outline-radius: $corner-radius;
468
}
469
}
470
471
&:drop(active) {
472
// box-shadow: inset 0 0 0 2px $primary;
473
}
474
}
475
476
@at-root %button_selected {
477
&.flat {
478
color: on(dark, secondary);
479
480
&:hover, &:active { color: on(dark); }
481
482
&:disabled { color: on(dark, secondary-disabled); }
483
484
&:checked {
485
background-color: on(dark, track);
486
color: on(dark);
487
}
488
489
&:checked:disabled {
490
background-color: on(dark, divider);
491
color: on(dark, disabled);
492
}
493
}
494
}
495
496
// big standalone buttons like in Documents pager
497
&.osd {
498
padding: ($large-size - 24px) / 2 ($large-size - 16px) / 2;
499
500
&.image-button { padding: ($large-size - 24px) / 2; }
501
502
&:disabled { opacity: 0; }
503
}
504
505
// overlay / OSD style
506
@at-root %osd_button,
507
.osd & {
508
}
509
510
// Suggested and Destructive Action buttons
511
@each $b_type, $b_color in (suggested-action, $suggested),
512
(destructive-action, $destructive) {
513
&.#{$b_type} {
514
background-color: $b_color;
515
color: on($b_color);
516
517
&:disabled { @include button(disabled); }
518
519
&:checked { background-color: mix(on($b_color), $b_color, percentage(0.3)); }
520
521
&.flat {
522
background-color: transparent;
523
color: $b_color;
524
525
&:disabled { @include button(flat-disabled); }
526
527
&:checked { background-color: rgba($b_color, 0.3); }
528
}
529
530
.osd & {
531
}
532
}
533
}
534
535
.stack-switcher > & {
536
// to position the needs attention dot, padding is added to the button
537
// child, a label needs just lateral padding while an icon needs vertical
538
// padding added too.
539
540
outline-offset: -4px; // needs to be set or it gets overriden by GtkRadioButton outline-offset
541
542
> label {
543
padding-left: 6px; // label padding
544
padding-right: 6px; //
545
}
546
547
> image {
548
padding-left: 6px; // image padding
549
padding-right: 6px; //
550
padding-top: 3px; //
551
padding-bottom: 3px; //
552
}
553
554
&.text-button {
555
// compensate text-button paddings
556
padding-left: 16px - 6px;
557
padding-right: 16px - 6px;
558
}
559
560
&.image-button {
561
// we want image buttons to have a 1:1 aspect ratio, so compensation
562
// of the padding added to the GtkImage is needed
563
padding-left: ($medium-size - 16px) / 2 - 6px;
564
padding-right: ($medium-size - 16px) / 2 - 6px;
565
}
566
567
&.needs-attention {
568
> label,
569
> image { @extend %needs_attention; }
570
571
&:checked {
572
> label,
573
> image {
574
animation: none;
575
background-image: none;
576
}
577
}
578
}
579
}
580
581
// hide separators
582
&.font,
583
&.file { separator { @extend %hide_separators; }}
584
585
// &.font { > box > box > label { font-weight: bold; }}
586
587
// inline-toolbar buttons
588
.inline-toolbar & {
589
// @extend %button_basic.flat;
590
591
&:not(.text-button) { @extend %circular_button; }
592
}
593
594
.primary-toolbar & { -gtk-icon-shadow: none; } // tango icons don't need shadows
595
596
@at-root %circular_button,
597
&.close,
598
&.circular { // The Bloody Circul Button
599
border-radius: $circular-radius;
600
-gtk-outline-radius: $circular-radius;
601
602
// label { padding: 0; }
603
}
604
605
@at-root %small_button {
606
min-height: $small-size;
607
min-width: $small-size;
608
padding: 0;
609
border-radius: $circular-radius;
610
-gtk-outline-radius: $circular-radius;
611
}
612
}
613
614
%needs_attention {
615
animation: needs_attention $duration-ripple $ease-out forwards;
616
background-repeat: no-repeat;
617
background-position: right 3px;
618
background-size: 6px 6px;
619
620
&:dir(rtl) { background-position: left 3px; }
621
}
622
623
// all the following is for the +|- buttons on inline toolbars, that way
624
// should really be deprecated...
625
.inline-toolbar toolbutton > button { // redefining the button look is
626
// needed since those are flat...
627
}
628
629
// More inline toolbar buttons
630
toolbar.inline-toolbar toolbutton {
631
// > button.flat { @extend %linked_middle; }
632
633
// &:first-child > button.flat { @extend %linked:first-child; }
634
635
// &:last-child > button.flat { @extend %linked:last-child; }
636
637
// &:only-child > button.flat { @extend %linked:only-child; }
638
}
639
640
%linked_middle {
641
border-radius: 0;
642
-gtk-outline-radius: $corner-radius;
643
}
644
645
%linked {
646
@extend %linked_middle;
647
648
&:first-child {
649
border-top-left-radius: $corner-radius;
650
border-bottom-left-radius: $corner-radius;
651
}
652
653
&:last-child {
654
border-top-right-radius: $corner-radius;
655
border-bottom-right-radius: $corner-radius;
656
}
657
658
&:only-child {
659
border-radius: $corner-radius;
660
}
661
}
662
663
%linked_vertical_middle {
664
border-radius: 0;
665
-gtk-outline-radius: $corner-radius;
666
}
667
668
%linked_vertical {
669
@extend %linked_vertical_middle;
670
671
&:first-child {
672
border-top-left-radius: $corner-radius;
673
border-top-right-radius: $corner-radius;
674
}
675
676
&:last-child {
677
border-bottom-left-radius: $corner-radius;
678
border-bottom-right-radius: $corner-radius;
679
}
680
681
&:only-child {
682
border-radius: $corner-radius;
683
}
684
}
685
686
%linked_entry {
687
@extend %linked_middle;
688
689
&:first-child {
690
border-radius: $corner-radius 0 0 0;
691
}
692
693
&:last-child {
694
border-radius: 0 $corner-radius 0 0;
695
}
696
697
&:only-child {
698
border-radius: $corner-radius $corner-radius 0 0;
699
}
700
}
701
702
%linked_vertical_entry {
703
@extend %linked_vertical_middle;
704
705
&:first-child {
706
border-radius: $corner-radius $corner-radius 0 0;
707
}
708
709
&:last-child {
710
border-radius: 0;
711
}
712
713
&:only-child {
714
border-radius: $corner-radius $corner-radius 0 0;
715
}
716
}
717
718
/* menu buttons */
719
modelbutton.flat,
720
.menuitem.button.flat {
721
min-height: $menuitem-size;
722
padding: 0 8px;
723
border-radius: $corner-radius;
724
color: inherit;
725
726
@extend %simple_flat_button;
727
728
&:selected { @extend %selected_items; }
729
}
730
731
modelbutton.flat arrow {
732
&.left { -gtk-icon-source: -gtk-icontheme("pan-start-symbolic"); }
733
734
&.right { -gtk-icon-source: -gtk-icontheme("pan-end-symbolic"); }
735
}
736
737
button.color {
738
min-height: $small-size;
739
min-width: $small-size;
740
padding: $container-padding;
741
742
colorswatch:only-child {
743
// &, overlay { border-radius: 0; }
744
}
745
}
746
747
748
/*********
749
* Links *
750
*********/
751
*:link {
752
color: $link;
753
754
&:visited { color: $link-visited; }
755
}
756
757
button:link,
758
button:visited {
759
&, &:hover, &:active { @extend *:link; }
760
761
> label { text-decoration-line: underline; }
762
}
763
764
/*****************
765
* GtkSpinButton *
766
*****************/
767
spinbutton {
768
&:not(.vertical) {
769
// in this horizontal configuration, the whole spinbutton
770
// behaves as the entry, so we extend the entry styling
771
// and nuke the style on the internal entry
772
@extend %entry;
773
774
padding: 0;
775
776
entry {
777
min-width: $large-size - 8px * 2;
778
// reset all the other props since the spinbutton node is styled here
779
margin: 0;
780
border-image: none;
781
border-radius: 0;
782
box-shadow: none;
783
background-color: transparent;
784
}
785
786
button {
787
// margin: $container-padding;
788
border: solid $container-padding transparent;
789
790
@extend %simple_flat_button;
791
792
@extend %small_button;
793
794
&.up:dir(ltr),
795
&.down:dir(rtl) { margin-left: -$container-padding / 2; }
796
797
&.up:dir(rtl),
798
&.down:dir(ltr) { margin-right: -$container-padding / 2; }
799
}
800
}
801
802
// OSD horizontal
803
.osd &:not(.vertical) {
804
}
805
806
// Vertical
807
&.vertical {
808
// in the vertical configuration, we treat the spinbutton
809
// as a box, and tweak the style of the entry in the middle
810
// so that it's linked
811
812
// FIXME: this should not be set at all, but otherwise it gets the wrong
813
// color
814
&:disabled { color: $text-disabled; }
815
816
&:drop(active) {
817
box-shadow: none;
818
}
819
820
entry {
821
@extend %entry_raised;
822
823
min-height: $medium-size;
824
min-width: $large-size;
825
padding: 0;
826
}
827
828
button {
829
min-height: $medium-size;
830
min-width: $large-size;
831
padding: 0;
832
833
@extend %simple_flat_button;
834
835
&.up { border-radius: $corner-radius $corner-radius 0 0; }
836
837
&.down { border-radius: 0 0 $corner-radius $corner-radius; }
838
}
839
}
840
841
// OSD vertical
842
.osd &.vertical {
843
}
844
845
// Misc
846
treeview &:not(.vertical) {
847
min-height: 0;
848
border-style: none;
849
border-radius: 0;
850
851
entry {
852
min-height: 0;
853
padding: 1px 2px;
854
}
855
}
856
}
857
858
859
/**************
860
* ComboBoxes *
861
**************/
862
combobox {
863
arrow {
864
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
865
min-height: 16px;
866
min-width: 16px;
867
}
868
869
decoration,
870
button.combo:checked { transition: none; } // workaround for menuitem selection
871
872
button.combo cellview {
873
&:dir(ltr) { margin-left: 8px - ($medium-size - 16px) / 2; }
874
&:dir(rtl) { margin-right: 8px - ($medium-size - 16px) / 2; }
875
}
876
877
#gtk-combobox-popup-menu {
878
padding: 2px 0;
879
880
menuitem {
881
min-height: $medium-size - 2px * 2;
882
padding: 0 8px;
883
}
884
885
// overflow arrows
886
> arrow {
887
&.top { margin-top: -2px; }
888
889
&.bottom {
890
margin-top: 2px * 2;
891
margin-bottom: -2px * 3;
892
}
893
}
894
}
895
896
&.linked {
897
button:nth-child(2) {
898
&:dir(ltr) { @extend %linked_entry:last-child; }
899
&:dir(rtl) { @extend %linked_entry:first-child; }
900
}
901
}
902
903
> .linked > button {
904
@extend %linked_middle;
905
906
&:first-child { @extend %linked_entry:first-child; }
907
908
&:last-child { @extend %linked_entry:last-child; }
909
910
&:only-child { @extend %linked_entry:only-child; }
911
}
912
913
&:drop(active) { // FIXME: untested
914
box-shadow: none;
915
916
// button.combo { @extend %button_basic:drop(active); }
917
}
918
}
919
920
// the combo is a composite widget so the way we do button linking doesn't
921
// work, special case needed. See
922
// https://bugzilla.gnome.org/show_bug.cgi?id=733979
923
924
.linked:not(.vertical) > combobox {
925
> box > button.combo { @extend %linked_middle; }
926
927
&:first-child > box > button.combo { @extend %linked_entry:first-child; }
928
929
&:last-child > box > button.combo { @extend %linked_entry:last-child; }
930
931
&:only-child > box > button.combo { @extend %linked_entry:only-child; }
932
}
933
934
.linked.vertical > combobox {
935
> box > button.combo { @extend %linked_vertical_middle; }
936
937
&:first-child > box > button.combo { @extend %linked_vertical_entry:first-child; }
938
939
&:last-child > box > button.combo { @extend %linked_vertical_entry:last-child; }
940
941
&:only-child > box > button.combo { @extend %linked_vertical_entry:only-child; }
942
}
943
944
button.combo {
945
border-radius: $corner-radius $corner-radius 0 0;
946
background-image: none;
947
font-weight: inherit;
948
949
@include entry(normal);
950
951
&:hover { box-shadow: inset 0 -1px $text; }
952
953
&:checked { @include entry(focus); }
954
955
&:disabled { @include entry(disabled); }
956
}
957
958
959
/************
960
* Toolbars *
961
************/
962
toolbar {
963
-GtkWidget-window-dragging: true;
964
padding: 2px;
965
background-color: $background;
966
967
button { @extend %button_basic.flat; }
968
969
// on OSD
970
.osd & { background-color: transparent; }
971
972
// stand-alone OSD toolbars
973
&.osd {
974
transition: $transition-shadow;
975
padding: $container-padding;
976
border-radius: $corner-radius;
977
box-shadow: $shadow-2, inset 0 1px highlight($surface);
978
background-color: $surface;
979
980
&:backdrop { box-shadow: $shadow-1, inset 0 1px highlight($surface); }
981
982
&.left,
983
&.right,
984
&.top,
985
&.bottom { border-radius: 0; } // positional classes for `attached` osd toolbars
986
}
987
988
// toolbar separators
989
&.horizontal > separator { margin: 2px; }
990
&.vertical > separator { margin: 2px; }
991
992
&:not(.inline-toolbar):not(.osd) {
993
scale,
994
entry,
995
spinbutton,
996
button { margin: 2px; }
997
998
.linked entry,
999
.linked spinbutton,
1000
.linked button {
1001
&:not(:first-child) { margin-left: 0; }
1002
&:not(:last-child) { margin-right: 0; }
1003
}
1004
1005
spinbutton {
1006
entry,
1007
button { margin: 0; }
1008
}
1009
1010
switch { margin: 2px + $container-padding 2px; }
1011
}
1012
}
1013
1014
// searchbar, location-bar & inline-toolbar
1015
.inline-toolbar {
1016
padding: $container-padding;
1017
border-style: solid;
1018
border-width: 0 1px 1px;
1019
border-color: $border;
1020
background-color: $base-alt;
1021
}
1022
1023
searchbar > revealer > box,
1024
.location-bar {
1025
padding: $container-padding;
1026
border-style: solid;
1027
border-width: 0 0 1px;
1028
border-color: $border;
1029
background-color: $background;
1030
background-clip: border-box;
1031
}
1032
1033
searchbar > revealer > box {
1034
// workaround: undo the GtkContainer:border-width and use CSS padding instead
1035
margin: -6px;
1036
padding: $container-padding;
1037
}
1038
1039
1040
/***************
1041
* Header bars *
1042
***************/
1043
%titlebar,
1044
headerbar {
1045
transition: background-color $duration $ease-out, color $duration $ease-out;
1046
min-height: $large-size;
1047
padding: 0 $container-padding;
1048
box-shadow: $shadow-1, inset 0 1px highlight($titlebar);
1049
background-color: $titlebar;
1050
color: $titlebar-text;
1051
1052
&:disabled { color: $titlebar-text-disabled; }
1053
1054
&:backdrop {
1055
color: $titlebar-text-secondary;
1056
1057
&:disabled { color: $titlebar-text-secondary-disabled; }
1058
}
1059
1060
.title {
1061
padding: 0 12px;
1062
font-weight: bold;
1063
}
1064
1065
.subtitle {
1066
padding: 0 12px;
1067
font-size: smaller;
1068
1069
@extend .dim-label;
1070
}
1071
1072
entry {
1073
box-shadow: inset 0 -1px $titlebar-track;
1074
background-color: $titlebar-fill;
1075
color: $titlebar-text;
1076
1077
&:disabled {
1078
box-shadow: inset 0 -1px $titlebar-divider;
1079
background-color: $titlebar-fill;
1080
color: $titlebar-text-disabled;
1081
}
1082
1083
image {
1084
color: $titlebar-text-secondary;
1085
1086
&:hover, &:active { color: $titlebar-text; }
1087
1088
&:disabled { color: $titlebar-text-disabled; }
1089
}
1090
}
1091
1092
.linked:not(.vertical) > entry:not(.flat) { border-radius: $corner-radius $corner-radius 0 0; }
1093
1094
@at-root %titlebar-button, & button:not(.suggested-action):not(.destructive-action) {
1095
@extend %button_basic.flat;
1096
1097
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
1098
$titlebar-indicator 0%,
1099
transparent 0%)
1100
0 0 0 / 0 0 0px;
1101
color: $titlebar-text-secondary;
1102
1103
&:hover, &:active { color: $titlebar-text; }
1104
1105
&:disabled { color: $titlebar-text-secondary-disabled; }
1106
1107
&:checked {
1108
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
1109
$titlebar-indicator 100%,
1110
transparent 0%)
1111
0 0 2 / 0 0 2px;
1112
color: $titlebar-text;
1113
1114
&:disabled { color: $titlebar-text-disabled; }
1115
1116
&, &:disabled { background-color: transparent; }
1117
}
1118
1119
&:backdrop {
1120
color: $titlebar-text-disabled;
1121
1122
&:hover, &:active { color: $titlebar-text-secondary; }
1123
1124
&:disabled { color: $titlebar-text-secondary-disabled; }
1125
1126
&:checked {
1127
color: $titlebar-text-secondary;
1128
1129
&:disabled { color: $titlebar-text-secondary-disabled; }
1130
}
1131
}
1132
}
1133
1134
button.suggested-action, button.destructive-action {
1135
&:disabled {
1136
background-color: $titlebar-fill;
1137
color: $titlebar-text-disabled;
1138
}
1139
}
1140
1141
&.selection-mode {
1142
// 0.00001s was a workaround for https://gitlab.gnome.org/GNOME/gtk/issues/698
1143
// but let's keep it for backwards compatibility.
1144
transition: background-color 0.00001s $duration-ripple, color $duration-ripple $ease-out;
1145
animation: ripple-headerbar $duration-ripple $ease-out;
1146
box-shadow: $shadow-1, inset 0 1px highlight($primary);
1147
background-color: $primary;
1148
color: on($primary);
1149
1150
&:backdrop {
1151
color: on($primary, secondary);
1152
}
1153
1154
.subtitle:link { color: on($primary); }
1155
1156
button:not(.suggested-action):not(.destructive-action) {
1157
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
1158
currentColor 0%,
1159
transparent 0%)
1160
0 0 0 / 0 0 0px;
1161
color: on($primary);
1162
1163
&:disabled { color: on($primary, disabled); }
1164
1165
&:checked {
1166
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
1167
currentColor 100%,
1168
transparent 0%)
1169
0 0 2 / 0 0 2px;
1170
color: on($primary);
1171
1172
&:disabled { color: on($primary, disabled); }
1173
}
1174
1175
&:backdrop {
1176
color: on($primary, secondary);
1177
1178
&:disabled { color: on($primary, secondary-disabled); }
1179
1180
&:checked {
1181
color: on($primary, secondary);
1182
1183
&:disabled { color: on($primary, secondary-disabled); }
1184
}
1185
}
1186
}
1187
1188
.selection-menu {
1189
padding-left: 16px;
1190
padding-right: 16px;
1191
1192
arrow { -GtkArrow-arrow-scaling: 1; }
1193
1194
.arrow { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); }
1195
}
1196
}
1197
1198
// squared corners when the window is maximized, tiled, or fullscreen
1199
.tiled &,
1200
.tiled-top &,
1201
.tiled-right &,
1202
.tiled-bottom &,
1203
.tiled-left &,
1204
.maximized &,
1205
.fullscreen & {
1206
border-radius: 0;
1207
box-shadow: $shadow-1;
1208
}
1209
1210
&.default-decoration {
1211
min-height: $small-size;
1212
padding: $container-padding;
1213
box-shadow: inset 0 1px highlight($titlebar);
1214
1215
.tiled &,
1216
.maximized &,
1217
.fullscreen & { box-shadow: none; }
1218
1219
button.titlebutton {
1220
min-height: $small-size;
1221
min-width: $small-size;
1222
margin: 0;
1223
padding: 0;
1224
}
1225
1226
// workaround for non-animatable buttons
1227
.background:not(.csd) & button.titlebutton:active { background-size: 1000% 1000%; }
1228
}
1229
1230
.solid-csd & {
1231
&:dir(rtl), &:dir(ltr) { // specificity bump
1232
// margin-left: -2px;
1233
// margin-right: -2px;
1234
// margin-top: -2px;
1235
// border-radius: 0;
1236
box-shadow: $shadow-1; // Remove highlight as window managers should have it
1237
}
1238
}
1239
}
1240
1241
headerbar {
1242
// add vertical margins to common widget on the headerbar to avoid them spanning the whole height
1243
entry,
1244
spinbutton,
1245
button {
1246
margin-top: $container-padding;
1247
margin-bottom: $container-padding;
1248
}
1249
1250
separator.titlebutton {
1251
margin-top: $large-size / 4;
1252
margin-bottom: $large-size / 4;
1253
background-color: $titlebar-divider;
1254
}
1255
1256
switch {
1257
margin-top: ($large-size - 24px) / 2;
1258
margin-bottom: ($large-size - 24px) / 2;
1259
}
1260
1261
// reset button margins of the spinbutton
1262
spinbutton button {
1263
margin-top: 0;
1264
margin-bottom: 0;
1265
}
1266
1267
// FIXME: This is a hacky workaround.
1268
.entry-tag {
1269
margin-top: 5px;
1270
margin-bottom: 5px;
1271
}
1272
1273
&.titlebar headerbar:not(.titlebar) {
1274
// Drop the background of non-titlebar nested headerbars. This is needed to
1275
// work around headerbar sliding animation issues without refactoring
1276
// Adwaita's support of titlebars and headerbars as it may break
1277
// applications.
1278
// See https://gitlab.gnome.org/GNOME/gtk/issues/1264 for more information.
1279
background-color: transparent;
1280
box-shadow: none;
1281
}
1282
}
1283
1284
.background .titlebar {
1285
border-top-left-radius: $corner-radius;
1286
border-top-right-radius: $corner-radius;
1287
}
1288
1289
.background.tiled .titlebar,
1290
.background.tiled-top .titlebar,
1291
.background.tiled-right .titlebar,
1292
.background.tiled-bottom .titlebar,
1293
.background.tiled-left .titlebar,
1294
.background.maximized .titlebar,
1295
.background.solid-csd .titlebar {
1296
border-top-left-radius: 0;
1297
border-top-right-radius: 0;
1298
}
1299
1300
headerbar { // headerbar border rounding
1301
window separator:first-child + &, // tackles the paned container case
1302
window &:first-child { border-top-left-radius: $corner-radius; }
1303
1304
window &:last-child { border-top-right-radius: $corner-radius; }
1305
1306
window stack & { // tackles the stacked headerbars case
1307
&:first-child, &:last-child {
1308
border-top-left-radius: $corner-radius;
1309
border-top-right-radius: $corner-radius;
1310
}
1311
}
1312
1313
window.tiled &,
1314
window.tiled-top &,
1315
window.tiled-right &,
1316
window.tiled-bottom &,
1317
window.tiled-left &,
1318
window.maximized &,
1319
window.fullscreen &,
1320
window.solid-csd & {
1321
&,
1322
&:first-child,
1323
&:last-child,
1324
&:only-child {
1325
border-top-left-radius: 0;
1326
border-top-right-radius: 0;
1327
}
1328
}
1329
}
1330
1331
.titlebar:not(headerbar) {
1332
window.csd > & {
1333
// in csd we assume every titlebar is a headerbar so reset anything, this is needed for split toolbars cases
1334
padding: 0;
1335
background-color: transparent;
1336
background-image: none;
1337
border-style: none;
1338
box-shadow: none;
1339
}
1340
1341
> separator {
1342
background-color: $titlebar;
1343
background-image: image($border);
1344
}
1345
1346
@extend %titlebar;
1347
}
1348
1349
// Development versions of apps to use a differently styled headerbar
1350
window.devel headerbar.titlebar:not(.selection-mode) {
1351
}
1352
1353
1354
/************
1355
* Pathbars *
1356
************/
1357
%pathbar_button,
1358
.path-bar button {
1359
padding-left: ($medium-size - 24px) / 2;
1360
padding-right: ($medium-size - 24px) / 2;
1361
1362
label:not(:only-child) {
1363
&:first-child { margin-left: 4px; }
1364
1365
&:last-child { margin-right: 4px; }
1366
}
1367
1368
&.slider-button {
1369
padding-left: (24px - 16px) / 2;
1370
padding-right: (24px - 16px) / 2;
1371
}
1372
1373
:not(headerbar) & {
1374
@extend %flat_button;
1375
1376
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
1377
$primary 0%,
1378
transparent 0%)
1379
0 0 0 / 0 0 0px;
1380
border-radius: $corner-radius;
1381
1382
&:checked {
1383
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
1384
$primary 100%,
1385
transparent 0%)
1386
0 0 2 / 0 0 2px;
1387
1388
&, &:disabled { background-color: transparent; }
1389
}
1390
}
1391
}
1392
1393
1394
/**************
1395
* Tree Views *
1396
**************/
1397
treeview.view {
1398
@at-root * {
1399
-GtkTreeView-horizontal-separator: 4;
1400
-GtkTreeView-grid-line-width: 1;
1401
-GtkTreeView-grid-line-pattern: '';
1402
-GtkTreeView-tree-line-width: 1;
1403
-GtkTreeView-tree-line-pattern: '';
1404
-GtkTreeView-expander-size: 16;
1405
}
1406
1407
border-left-color: $track; // this is actually the tree lines color,
1408
border-top-color: $border; // while this is the grid lines color, better then nothing
1409
1410
// FIXME: Avoid transparency background-color being slightly darker
1411
&:selected {
1412
background-color: $base;
1413
background-image: image($overlay-selected);
1414
}
1415
1416
rubberband { @extend rubberband; } // to avoid borders being overridden by the previously set props
1417
1418
&:hover, &:selected { border-radius: 0; }
1419
1420
&.separator {
1421
min-height: 1px + 2px * 2;
1422
color: $border;
1423
}
1424
1425
&:drop(active) {
1426
border-style: solid none;
1427
border-width: 1px;
1428
border-color: $primary;
1429
1430
&.after { border-top-style: none; }
1431
1432
&.before { border-bottom-style: none; }
1433
}
1434
1435
&.expander {
1436
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
1437
-gtk-icon-transform: rotate(-90deg);
1438
1439
&:dir(rtl) { -gtk-icon-transform: rotate(90deg); }
1440
1441
&:checked { -gtk-icon-transform: unset; }
1442
1443
color: $text-secondary;
1444
1445
&:hover, &:active { color: $text; }
1446
1447
&:disabled { color: $text-secondary-disabled; }
1448
}
1449
1450
&.progressbar { // progress bar in treeviews
1451
border-bottom: $bar-size solid $primary;
1452
box-shadow: none;
1453
background-color: transparent;
1454
background-image: none;
1455
1456
&:selected:hover { box-shadow: none; }
1457
}
1458
1459
&.trough { // progress bar trough in treeviews
1460
border-bottom: $bar-size solid $divider;
1461
box-shadow: none;
1462
background-color: transparent;
1463
background-image: none;
1464
1465
&:selected:hover { box-shadow: none; }
1466
}
1467
1468
header {
1469
button {
1470
@extend row.activatable;
1471
1472
padding: 2px 6px;
1473
border-style: none solid solid none;
1474
border-width: 1px;
1475
border-color: $border;
1476
border-radius: 0;
1477
background-clip: border-box;
1478
1479
&:not(:hover):not(:active) { color: $text-secondary; }
1480
1481
&, &:hover, &:active { box-shadow: none; }
1482
1483
&, &:disabled { background-color: $base; }
1484
1485
&:last-child { border-right-style: none; }
1486
}
1487
}
1488
1489
button.dnd,
1490
header.button.dnd { // for treeview-like derive widgets
1491
padding: 2px 6px;
1492
border-style: none solid solid;
1493
border-width: 1px;
1494
border-color: $border;
1495
border-radius: 0;
1496
box-shadow: none;
1497
background-color: $base;
1498
background-clip: border-box;
1499
color: $primary;
1500
}
1501
1502
acceleditor > label { background-color: $primary; } // see tests/testaccel to test
1503
}
1504
1505
1506
/*********
1507
* Menus *
1508
*********/
1509
menubar,
1510
.menubar {
1511
-GtkWidget-window-dragging: true;
1512
padding: 0;
1513
// box-shadow: inset 0 -1px $border;
1514
background-color: $titlebar;
1515
1516
> menuitem {
1517
transition: $transition;
1518
min-height: 20px;
1519
padding: 4px 8px;
1520
color: $titlebar-text-secondary;
1521
1522
&:hover { // Seems like it :hover even with keyboard focus
1523
transition: none;
1524
background-color: $titlebar-divider;
1525
color: $titlebar-text;
1526
}
1527
1528
&:disabled { color: $titlebar-text-secondary-disabled; }
1529
1530
label:disabled { color: inherit; } // to inherit the above color
1531
}
1532
}
1533
1534
// Needed to make the border-radius of menus work
1535
// otherwise the background bleeds out of the menu edges
1536
.background.popup { background-color: transparent; }
1537
1538
menu,
1539
.menu,
1540
.context-menu {
1541
margin: 4px 0; // See https://bugzilla.gnome.org/show_bug.cgi?id=591258
1542
padding: 4px 0;
1543
box-shadow: inset 0 1px highlight($surface);
1544
background-color: $surface;
1545
border: 1px solid $border; // adds borders in a non composited env
1546
1547
.csd & {
1548
border: none; // axes borders in a composited env
1549
border-radius: $corner-radius;
1550
}
1551
1552
menuitem {
1553
transition: background-color $duration $ease-out;
1554
min-height: 20px;
1555
min-width: 40px;
1556
padding: 4px 8px;
1557
font: initial;
1558
text-shadow: none;
1559
1560
&:hover {
1561
transition: none;
1562
background-color: $divider;
1563
}
1564
1565
&:disabled { color: $text-disabled; }
1566
1567
// submenu indicators
1568
arrow {
1569
min-height: 16px;
1570
min-width: 16px;
1571
1572
&:dir(ltr) {
1573
-gtk-icon-source: -gtk-icontheme('pan-end-symbolic');
1574
margin-left: 8px;
1575
}
1576
1577
&:dir(rtl) {
1578
-gtk-icon-source:-gtk-icontheme('pan-end-symbolic-rtl');
1579
margin-right: 8px;
1580
}
1581
}
1582
1583
// avoids labels color being overridden, see
1584
// https://bugzilla.gnome.org/show_bug.cgi?id=767058
1585
label { &:dir(rtl), &:dir(ltr) { color: inherit; }}
1586
}
1587
1588
// overflow arrows
1589
> arrow {
1590
min-height: 16px;
1591
min-width: 16px;
1592
padding: 4px;
1593
background-color: $surface;
1594
color: $text-secondary;
1595
1596
&.top {
1597
margin-top: -4px;
1598
border-bottom: 1px solid $border;
1599
border-radius: $corner-radius $corner-radius 0 0;
1600
-gtk-icon-source: -gtk-icontheme('pan-up-symbolic');
1601
}
1602
1603
&.bottom {
1604
margin-top: 4px * 2;
1605
margin-bottom: -4px * 3;
1606
border-top: 1px solid $border;
1607
border-radius: 0 0 $corner-radius $corner-radius;
1608
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
1609
}
1610
1611
&:hover {
1612
background-image: image($divider);
1613
color: $text;
1614
}
1615
1616
&:disabled {
1617
border-color: transparent;
1618
background-color: transparent;
1619
color: transparent;
1620
// color: $text-secondary-disabled;
1621
}
1622
}
1623
1624
separator { margin: 4px 0; }
1625
}
1626
1627
menuitem {
1628
accelerator { color: $text-secondary; }
1629
1630
&:disabled accelerator { color: $text-secondary-disabled; }
1631
}
1632
1633
// FIXME: THIS IS A REALLY UGLY WORKAROUND!
1634
// Electron/Atom render all translucent colors in opaque colors.
1635
// It's a very critical issue for this theme and should be fixed by upstream...
1636
.popup:not(.csd) menu {
1637
menuitem {
1638
color: $solid-text;
1639
1640
&:hover { background-color: $solid-divider; }
1641
1642
&:disabled { color: $solid-text-disabled; } // separator/border also use this color.
1643
}
1644
1645
// FIXME: not working this
1646
accelerator { color: $solid-text-secondary; }
1647
}
1648
1649
1650
/************
1651
* Popovers *
1652
************/
1653
popover.background {
1654
transition: $transition-shadow;
1655
padding: 2px;
1656
box-shadow: $shadow-2; // TODO: this should really have a highlight
1657
background-color: $surface;
1658
1659
&:backdrop { box-shadow: $shadow-1; }
1660
1661
&, .csd & {
1662
border-style: solid;
1663
border-width: 1px;
1664
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.3);
1665
border-radius: $corner-radius + 1px;
1666
}
1667
1668
> stack { margin: -4px; } // remove extra padding from menu style popovers
1669
1670
> toolbar { margin: -2px; }
1671
1672
> list,
1673
> .view,
1674
> toolbar {
1675
border-style: none;
1676
box-shadow: none;
1677
background-color: transparent;
1678
}
1679
1680
// FIXME: Use the popover color instead of transparent as a workaround for .view
1681
list,
1682
.view:not(:selected),
1683
toolbar { background-color: $surface; }
1684
1685
// &.touch-selection,
1686
// &.magnifier,
1687
// &.osd { @extend %osd; }
1688
1689
// button:not(.suggested-action):not(.destructive-action) { @extend %button_basic.flat; }
1690
1691
&.menu button,
1692
button.model {
1693
@extend %simple_flat_button;
1694
1695
min-height: 32px;
1696
padding: 0 8px;
1697
border-radius: $corner-radius;
1698
1699
&:checked { @extend %selected_items; }
1700
}
1701
1702
separator { margin: 4px 0; }
1703
1704
list separator { margin: 0; }
1705
}
1706
1707
/*************
1708
* Notebooks *
1709
*************/
1710
notebook {
1711
frame > paned > & > header,
1712
&.frame > header { background-color: $base-alt; }
1713
1714
&:focus tab:checked {
1715
box-shadow: inset 0 0 0 9999px rgba($primary, 0.12);
1716
outline: none;
1717
}
1718
1719
> header {
1720
border-width: 1px;
1721
border-color: $border;
1722
background-color: $background;
1723
background-clip: border-box;
1724
1725
&.top {
1726
border-bottom-style: solid;
1727
1728
> tabs {
1729
margin-bottom: -1px;
1730
1731
> tab {
1732
border-image: linear-gradient(to top, transparent 2px, transparent 2px) 2 / 0 0 2px;
1733
1734
&:checked { border-image-source: linear-gradient(to top, $primary 2px, $border 2px); }
1735
1736
&.reorderable-page { border-image-width: 0 1px 2px; }
1737
}
1738
}
1739
}
1740
1741
&.bottom {
1742
border-top-style: solid;
1743
1744
> tabs {
1745
margin-top: -1px;
1746
1747
> tab {
1748
border-image: linear-gradient(to bottom, transparent 2px, transparent 2px) 2 / 2px 0 0;
1749
1750
&:checked { border-image-source: linear-gradient(to bottom, $primary 2px, $border 2px); }
1751
1752
&.reorderable-page { border-image-width: 2px 1px 0; }
1753
}
1754
}
1755
}
1756
1757
&.left {
1758
border-right-style: solid;
1759
1760
> tabs {
1761
margin-right: -1px;
1762
1763
> tab {
1764
border-image: linear-gradient(to left, transparent 2px, transparent 2px) 2 / 0 2px 0 0;
1765
1766
&:checked { border-image-source: linear-gradient(to left, $primary 2px, $border 2px); }
1767
1768
&.reorderable-page { border-image-width: 1px 2px 1px 0; }
1769
}
1770
}
1771
}
1772
1773
&.right {
1774
border-left-style: solid;
1775
1776
> tabs {
1777
margin-left: -1px;
1778
1779
> tab {
1780
border-image: linear-gradient(to right, transparent 2px, transparent 2px) 2 / 0 0 0 2px;
1781
1782
&:checked { border-image-source: linear-gradient(to right, $primary 2px, $border 2px); }
1783
1784
&.reorderable-page { border-image-width: 1px 0 1px 2px; }
1785
}
1786
}
1787
}
1788
1789
&.top > tabs > arrow {
1790
@extend %notebook_vert_arrows;
1791
1792
border-top-style: none;
1793
}
1794
1795
&.bottom > tabs > arrow {
1796
@extend %notebook_vert_arrows;
1797
1798
border-bottom-style: none;
1799
}
1800
1801
@at-root %notebook_vert_arrows {
1802
padding-left: 4px;
1803
padding-right: 4px;
1804
1805
&.down {
1806
margin-left: -8px;
1807
-gtk-icon-source: -gtk-icontheme('pan-start-symbolic');
1808
}
1809
1810
&.up {
1811
margin-right: -8px;
1812
-gtk-icon-source: -gtk-icontheme('pan-end-symbolic');
1813
}
1814
}
1815
1816
&.left > tabs > arrow {
1817
@extend %notebook_horz_arrows;
1818
1819
border-left-style: none;
1820
}
1821
1822
&.right > tabs > arrow {
1823
@extend %notebook_horz_arrows;
1824
1825
border-right-style: none;
1826
}
1827
1828
@at-root %notebook_horz_arrows {
1829
padding-top: 4px;
1830
padding-bottom: 4px;
1831
1832
&.down {
1833
margin-top: -8px;
1834
-gtk-icon-source: -gtk-icontheme('pan-up-symbolic');
1835
}
1836
1837
&.up {
1838
margin-bottom: -8px;
1839
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
1840
}
1841
}
1842
1843
> tabs > arrow {
1844
@extend %simple_flat_button;
1845
1846
min-height: 16px;
1847
min-width: 16px;
1848
border-radius: 0;
1849
}
1850
1851
tab {
1852
transition: $transition,
1853
background-size 0,
1854
background-image 0;
1855
min-height: $small-size;
1856
min-width: $small-size;
1857
padding: $container-padding 12px;
1858
1859
outline-offset: -6px;
1860
1861
border-width: 1px; // for reorderable tabs
1862
border-color: transparent; //
1863
1864
background-image: radial-gradient(circle farthest-corner at center,
1865
$primary 10%,
1866
transparent 0%);
1867
background-repeat: no-repeat;
1868
background-position: center;
1869
background-size: 0% 0%;
1870
background-clip: border-box;
1871
1872
color: $text-secondary;
1873
font-weight: 500;
1874
1875
&:hover {
1876
background-color: $overlay-hover;
1877
color: $text;
1878
}
1879
1880
&:disabled { color: $text-secondary-disabled; }
1881
1882
&:checked {
1883
transition: $transition,
1884
background-size $duration-ripple $ease-out,
1885
background-image $duration-ripple + $duration-ripple-aftermath $ease-out;
1886
background-color: transparent;
1887
background-image: radial-gradient(circle farthest-corner at center,
1888
transparent 10%,
1889
transparent 0%);
1890
background-size: 1000% 1000%;
1891
background-clip: padding-box;
1892
color: $text;
1893
1894
&:disabled { color: $text-disabled; }
1895
1896
&.reorderable-page {
1897
border-color: $border;
1898
background-color: $base;
1899
}
1900
}
1901
1902
// colors the button like the label, overridden otherwise
1903
button.flat {
1904
@extend %small_button;
1905
1906
&:last-child {
1907
margin-left: $container-padding;
1908
margin-right: $container-padding - 12px;
1909
}
1910
1911
&:first-child {
1912
margin-left: $container-padding - 12px;
1913
margin-right: $container-padding;
1914
}
1915
}
1916
}
1917
1918
&.top,
1919
&.bottom {
1920
tabs {
1921
padding-left: 8px;
1922
padding-right: 8px;
1923
1924
&:not(:only-child) {
1925
&:first-child { margin-left: 0; }
1926
1927
&:last-child { margin-right: 0; }
1928
}
1929
1930
tab.reorderable-page { border-style: none solid; }
1931
}
1932
}
1933
1934
&.left,
1935
&.right {
1936
tabs {
1937
padding-top: 8px;
1938
padding-bottom: 8px;
1939
1940
&:not(:only-child) {
1941
&:first-child { margin-top: 0; }
1942
1943
&:last-child { margin-bottom: 0; }
1944
}
1945
1946
tab.reorderable-page { border-style: solid none; }
1947
}
1948
}
1949
}
1950
1951
> stack:not(:only-child) { // the :not(:only-child) is for "hidden" notebooks
1952
background-color: $base;
1953
}
1954
}
1955
1956
1957
/**************
1958
* Scrollbars *
1959
**************/
1960
scrollbar {
1961
$_slider_min_length: 24px;
1962
1963
// disable steppers
1964
@at-root * {
1965
-GtkScrollbar-has-backward-stepper: false;
1966
-GtkScrollbar-has-forward-stepper: false;
1967
}
1968
1969
transition: $transition;
1970
background-color: $base;
1971
background-clip: $background-clip-extra;
1972
1973
// scrollbar border
1974
&.top { border-bottom: 1px solid $border; }
1975
&.bottom { border-top: 1px solid $border; }
1976
&.left { border-right: 1px solid $border; }
1977
&.right { border-left: 1px solid $border; }
1978
1979
// slider
1980
slider {
1981
transition: $transition, margin 0, border-width 0;
1982
min-width: 8px;
1983
min-height: 8px;
1984
border: 4px solid transparent;
1985
border-radius: $circular-radius;
1986
background-clip: padding-box;
1987
background-color: $text-disabled;
1988
1989
&:hover { background-color: $text-secondary; }
1990
1991
&:active { background-color: $text; }
1992
1993
&:disabled { background-color: $text-secondary-disabled; }
1994
}
1995
1996
&.fine-tune {
1997
slider {
1998
transition: $transition, margin 0, border-width 0, min-width 0, min-height 0;
1999
min-width: 4px;
2000
min-height: 4px;
2001
}
2002
2003
&.horizontal slider { margin: 2px 0; }
2004
2005
&.vertical slider { margin: 0 2px; }
2006
}
2007
2008
&.overlay-indicator {
2009
&:not(.dragging):not(.hovering) {
2010
border-color: transparent;
2011
background-color: transparent;
2012
2013
slider {
2014
min-width: 4px;
2015
min-height: 4px;
2016
margin: 4px - 1px;
2017
border: 1px solid rgba($base, 0.3);
2018
}
2019
2020
button {
2021
min-width: 4px;
2022
min-height: 4px;
2023
margin: 4px - 1px;
2024
border: 1px solid rgba($base, 0.3);
2025
border-radius: $circular-radius;
2026
background-color: $text-disabled;
2027
background-clip: padding-box;
2028
-gtk-icon-source: none;
2029
2030
&:disabled { background-color: $text-secondary-disabled; }
2031
}
2032
2033
&.horizontal {
2034
slider { min-width: $_slider_min_length; }
2035
2036
button { min-width: 8px; }
2037
}
2038
2039
&.vertical {
2040
slider { min-height: $_slider_min_length; }
2041
2042
button { min-height: 8px; }
2043
}
2044
}
2045
2046
&.dragging,
2047
&.hovering { background-color: rgba($base, 0.9); }
2048
}
2049
2050
&.horizontal slider { min-width: $_slider_min_length; }
2051
2052
&.vertical slider { min-height: $_slider_min_length; }
2053
2054
// button styling
2055
button {
2056
@extend %simple_flat_button;
2057
2058
min-width: 16px;
2059
min-height: 16px;
2060
padding: 0;
2061
border-radius: 0;
2062
}
2063
2064
// button icons
2065
&.vertical {
2066
button {
2067
&.down { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); }
2068
2069
&.up { -gtk-icon-source: -gtk-icontheme('pan-up-symbolic'); }
2070
}
2071
}
2072
2073
&.horizontal {
2074
button {
2075
&.down { -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); }
2076
2077
&.up { -gtk-icon-source: -gtk-icontheme('pan-start-symbolic'); }
2078
}
2079
}
2080
}
2081
2082
2083
/**********
2084
* Switch *
2085
**********/
2086
switch {
2087
transition: all $duration $ease-out;
2088
margin: $container-padding 0;
2089
padding: 0 2px;
2090
border: 5px solid transparent;
2091
border-radius: $circular-radius;
2092
background-color: $track;
2093
background-clip: padding-box;
2094
font-size: 0;
2095
2096
&:checked { background-color: rgba($primary, 0.5); }
2097
2098
&:disabled { opacity: 0.5; }
2099
2100
// hide on/off icons for >=3.24.5
2101
image {
2102
margin: -8px;
2103
-gtk-icon-transform: scale(0);
2104
}
2105
2106
slider {
2107
transition: all $duration $ease-out;
2108
min-width: 20px;
2109
min-height: 20px;
2110
margin: -3px -2px;
2111
border-radius: $circular-radius;
2112
outline: none;
2113
box-shadow: 0 0 0 10px transparent, $shadow-1;
2114
background-color: $surface;
2115
}
2116
2117
&:hover slider { box-shadow: 0 0 0 10px $overlay-hover, $shadow-1; }
2118
2119
&:focus slider { box-shadow: 0 0 0 10px $overlay-focus, $shadow-1; }
2120
2121
&:focus:hover slider { box-shadow: 0 0 0 10px $overlay-focus-hover, $shadow-1; }
2122
2123
&:checked slider {
2124
background-color: $primary;
2125
color: $primary;
2126
}
2127
2128
row:selected & {
2129
}
2130
}
2131
2132
2133
/*************************
2134
* Check and Radio items *
2135
*************************/
2136
// draw regular check and radio items using our PNG assets
2137
// all assets are rendered from assets.svg. never add pngs directly
2138
2139
// selection-mode
2140
.view.content-view.check:not(list),
2141
.content-view .tile check:not(list) {
2142
min-height: 40px;
2143
min-width: 40px;
2144
margin: 0;
2145
padding: 0;
2146
box-shadow: none;
2147
background-color: transparent;
2148
background-image: none;
2149
-gtk-icon-shadow: $shadow-1;
2150
2151
&:hover, &:active { -gtk-icon-shadow: $shadow-2; }
2152
2153
@each $s, $as in ('', '-unchecked'),
2154
(':checked', '-checked') {
2155
&#{$s} {
2156
-gtk-icon-source: -gtk-scaled(url("assets/selectionmode-checkbox#{$as}#{$asset-suffix}.png"),
2157
url("assets/selectionmode-checkbox#{$as}#{$asset-suffix}@2.png"));
2158
}
2159
}
2160
}
2161
2162
checkbutton,
2163
radiobutton {
2164
outline: none;
2165
}
2166
2167
checkbutton.text-button,
2168
radiobutton.text-button {
2169
// this is for a nice focus on check and radios text
2170
padding: 2px;
2171
2172
label:not(:only-child) { margin: 0 4px; }
2173
}
2174
2175
$check_radio_size: 40px;
2176
2177
check,
2178
radio {
2179
min-height: 24px;
2180
min-width: 24px;
2181
margin: -($check_radio_size - 24px) / 2;
2182
padding: ($check_radio_size - 24px) / 2;
2183
2184
@extend %simple_flat_button;
2185
2186
@extend %circular_button;
2187
2188
&:hover { box-shadow: inset 0 0 0 9999px $overlay-hover; }
2189
2190
&:focus { box-shadow: inset 0 0 0 9999px $overlay-focus; }
2191
2192
&:focus:hover { box-shadow: inset 0 0 0 9999px $overlay-focus-hover; }
2193
2194
&:checked, &:indeterminate {
2195
color: $primary;
2196
2197
&:disabled { color: $text-secondary-disabled; }
2198
}
2199
2200
// &:only-child { margin: -12px; }
2201
2202
popover modelbutton.flat & {
2203
&, &:hover, &:focus, &:focus:hover, &:active, &:disabled {
2204
transition: none; // FIXME: this is a workaround for a popover check/radio long transition issue
2205
box-shadow: none;
2206
background-image: none;
2207
}
2208
2209
&:not(:checked):not(:indeterminate):not(:disabled) { color: $text-secondary; }
2210
2211
&.left:dir(rtl) {
2212
margin-left: -12px;
2213
margin-right: -4px;
2214
}
2215
2216
&.right:dir(ltr) {
2217
margin-left: -4px;
2218
margin-right: -12px;
2219
}
2220
}
2221
2222
menu menuitem & {
2223
transition: none;
2224
margin: 0; // this is a workaround for a menu check/radio size allocation issue
2225
padding: 0;
2226
2227
&:dir(ltr) { margin-right: 8px; }
2228
2229
&:dir(rtl) { margin-left: 8px; }
2230
2231
&:not(:checked):not(:indeterminate):not(:disabled) { color: $text-secondary; }
2232
2233
&, &:hover, &:disabled {
2234
box-shadow: none;
2235
// color: inherit;
2236
}
2237
}
2238
}
2239
2240
%check,
2241
check {
2242
-gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-unchecked-symbolic.svg"));
2243
2244
&:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-checked-symbolic.svg")); }
2245
2246
&:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-mixed-symbolic.svg")); }
2247
}
2248
2249
%radio,
2250
radio {
2251
-gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-unchecked-symbolic.svg"));
2252
2253
// &:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-checked-symbolic.svg")); }
2254
2255
&:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-mixed-symbolic.svg")); }
2256
2257
border-image-slice: $check_radio_size / 2px;
2258
border-image-width: $check_radio_size / 2;
2259
2260
$radio_indicator: 10px / $check_radio_size / 2;
2261
2262
& {
2263
border-image-source: -gtk-gradient(radial,
2264
center center, 0,
2265
center center, 0.001,
2266
to($primary),
2267
to(transparent));
2268
}
2269
2270
&:checked:not(:indeterminate) {
2271
border-image-source: -gtk-gradient(radial,
2272
center center, 0,
2273
center center, $radio_indicator,
2274
to($primary),
2275
to(transparent));
2276
}
2277
2278
&:checked:not(:indeterminate):disabled {
2279
border-image-source: -gtk-gradient(radial,
2280
center center, 0,
2281
center center, $radio_indicator,
2282
to($text-secondary-disabled),
2283
to(transparent));
2284
}
2285
}
2286
2287
%small_check,
2288
menu menuitem check {
2289
& {
2290
min-height: 16px;
2291
min-width: 16px;
2292
border-radius: $corner-radius;
2293
-gtk-outline-radius: $corner-radius;
2294
-gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-unchecked-symbolic.svg"));
2295
}
2296
2297
&:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-checked-symbolic.svg")); }
2298
2299
&:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-mixed-symbolic.svg")); }
2300
}
2301
2302
%small_radio,
2303
menu menuitem radio {
2304
& {
2305
min-height: 16px;
2306
min-width: 16px;
2307
border-image: none;
2308
-gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-unchecked-symbolic.svg"));
2309
}
2310
2311
&:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-checked-symbolic.svg")); }
2312
2313
&:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-mixed-symbolic.svg")); }
2314
}
2315
2316
// ANIMATION:
2317
// this is made with those pretty convoluted transitions, since checks and radios have to animate only on state changes,
2318
// the transformation is set on the active state and it get reset on the checked state.
2319
// radio:not(:checked):active { -gtk-icon-transform: scale(0); }
2320
2321
treeview.view check,
2322
treeview.view radio {
2323
padding: 0;
2324
2325
&:hover, &:selected {
2326
box-shadow: none;
2327
background-color: transparent;
2328
}
2329
2330
& {
2331
color: $text-secondary;
2332
2333
&:hover, &:active { color: $text; }
2334
2335
&:disabled { color: $text-secondary-disabled; }
2336
2337
&:checked, &:indeterminate { color: $primary; }
2338
2339
&:checked:disabled, &:indeterminate:disabled { color: $text-secondary-disabled; }
2340
}
2341
}
2342
2343
treeview.view radio:checked {
2344
-gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-checked-symbolic.svg"));
2345
border-image: none;
2346
}
2347
2348
2349
/************
2350
* GtkScale *
2351
************/
2352
scale {
2353
// sizing
2354
$_marks_length: 8px;
2355
$_marks_distance: 7px;
2356
2357
$trough_size: 2px;
2358
$finetune_trough_size: 4px;
2359
2360
$slider_size: 32px;
2361
2362
$slider_margin: -($slider_size - $trough_size) / 2;
2363
$finetune_slider_margin: -($slider_size - $finetune_trough_size) / 2;
2364
2365
$color_slider_margin: -($slider_size) * 3 / 4;
2366
$color_marks_slider_margin: -($slider_size - 16px) - $color_slider_margin;
2367
2368
min-height: $trough_size;
2369
min-width: $trough_size;
2370
2371
&.horizontal { padding: ($medium-size - $trough_size) / 2 12px; }
2372
2373
&.vertical { padding: 12px ($medium-size - $trough_size) / 2; }
2374
2375
// the slider is inside the trough, so to have make it bigger there's a negative margin
2376
slider {
2377
min-height: $slider_size;
2378
min-width: $slider_size;
2379
margin: $slider_margin;
2380
}
2381
2382
// click-and-hold the slider to activate
2383
&.fine-tune {
2384
&.horizontal {
2385
min-height: $finetune_trough_size;
2386
padding-top: ($medium-size - $finetune_trough_size) / 2;
2387
padding-bottom: ($medium-size - $finetune_trough_size) / 2;
2388
}
2389
2390
&.vertical {
2391
min-width: $finetune_trough_size;
2392
padding-left: ($medium-size - $finetune_trough_size) / 2;
2393
padding-right: ($medium-size - $finetune_trough_size) / 2;
2394
}
2395
2396
// to make the trough grow in fine-tune mode
2397
slider { margin: $finetune_slider_margin; }
2398
}
2399
2400
// the backing bit
2401
trough {
2402
transition: background-color $duration $ease-out;
2403
outline: none;
2404
background-color: $track;
2405
2406
&:disabled { background-color: $divider; }
2407
}
2408
2409
// the colored part of the backing bit
2410
highlight {
2411
transition: background-color $duration $ease-out;
2412
background-color: $primary;
2413
2414
&:disabled { background-color: transparent; }
2415
}
2416
2417
// this is another differently styled part of the backing bit, the most relevant use case is for example
2418
// in media player to indicate how much video stream as been cached
2419
fill {
2420
transition: background-color $duration $ease-out;
2421
background-color: $track;
2422
2423
&:disabled { background-color: transparent; }
2424
}
2425
2426
slider {
2427
transition: background-color $duration $ease-out,
2428
background-size $duration-ripple-aftermath $ease-out,
2429
background-image $duration-ripple-aftermath-opacity $ease-out;
2430
background-repeat: no-repeat;
2431
background-position: center;
2432
background-size: auto, 1000% 1000%;
2433
border-radius: 50%;
2434
color: transparent;
2435
2436
@each $s, $as in ('', ''),
2437
(':disabled', '-disabled') {
2438
&#{$s} {
2439
$_url: 'assets/scale-slider#{$as}#{$asset-suffix}';
2440
2441
background-image: -gtk-scaled(url('#{$_url}.png'), url('#{$_url}@2.png')),
2442
radial-gradient(circle farthest-corner at center,
2443
currentColor 10%,
2444
transparent 0%);
2445
}
2446
}
2447
2448
&:hover { background-color: rgba($primary, 0.08); }
2449
2450
&:focus { background-color: rgba($primary, 0.12); }
2451
2452
&:focus:hover { background-color: rgba($primary, 0.16); }
2453
2454
&:active {
2455
transition: background-color $duration $ease-out,
2456
background-size 0,
2457
background-image 0;
2458
animation: ripple-slider $duration-ripple $ease-out forwards;
2459
background-size: auto, 0% 0%;
2460
background-color: rgba($primary, 0.08);
2461
color: rgba($primary, 0.12);
2462
}
2463
}
2464
2465
marks label,
2466
value { color: $text-secondary; }
2467
2468
marks {
2469
color: $track;
2470
2471
@each $marks_class, $marks_pos, $marks_margin in (top, top, bottom),
2472
(bottom, bottom, top),
2473
(left, left, right),
2474
(right, right, left) {
2475
&.#{$marks_class} {
2476
margin-#{$marks_margin}: $_marks_distance;
2477
margin-#{$marks_pos}: -($_marks_distance + $_marks_length);
2478
}
2479
}
2480
}
2481
2482
&.fine-tune marks {
2483
@each $marks_class, $marks_pos, $marks_margin in (top, top, bottom),
2484
(bottom, bottom, top),
2485
(left, left, right),
2486
(right, right, left) {
2487
&.#{$marks_class} {
2488
margin-#{$marks_margin}: $_marks_distance - 1px;
2489
margin-#{$marks_pos}: -($_marks_distance + $_marks_length - 1px);
2490
}
2491
}
2492
}
2493
2494
&.horizontal {
2495
indicator {
2496
min-height: $_marks_length;
2497
min-width: 1px;
2498
}
2499
}
2500
2501
&.vertical {
2502
indicator {
2503
min-height: 1px;
2504
min-width: $_marks_length;
2505
}
2506
}
2507
2508
// *WARNING* scale with marks madness following
2509
2510
@each $dir_class, $dir_infix in ('horizontal', 'horz'),
2511
('vertical', 'vert') {
2512
@each $marks_infix, $marks_class in ('marks-before', 'marks-before:not(.marks-after)'),
2513
('marks-after', 'marks-after:not(.marks-before)') {
2514
&.#{$dir_class}.#{$marks_class} {
2515
slider {
2516
@each $state, $state_infix in ('', ''),
2517
(':disabled', '-disabled') {
2518
&#{$state} {
2519
$_scale_asset: 'assets/scale-#{$dir_infix}-#{$marks_infix}-slider#{$state_infix}#{$asset-suffix}';
2520
2521
background-image: -gtk-scaled(url('#{$_scale_asset}.png'), url('#{$_scale_asset}@2.png')),
2522
radial-gradient(circle farthest-corner at center,
2523
currentColor 10%,
2524
transparent 0%);
2525
}
2526
}
2527
}
2528
}
2529
}
2530
}
2531
2532
&.color {
2533
min-height: 0;
2534
min-width: 0;
2535
2536
&.horizontal {
2537
padding: 0 0 12px 0;
2538
2539
slider {
2540
&:dir(ltr), &:dir(rtl) { // specificity bump
2541
margin-bottom: $color_slider_margin;
2542
margin-top: $color_marks_slider_margin;
2543
}
2544
}
2545
}
2546
2547
&.vertical {
2548
&:dir(ltr) {
2549
padding: 0 0 0 12px;
2550
2551
slider {
2552
margin-left: $color_slider_margin;
2553
margin-right: $color_marks_slider_margin;
2554
}
2555
}
2556
2557
&:dir(rtl) {
2558
padding: 0 12px 0 0;
2559
2560
slider {
2561
margin-right: $color_slider_margin;
2562
margin-left: $color_marks_slider_margin;
2563
}
2564
}
2565
}
2566
}
2567
}
2568
2569
2570
/*****************
2571
* Progress bars *
2572
*****************/
2573
progressbar {
2574
// sizing
2575
&.horizontal {
2576
trough,
2577
progress { min-height: $bar-size; }
2578
}
2579
2580
&.vertical {
2581
trough,
2582
progress { min-width: $bar-size; }
2583
}
2584
2585
// FIXME: insensitive state missing and some other state should be set probably
2586
color: $text-secondary;
2587
font-size: smaller;
2588
2589
trough { background-color: $divider; }
2590
2591
progress { background-color: $primary; }
2592
2593
&.osd { // progressbar.osd used for epiphany page loading progress
2594
// min-width: $bar-size;
2595
// min-height: $bar-size;
2596
// background-color: transparent;
2597
2598
// trough { background-color: transparent; }
2599
2600
// progress { background-color: $primary; }
2601
}
2602
2603
trough.empty progress { all: unset; } // makes the progress indicator disappear, when the fraction is 0
2604
}
2605
2606
2607
/*************
2608
* Level Bar *
2609
*************/
2610
levelbar {
2611
&.horizontal {
2612
block { min-height: $bar-size; }
2613
2614
&.discrete block {
2615
min-width: $medium-size;
2616
2617
&:not(:last-child) { margin-right: 2px; }
2618
}
2619
}
2620
2621
&.vertical {
2622
block { min-width: $bar-size; }
2623
2624
&.discrete block {
2625
min-height: $medium-size;
2626
2627
&:not(:last-child) { margin-bottom: 2px; }
2628
}
2629
}
2630
2631
// imitate the entry style
2632
trough {
2633
// padding: 2px;
2634
// border-radius: $corner-radius;
2635
// box-shadow: $shadow-1;
2636
// background-color: $base;
2637
2638
// &:disabled { background-color: $base-alt; }
2639
}
2640
2641
block {
2642
&.low { background-color: $warning; }
2643
2644
&.high,
2645
&:not(.empty) { background-color: $primary; }
2646
2647
&.full { background-color: $success; }
2648
2649
&.empty { background-color: $divider; }
2650
}
2651
}
2652
2653
2654
/****************
2655
* Print dialog *
2656
*****************/
2657
printdialog {
2658
paper {
2659
padding: 0;
2660
border: 1px solid $border;
2661
background-color: $base;
2662
color: $text;
2663
}
2664
2665
.dialog-action-box { margin: 12px; }
2666
}
2667
2668
2669
/**********
2670
* Frames *
2671
**********/
2672
frame > border,
2673
.frame {
2674
margin: 0;
2675
padding: 0;
2676
border: 1px solid $border;
2677
border-radius: 0;
2678
box-shadow: none;
2679
2680
&.flat { border-style: none; }
2681
}
2682
2683
frame.flat > border { @extend .frame.flat; } // for backward compatibility
2684
2685
actionbar > revealer > box {
2686
padding: $container-padding;
2687
border-top: 1px solid $border;
2688
2689
button:not(.suggested-action):not(.destructive-action):not(.server-list-button) { @extend %button_basic.flat; }
2690
}
2691
2692
scrolledwindow {
2693
viewport.frame { // avoid double borders when viewport inside scrolled window
2694
border-style: none;
2695
}
2696
2697
// This is used when content is touch-dragged past boundaries.
2698
// draws a box on top of the content, the size changes programmatically.
2699
@at-root overshoot {
2700
&.top { @include overshoot(top); }
2701
2702
&.bottom { @include overshoot(bottom); }
2703
2704
&.left { @include overshoot(left); }
2705
2706
&.right { @include overshoot(right); }
2707
}
2708
2709
// Overflow indication, works similarly to the overshoot, the size if fixed tho.
2710
@at-root undershoot {
2711
&.top { @include undershoot(top); }
2712
2713
&.bottom { @include undershoot(bottom); }
2714
2715
&.left { @include undershoot(left); }
2716
2717
&.right { @include undershoot(right); }
2718
}
2719
2720
@at-root junction { // the small square between two scrollbars
2721
border-style: solid none none solid;
2722
border-width: 1px;
2723
border-color: $border;
2724
background-color: $base;
2725
2726
&:dir(rtl) { border-style: solid solid none none; }
2727
}
2728
}
2729
2730
// vbox and hbox separators
2731
separator {
2732
min-width: 1px;
2733
min-height: 1px;
2734
background-color: $border;
2735
}
2736
2737
%hide_separators {
2738
min-width: 0;
2739
min-height: 0;
2740
background-color: transparent;
2741
}
2742
2743
2744
/*********
2745
* Lists *
2746
*********/
2747
list {
2748
border-color: $border;
2749
background-color: $base;
2750
2751
row { padding: 2px; }
2752
}
2753
2754
row {
2755
&.activatable {
2756
transition: $transition,
2757
background-size $duration-ripple-aftermath $ease-out,
2758
background-image $duration-ripple-aftermath-opacity $ease-out;
2759
box-shadow: inset 0 0 0 9999px transparent;
2760
background-image: radial-gradient(circle farthest-corner at center,
2761
transparent 10%,
2762
transparent 0%);
2763
background-repeat: no-repeat;
2764
background-position: center;
2765
background-size: 1000% 1000%;
2766
2767
&:hover {
2768
transition: $transition,
2769
box-shadow 0,
2770
background-size $duration-ripple-aftermath $ease-out,
2771
background-image $duration-ripple-aftermath-opacity $ease-out;
2772
box-shadow: inset 0 0 0 9999px $overlay-hover;
2773
}
2774
2775
&.has-open-popup, // this is for indicathing which row generated a popover see https://bugzilla.gnome.org/show_bug.cgi?id=754411
2776
&:active {
2777
transition: $transition,
2778
background-size 0,
2779
background-image 0;
2780
animation: ripple $duration-ripple $ease-out forwards;
2781
box-shadow: inset 0 0 0 9999px $overlay-hover;
2782
background-image: radial-gradient(circle farthest-corner at center,
2783
$overlay-active 10%,
2784
transparent 0%);
2785
background-size: 0% 0%;
2786
}
2787
}
2788
2789
&:selected {
2790
@extend %selected_items;
2791
color: $primary; // for overlays
2792
2793
image,
2794
label { color: $text; }
2795
2796
button image,
2797
button label { color: inherit; }
2798
2799
&:disabled {
2800
image,
2801
label { color: $text-disabled; }
2802
}
2803
}
2804
}
2805
2806
2807
/*********************
2808
* App Notifications *
2809
*********************/
2810
.app-notification {
2811
// @extend %osd;
2812
2813
@extend toolbar.osd;
2814
2815
margin: 8px;
2816
2817
button { @extend %button_basic.flat; }
2818
2819
&.frame,
2820
border { border-style: none; }
2821
}
2822
2823
2824
/*************
2825
* Expanders *
2826
*************/
2827
expander {
2828
title > arrow {
2829
transition: all $duration $ease-out;
2830
min-width: 16px;
2831
min-height: 16px;
2832
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
2833
-gtk-icon-transform: rotate(-90deg);
2834
2835
&:dir(rtl) { -gtk-icon-transform: rotate(90deg); }
2836
2837
&:checked { -gtk-icon-transform: unset; }
2838
2839
color: $text-secondary;
2840
2841
&:hover, &:active { color: $text; }
2842
2843
&:disabled { color: $text-secondary-disabled; }
2844
}
2845
}
2846
2847
2848
/************
2849
* Calendar *
2850
************/
2851
calendar {
2852
padding: 1px;
2853
border: 1px solid $border;
2854
color: $text;
2855
2856
&:disabled { color: $text-disabled; }
2857
2858
&:selected {
2859
@extend %selected_items;
2860
2861
border-radius: $corner-radius + 1px;
2862
}
2863
2864
&.header {
2865
border-style: none none solid;
2866
border-radius: 0;
2867
}
2868
2869
&.button { @extend %simple_flat_button; }
2870
2871
&.highlight {
2872
color: $text-secondary;
2873
font-weight: 500;
2874
}
2875
2876
&:indeterminate { color: $text-secondary-disabled; }
2877
}
2878
2879
2880
/***********
2881
* Dialogs *
2882
***********/
2883
messagedialog { // Message Dialog styling
2884
&.background { background-color: $surface; }
2885
2886
.titlebar {
2887
min-height: $small-size;
2888
border-style: none;
2889
box-shadow: inset 0 1px highlight($surface);
2890
background-color: $surface;
2891
color: $text;
2892
2893
&:backdrop { color: $text-secondary; }
2894
}
2895
2896
&.csd { // rounded bottom border styling for csd version
2897
&.background {
2898
// bigger radius for better antialiasing
2899
border-bottom-left-radius: $corner-radius;
2900
border-bottom-right-radius: $corner-radius;
2901
}
2902
2903
.dialog-action-area {
2904
margin-top: -$container-padding;
2905
padding: $container-padding;
2906
2907
button {
2908
@extend %simple_flat_button;
2909
border-radius: $corner-radius;
2910
2911
&:not(:last-child) { margin-right: $container-padding; }
2912
2913
&.suggested-action:not(:disabled) { color: $suggested; }
2914
2915
&.destructive-action:not(:disabled) { color: $destructive; }
2916
}
2917
}
2918
}
2919
}
2920
2921
filechooser {
2922
.dialog-action-box { border-top: 1px solid $border; }
2923
2924
#pathbarbox {
2925
border-bottom: 1px solid $border;
2926
background-color: $background;
2927
2928
> stack > box > button { // The new folder button
2929
@extend %button_basic.flat;
2930
@extend %circular_button;
2931
}
2932
}
2933
}
2934
2935
filechooserbutton:drop(active) {
2936
box-shadow: none;
2937
}
2938
2939
2940
/***********
2941
* Sidebar *
2942
***********/
2943
.sidebar {
2944
border-style: none;
2945
background-color: $base-alt;
2946
2947
&:not(separator) {
2948
@at-root %sidebar_left,
2949
&:dir(ltr),
2950
&.left,
2951
&.left:dir(rtl) {
2952
border-right: 1px solid $border;
2953
border-left-style: none;
2954
}
2955
2956
@at-root %sidebar_right,
2957
&:dir(rtl),
2958
&.right {
2959
border-left: 1px solid $border;
2960
border-right-style: none;
2961
}
2962
}
2963
2964
list { background-color: transparent; }
2965
2966
paned & { &.left, &.right, &.left:dir(rtl), &:dir(rtl), &:dir(ltr), & { border-style: none; }}
2967
}
2968
2969
stacksidebar {
2970
&.sidebar {
2971
&:dir(ltr),
2972
&.left,
2973
&.left:dir(rtl) { list { @extend %sidebar_left; }}
2974
2975
&:dir(rtl),
2976
&.right { list { @extend %sidebar_right; }}
2977
}
2978
2979
row {
2980
padding: 10px 4px;
2981
2982
> label {
2983
padding-left: 6px;
2984
padding-right: 6px;
2985
}
2986
2987
&.needs-attention > label { @extend %needs_attention; }
2988
}
2989
}
2990
2991
separator.sidebar {
2992
background-color: $border;
2993
2994
&.selection-mode,
2995
.selection-mode & {
2996
// background-color: $border;
2997
}
2998
}
2999
3000
3001
/****************
3002
* File chooser *
3003
****************/
3004
// dim the sidebar icons, see bug #786613 for details on this oddity
3005
row {
3006
image.sidebar-icon { color: $text-secondary; }
3007
}
3008
3009
placessidebar {
3010
> viewport.frame { border-style: none; }
3011
3012
list { padding: (4px - 3px) 0 4px; }
3013
3014
row {
3015
// Needs overriding of the GtkListBoxRow padding
3016
min-height: 32px;
3017
margin: -1px 4px; // Remove unwanted hard-coded vertical margins with -1px
3018
padding: 0;
3019
border-radius: $corner-radius;
3020
3021
// Using margins/padding directly in the SidebarRow
3022
// will make the animation of the new bookmark row jump
3023
> revealer { padding: 0 8px; }
3024
3025
&:selected { font-weight: 500; }
3026
3027
&:disabled { color: $text-disabled; }
3028
3029
image.sidebar-icon {
3030
&:dir(ltr) { padding-right: 8px; }
3031
&:dir(rtl) { padding-left: 8px; }
3032
}
3033
3034
label.sidebar-label {
3035
&:dir(ltr) { padding-right: 2px; }
3036
&:dir(rtl) { padding-left: 2px; }
3037
}
3038
3039
&:selected image.sidebar-icon,
3040
&:selected label.sidebar-label { color: inherit; }
3041
3042
@at-root button.sidebar-button {
3043
@extend %simple_flat_button;
3044
@extend %small_button;
3045
}
3046
3047
&.sidebar-placeholder-row {
3048
min-height: 2px;
3049
padding: 0 8px;
3050
background-image: image($primary);
3051
background-clip: content-box;
3052
}
3053
3054
&.sidebar-new-bookmark-row { color: $primary; }
3055
3056
&:drop(active):not(:disabled) {
3057
box-shadow: inset 0 0 0 2px $primary;
3058
}
3059
}
3060
}
3061
3062
placesview {
3063
.server-list-button > image { -gtk-icon-transform: rotate(0turn); }
3064
3065
.server-list-button:checked > image { -gtk-icon-transform: rotate(-0.5turn); }
3066
3067
// this selects the "connect to server" label
3068
> actionbar > revealer > box > label {
3069
padding-left: 8px;
3070
padding-right: 8px;
3071
}
3072
}
3073
3074
3075
/*********
3076
* Paned *
3077
*********/
3078
paned {
3079
> separator {
3080
min-width: 1px;
3081
min-height: 1px;
3082
-gtk-icon-source: none; // defeats the ugly default handle decoration
3083
border-style: none; // just to be sure
3084
background-color: transparent;
3085
// workaround, using background istead of a border since the border will get rendered twice (?)
3086
background-image: image($border);
3087
background-size: 1px 1px;
3088
background-clip: content-box; // avoids borders image being rendered twice (?)
3089
3090
&.wide {
3091
min-width: 6px;
3092
min-height: 6px;
3093
background-color: $background;
3094
background-image: image($border), image($border);
3095
background-size: 1px 1px, 1px 1px;
3096
}
3097
}
3098
3099
&.horizontal > separator {
3100
background-repeat: repeat-y;
3101
3102
&:dir(ltr) {
3103
margin: 0 -8px 0 0;
3104
padding: 0 8px 0 0;
3105
background-position: left;
3106
}
3107
3108
&:dir(rtl) {
3109
margin: 0 0 0 -8px;
3110
padding: 0 0 0 8px;
3111
background-position: right;
3112
}
3113
3114
&.wide {
3115
margin: 0;
3116
padding: 0;
3117
background-repeat: repeat-y, repeat-y;
3118
background-position: left, right;
3119
}
3120
}
3121
3122
&.vertical > separator {
3123
margin: 0 0 -8px 0;
3124
padding: 0 0 8px 0;
3125
background-repeat: repeat-x;
3126
background-position: top;
3127
3128
&.wide {
3129
margin: 0;
3130
padding: 0;
3131
background-repeat: repeat-x, repeat-x;
3132
background-position: bottom, top;
3133
}
3134
}
3135
}
3136
3137
3138
/**************
3139
* GtkInfoBar *
3140
**************/
3141
infobar {
3142
border-style: none;
3143
3144
&.info { background-color: $infobar-info; }
3145
3146
&.question { background-color: $infobar-question; }
3147
3148
&.warning { background-color: $infobar-warning; }
3149
3150
&.error { background-color: $infobar-error; }
3151
3152
&.info,
3153
&.question,
3154
&.warning,
3155
&.error {
3156
> label, & { color: on(dark); }
3157
3158
button { @extend %button_selected; }
3159
3160
selection {}
3161
3162
*:link { color: on(dark); }
3163
}
3164
}
3165
3166
3167
/************
3168
* Tooltips *
3169
************/
3170
tooltip {
3171
&.background {
3172
// background-color needs to be set this way otherwise it gets drawn twice
3173
// see https://bugzilla.gnome.org/show_bug.cgi?id=736155 for details.
3174
background-color: $tooltip;
3175
color: on($tooltip);
3176
}
3177
3178
// padding: 4px; /* not working */
3179
border-radius: $corner-radius;
3180
box-shadow: none; // otherwise it gets inherited by windowframe.csd
3181
3182
&:not(.csd):not(.unity-csd) {
3183
// border: 1px solid $border;
3184
// border-radius: $corner-radius + 1px;
3185
// background-clip: $background-clip-extra;
3186
}
3187
3188
// FIXME: we need a border or tooltips vanish on black background.
3189
decoration { background-color: transparent; }
3190
3191
label {
3192
// tooltip label already seems to have 6px margins
3193
min-height: 32px - 6px * 2;
3194
padding: 0 8px - 6px;
3195
}
3196
3197
* {
3198
// workaround for Eclipse.
3199
// do not include any declaration here.
3200
// padding: 0;
3201
// background-color: transparent;
3202
// color: inherit;
3203
}
3204
}
3205
3206
3207
/*****************
3208
* Color Chooser *
3209
*****************/
3210
colorswatch {
3211
// This widget is made of two boxes one on top of the other, the lower box is colorswatch {} the other one
3212
// is colorswatch overlay {}, colorswatch has the programmatically set background, so most of the style is
3213
// applied to the overlay box.
3214
3215
// base color corners rounding
3216
// to avoid the artifacts caused by rounded corner anti-aliasing the base color
3217
// sports a bigger radius.
3218
// nth-child is needed by the custom color strip.
3219
3220
&.top {
3221
border-top-left-radius: $corner-radius + 0.5px;
3222
border-top-right-radius: $corner-radius + 0.5px;
3223
3224
overlay {
3225
border-top-left-radius: $corner-radius;
3226
border-top-right-radius: $corner-radius;
3227
}
3228
}
3229
3230
&.bottom {
3231
border-bottom-left-radius: $corner-radius + 0.5px;
3232
border-bottom-right-radius: $corner-radius + 0.5px;
3233
3234
overlay {
3235
border-bottom-left-radius: $corner-radius;
3236
border-bottom-right-radius: $corner-radius;
3237
}
3238
}
3239
3240
&.left,
3241
&:first-child:not(.top) {
3242
border-top-left-radius: $corner-radius + 0.5px;
3243
border-bottom-left-radius: $corner-radius + 0.5px;
3244
3245
overlay {
3246
border-top-left-radius: $corner-radius;
3247
border-bottom-left-radius: $corner-radius;
3248
}
3249
}
3250
3251
&.right,
3252
&:last-child:not(.bottom) {
3253
border-top-right-radius: $corner-radius + 0.5px;
3254
border-bottom-right-radius: $corner-radius + 0.5px;
3255
3256
overlay {
3257
border-top-right-radius: $corner-radius;
3258
border-bottom-right-radius: $corner-radius;
3259
}
3260
}
3261
3262
&.dark { color: on(dark); }
3263
3264
&.light { color: on(light); }
3265
3266
&:drop(active) {
3267
box-shadow: none;
3268
3269
&.light overlay { box-shadow: $shadow-1, 0 0 0 2px $primary; }
3270
3271
&.dark overlay { box-shadow: $shadow-1, 0 0 0 2px $primary; }
3272
}
3273
3274
overlay {
3275
transition: $transition-shadow;
3276
box-shadow: $shadow-1;
3277
3278
&:hover { box-shadow: $shadow-2; }
3279
}
3280
3281
&#add-color-button {
3282
border-radius: $corner-radius $corner-radius 0 0;
3283
color: on(dark);
3284
3285
&:only-child { border-radius: $corner-radius; }
3286
3287
overlay {
3288
background-image: linear-gradient(to right,
3289
$red 25%,
3290
$yellow 25%, $yellow 50%,
3291
$green 50%, $green 75%,
3292
$blue 75%);
3293
}
3294
}
3295
3296
&:disabled {
3297
opacity: 0.5;
3298
3299
overlay { box-shadow: none; }
3300
}
3301
3302
row:selected & {
3303
}
3304
3305
&#editor-color-sample {
3306
border-radius: $corner-radius + 0.5px;
3307
3308
overlay { border-radius: $corner-radius; }
3309
3310
// overlay:hover { box-shadow: $shadow-1; }
3311
}
3312
}
3313
3314
// colorscale popup
3315
colorchooser .popover.osd {
3316
transition: $transition-shadow;
3317
border-radius: $corner-radius;
3318
box-shadow: $shadow-2, inset 0 1px highlight($surface);
3319
background-color: $surface;
3320
3321
&:backdrop { box-shadow: $shadow-1, inset 0 1px highlight($surface); }
3322
}
3323
3324
3325
/********
3326
* Misc *
3327
********/
3328
// content view (grid/list)
3329
.content-view {
3330
background-color: $background;
3331
3332
// &:hover { -gtk-icon-effect: highlight; }
3333
3334
rubberband, .rubberband { @extend rubberband; }
3335
}
3336
3337
.scale-popup {
3338
// .osd & { @extend %osd; }
3339
3340
.osd & button.flat { // FIXME: quick hack, redo properly
3341
}
3342
3343
button { // +/- buttons on GtkVolumeButton popup
3344
}
3345
}
3346
3347
3348
/**********************
3349
* Window Decorations *
3350
**********************/
3351
decoration {
3352
transition: $transition-shadow;
3353
border-radius: $corner-radius $corner-radius 0 0;
3354
box-shadow: $shadow-4, 0 16px 16px transparent;
3355
3356
// FIXME rationalize shadows
3357
3358
// this is used for the resize cursor area
3359
margin: 8px;
3360
3361
&:backdrop {
3362
// the transparent shadow here is to enforce that the shadow extents don't
3363
// change when we go to backdrop, to prevent jumping windows.
3364
// The biggest shadow should be in the same order then in the active state
3365
// or the jumping will happen during the transition.
3366
box-shadow: $shadow-2, 0 16px 16px transparent;
3367
}
3368
3369
.maximized &,
3370
.fullscreen &,
3371
.tiled &,
3372
.tiled-top &,
3373
.tiled-right &,
3374
.tiled-bottom &,
3375
.tiled-left & { border-radius: 0; }
3376
3377
.popup & { box-shadow: none; }
3378
3379
// server-side decorations as used by mutter
3380
.ssd & { box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16); } // just doing borders, wm draws actual shadows
3381
3382
.csd.popup & {
3383
border-radius: $corner-radius;
3384
box-shadow: $shadow-2;
3385
}
3386
3387
tooltip.csd & {
3388
border-radius: $corner-radius;
3389
box-shadow: none;
3390
}
3391
3392
messagedialog.csd & {
3393
border-radius: $corner-radius;
3394
// box-shadow: $shadow-4, 0 16px 16px transparent;
3395
3396
// &:backdrop { box-shadow: $shadow-2, 0 16px 16px transparent; }
3397
}
3398
3399
.solid-csd & {
3400
margin: 0;
3401
// padding: 4px;
3402
border-radius: 0;
3403
box-shadow: none;
3404
// box-shadow: inset 0 0 0 4px $titlebar;
3405
background-color: $titlebar;
3406
}
3407
}
3408
3409
// Window Close button
3410
button.titlebutton {
3411
// @extend %simple_flat_button;
3412
3413
@extend %circular_button;
3414
3415
.selection-mode & {
3416
}
3417
}
3418
3419
3420
// catch all extend :)
3421
3422
%selected_items {
3423
background-color: $overlay-selected;
3424
}
3425
3426
.monospace { font-family: monospace; }
3427
3428
3429
/**********************
3430
* Touch Copy & Paste *
3431
**********************/
3432
// touch selection handlebars for the Popover.osd above
3433
cursor-handle {
3434
color: $primary;
3435
-gtk-icon-source: -gtk-recolor(url("assets/scalable/cursor-handle-symbolic.svg"));
3436
3437
&.top:dir(ltr), &.bottom:dir(rtl) {
3438
-gtk-icon-transform: rotate(90deg);
3439
}
3440
3441
&.bottom:dir(ltr), &.top:dir(rtl) {
3442
-gtk-icon-transform: unset;
3443
}
3444
3445
&.insertion-cursor:dir(ltr), &.insertion-cursor:dir(rtl) {
3446
padding-top: 6px;
3447
-gtk-icon-transform: rotate(45deg);
3448
}
3449
}
3450
3451
.context-menu { font: initial; } // Decouple the font of context menus from their entry/textview
3452
3453
// shortcut window keys
3454
.keycap {
3455
min-width: 28px - 8px * 2;
3456
min-height: 28px - 2px;
3457
margin-top: 2px;
3458
padding-bottom: 2px;
3459
padding-left: 8px;
3460
padding-right: 8px;
3461
3462
border: solid 1px $border;
3463
border-radius: $corner-radius + 1px;
3464
box-shadow: inset 0 -2px $border;
3465
background-color: $surface;
3466
color: $text;
3467
font-size: smaller;
3468
}
3469
3470
:not(decoration):not(window):drop(active) { // FIXME needs to be done widget by widget, this wildcard should really die
3471
transition: $transition;
3472
box-shadow: $shadow-1, inset 0 0 0 2px $primary;
3473
caret-color: $primary;
3474
}
3475
3476
stackswitcher button.text-button { min-width: 100px; } // FIXME aggregate with buttons
3477
3478
stackswitcher button.circular,
3479
stackswitcher button.text-button.circular { // FIXME aggregate with buttons
3480
min-width: $medium-size;
3481
min-height: $medium-size;
3482
padding: 0;
3483
}
3484
3485
3486
/*************
3487
* App Icons *
3488
*************/
3489
// Outline for low res icons
3490
.lowres-icon {
3491
// -gtk-icon-shadow: none;
3492
}
3493
3494
// Drapshadow for large icons
3495
.icon-dropshadow {
3496
// -gtk-icon-shadow: none;
3497
}
3498
3499
3500
/*********
3501
* Emoji *
3502
*********/
3503
popover.emoji-picker {
3504
padding: 0;
3505
3506
entry {
3507
border-bottom: 1px solid $border;
3508
border-image: none;
3509
border-radius: 0;
3510
box-shadow: none;
3511
background-color: transparent;
3512
}
3513
3514
scrolledwindow { border-bottom: 1px solid $border; }
3515
}
3516
3517
// mimic tab style
3518
button.emoji-section {
3519
margin-top: -1px;
3520
padding: 0 8px;
3521
min-width: 24px;
3522
min-height: $medium-size;
3523
border-radius: 0;
3524
outline-offset: -6px;
3525
3526
&, &:hover, &:active { box-shadow: inset 0 2px transparent; }
3527
3528
&:checked {
3529
box-shadow: inset 0 2px $primary;
3530
background-color: transparent;
3531
}
3532
3533
&:hover, &:active { background-color: $overlay-hover; }
3534
3535
&:first-child { margin-left: 4px; }
3536
3537
&:last-child { margin-right: 4px; }
3538
}
3539
3540
popover.emoji-picker .emoji {
3541
min-width: 3em;
3542
min-height: 3em;
3543
padding: 0 8px;
3544
// font-size: larger;
3545
3546
widget {
3547
transition: $transition;
3548
border-radius: $corner-radius;
3549
3550
&:hover { background-color: $overlay-hover; }
3551
}
3552
}
3553
3554
popover.emoji-completion {
3555
padding: 8px 0;
3556
3557
arrow {
3558
border: none;
3559
background: none;
3560
}
3561
3562
.emoji-completion-row {
3563
min-height: $menuitem-size;
3564
padding: 0 12px;
3565
}
3566
3567
.emoji:hover {
3568
background-color: $overlay-hover;
3569
}
3570
}
3571