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