_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 { background-image: image($overlay-hover); }
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
color: $titlebar-text;
1516
1517
> menuitem {
1518
transition: $transition;
1519
min-height: 20px;
1520
padding: 4px 8px;
1521
color: $titlebar-text-secondary;
1522
1523
&:hover { // Seems like it :hover even with keyboard focus
1524
transition: none;
1525
background-color: $titlebar-divider;
1526
color: $titlebar-text;
1527
}
1528
1529
&:disabled { color: $titlebar-text-secondary-disabled; }
1530
1531
label:disabled { color: inherit; } // to inherit the above color
1532
}
1533
}
1534
1535
// Needed to make the border-radius of menus work
1536
// otherwise the background bleeds out of the menu edges
1537
.background.popup { background-color: transparent; }
1538
1539
menu,
1540
.menu,
1541
.context-menu {
1542
margin: 4px 0; // See https://bugzilla.gnome.org/show_bug.cgi?id=591258
1543
padding: 4px 0;
1544
box-shadow: inset 0 1px highlight($surface);
1545
background-color: $surface;
1546
border: 1px solid $border; // adds borders in a non composited env
1547
1548
.csd & {
1549
border: none; // axes borders in a composited env
1550
border-radius: $corner-radius;
1551
}
1552
1553
menuitem {
1554
transition: background-color $duration $ease-out;
1555
min-height: 20px;
1556
min-width: 40px;
1557
padding: 4px 8px;
1558
font: initial;
1559
text-shadow: none;
1560
1561
&:hover {
1562
transition: none;
1563
background-color: $divider;
1564
}
1565
1566
&:disabled { color: $text-disabled; }
1567
1568
// submenu indicators
1569
arrow {
1570
min-height: 16px;
1571
min-width: 16px;
1572
1573
&:dir(ltr) {
1574
-gtk-icon-source: -gtk-icontheme('pan-end-symbolic');
1575
margin-left: 8px;
1576
}
1577
1578
&:dir(rtl) {
1579
-gtk-icon-source:-gtk-icontheme('pan-end-symbolic-rtl');
1580
margin-right: 8px;
1581
}
1582
}
1583
1584
// avoids labels color being overridden, see
1585
// https://bugzilla.gnome.org/show_bug.cgi?id=767058
1586
label { &:dir(rtl), &:dir(ltr) { color: inherit; }}
1587
}
1588
1589
// overflow arrows
1590
> arrow {
1591
min-height: 16px;
1592
min-width: 16px;
1593
padding: 4px;
1594
background-color: $surface;
1595
color: $text-secondary;
1596
1597
&.top {
1598
margin-top: -4px;
1599
border-bottom: 1px solid $border;
1600
border-radius: $corner-radius $corner-radius 0 0;
1601
-gtk-icon-source: -gtk-icontheme('pan-up-symbolic');
1602
}
1603
1604
&.bottom {
1605
margin-top: 4px * 2;
1606
margin-bottom: -4px * 3;
1607
border-top: 1px solid $border;
1608
border-radius: 0 0 $corner-radius $corner-radius;
1609
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
1610
}
1611
1612
&:hover {
1613
background-image: image($divider);
1614
color: $text;
1615
}
1616
1617
&:disabled {
1618
border-color: transparent;
1619
background-color: transparent;
1620
color: transparent;
1621
// color: $text-secondary-disabled;
1622
}
1623
}
1624
1625
separator { margin: 4px 0; }
1626
}
1627
1628
menuitem {
1629
accelerator { color: $text-secondary; }
1630
1631
&:disabled accelerator { color: $text-secondary-disabled; }
1632
}
1633
1634
// FIXME: THIS IS A REALLY UGLY WORKAROUND!
1635
// Electron/Atom render all translucent colors in opaque colors.
1636
// It's a very critical issue for this theme and should be fixed by upstream...
1637
.popup:not(.csd) menu {
1638
menuitem {
1639
color: $solid-text;
1640
1641
&:hover { background-color: $solid-divider; }
1642
1643
&:disabled { color: $solid-text-disabled; } // separator/border also use this color.
1644
}
1645
1646
// FIXME: not working this
1647
accelerator { color: $solid-text-secondary; }
1648
}
1649
1650
1651
/************
1652
* Popovers *
1653
************/
1654
popover.background {
1655
transition: $transition-shadow;
1656
padding: 2px;
1657
box-shadow: $shadow-2; // TODO: this should really have a highlight
1658
background-color: $surface;
1659
1660
&:backdrop { box-shadow: $shadow-1; }
1661
1662
&, .csd & {
1663
border-style: solid;
1664
border-width: 1px;
1665
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.3);
1666
border-radius: $corner-radius + 1px;
1667
}
1668
1669
> stack { margin: -4px; } // remove extra padding from menu style popovers
1670
1671
> toolbar { margin: -2px; }
1672
1673
> list,
1674
> .view,
1675
> toolbar {
1676
border-style: none;
1677
box-shadow: none;
1678
background-color: transparent;
1679
}
1680
1681
// FIXME: Use the popover color instead of transparent as a workaround for .view
1682
list,
1683
.view:not(:selected),
1684
toolbar { background-color: $surface; }
1685
1686
// &.touch-selection,
1687
// &.magnifier,
1688
// &.osd { @extend %osd; }
1689
1690
// button:not(.suggested-action):not(.destructive-action) { @extend %button_basic.flat; }
1691
1692
&.menu button,
1693
button.model {
1694
@extend %simple_flat_button;
1695
1696
min-height: 32px;
1697
padding: 0 8px;
1698
border-radius: $corner-radius;
1699
1700
&:checked { @extend %selected_items; }
1701
}
1702
1703
separator { margin: 4px 0; }
1704
1705
list separator { margin: 0; }
1706
}
1707
1708
/*************
1709
* Notebooks *
1710
*************/
1711
notebook {
1712
frame > paned > & > header,
1713
&.frame > header { background-color: $base-alt; }
1714
1715
&:focus tab:checked {
1716
box-shadow: inset 0 0 0 9999px rgba($primary, 0.12);
1717
outline: none;
1718
}
1719
1720
> header {
1721
border-width: 1px;
1722
border-color: $border;
1723
background-color: $background;
1724
background-clip: border-box;
1725
1726
&.top {
1727
border-bottom-style: solid;
1728
1729
> tabs {
1730
margin-bottom: -1px;
1731
1732
> tab {
1733
border-image: linear-gradient(to top, transparent 2px, transparent 2px) 2 / 0 0 2px;
1734
1735
&:checked { border-image-source: linear-gradient(to top, $primary 2px, $border 2px); }
1736
1737
&.reorderable-page { border-image-width: 0 1px 2px; }
1738
}
1739
}
1740
}
1741
1742
&.bottom {
1743
border-top-style: solid;
1744
1745
> tabs {
1746
margin-top: -1px;
1747
1748
> tab {
1749
border-image: linear-gradient(to bottom, transparent 2px, transparent 2px) 2 / 2px 0 0;
1750
1751
&:checked { border-image-source: linear-gradient(to bottom, $primary 2px, $border 2px); }
1752
1753
&.reorderable-page { border-image-width: 2px 1px 0; }
1754
}
1755
}
1756
}
1757
1758
&.left {
1759
border-right-style: solid;
1760
1761
> tabs {
1762
margin-right: -1px;
1763
1764
> tab {
1765
border-image: linear-gradient(to left, transparent 2px, transparent 2px) 2 / 0 2px 0 0;
1766
1767
&:checked { border-image-source: linear-gradient(to left, $primary 2px, $border 2px); }
1768
1769
&.reorderable-page { border-image-width: 1px 2px 1px 0; }
1770
}
1771
}
1772
}
1773
1774
&.right {
1775
border-left-style: solid;
1776
1777
> tabs {
1778
margin-left: -1px;
1779
1780
> tab {
1781
border-image: linear-gradient(to right, transparent 2px, transparent 2px) 2 / 0 0 0 2px;
1782
1783
&:checked { border-image-source: linear-gradient(to right, $primary 2px, $border 2px); }
1784
1785
&.reorderable-page { border-image-width: 1px 0 1px 2px; }
1786
}
1787
}
1788
}
1789
1790
&.top > tabs > arrow {
1791
@extend %notebook_vert_arrows;
1792
1793
border-top-style: none;
1794
}
1795
1796
&.bottom > tabs > arrow {
1797
@extend %notebook_vert_arrows;
1798
1799
border-bottom-style: none;
1800
}
1801
1802
@at-root %notebook_vert_arrows {
1803
padding-left: 4px;
1804
padding-right: 4px;
1805
1806
&.down {
1807
margin-left: -8px;
1808
-gtk-icon-source: -gtk-icontheme('pan-start-symbolic');
1809
}
1810
1811
&.up {
1812
margin-right: -8px;
1813
-gtk-icon-source: -gtk-icontheme('pan-end-symbolic');
1814
}
1815
}
1816
1817
&.left > tabs > arrow {
1818
@extend %notebook_horz_arrows;
1819
1820
border-left-style: none;
1821
}
1822
1823
&.right > tabs > arrow {
1824
@extend %notebook_horz_arrows;
1825
1826
border-right-style: none;
1827
}
1828
1829
@at-root %notebook_horz_arrows {
1830
padding-top: 4px;
1831
padding-bottom: 4px;
1832
1833
&.down {
1834
margin-top: -8px;
1835
-gtk-icon-source: -gtk-icontheme('pan-up-symbolic');
1836
}
1837
1838
&.up {
1839
margin-bottom: -8px;
1840
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
1841
}
1842
}
1843
1844
> tabs > arrow {
1845
@extend %simple_flat_button;
1846
1847
min-height: 16px;
1848
min-width: 16px;
1849
border-radius: 0;
1850
}
1851
1852
tab {
1853
transition: $transition,
1854
background-size 0,
1855
background-image 0;
1856
min-height: $small-size;
1857
min-width: $small-size;
1858
padding: $container-padding 12px;
1859
1860
outline-offset: -6px;
1861
1862
border-width: 1px; // for reorderable tabs
1863
border-color: transparent; //
1864
1865
background-image: radial-gradient(circle farthest-corner at center,
1866
$primary 10%,
1867
transparent 0%);
1868
background-repeat: no-repeat;
1869
background-position: center;
1870
background-size: 0% 0%;
1871
background-clip: border-box;
1872
1873
color: $text-secondary;
1874
font-weight: 500;
1875
1876
&:hover {
1877
background-color: $overlay-hover;
1878
color: $text;
1879
}
1880
1881
&:disabled { color: $text-secondary-disabled; }
1882
1883
&:checked {
1884
transition: $transition,
1885
background-size $duration-ripple $ease-out,
1886
background-image $duration-ripple + $duration-ripple-aftermath $ease-out;
1887
background-color: transparent;
1888
background-image: radial-gradient(circle farthest-corner at center,
1889
transparent 10%,
1890
transparent 0%);
1891
background-size: 1000% 1000%;
1892
background-clip: padding-box;
1893
color: $text;
1894
1895
&:disabled { color: $text-disabled; }
1896
1897
&.reorderable-page {
1898
border-color: $border;
1899
background-color: $base;
1900
}
1901
}
1902
1903
// colors the button like the label, overridden otherwise
1904
button.flat {
1905
@extend %small_button;
1906
1907
&:last-child {
1908
margin-left: $container-padding;
1909
margin-right: $container-padding - 12px;
1910
}
1911
1912
&:first-child {
1913
margin-left: $container-padding - 12px;
1914
margin-right: $container-padding;
1915
}
1916
}
1917
}
1918
1919
&.top,
1920
&.bottom {
1921
tabs {
1922
padding-left: 8px;
1923
padding-right: 8px;
1924
1925
&:not(:only-child) {
1926
&:first-child { margin-left: 0; }
1927
1928
&:last-child { margin-right: 0; }
1929
}
1930
1931
tab.reorderable-page { border-style: none solid; }
1932
}
1933
}
1934
1935
&.left,
1936
&.right {
1937
tabs {
1938
padding-top: 8px;
1939
padding-bottom: 8px;
1940
1941
&:not(:only-child) {
1942
&:first-child { margin-top: 0; }
1943
1944
&:last-child { margin-bottom: 0; }
1945
}
1946
1947
tab.reorderable-page { border-style: solid none; }
1948
}
1949
}
1950
}
1951
1952
> stack:not(:only-child) { // the :not(:only-child) is for "hidden" notebooks
1953
background-color: $base;
1954
}
1955
}
1956
1957
1958
/**************
1959
* Scrollbars *
1960
**************/
1961
scrollbar {
1962
$_slider_min_length: 24px;
1963
1964
// disable steppers
1965
@at-root * {
1966
-GtkScrollbar-has-backward-stepper: false;
1967
-GtkScrollbar-has-forward-stepper: false;
1968
}
1969
1970
transition: $transition;
1971
background-color: $base;
1972
background-clip: $background-clip-extra;
1973
1974
// scrollbar border
1975
&.top { border-bottom: 1px solid $border; }
1976
&.bottom { border-top: 1px solid $border; }
1977
&.left { border-right: 1px solid $border; }
1978
&.right { border-left: 1px solid $border; }
1979
1980
// slider
1981
slider {
1982
transition: $transition, margin 0, border-width 0;
1983
min-width: 8px;
1984
min-height: 8px;
1985
border: 4px solid transparent;
1986
border-radius: $circular-radius;
1987
background-clip: padding-box;
1988
background-color: $text-disabled;
1989
1990
&:hover { background-color: $text-secondary; }
1991
1992
&:active { background-color: $text; }
1993
1994
&:disabled { background-color: $text-secondary-disabled; }
1995
}
1996
1997
&.fine-tune {
1998
slider {
1999
transition: $transition, margin 0, border-width 0, min-width 0, min-height 0;
2000
min-width: 4px;
2001
min-height: 4px;
2002
}
2003
2004
&.horizontal slider { margin: 2px 0; }
2005
2006
&.vertical slider { margin: 0 2px; }
2007
}
2008
2009
&.overlay-indicator {
2010
&:not(.dragging):not(.hovering) {
2011
border-color: transparent;
2012
background-color: transparent;
2013
2014
slider {
2015
min-width: 4px;
2016
min-height: 4px;
2017
margin: 4px - 1px;
2018
border: 1px solid rgba($base, 0.3);
2019
}
2020
2021
button {
2022
min-width: 4px;
2023
min-height: 4px;
2024
margin: 4px - 1px;
2025
border: 1px solid rgba($base, 0.3);
2026
border-radius: $circular-radius;
2027
background-color: $text-disabled;
2028
background-clip: padding-box;
2029
-gtk-icon-source: none;
2030
2031
&:disabled { background-color: $text-secondary-disabled; }
2032
}
2033
2034
&.horizontal {
2035
slider { min-width: $_slider_min_length; }
2036
2037
button { min-width: 8px; }
2038
}
2039
2040
&.vertical {
2041
slider { min-height: $_slider_min_length; }
2042
2043
button { min-height: 8px; }
2044
}
2045
}
2046
2047
&.dragging,
2048
&.hovering { background-color: rgba($base, 0.9); }
2049
}
2050
2051
&.horizontal slider { min-width: $_slider_min_length; }
2052
2053
&.vertical slider { min-height: $_slider_min_length; }
2054
2055
// button styling
2056
button {
2057
@extend %simple_flat_button;
2058
2059
min-width: 16px;
2060
min-height: 16px;
2061
padding: 0;
2062
border-radius: 0;
2063
}
2064
2065
// button icons
2066
&.vertical {
2067
button {
2068
&.down { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); }
2069
2070
&.up { -gtk-icon-source: -gtk-icontheme('pan-up-symbolic'); }
2071
}
2072
}
2073
2074
&.horizontal {
2075
button {
2076
&.down { -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); }
2077
2078
&.up { -gtk-icon-source: -gtk-icontheme('pan-start-symbolic'); }
2079
}
2080
}
2081
}
2082
2083
2084
/**********
2085
* Switch *
2086
**********/
2087
switch {
2088
transition: all $duration $ease-out;
2089
margin: $container-padding 0;
2090
padding: 0 2px;
2091
border: 5px solid transparent;
2092
border-radius: $circular-radius;
2093
background-color: $track;
2094
background-clip: padding-box;
2095
font-size: 0;
2096
2097
&:checked { background-color: rgba($primary, 0.5); }
2098
2099
&:disabled { opacity: 0.5; }
2100
2101
// hide on/off icons for >=3.24.5
2102
image {
2103
margin: -8px;
2104
-gtk-icon-transform: scale(0);
2105
}
2106
2107
slider {
2108
transition: all $duration $ease-out;
2109
min-width: 20px;
2110
min-height: 20px;
2111
margin: -3px -2px;
2112
border-radius: $circular-radius;
2113
outline: none;
2114
box-shadow: 0 0 0 10px transparent, $shadow-1;
2115
background-color: $surface;
2116
}
2117
2118
&:hover slider { box-shadow: 0 0 0 10px $overlay-hover, $shadow-1; }
2119
2120
&:focus slider { box-shadow: 0 0 0 10px $overlay-focus, $shadow-1; }
2121
2122
&:focus:hover slider { box-shadow: 0 0 0 10px $overlay-focus-hover, $shadow-1; }
2123
2124
&:checked slider {
2125
background-color: $primary;
2126
color: $primary;
2127
}
2128
2129
row:selected & {
2130
}
2131
}
2132
2133
2134
/*************************
2135
* Check and Radio items *
2136
*************************/
2137
// draw regular check and radio items using our PNG assets
2138
// all assets are rendered from assets.svg. never add pngs directly
2139
2140
// selection-mode
2141
.view.content-view.check:not(list),
2142
.content-view .tile check:not(list) {
2143
min-height: 40px;
2144
min-width: 40px;
2145
margin: 0;
2146
padding: 0;
2147
box-shadow: none;
2148
background-color: transparent;
2149
background-image: none;
2150
-gtk-icon-shadow: $shadow-1;
2151
2152
&:hover, &:active { -gtk-icon-shadow: $shadow-2; }
2153
2154
@each $s, $as in ('', '-unchecked'),
2155
(':checked', '-checked') {
2156
&#{$s} {
2157
-gtk-icon-source: -gtk-scaled(url("assets/selectionmode-checkbox#{$as}#{$asset-suffix}.png"),
2158
url("assets/selectionmode-checkbox#{$as}#{$asset-suffix}@2.png"));
2159
}
2160
}
2161
}
2162
2163
checkbutton,
2164
radiobutton {
2165
outline: none;
2166
}
2167
2168
checkbutton.text-button,
2169
radiobutton.text-button {
2170
// this is for a nice focus on check and radios text
2171
padding: 2px;
2172
2173
label:not(:only-child) { margin: 0 4px; }
2174
}
2175
2176
$check_radio_size: 40px;
2177
2178
check,
2179
radio {
2180
min-height: 24px;
2181
min-width: 24px;
2182
margin: -($check_radio_size - 24px) / 2;
2183
padding: ($check_radio_size - 24px) / 2;
2184
2185
@extend %simple_flat_button;
2186
2187
@extend %circular_button;
2188
2189
&:hover { box-shadow: inset 0 0 0 9999px $overlay-hover; }
2190
2191
&:focus { box-shadow: inset 0 0 0 9999px $overlay-focus; }
2192
2193
&:focus:hover { box-shadow: inset 0 0 0 9999px $overlay-focus-hover; }
2194
2195
&:checked, &:indeterminate {
2196
color: $primary;
2197
2198
&:disabled { color: $text-secondary-disabled; }
2199
}
2200
2201
// &:only-child { margin: -12px; }
2202
2203
popover modelbutton.flat & {
2204
&, &:hover, &:focus, &:focus:hover, &:active, &:disabled {
2205
transition: none; // FIXME: this is a workaround for a popover check/radio long transition issue
2206
box-shadow: none;
2207
background-image: none;
2208
}
2209
2210
&:not(:checked):not(:indeterminate):not(:disabled) { color: $text-secondary; }
2211
2212
&.left:dir(rtl) {
2213
margin-left: -12px;
2214
margin-right: -4px;
2215
}
2216
2217
&.right:dir(ltr) {
2218
margin-left: -4px;
2219
margin-right: -12px;
2220
}
2221
}
2222
2223
menu menuitem & {
2224
transition: none;
2225
margin: 0; // this is a workaround for a menu check/radio size allocation issue
2226
padding: 0;
2227
2228
&:dir(ltr) { margin-right: 8px; }
2229
2230
&:dir(rtl) { margin-left: 8px; }
2231
2232
&:not(:checked):not(:indeterminate):not(:disabled) { color: $text-secondary; }
2233
2234
&, &:hover, &:disabled {
2235
box-shadow: none;
2236
// color: inherit;
2237
}
2238
}
2239
}
2240
2241
%check,
2242
check {
2243
-gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-unchecked-symbolic.svg"));
2244
2245
&:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-checked-symbolic.svg")); }
2246
2247
&:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-mixed-symbolic.svg")); }
2248
}
2249
2250
%radio,
2251
radio {
2252
-gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-unchecked-symbolic.svg"));
2253
2254
// &:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-checked-symbolic.svg")); }
2255
2256
&:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-mixed-symbolic.svg")); }
2257
2258
border-image-slice: $check_radio_size / 2px;
2259
border-image-width: $check_radio_size / 2;
2260
2261
$radio_indicator: 10px / $check_radio_size / 2;
2262
2263
& {
2264
border-image-source: -gtk-gradient(radial,
2265
center center, 0,
2266
center center, 0.001,
2267
to($primary),
2268
to(transparent));
2269
}
2270
2271
&:checked:not(:indeterminate) {
2272
border-image-source: -gtk-gradient(radial,
2273
center center, 0,
2274
center center, $radio_indicator,
2275
to($primary),
2276
to(transparent));
2277
}
2278
2279
&:checked:not(:indeterminate):disabled {
2280
border-image-source: -gtk-gradient(radial,
2281
center center, 0,
2282
center center, $radio_indicator,
2283
to($text-secondary-disabled),
2284
to(transparent));
2285
}
2286
}
2287
2288
%small_check,
2289
menu menuitem check {
2290
& {
2291
min-height: 16px;
2292
min-width: 16px;
2293
border-radius: $corner-radius;
2294
-gtk-outline-radius: $corner-radius;
2295
-gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-unchecked-symbolic.svg"));
2296
}
2297
2298
&:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-checked-symbolic.svg")); }
2299
2300
&:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-mixed-symbolic.svg")); }
2301
}
2302
2303
%small_radio,
2304
menu menuitem radio {
2305
& {
2306
min-height: 16px;
2307
min-width: 16px;
2308
border-image: none;
2309
-gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-unchecked-symbolic.svg"));
2310
}
2311
2312
&:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-checked-symbolic.svg")); }
2313
2314
&:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-mixed-symbolic.svg")); }
2315
}
2316
2317
// ANIMATION:
2318
// this is made with those pretty convoluted transitions, since checks and radios have to animate only on state changes,
2319
// the transformation is set on the active state and it get reset on the checked state.
2320
// radio:not(:checked):active { -gtk-icon-transform: scale(0); }
2321
2322
treeview.view check,
2323
treeview.view radio {
2324
padding: 0;
2325
2326
&:hover, &:selected {
2327
box-shadow: none;
2328
background-color: transparent;
2329
}
2330
2331
& {
2332
color: $text-secondary;
2333
2334
&:hover, &:active { color: $text; }
2335
2336
&:disabled { color: $text-secondary-disabled; }
2337
2338
&:checked, &:indeterminate { color: $primary; }
2339
2340
&:checked:disabled, &:indeterminate:disabled { color: $text-secondary-disabled; }
2341
}
2342
}
2343
2344
treeview.view radio:checked {
2345
-gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-checked-symbolic.svg"));
2346
border-image: none;
2347
}
2348
2349
2350
/************
2351
* GtkScale *
2352
************/
2353
scale {
2354
// sizing
2355
$_marks_length: 8px;
2356
$_marks_distance: 7px;
2357
2358
$trough_size: 2px;
2359
$finetune_trough_size: 4px;
2360
2361
$slider_size: 32px;
2362
2363
$slider_margin: -($slider_size - $trough_size) / 2;
2364
$finetune_slider_margin: -($slider_size - $finetune_trough_size) / 2;
2365
2366
$color_slider_margin: -($slider_size) * 3 / 4;
2367
$color_marks_slider_margin: -($slider_size - 16px) - $color_slider_margin;
2368
2369
min-height: $trough_size;
2370
min-width: $trough_size;
2371
2372
&.horizontal { padding: ($medium-size - $trough_size) / 2 12px; }
2373
2374
&.vertical { padding: 12px ($medium-size - $trough_size) / 2; }
2375
2376
// the slider is inside the trough, so to have make it bigger there's a negative margin
2377
slider {
2378
min-height: $slider_size;
2379
min-width: $slider_size;
2380
margin: $slider_margin;
2381
}
2382
2383
// click-and-hold the slider to activate
2384
&.fine-tune {
2385
&.horizontal {
2386
min-height: $finetune_trough_size;
2387
padding-top: ($medium-size - $finetune_trough_size) / 2;
2388
padding-bottom: ($medium-size - $finetune_trough_size) / 2;
2389
}
2390
2391
&.vertical {
2392
min-width: $finetune_trough_size;
2393
padding-left: ($medium-size - $finetune_trough_size) / 2;
2394
padding-right: ($medium-size - $finetune_trough_size) / 2;
2395
}
2396
2397
// to make the trough grow in fine-tune mode
2398
slider { margin: $finetune_slider_margin; }
2399
}
2400
2401
// the backing bit
2402
trough {
2403
transition: background-color $duration $ease-out;
2404
outline: none;
2405
background-color: $track;
2406
2407
&:disabled { background-color: $divider; }
2408
}
2409
2410
// the colored part of the backing bit
2411
highlight {
2412
transition: background-color $duration $ease-out;
2413
background-color: $primary;
2414
2415
&:disabled { background-color: transparent; }
2416
}
2417
2418
// this is another differently styled part of the backing bit, the most relevant use case is for example
2419
// in media player to indicate how much video stream as been cached
2420
fill {
2421
transition: background-color $duration $ease-out;
2422
background-color: $track;
2423
2424
&:disabled { background-color: transparent; }
2425
}
2426
2427
slider {
2428
transition: background-color $duration $ease-out,
2429
background-size $duration-ripple-aftermath $ease-out,
2430
background-image $duration-ripple-aftermath-opacity $ease-out;
2431
background-repeat: no-repeat;
2432
background-position: center;
2433
background-size: auto, 1000% 1000%;
2434
border-radius: 50%;
2435
color: transparent;
2436
2437
@each $s, $as in ('', ''),
2438
(':disabled', '-disabled') {
2439
&#{$s} {
2440
$_url: 'assets/scale-slider#{$as}#{$asset-suffix}';
2441
2442
background-image: -gtk-scaled(url('#{$_url}.png'), url('#{$_url}@2.png')),
2443
radial-gradient(circle farthest-corner at center,
2444
currentColor 10%,
2445
transparent 0%);
2446
}
2447
}
2448
2449
&:hover { background-color: rgba($primary, 0.08); }
2450
2451
&:focus { background-color: rgba($primary, 0.12); }
2452
2453
&:focus:hover { background-color: rgba($primary, 0.16); }
2454
2455
&:active {
2456
transition: background-color $duration $ease-out,
2457
background-size 0,
2458
background-image 0;
2459
animation: ripple-slider $duration-ripple $ease-out forwards;
2460
background-size: auto, 0% 0%;
2461
background-color: rgba($primary, 0.08);
2462
color: rgba($primary, 0.12);
2463
}
2464
}
2465
2466
marks label,
2467
value { color: $text-secondary; }
2468
2469
marks {
2470
color: $track;
2471
2472
@each $marks_class, $marks_pos, $marks_margin in (top, top, bottom),
2473
(bottom, bottom, top),
2474
(left, left, right),
2475
(right, right, left) {
2476
&.#{$marks_class} {
2477
margin-#{$marks_margin}: $_marks_distance;
2478
margin-#{$marks_pos}: -($_marks_distance + $_marks_length);
2479
}
2480
}
2481
}
2482
2483
&.fine-tune marks {
2484
@each $marks_class, $marks_pos, $marks_margin in (top, top, bottom),
2485
(bottom, bottom, top),
2486
(left, left, right),
2487
(right, right, left) {
2488
&.#{$marks_class} {
2489
margin-#{$marks_margin}: $_marks_distance - 1px;
2490
margin-#{$marks_pos}: -($_marks_distance + $_marks_length - 1px);
2491
}
2492
}
2493
}
2494
2495
&.horizontal {
2496
indicator {
2497
min-height: $_marks_length;
2498
min-width: 1px;
2499
}
2500
}
2501
2502
&.vertical {
2503
indicator {
2504
min-height: 1px;
2505
min-width: $_marks_length;
2506
}
2507
}
2508
2509
// *WARNING* scale with marks madness following
2510
2511
@each $dir_class, $dir_infix in ('horizontal', 'horz'),
2512
('vertical', 'vert') {
2513
@each $marks_infix, $marks_class in ('marks-before', 'marks-before:not(.marks-after)'),
2514
('marks-after', 'marks-after:not(.marks-before)') {
2515
&.#{$dir_class}.#{$marks_class} {
2516
slider {
2517
@each $state, $state_infix in ('', ''),
2518
(':disabled', '-disabled') {
2519
&#{$state} {
2520
$_scale_asset: 'assets/scale-#{$dir_infix}-#{$marks_infix}-slider#{$state_infix}#{$asset-suffix}';
2521
2522
background-image: -gtk-scaled(url('#{$_scale_asset}.png'), url('#{$_scale_asset}@2.png')),
2523
radial-gradient(circle farthest-corner at center,
2524
currentColor 10%,
2525
transparent 0%);
2526
}
2527
}
2528
}
2529
}
2530
}
2531
}
2532
2533
&.color {
2534
min-height: 0;
2535
min-width: 0;
2536
2537
&.horizontal {
2538
padding: 0 0 12px 0;
2539
2540
slider {
2541
&:dir(ltr), &:dir(rtl) { // specificity bump
2542
margin-bottom: $color_slider_margin;
2543
margin-top: $color_marks_slider_margin;
2544
}
2545
}
2546
}
2547
2548
&.vertical {
2549
&:dir(ltr) {
2550
padding: 0 0 0 12px;
2551
2552
slider {
2553
margin-left: $color_slider_margin;
2554
margin-right: $color_marks_slider_margin;
2555
}
2556
}
2557
2558
&:dir(rtl) {
2559
padding: 0 12px 0 0;
2560
2561
slider {
2562
margin-right: $color_slider_margin;
2563
margin-left: $color_marks_slider_margin;
2564
}
2565
}
2566
}
2567
}
2568
}
2569
2570
2571
/*****************
2572
* Progress bars *
2573
*****************/
2574
progressbar {
2575
// sizing
2576
&.horizontal {
2577
trough,
2578
progress { min-height: $bar-size; }
2579
}
2580
2581
&.vertical {
2582
trough,
2583
progress { min-width: $bar-size; }
2584
}
2585
2586
// FIXME: insensitive state missing and some other state should be set probably
2587
color: $text-secondary;
2588
font-size: smaller;
2589
2590
trough { background-color: $divider; }
2591
2592
progress { background-color: $primary; }
2593
2594
&.osd { // progressbar.osd used for epiphany page loading progress
2595
// min-width: $bar-size;
2596
// min-height: $bar-size;
2597
// background-color: transparent;
2598
2599
// trough { background-color: transparent; }
2600
2601
// progress { background-color: $primary; }
2602
}
2603
2604
trough.empty progress { all: unset; } // makes the progress indicator disappear, when the fraction is 0
2605
}
2606
2607
2608
/*************
2609
* Level Bar *
2610
*************/
2611
levelbar {
2612
&.horizontal {
2613
block { min-height: $bar-size; }
2614
2615
&.discrete block {
2616
min-width: $medium-size;
2617
2618
&:not(:last-child) { margin-right: 2px; }
2619
}
2620
}
2621
2622
&.vertical {
2623
block { min-width: $bar-size; }
2624
2625
&.discrete block {
2626
min-height: $medium-size;
2627
2628
&:not(:last-child) { margin-bottom: 2px; }
2629
}
2630
}
2631
2632
// imitate the entry style
2633
trough {
2634
// padding: 2px;
2635
// border-radius: $corner-radius;
2636
// box-shadow: $shadow-1;
2637
// background-color: $base;
2638
2639
// &:disabled { background-color: $base-alt; }
2640
}
2641
2642
block {
2643
&.low { background-color: $warning; }
2644
2645
&.high,
2646
&:not(.empty) { background-color: $primary; }
2647
2648
&.full { background-color: $success; }
2649
2650
&.empty { background-color: $divider; }
2651
}
2652
}
2653
2654
2655
/****************
2656
* Print dialog *
2657
*****************/
2658
printdialog {
2659
paper {
2660
padding: 0;
2661
border: 1px solid $border;
2662
background-color: $base;
2663
color: $text;
2664
}
2665
2666
.dialog-action-box { margin: 12px; }
2667
}
2668
2669
2670
/**********
2671
* Frames *
2672
**********/
2673
frame > border,
2674
.frame {
2675
margin: 0;
2676
padding: 0;
2677
border: 1px solid $border;
2678
border-radius: 0;
2679
box-shadow: none;
2680
2681
&.flat { border-style: none; }
2682
}
2683
2684
frame.flat > border { @extend .frame.flat; } // for backward compatibility
2685
2686
actionbar > revealer > box {
2687
padding: $container-padding;
2688
border-top: 1px solid $border;
2689
2690
button:not(.suggested-action):not(.destructive-action):not(.server-list-button) { @extend %button_basic.flat; }
2691
}
2692
2693
scrolledwindow {
2694
viewport.frame { // avoid double borders when viewport inside scrolled window
2695
border-style: none;
2696
}
2697
2698
// This is used when content is touch-dragged past boundaries.
2699
// draws a box on top of the content, the size changes programmatically.
2700
@at-root overshoot {
2701
&.top { @include overshoot(top); }
2702
2703
&.bottom { @include overshoot(bottom); }
2704
2705
&.left { @include overshoot(left); }
2706
2707
&.right { @include overshoot(right); }
2708
}
2709
2710
// Overflow indication, works similarly to the overshoot, the size if fixed tho.
2711
@at-root undershoot {
2712
&.top { @include undershoot(top); }
2713
2714
&.bottom { @include undershoot(bottom); }
2715
2716
&.left { @include undershoot(left); }
2717
2718
&.right { @include undershoot(right); }
2719
}
2720
2721
@at-root junction { // the small square between two scrollbars
2722
border-style: solid none none solid;
2723
border-width: 1px;
2724
border-color: $border;
2725
background-color: $base;
2726
2727
&:dir(rtl) { border-style: solid solid none none; }
2728
}
2729
}
2730
2731
// vbox and hbox separators
2732
separator {
2733
min-width: 1px;
2734
min-height: 1px;
2735
background-color: $border;
2736
}
2737
2738
%hide_separators {
2739
min-width: 0;
2740
min-height: 0;
2741
background-color: transparent;
2742
}
2743
2744
2745
/*********
2746
* Lists *
2747
*********/
2748
list {
2749
border-color: $border;
2750
background-color: $base;
2751
2752
row { padding: 2px; }
2753
}
2754
2755
row {
2756
&.activatable {
2757
transition: $transition,
2758
background-size $duration-ripple-aftermath $ease-out,
2759
background-image $duration-ripple-aftermath-opacity $ease-out;
2760
box-shadow: inset 0 0 0 9999px transparent;
2761
background-image: radial-gradient(circle farthest-corner at center,
2762
transparent 10%,
2763
transparent 0%);
2764
background-repeat: no-repeat;
2765
background-position: center;
2766
background-size: 1000% 1000%;
2767
2768
&:hover {
2769
transition: $transition,
2770
box-shadow 0,
2771
background-size $duration-ripple-aftermath $ease-out,
2772
background-image $duration-ripple-aftermath-opacity $ease-out;
2773
box-shadow: inset 0 0 0 9999px $overlay-hover;
2774
}
2775
2776
&.has-open-popup, // this is for indicathing which row generated a popover see https://bugzilla.gnome.org/show_bug.cgi?id=754411
2777
&:active {
2778
transition: $transition,
2779
background-size 0,
2780
background-image 0;
2781
animation: ripple $duration-ripple $ease-out forwards;
2782
box-shadow: inset 0 0 0 9999px $overlay-hover;
2783
background-image: radial-gradient(circle farthest-corner at center,
2784
$overlay-active 10%,
2785
transparent 0%);
2786
background-size: 0% 0%;
2787
}
2788
}
2789
2790
&:selected {
2791
@extend %selected_items;
2792
color: $primary; // for overlays
2793
2794
image,
2795
label { color: $text; }
2796
2797
button image,
2798
button label { color: inherit; }
2799
2800
&:disabled {
2801
image,
2802
label { color: $text-disabled; }
2803
}
2804
}
2805
}
2806
2807
2808
/*********************
2809
* App Notifications *
2810
*********************/
2811
.app-notification {
2812
// @extend %osd;
2813
2814
@extend toolbar.osd;
2815
2816
margin: 8px;
2817
2818
button { @extend %button_basic.flat; }
2819
2820
&.frame,
2821
border { border-style: none; }
2822
}
2823
2824
2825
/*************
2826
* Expanders *
2827
*************/
2828
expander {
2829
title > arrow {
2830
transition: all $duration $ease-out;
2831
min-width: 16px;
2832
min-height: 16px;
2833
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
2834
-gtk-icon-transform: rotate(-90deg);
2835
2836
&:dir(rtl) { -gtk-icon-transform: rotate(90deg); }
2837
2838
&:checked { -gtk-icon-transform: unset; }
2839
2840
color: $text-secondary;
2841
2842
&:hover, &:active { color: $text; }
2843
2844
&:disabled { color: $text-secondary-disabled; }
2845
}
2846
}
2847
2848
2849
/************
2850
* Calendar *
2851
************/
2852
calendar {
2853
padding: 1px;
2854
border: 1px solid $border;
2855
color: $text;
2856
2857
&:disabled { color: $text-disabled; }
2858
2859
&:selected {
2860
@extend %selected_items;
2861
2862
border-radius: $corner-radius + 1px;
2863
}
2864
2865
&.header {
2866
border-style: none none solid;
2867
border-radius: 0;
2868
}
2869
2870
&.button { @extend %simple_flat_button; }
2871
2872
&.highlight {
2873
color: $text-secondary;
2874
font-weight: 500;
2875
}
2876
2877
&:indeterminate { color: $text-secondary-disabled; }
2878
}
2879
2880
2881
/***********
2882
* Dialogs *
2883
***********/
2884
messagedialog { // Message Dialog styling
2885
&.background { background-color: $surface; }
2886
2887
.titlebar {
2888
min-height: $small-size;
2889
border-style: none;
2890
box-shadow: inset 0 1px highlight($surface);
2891
background-color: $surface;
2892
color: $text;
2893
2894
&:backdrop { color: $text-secondary; }
2895
}
2896
2897
&.csd { // rounded bottom border styling for csd version
2898
&.background {
2899
// bigger radius for better antialiasing
2900
border-bottom-left-radius: $corner-radius;
2901
border-bottom-right-radius: $corner-radius;
2902
}
2903
2904
.dialog-action-area {
2905
margin-top: -$container-padding;
2906
padding: $container-padding;
2907
2908
button {
2909
@extend %simple_flat_button;
2910
border-radius: $corner-radius;
2911
2912
&:not(:last-child) { margin-right: $container-padding; }
2913
2914
&.suggested-action:not(:disabled) { color: $suggested; }
2915
2916
&.destructive-action:not(:disabled) { color: $destructive; }
2917
}
2918
}
2919
}
2920
}
2921
2922
filechooser {
2923
.dialog-action-box { border-top: 1px solid $border; }
2924
2925
#pathbarbox {
2926
border-bottom: 1px solid $border;
2927
background-color: $background;
2928
2929
> stack > box > button { // The new folder button
2930
@extend %button_basic.flat;
2931
@extend %circular_button;
2932
}
2933
}
2934
}
2935
2936
filechooserbutton:drop(active) {
2937
box-shadow: none;
2938
}
2939
2940
2941
/***********
2942
* Sidebar *
2943
***********/
2944
.sidebar {
2945
border-style: none;
2946
background-color: $base-alt;
2947
2948
&:not(separator) {
2949
@at-root %sidebar_left,
2950
&:dir(ltr),
2951
&.left,
2952
&.left:dir(rtl) {
2953
border-right: 1px solid $border;
2954
border-left-style: none;
2955
}
2956
2957
@at-root %sidebar_right,
2958
&:dir(rtl),
2959
&.right {
2960
border-left: 1px solid $border;
2961
border-right-style: none;
2962
}
2963
}
2964
2965
list { background-color: transparent; }
2966
2967
paned & { &.left, &.right, &.left:dir(rtl), &:dir(rtl), &:dir(ltr), & { border-style: none; }}
2968
}
2969
2970
stacksidebar {
2971
&.sidebar {
2972
&:dir(ltr),
2973
&.left,
2974
&.left:dir(rtl) { list { @extend %sidebar_left; }}
2975
2976
&:dir(rtl),
2977
&.right { list { @extend %sidebar_right; }}
2978
}
2979
2980
row {
2981
padding: 10px 4px;
2982
2983
> label {
2984
padding-left: 6px;
2985
padding-right: 6px;
2986
}
2987
2988
&.needs-attention > label { @extend %needs_attention; }
2989
}
2990
}
2991
2992
separator.sidebar {
2993
background-color: $border;
2994
2995
&.selection-mode,
2996
.selection-mode & {
2997
// background-color: $border;
2998
}
2999
}
3000
3001
3002
/****************
3003
* File chooser *
3004
****************/
3005
// dim the sidebar icons, see bug #786613 for details on this oddity
3006
row {
3007
image.sidebar-icon { color: $text-secondary; }
3008
}
3009
3010
placessidebar {
3011
> viewport.frame { border-style: none; }
3012
3013
list { padding: (4px - 3px) 0 4px; }
3014
3015
row {
3016
// Needs overriding of the GtkListBoxRow padding
3017
min-height: 32px;
3018
margin: -1px 4px; // Remove unwanted hard-coded vertical margins with -1px
3019
padding: 0;
3020
border-radius: $corner-radius;
3021
3022
// Using margins/padding directly in the SidebarRow
3023
// will make the animation of the new bookmark row jump
3024
> revealer { padding: 0 8px; }
3025
3026
&:selected { font-weight: 500; }
3027
3028
&:disabled { color: $text-disabled; }
3029
3030
image.sidebar-icon {
3031
&:dir(ltr) { padding-right: 8px; }
3032
&:dir(rtl) { padding-left: 8px; }
3033
}
3034
3035
label.sidebar-label {
3036
&:dir(ltr) { padding-right: 2px; }
3037
&:dir(rtl) { padding-left: 2px; }
3038
}
3039
3040
&:selected image.sidebar-icon,
3041
&:selected label.sidebar-label { color: inherit; }
3042
3043
@at-root button.sidebar-button {
3044
@extend %simple_flat_button;
3045
@extend %small_button;
3046
}
3047
3048
&.sidebar-placeholder-row {
3049
min-height: 2px;
3050
padding: 0 8px;
3051
background-image: image($primary);
3052
background-clip: content-box;
3053
}
3054
3055
&.sidebar-new-bookmark-row { color: $primary; }
3056
3057
&:drop(active):not(:disabled) {
3058
box-shadow: inset 0 0 0 2px $primary;
3059
}
3060
}
3061
}
3062
3063
placesview {
3064
.server-list-button > image { -gtk-icon-transform: rotate(0turn); }
3065
3066
.server-list-button:checked > image { -gtk-icon-transform: rotate(-0.5turn); }
3067
3068
// this selects the "connect to server" label
3069
> actionbar > revealer > box > label {
3070
padding-left: 8px;
3071
padding-right: 8px;
3072
}
3073
}
3074
3075
3076
/*********
3077
* Paned *
3078
*********/
3079
paned {
3080
> separator {
3081
min-width: 1px;
3082
min-height: 1px;
3083
-gtk-icon-source: none; // defeats the ugly default handle decoration
3084
border-style: none; // just to be sure
3085
background-color: transparent;
3086
// workaround, using background istead of a border since the border will get rendered twice (?)
3087
background-image: image($border);
3088
background-size: 1px 1px;
3089
background-clip: content-box; // avoids borders image being rendered twice (?)
3090
3091
&.wide {
3092
min-width: 6px;
3093
min-height: 6px;
3094
background-color: $background;
3095
background-image: image($border), image($border);
3096
background-size: 1px 1px, 1px 1px;
3097
}
3098
}
3099
3100
&.horizontal > separator {
3101
background-repeat: repeat-y;
3102
3103
&:dir(ltr) {
3104
margin: 0 -8px 0 0;
3105
padding: 0 8px 0 0;
3106
background-position: left;
3107
}
3108
3109
&:dir(rtl) {
3110
margin: 0 0 0 -8px;
3111
padding: 0 0 0 8px;
3112
background-position: right;
3113
}
3114
3115
&.wide {
3116
margin: 0;
3117
padding: 0;
3118
background-repeat: repeat-y, repeat-y;
3119
background-position: left, right;
3120
}
3121
}
3122
3123
&.vertical > separator {
3124
margin: 0 0 -8px 0;
3125
padding: 0 0 8px 0;
3126
background-repeat: repeat-x;
3127
background-position: top;
3128
3129
&.wide {
3130
margin: 0;
3131
padding: 0;
3132
background-repeat: repeat-x, repeat-x;
3133
background-position: bottom, top;
3134
}
3135
}
3136
}
3137
3138
3139
/**************
3140
* GtkInfoBar *
3141
**************/
3142
infobar {
3143
border-style: none;
3144
3145
&.info { background-color: $infobar-info; }
3146
3147
&.question { background-color: $infobar-question; }
3148
3149
&.warning { background-color: $infobar-warning; }
3150
3151
&.error { background-color: $infobar-error; }
3152
3153
&.info,
3154
&.question,
3155
&.warning,
3156
&.error {
3157
> label, & { color: on(dark); }
3158
3159
button { @extend %button_selected; }
3160
3161
selection {}
3162
3163
*:link { color: on(dark); }
3164
}
3165
}
3166
3167
3168
/************
3169
* Tooltips *
3170
************/
3171
tooltip {
3172
&.background {
3173
// background-color needs to be set this way otherwise it gets drawn twice
3174
// see https://bugzilla.gnome.org/show_bug.cgi?id=736155 for details.
3175
background-color: $tooltip;
3176
color: on($tooltip);
3177
}
3178
3179
// padding: 4px; /* not working */
3180
border-radius: $corner-radius;
3181
box-shadow: none; // otherwise it gets inherited by windowframe.csd
3182
3183
&:not(.csd):not(.unity-csd) {
3184
// border: 1px solid $border;
3185
// border-radius: $corner-radius + 1px;
3186
// background-clip: $background-clip-extra;
3187
}
3188
3189
// FIXME: we need a border or tooltips vanish on black background.
3190
decoration { background-color: transparent; }
3191
3192
> box {
3193
margin: -6px; // Remove hard-coded 6px padding
3194
min-height: 32px - 4px * 2;
3195
padding: 4px 8px;
3196
}
3197
3198
* {
3199
// workaround for Eclipse.
3200
// do not include any declaration here.
3201
// padding: 0;
3202
// background-color: transparent;
3203
// color: inherit;
3204
}
3205
}
3206
3207
3208
/*****************
3209
* Color Chooser *
3210
*****************/
3211
colorswatch {
3212
// This widget is made of two boxes one on top of the other, the lower box is colorswatch {} the other one
3213
// is colorswatch overlay {}, colorswatch has the programmatically set background, so most of the style is
3214
// applied to the overlay box.
3215
3216
// base color corners rounding
3217
// to avoid the artifacts caused by rounded corner anti-aliasing the base color
3218
// sports a bigger radius.
3219
// nth-child is needed by the custom color strip.
3220
3221
&.top {
3222
border-top-left-radius: $corner-radius + 0.5px;
3223
border-top-right-radius: $corner-radius + 0.5px;
3224
3225
overlay {
3226
border-top-left-radius: $corner-radius;
3227
border-top-right-radius: $corner-radius;
3228
}
3229
}
3230
3231
&.bottom {
3232
border-bottom-left-radius: $corner-radius + 0.5px;
3233
border-bottom-right-radius: $corner-radius + 0.5px;
3234
3235
overlay {
3236
border-bottom-left-radius: $corner-radius;
3237
border-bottom-right-radius: $corner-radius;
3238
}
3239
}
3240
3241
&.left,
3242
&:first-child:not(.top) {
3243
border-top-left-radius: $corner-radius + 0.5px;
3244
border-bottom-left-radius: $corner-radius + 0.5px;
3245
3246
overlay {
3247
border-top-left-radius: $corner-radius;
3248
border-bottom-left-radius: $corner-radius;
3249
}
3250
}
3251
3252
&.right,
3253
&:last-child:not(.bottom) {
3254
border-top-right-radius: $corner-radius + 0.5px;
3255
border-bottom-right-radius: $corner-radius + 0.5px;
3256
3257
overlay {
3258
border-top-right-radius: $corner-radius;
3259
border-bottom-right-radius: $corner-radius;
3260
}
3261
}
3262
3263
&.dark { color: on(dark); }
3264
3265
&.light { color: on(light); }
3266
3267
&:drop(active) {
3268
box-shadow: none;
3269
3270
&.light overlay { box-shadow: $shadow-1, 0 0 0 2px $primary; }
3271
3272
&.dark overlay { box-shadow: $shadow-1, 0 0 0 2px $primary; }
3273
}
3274
3275
overlay {
3276
transition: $transition-shadow;
3277
box-shadow: $shadow-1;
3278
3279
&:hover { box-shadow: $shadow-2; }
3280
}
3281
3282
&#add-color-button {
3283
border-radius: $corner-radius $corner-radius 0 0;
3284
color: on(dark);
3285
3286
&:only-child { border-radius: $corner-radius; }
3287
3288
overlay {
3289
background-image: linear-gradient(to right,
3290
$red 25%,
3291
$yellow 25%, $yellow 50%,
3292
$green 50%, $green 75%,
3293
$blue 75%);
3294
}
3295
}
3296
3297
&:disabled {
3298
opacity: 0.5;
3299
3300
overlay { box-shadow: none; }
3301
}
3302
3303
row:selected & {
3304
}
3305
3306
&#editor-color-sample {
3307
border-radius: $corner-radius + 0.5px;
3308
3309
overlay { border-radius: $corner-radius; }
3310
3311
// overlay:hover { box-shadow: $shadow-1; }
3312
}
3313
}
3314
3315
// colorscale popup
3316
colorchooser .popover.osd {
3317
transition: $transition-shadow;
3318
border-radius: $corner-radius;
3319
box-shadow: $shadow-2, inset 0 1px highlight($surface);
3320
background-color: $surface;
3321
3322
&:backdrop { box-shadow: $shadow-1, inset 0 1px highlight($surface); }
3323
}
3324
3325
3326
/********
3327
* Misc *
3328
********/
3329
// content view (grid/list)
3330
.content-view {
3331
background-color: $background;
3332
3333
// &:hover { -gtk-icon-effect: highlight; }
3334
3335
rubberband, .rubberband { @extend rubberband; }
3336
}
3337
3338
.scale-popup {
3339
// .osd & { @extend %osd; }
3340
3341
.osd & button.flat { // FIXME: quick hack, redo properly
3342
}
3343
3344
button { // +/- buttons on GtkVolumeButton popup
3345
}
3346
}
3347
3348
3349
/**********************
3350
* Window Decorations *
3351
**********************/
3352
decoration {
3353
transition: $transition-shadow;
3354
border-radius: $corner-radius $corner-radius 0 0;
3355
box-shadow: $shadow-4, 0 16px 16px transparent;
3356
3357
// FIXME rationalize shadows
3358
3359
// this is used for the resize cursor area
3360
margin: 8px;
3361
3362
&:backdrop {
3363
// the transparent shadow here is to enforce that the shadow extents don't
3364
// change when we go to backdrop, to prevent jumping windows.
3365
// The biggest shadow should be in the same order then in the active state
3366
// or the jumping will happen during the transition.
3367
box-shadow: $shadow-2, 0 16px 16px transparent;
3368
}
3369
3370
.maximized &,
3371
.fullscreen &,
3372
.tiled &,
3373
.tiled-top &,
3374
.tiled-right &,
3375
.tiled-bottom &,
3376
.tiled-left & { border-radius: 0; }
3377
3378
.popup & { box-shadow: none; }
3379
3380
// server-side decorations as used by mutter
3381
.ssd & { box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16); } // just doing borders, wm draws actual shadows
3382
3383
.csd.popup & {
3384
border-radius: $corner-radius;
3385
box-shadow: $shadow-2;
3386
}
3387
3388
tooltip.csd & {
3389
border-radius: $corner-radius;
3390
box-shadow: none;
3391
}
3392
3393
messagedialog.csd & {
3394
border-radius: $corner-radius;
3395
// box-shadow: $shadow-4, 0 16px 16px transparent;
3396
3397
// &:backdrop { box-shadow: $shadow-2, 0 16px 16px transparent; }
3398
}
3399
3400
.solid-csd & {
3401
margin: 0;
3402
// padding: 4px;
3403
border-radius: 0;
3404
box-shadow: none;
3405
// box-shadow: inset 0 0 0 4px $titlebar;
3406
background-color: $titlebar;
3407
}
3408
}
3409
3410
// Window Close button
3411
button.titlebutton {
3412
// @extend %simple_flat_button;
3413
3414
@extend %circular_button;
3415
3416
.selection-mode & {
3417
}
3418
}
3419
3420
3421
// catch all extend :)
3422
3423
%selected_items {
3424
background-color: $overlay-selected;
3425
}
3426
3427
.monospace { font-family: monospace; }
3428
3429
3430
/**********************
3431
* Touch Copy & Paste *
3432
**********************/
3433
// touch selection handlebars for the Popover.osd above
3434
cursor-handle {
3435
color: $primary;
3436
-gtk-icon-source: -gtk-recolor(url("assets/scalable/cursor-handle-symbolic.svg"));
3437
3438
&.top:dir(ltr), &.bottom:dir(rtl) {
3439
-gtk-icon-transform: rotate(90deg);
3440
}
3441
3442
&.bottom:dir(ltr), &.top:dir(rtl) {
3443
-gtk-icon-transform: unset;
3444
}
3445
3446
&.insertion-cursor:dir(ltr), &.insertion-cursor:dir(rtl) {
3447
padding-top: 6px;
3448
-gtk-icon-transform: rotate(45deg);
3449
}
3450
}
3451
3452
.context-menu { font: initial; } // Decouple the font of context menus from their entry/textview
3453
3454
// shortcut window keys
3455
.keycap {
3456
min-width: 28px - 8px * 2;
3457
min-height: 28px - 2px;
3458
margin-top: 2px;
3459
padding-bottom: 2px;
3460
padding-left: 8px;
3461
padding-right: 8px;
3462
3463
border: solid 1px $border;
3464
border-radius: $corner-radius + 1px;
3465
box-shadow: inset 0 -2px $border;
3466
background-color: $surface;
3467
color: $text;
3468
font-size: smaller;
3469
}
3470
3471
:not(decoration):not(window):drop(active) { // FIXME needs to be done widget by widget, this wildcard should really die
3472
transition: $transition;
3473
box-shadow: $shadow-1, inset 0 0 0 2px $primary;
3474
caret-color: $primary;
3475
}
3476
3477
stackswitcher button.text-button { min-width: 100px; } // FIXME aggregate with buttons
3478
3479
stackswitcher button.circular,
3480
stackswitcher button.text-button.circular { // FIXME aggregate with buttons
3481
min-width: $medium-size;
3482
min-height: $medium-size;
3483
padding: 0;
3484
}
3485
3486
3487
/*************
3488
* App Icons *
3489
*************/
3490
// Outline for low res icons
3491
.lowres-icon {
3492
// -gtk-icon-shadow: none;
3493
}
3494
3495
// Drapshadow for large icons
3496
.icon-dropshadow {
3497
// -gtk-icon-shadow: none;
3498
}
3499
3500
3501
/*********
3502
* Emoji *
3503
*********/
3504
popover.emoji-picker {
3505
padding: 0;
3506
3507
entry {
3508
border-bottom: 1px solid $border;
3509
border-image: none;
3510
border-radius: 0;
3511
box-shadow: none;
3512
background-color: transparent;
3513
}
3514
3515
scrolledwindow { border-bottom: 1px solid $border; }
3516
}
3517
3518
// mimic tab style
3519
button.emoji-section {
3520
margin-top: -1px;
3521
padding: 0 8px;
3522
min-width: 24px;
3523
min-height: $medium-size;
3524
border-radius: 0;
3525
outline-offset: -6px;
3526
3527
&, &:hover, &:active { box-shadow: inset 0 2px transparent; }
3528
3529
&:checked {
3530
box-shadow: inset 0 2px $primary;
3531
background-color: transparent;
3532
}
3533
3534
&:hover, &:active { background-color: $overlay-hover; }
3535
3536
&:first-child { margin-left: 4px; }
3537
3538
&:last-child { margin-right: 4px; }
3539
}
3540
3541
popover.emoji-picker .emoji {
3542
min-width: 3em;
3543
min-height: 3em;
3544
padding: 0 8px;
3545
// font-size: larger;
3546
3547
widget {
3548
transition: $transition;
3549
border-radius: $corner-radius;
3550
3551
&:hover { background-color: $overlay-hover; }
3552
}
3553
}
3554
3555
popover.emoji-completion {
3556
padding: 8px 0;
3557
3558
arrow {
3559
border: none;
3560
background: none;
3561
}
3562
3563
.emoji-completion-row {
3564
min-height: $menuitem-size;
3565
padding: 0 12px;
3566
}
3567
3568
.emoji:hover {
3569
background-color: $overlay-hover;
3570
}
3571
}
3572