A fork of the Materia GTK theme.

Important information: Google announced that, from September 2026, Android devices will require ALL apps to be signed by Google, effectively leading to an iOS situation. Value your right to a computer that does what you want; do not tolerate this monopolistic practice! Contact me if you don't understand why it is bad. Click to learn more.

 _common.scss

View raw Download
text/plain • 61.23 kiB
Unicode text, UTF-8 text
        
            
1
$asset_suffix: if($variant=='dark', '-dark', '');
2
$extra_background_clip: if($variant == 'light', padding-box, border-box);
3
4
$small_size: 24px;
5
$medium_size: 36px;
6
$large_size: 48px;
7
8
$container_padding: 6px;
9
10
$bar_size: 4px;
11
$menuitem_size: 28px;
12
13
$md_radius: 2px;
14
$circular_radius: 100px;
15
16
$shorter_duration: 0.2s;
17
$longer_duration: 0.3s;
18
19
$standard_curve: cubic-bezier(0.4, 0.0, 0.2, 1);
20
$deceleration_curve: cubic-bezier(0.0, 0.0, 0.2, 1);
21
$acceleration_curve: cubic-bezier(0.4, 0.0, 1, 1);
22
$sharp_curve: cubic-bezier(0.4, 0.0, 0.6, 1);
23
24
$shorter_transition: all $shorter_duration $deceleration_curve;
25
$longer_transition: all $longer_duration $deceleration_curve;
26
$shadow_transition: box-shadow $shorter_duration $deceleration_curve;
27
$shadow_image_transition: border-image $shorter_duration $deceleration_curve;
28
29
* {
30
padding: 0;
31
background-clip: padding-box;
32
33
-GtkToolButton-icon-spacing: 4;
34
-GtkTextView-error-underline-color: $error_color;
35
36
-GtkCheckButton-indicator-size: 24;
37
-GtkCheckMenuItem-indicator-size: 16;
38
39
// The size for scrollbars. The slider is 2px smaller, but we keep it
40
// up so that the whole area is sensitive to button presses for the
41
// slider. The stepper button is larger in both directions, the slider
42
// only in the width
43
44
-GtkScrolledWindow-scrollbar-spacing: 0;
45
-GtkScrolledWindow-scrollbars-within-bevel: 1;
46
47
-GtkToolItemGroup-expander-size: 11;
48
-GtkExpander-expander-size: 16;
49
-GtkTreeView-expander-size: 11;
50
51
-GtkTreeView-horizontal-separator: 4;
52
53
-GtkMenu-horizontal-padding: 0;
54
-GtkMenu-vertical-padding: 0;
55
56
-GtkWidget-link-color: $link_color;
57
-GtkWidget-visited-link-color: $link_visited_color;
58
59
-GtkWidget-focus-padding: 2; // FIXME: do we still need these?
60
-GtkWidget-focus-line-width: 1; //
61
62
-GtkWidget-text-handle-width: 20;
63
-GtkWidget-text-handle-height: 20;
64
65
-GtkDialog-button-spacing: 4;
66
-GtkDialog-action-area-border: 0;
67
68
-GtkStatusbar-shadow-type: none;
69
70
// We use the outline properties to signal the focus properties
71
// to the adwaita engine: using real CSS properties is faster,
72
// and we don't use any outlines for now.
73
74
outline-style: solid;
75
outline-width: 2px;
76
outline-color: $track_color;
77
outline-offset: -4px;
78
outline-radius: 2px;
79
}
80
81
82
/***************
83
* Base States *
84
***************/
85
86
.background {
87
background-color: $bg_color;
88
color: $fg_color;
89
}
90
91
/*
92
These wildcard seems unavoidable, need to investigate.
93
Wildcards are bad and troublesome, use them with care,
94
or better, just don't.
95
Everytime a wildcard is used a kitten dies, painfully.
96
*/
97
98
*:insensitive {
99
-gtk-image-effect: dim;
100
}
101
102
.gtkstyle-fallback {
103
background-color: $bg_color;
104
color: $fg_color;
105
&:prelight {
106
background-color: darken($bg_color, 5%);
107
color: $fg_color;
108
}
109
&:active {
110
background-color: darken($bg_color, 10%);
111
color: $fg_color;
112
}
113
&:insensitive {
114
background-color: $bg_color;
115
color: $insensitive_fg_color;
116
}
117
&:selected {
118
background-color: $selected_bg_color;
119
color: $selected_fg_color;
120
}
121
}
122
123
.view {
124
@extend .list-row.activatable;
125
background-color: $base_color;
126
color: $fg_color;
127
128
&:hover, &:active, &:selected { border-radius: 2px; }
129
130
&:insensitive {
131
// background-color: $secondary_base_color;
132
color: $insensitive_fg_color;
133
}
134
135
&:selected { @extend %selected_items; }
136
}
137
138
.rubberband {
139
border: 1px solid $secondary_selected_bg_color;
140
background-color: scale-alpha($secondary_selected_bg_color, $lower_opacity);
141
}
142
143
.label {
144
&.separator {
145
color: $fg_color;
146
@extend .dim-label;
147
}
148
&:selected {
149
@extend %selected_items;
150
}
151
&:insensitive {
152
color: $insensitive_fg_color;
153
}
154
}
155
156
.dim-label {
157
opacity: $hint_opacity;
158
}
159
160
GtkAssistant {
161
.sidebar {
162
padding: 6px 0;
163
// border-top: 1px solid $borders_color;
164
&:dir(ltr) { border-right: 1px solid $borders_color; }
165
&:dir(rtl) { border-left: 1px solid $borders_color; }
166
}
167
// &.csd .sidebar { border-top-style: none; }
168
.sidebar .label {
169
opacity: $hint_opacity;
170
padding: 5px 12px 6px;
171
font-weight: 500;
172
}
173
.sidebar .label.highlight {
174
opacity: 1;
175
}
176
}
177
178
GtkTextView { // This will get overridden by .view, needed by gedit line numbers
179
background-color: $secondary_base_color;
180
}
181
182
.grid-child {
183
// outline-offset: -2px;
184
padding: 4px;
185
border-radius: 2px;
186
&:selected { @extend %selected_items; }
187
}
188
189
%osd, .osd { opacity: $higher_opacity; }
190
191
/*********************
192
* Spinner Animation *
193
*********************/
194
195
@keyframes spin {
196
to { -gtk-icon-transform: rotate(1turn); }
197
}
198
199
.spinner {
200
background-color: blue;
201
background-image: none;
202
opacity: 0; // non spinning spinner makes no sense
203
-gtk-icon-source: -gtk-icontheme('process-working-symbolic');
204
&:active {
205
opacity: 1;
206
animation: spin 1s linear infinite;
207
&:insensitive {
208
opacity: $disabled_opacity;
209
}
210
}
211
}
212
213
/****************
214
* Text Entries *
215
****************/
216
217
.entry {
218
padding: 7px 8px 8px;
219
border-radius: 2px;
220
@include entry(normal);
221
&:focus { @include entry(focus); }
222
&:insensitive { @include entry(insensitive); }
223
&.flat {
224
border-radius: 0;
225
@include entry(flat-normal);
226
&:focus { @include entry(flat-focus); }
227
&:insensitive { @include entry(flat-insensitive); }
228
}
229
230
&:selected { @extend %selected_items; }
231
232
&.image { // icons inside the entry
233
&.left { padding-left: 2px; }
234
&.right { padding-right: 2px; }
235
}
236
237
&.progressbar {
238
margin: 2px;
239
border-style: none none solid;
240
border-width: 2px;
241
border-color: $selected_bg_color;
242
border-radius: 0;
243
box-shadow: none;
244
background-color: transparent;
245
background-image: none;
246
}
247
248
.linked > & { @extend %linked; }
249
250
.linked.vertical > & { @extend %linked_vertical; }
251
252
.linked > &.flat,
253
.linked.vertical > &.flat { border-radius: 0; }
254
255
// entry error and warning style
256
@each $e_type, $e_color in (error, $error_color),
257
(warning, $warning_color) {
258
&.#{$e_type} {
259
@include entry(normal, $e_color);
260
&:focus { @include entry(focus, $e_color); }
261
&:insensitive { @include entry(insensitive, $e_color); }
262
&.flat {
263
@include entry(flat-normal, $e_color);
264
&:focus { @include entry(flat-focus, $e_color); }
265
&:insensitive { @include entry(flat-insensitive, $e_color); }
266
}
267
}
268
}
269
270
&.image { // entry icons colors
271
&:not(:hover):not(:active) { color: gtkalpha(currentColor, $enabled_opacity); }
272
&:insensitive { color: gtkalpha(currentColor, $hint_opacity); }
273
}
274
275
.osd & {
276
}
277
278
GtkTreeView &:not(:selected) {
279
&, &:focus {
280
padding: 2px;
281
border-image: none;
282
border-radius: 0;
283
box-shadow: none;
284
background-color: $base_color;
285
}
286
}
287
}
288
289
290
/***********
291
* Buttons *
292
***********/
293
294
// stuff for .needs-attention
295
@keyframes needs_attention {
296
from {
297
background-image: -gtk-gradient(radial,
298
center center, 0,
299
center center, 0.001,
300
to($accent_bg_color),
301
to(transparent));
302
}
303
to {
304
background-image: -gtk-gradient(radial,
305
center center, 0,
306
center center, 0.5,
307
to($accent_bg_color),
308
to(transparent));
309
}
310
}
311
312
313
%button,
314
.button {
315
padding: 7px 10px 8px;
316
border-radius: 2px;
317
background-repeat: no-repeat;
318
background-position: center, center;
319
background-size: ($medium_size * 2 / 0.8) ($medium_size * 2 / 0.8), auto;
320
font-weight: 500;
321
@include button(normal);
322
&:hover { @include button(hover); }
323
&:active { @include button(active); }
324
&:insensitive { @include button(insensitive); }
325
&:checked { @include button(checked); }
326
&:checked:insensitive { @include button(checked-insensitive); }
327
@at-root %flat_button, &.flat {
328
@at-root %simple_flat_button, & {
329
@include button(flat-normal);
330
&:hover { @include button(flat-hover); }
331
&:active { @include button(flat-active); }
332
&:insensitive { @include button(flat-insensitive); }
333
}
334
&:checked { @include button(flat-checked); }
335
&:checked:insensitive { @include button(flat-checked-insensitive); }
336
}
337
// big standalone buttons like in Documents pager
338
&.osd {
339
&.image-button {
340
padding: 16px;
341
background-size: ($large_size / 0.8) ($large_size / 0.8), auto;
342
}
343
&:insensitive { opacity: 0; }
344
}
345
//overlay / OSD style
346
.osd & {
347
}
348
349
// Suggested and Destructive Action buttons
350
@each $b_type, $b_color in (suggested-action, $suggested_color),
351
(destructive-action, $destructive_color) {
352
&.#{$b_type} {
353
background-color: $b_color;
354
color: $selected_fg_color;
355
// @include button(normal, $b_color, white);
356
// &:hover { @include button(hover, $b_color, white); }
357
// &:active, &:checked { @include button(active, $b_color, white); }
358
&:insensitive { @include button(insensitive, $b_color, white); }
359
&:checked { background-color: mix($selected_fg_color, $b_color, percentage($lower_opacity)); }
360
&.flat {
361
background-color: transparent;
362
color: $b_color;
363
// @include button(flat-normal, $b_color, white);
364
// &:hover { @include button(flat-hover, $b_color, white); }
365
// &:active, &:checked { @include button(flat-active, $b_color, white); }
366
&:insensitive { @include button(flat-insensitive, $b_color, white); }
367
}
368
}
369
}
370
371
&.image-button { @extend %image_button; }
372
373
&.text-button {
374
padding-left: 16px;
375
padding-right: 16px;
376
}
377
378
&.text-button.image-button {
379
// those buttons needs uneven horizontal padding, we want the icon side
380
// to have the image-button padding, while the text side the text-button
381
// one, so we're adding the missing padding to the label depending on
382
// its position inside the button
383
padding: 7px 10px 8px; // same as .button
384
outline-radius: 2px;
385
border-radius: 2px;
386
background-size: ($medium_size * 2 / 0.8) ($medium_size * 2 / 0.8), auto;
387
.label:first-child { padding-left: 6px; }
388
.label:last-child { padding-right: 6px; }
389
}
390
391
.stack-switcher > & {
392
// to position the needs attention dot, padding is added to the button
393
// child, a label needs just lateral padding while an icon needs vertical
394
// padding added too.
395
396
outline-offset: -4px; // needs to be set or it gets overriden by GtkRadioButton outline-offset
397
398
> .label {
399
padding-left: 6px; // label padding
400
padding-right: 6px; //
401
}
402
> GtkImage {
403
padding-left: 6px; // image padding
404
padding-right: 6px; //
405
padding-top: 3px; //
406
padding-bottom: 3px; //
407
}
408
&.text-button {
409
padding: 7px 10px 8px; // needed or it will get overridden
410
}
411
&.image-button {
412
// we want image buttons to have a 1:1 aspect ratio, so compensation
413
// of the padding added to the GtkImage is needed
414
padding: 7px 4px;
415
}
416
&.needs-attention > .label,
417
&.needs-attention > GtkImage { @extend %needs_attention; }
418
&.needs-attention:checked > .label,
419
&.needs-attention:checked > GtkImage {
420
animation: none;
421
background-image: none;
422
}
423
}
424
425
//inline-toolbar buttons
426
.inline-toolbar & {
427
// @extend %button.flat;
428
@extend %image_button;
429
}
430
431
.primary-toolbar & { icon-shadow: none; } // tango icons don't need shadows
432
433
.linked > & { @extend %linked; }
434
435
.linked.vertical > & { @extend %linked_vertical; }
436
437
.linked > &.flat,
438
.linked.vertical > &.flat {
439
border-radius: 2px;
440
441
&.image-button {
442
outline-radius: $circular_radius;
443
border-radius: $circular_radius;
444
}
445
446
&.text-button.image-button {
447
outline-radius: 2px;
448
border-radius: 2px;
449
}
450
}
451
}
452
453
%image_button {
454
padding: 10px;
455
outline-radius: 100px;
456
border-radius: 100px;
457
background-size: ($medium_size / 0.8) ($medium_size / 0.8), auto;
458
}
459
460
%needs_attention {
461
animation: needs_attention $longer_duration $deceleration_curve forwards;
462
background-repeat: no-repeat;
463
background-position: right 3px;
464
background-size: 6px 6px;
465
&:dir(rtl) { background-position: left 3px; }
466
}
467
468
469
// all the following is for the +|- buttons on inline toolbars, that way
470
// should really be deprecated...
471
.inline-toolbar GtkToolButton > .button { // redefining the button look is
472
// needed since those are flat...
473
}
474
475
// More inline toolbar buttons
476
.inline-toolbar.toolbar GtkToolButton {
477
// & > .button.flat { @extend %linked_middle; }
478
// &:first-child > .button.flat { @extend %linked:first-child; }
479
// &:last-child > .button.flat { @extend %linked:last-child; }
480
// &:only-child > .button.flat { @extend %linked:only-child; }
481
}
482
483
%linked_middle {
484
outline-radius: 2px;
485
border-radius: 0;
486
}
487
488
%linked {
489
@extend %linked_middle;
490
&:first-child {
491
border-top-left-radius: 2px;
492
border-bottom-left-radius: 2px;
493
}
494
&:last-child {
495
border-top-right-radius: 2px;
496
border-bottom-right-radius: 2px;
497
}
498
&:only-child {
499
border-radius: 2px;
500
}
501
}
502
503
%linked_vertical_middle {
504
outline-radius: 2px;
505
border-radius: 0;
506
}
507
508
%linked_vertical{
509
@extend %linked_vertical_middle;
510
&:first-child {
511
border-top-left-radius: 2px;
512
border-top-right-radius: 2px;
513
}
514
&:last-child {
515
border-bottom-left-radius: 2px;
516
border-bottom-right-radius: 2px;
517
}
518
&:only-child {
519
border-radius: 2px;
520
}
521
}
522
523
/* menu buttons */
524
.menuitem.button.flat {
525
&:selected { @extend %selected_items; }
526
}
527
528
529
GtkColorButton.button {
530
padding: 7px 8px 8px; // Uniform padding on the GtkColorButton
531
532
GtkColorSwatch:first-child:last-child { // :first-child:last-child for a specificity bump, it gets overridden by the
533
// colorpicker style, otherwise
534
border-radius: 2px;
535
box-shadow: $z-depth-1;
536
}
537
}
538
539
/*********
540
* Links *
541
*********/
542
543
*:link {
544
color: $link_color;
545
&:hover, &:active { color: $link_color; }
546
&:visited {
547
color: $link_visited_color;
548
&:hover, &:active { color: $link_visited_color; }
549
*:selected & { color: mix($selected_fg_color, $selected_bg_color, 60%); }
550
}
551
&:selected, *:selected & {
552
color: mix($selected_fg_color, $selected_bg_color, 80%);
553
}
554
}
555
556
.button:link, .button:visited {
557
@extend *:link;
558
& > .label {
559
text-decoration-line: underline;
560
}
561
}
562
563
/*****************
564
* GtkSpinButton *
565
*****************/
566
567
.spinbutton {
568
.button {
569
padding: 4px;
570
border: solid $container_padding transparent;
571
color: $secondary_fg_color;
572
&:hover, &:active { color: $fg_color; }
573
&:insensitive { color: $insensitive_secondary_fg_color; }
574
&:active { // add fallback
575
background-color: gtkalpha(currentColor, $lower_opacity);
576
}
577
@extend %image_button;
578
@extend %simple_flat_button;
579
}
580
.osd & {
581
.button {
582
}
583
}
584
&.vertical { //FIXME: try using linking templates for vertically linked stuff
585
.button {
586
padding-top: 10px; // Same vertical padding as image-buttons
587
padding-bottom: 10px; //
588
border: none;
589
&:first-child {
590
border-radius: 2px 2px 0 0;
591
}
592
&:last-child {
593
border-radius: 0 0 2px 2px;
594
}
595
}
596
&.entry {
597
}
598
}
599
GtkTreeView & {
600
&.entry, &.entry:focus {
601
// padding: 1px;
602
// border-width: 1px 0;
603
// border-color: $selected_bg_color;
604
// border-radius: 0;
605
// box-shadow: none;
606
}
607
}
608
}
609
610
/**************
611
* ComboBoxes *
612
**************/
613
GtkComboBox {
614
> .the-button-in-the-combobox { padding: 5px 6px 6px; } // Otherwise combos
615
// are bigger then
616
// buttons
617
-GtkComboBox-arrow-scaling: 0.5;
618
-GtkComboBox-shadow-type: none;
619
620
.menu { padding: 2px 0; }
621
.menu .menuitem { padding: 5px 6px 6px; }
622
.separator.vertical {
623
// always disable separators
624
-GtkWidget-wide-separators: true;
625
}
626
&.combobox-entry .entry {
627
&:dir(ltr) {
628
border-top-right-radius: 0;
629
border-bottom-right-radius: 0;
630
}
631
&:dir(rtl) {
632
border-top-left-radius: 0;
633
border-bottom-left-radius: 0;
634
}
635
}
636
&.combobox-entry .button {
637
padding: 10px;
638
&:dir(ltr) {
639
border-top-left-radius: 0;
640
border-bottom-left-radius: 0;
641
}
642
&:dir(rtl) {
643
border-top-right-radius: 0;
644
border-bottom-right-radius: 0;
645
}
646
}
647
}
648
649
.linked > GtkComboBox > .the-button-in-the-combobox,
650
.linked > GtkComboBoxText > .the-button-in-the-combobox {
651
// the combo is a composite widget so the way we do button linkind doesn't
652
// work, special case needed. See
653
// https://bugzilla.gnome.org/show_bug.cgi?id=733979
654
&:dir(ltr),
655
&:dir(rtl) { @extend %linked_middle; } // specificity bump
656
}
657
.linked > GtkComboBox:first-child > .the-button-in-the-combobox,
658
.linked > GtkComboBoxText:first-child > .the-button-in-the-combobox {
659
@extend %linked:first-child;
660
}
661
.linked > GtkComboBox:last-child > .the-button-in-the-combobox,
662
.linked > GtkComboBoxText:last-child > .the-button-in-the-combobox {
663
@extend %linked:last-child;
664
}
665
.linked > GtkComboBox:only-child > .the-button-in-the-combobox,
666
.linked > GtkComboBoxText:only-child > .the-button-in-the-combobox {
667
@extend %linked:only-child;
668
}
669
670
.linked.vertical > GtkComboBoxText > .the-button-in-the-combobox,
671
.linked.vertical > GtkComboBox > .the-button-in-the-combobox { @extend %linked_vertical_middle; }
672
.linked.vertical > GtkComboBoxText:first-child > .the-button-in-the-combobox,
673
.linked.vertical > GtkComboBox:first-child > .the-button-in-the-combobox { @extend %linked_vertical:first-child; }
674
.linked.vertical > GtkComboBoxText:last-child > .the-button-in-the-combobox,
675
.linked.vertical > GtkComboBox:last-child > .the-button-in-the-combobox { @extend %linked_vertical:last-child; }
676
.linked.vertical > GtkComboBoxText:only-child > .the-button-in-the-combobox,
677
.linked.vertical > GtkComboBox:only-child > .the-button-in-the-combobox { @extend %linked_vertical:only-child; }
678
679
/************
680
* Toolbars *
681
************/
682
.toolbar {
683
-GtkWidget-window-dragging: true;
684
padding: 4px;
685
background-color: $bg_color;
686
&:not(.search-bar) .button { @extend %button.flat; }
687
.osd &, &.osd {
688
transition: $shadow_image_transition;
689
padding: $container_padding;
690
border-style: solid;
691
border-width: 8px;
692
border-image: -gtk-scaled(url("assets/box-shadow#{$asset_suffix}.png"),
693
url("assets/box-shadow#{$asset_suffix}@2.png"))
694
10 / 10px stretch;
695
border-radius: 2px;
696
// box-shadow: $z-depth-2, inset 0 1px $highlight_color;
697
background-color: $base_color;
698
&:backdrop {
699
border-image: -gtk-scaled(url("assets/box-shadow-backdrop#{$asset_suffix}.png"),
700
url("assets/box-shadow-backdrop#{$asset_suffix}@2.png"))
701
10 / 10px stretch;
702
// box-shadow: $z-depth-1, inset 0 1px $highlight_color;
703
}
704
}
705
}
706
707
//searchbar, location-bar & inline-toolbar
708
.inline-toolbar {
709
padding: $container_padding;
710
border-style: solid;
711
border-width: 0 1px 1px;
712
border-color: $borders_color;
713
background-color: $secondary_base_color;
714
}
715
716
.search-bar, .location-bar {
717
padding: $container_padding;
718
border-style: solid;
719
border-width: 0 0 1px;
720
border-color: $borders_color;
721
background-color: $bg_color;
722
background-clip: border-box;
723
}
724
725
/***************
726
* Header bars *
727
***************/
728
729
.titlebar,
730
.header-bar {
731
transition: background-color $shorter_duration $deceleration_curve;
732
padding: $container_padding;
733
border-radius: 2px 2px 0 0;
734
box-shadow: $z-depth-1, inset 0 1px $topbar_highlight_color;
735
background-color: $headerbar_color;
736
color: $topbar_fg_color;
737
738
&:backdrop {
739
color: $secondary_topbar_fg_color;
740
}
741
742
.title {
743
transition: $longer_transition;
744
padding-left: 12px;
745
padding-right: 12px;
746
font-weight: bold;
747
}
748
749
.subtitle {
750
transition: $longer_transition;
751
@extend .dim-label;
752
padding-left: 12px;
753
padding-right: 12px;
754
font-size: smaller;
755
}
756
757
.header-bar-separator,
758
& > GtkBox > .separator.vertical {
759
-GtkWidget-wide-separators: true;
760
-GtkWidget-separator-width: 1px;
761
border-style: solid;
762
border-width: 0 1px;
763
border-color: $borders_color;
764
}
765
766
& .button:not(.suggested-action):not(.destructive-action) {
767
@extend %button.flat;
768
border-image: -gtk-gradient(radial,
769
center bottom, 0,
770
center bottom, 0.001,
771
to($topbar_indicator_color),
772
to(transparent))
773
0 0 0 / 0 0 0px;
774
&:checked {
775
border-image: -gtk-gradient(radial,
776
center bottom, 0,
777
center bottom, 0.5,
778
to($topbar_indicator_color),
779
to(transparent))
780
0 0 2 / 0 0 2px;
781
&, &:insensitive {
782
background-color: transparent;
783
}
784
}
785
}
786
787
.button.suggested-action, .button.destructive-action {
788
&:insensitive {
789
color: gtkalpha(currentColor, $disabled_opacity);
790
791
> .label { color: inherit; }
792
}
793
}
794
795
&.selection-mode {
796
// transition: background-color $shorter_duration $deceleration_curve;
797
box-shadow: $z-depth-1, inset 0 1px $secondary_highlight_color;
798
background-color: $selected_bg_color;
799
color: $selected_fg_color;
800
&:backdrop {
801
color: $secondary_selected_fg_color;
802
}
803
804
.subtitle:link { @extend *:link:selected; }
805
806
.button {
807
border-image: -gtk-gradient(radial,
808
center bottom, 0,
809
center bottom, 0.001,
810
to($selected_fg_color),
811
to(transparent))
812
0 0 0 / 0 0 0px;
813
color: $secondary_selected_fg_color;
814
&:hover, &:active, &:checked {
815
color: $selected_fg_color;
816
}
817
818
&:insensitive {
819
}
820
821
&:checked {
822
border-image: -gtk-gradient(radial,
823
center bottom, 0,
824
center bottom, 0.5,
825
to($selected_fg_color),
826
to(transparent))
827
0 0 2 / 0 0 2px;
828
color: $selected_fg_color;
829
&:insensitive {
830
color: $insensitive_selected_fg_color;
831
> .label { color: inherit; }
832
}
833
}
834
&.suggested-action {
835
// NOTE: do not use @extend .button;
836
@include button(normal);
837
&:hover { @include button(hover); }
838
&:active { @include button(active); }
839
&:insensitive { @include button(insensitive); }
840
}
841
}
842
843
.selection-menu {
844
padding-left: 16px;
845
padding-right: 16px;
846
847
GtkArrow { -GtkArrow-arrow-scaling: 1; }
848
849
.arrow {
850
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
851
}
852
}
853
}
854
855
.tiled &, .maximized & {
856
border-radius: 0; // squared corners when the window is max'd or tiled
857
box-shadow: none;
858
}
859
860
&.default-decoration {
861
padding: $container_padding;
862
border-width: 0;
863
.button { padding: 4px; }
864
}
865
}
866
867
/************
868
* Pathbars *
869
************/
870
871
.path-bar .button {
872
padding: 7px 6px 8px;
873
874
// the following is for spacing the icon and the label inside the home button
875
.label:last-child { padding-left: 2px; }
876
.label:first-child { padding-right: 2px; }
877
// .label:only-child { padding-right: 0; padding-left: 0; }
878
879
GtkImage { padding-top: 1px; }
880
GtkImage:only-child { padding-right: 4px; padding-left: 4px; }
881
}
882
883
/**************
884
* Tree Views *
885
**************/
886
GtkTreeView.view {
887
-GtkTreeView-grid-line-width: 1;
888
-GtkTreeView-grid-line-pattern: '';
889
-GtkTreeView-tree-line-width: 1;
890
-GtkTreeView-tree-line-pattern: '';
891
-GtkTreeView-expander-size: 16;
892
893
border-left-color: $track_color; // this is actually the tree lines color,
894
border-top-color: $borders_color; // while this is the grid lines color, better then nothing
895
896
&.rubberband { @extend .rubberband; } // to avoid borders being overridden by the previously set props
897
898
border-radius: 0; // rest border radius in lists
899
900
&:hover, &:active, &:selected { border-radius: 0; }
901
902
&.dnd {
903
border-style: solid none;
904
border-width: 1px;
905
border-color: mix($fg_color, $selected_bg_color, 50%);
906
}
907
908
&.expander {
909
-gtk-icon-source: -gtk-icontheme('pan-end-symbolic');
910
&:dir(rtl) { -gtk-icon-source: -gtk-icontheme('pan-end-symbolic-rtl'); }
911
&:checked { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); }
912
&:selected {
913
color: scale-alpha($selected_fg_color, $enabled_opacity);
914
&:hover, &:active { color: $selected_fg_color; }
915
}
916
}
917
918
&.progressbar { // progress bar in treeviews
919
@extend .entry.progressbar;
920
border-width: 4px;
921
&:selected {
922
border-color: currentColor;
923
}
924
}
925
926
&.trough { // progress bar trough in treeviews
927
@extend .entry.progressbar;
928
border-width: 4px;
929
border-color: scale-alpha($selected_bg_color, $lower_opacity);
930
&:selected {
931
border-color: $track_color;
932
}
933
}
934
}
935
936
column-header {
937
.button {
938
@extend .list-row.activatable;
939
padding: 3px 6px 4px;
940
border-style: none solid solid none;
941
border-width: 1px;
942
border-color: $borders_color;
943
border-radius: 0;
944
box-shadow: none;
945
background-color: $base_color;
946
// font-weight: bold;
947
&:hover, &:active {
948
box-shadow: none;
949
}
950
&:insensitive {
951
background-color: $base_color;
952
}
953
&.dnd {
954
@extend column-header.button.dnd;
955
}
956
}
957
&:last-child .button,
958
&:last-child.button { //treeview-like derived widgets in Banshee and Evolution
959
border-right-style: none;
960
}
961
}
962
963
column-header.button.dnd { // for treeview-like derive widgets
964
border-left-style: solid;
965
background-clip: $extra_background_clip;
966
color: $selected_bg_color;
967
}
968
969
970
/*********
971
* Menus *
972
*********/
973
.menubar {
974
-GtkWidget-window-dragging: true;
975
padding: 0;
976
// box-shadow: inset 0 -1px $borders_color;
977
background-color: $headerbar_color;
978
& > .menuitem {
979
transition: $shorter_transition;
980
padding: 4px 8px;
981
color: $secondary_topbar_fg_color;
982
&:hover { //Seems like it :hover even with keyboard focus
983
transition: none;
984
background-color: gtkalpha(currentColor, $lower_opacity / 2);
985
color: $topbar_fg_color;
986
}
987
&:insensitive {
988
color: $insensitive_secondary_topbar_fg_color;
989
box-shadow: none;
990
}
991
}
992
}
993
994
.menu {
995
margin: 4px 0;
996
padding: 4px 0;
997
box-shadow: inset 0 1px $highlight_color;
998
background-color: $base_color;
999
border: 1px solid $borders_color; // adds borders in a non composited env
1000
.csd & {
1001
border: none; // axes borders in a composited env
1002
border-radius: 2px;
1003
}
1004
.menuitem {
1005
transition: $shorter_transition;
1006
padding: 3px 4px 4px;
1007
font: initial;
1008
text-shadow: none;
1009
&:hover {
1010
transition: none;
1011
background-color: gtkalpha(currentColor, $lower_opacity / 2);
1012
}
1013
&:insensitive {
1014
color: $insensitive_fg_color;
1015
}
1016
//submenu indicators
1017
&.arrow { -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); }
1018
&.arrow:dir(rtl) {-gtk-icon-source:-gtk-icontheme('pan-end-symbolic-rtl'); }
1019
}
1020
&.button { // overlow buttons
1021
border-style: none;
1022
border-radius: 0;
1023
box-shadow: none;
1024
&.top { border-bottom: 1px solid $borders_color; }
1025
&.bottom { border-top: 1px solid $borders_color; }
1026
&:hover { background-color: gtkalpha(currentColor, $lower_opacity / 2); }
1027
&:insensitive {
1028
background-color: transparent;
1029
border-color: transparent;
1030
}
1031
}
1032
}
1033
1034
.menuitem .accelerator { color: gtkalpha(currentColor, $hint_opacity); }
1035
1036
.csd.popup { border-radius: 2px; }
1037
1038
1039
/***************
1040
* Popovers *
1041
***************/
1042
1043
.popover {
1044
transition: $shadow_transition;
1045
padding: 2px;
1046
border: 1px solid;
1047
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.3);
1048
border-radius: 2px + 1px;
1049
background-color: $light_color;
1050
box-shadow: $z-depth-2; // TODO: this should really have a highlight
1051
&:backdrop { box-shadow: $z-depth-1; }
1052
1053
> .list,
1054
> .view,
1055
> .toolbar,
1056
&.osd > .toolbar {
1057
border-style: none;
1058
border-image: none;
1059
background-color: transparent;
1060
}
1061
1062
.button.flat {
1063
padding: 5px 8px 6px;
1064
background-color: transparent;
1065
background-size: (128px / 0.8) (128px / 0.8), auto;
1066
color: $fg_color;
1067
font: initial;
1068
}
1069
1070
.linked > .button {
1071
border-radius: 2px;
1072
@extend %simple_flat_button;
1073
&:checked {
1074
background-color: $selected_bg_color;
1075
color: $selected_fg_color;
1076
}
1077
&.image-button {
1078
padding: 8px;
1079
background-size: ($medium_size * 2 / 0.8) ($medium_size * 2 / 0.8), auto;
1080
}
1081
}
1082
1083
&.osd { @extend %osd; }
1084
}
1085
1086
/*****************
1087
* Notebooks and *
1088
* Tabs *
1089
*****************/
1090
1091
.notebook {
1092
// Through me you go to the grief wracked city;
1093
// Through me you go to everlasting pain;
1094
// Through me you go a pass among lost souls.
1095
// ...
1096
// Abandon all hope — Ye Who Enter Here
1097
padding: 0;
1098
background-color: $base_color;
1099
-GtkNotebook-initial-gap: 8;
1100
-GtkNotebook-arrow-spacing: 5;
1101
-GtkNotebook-tab-curvature: 0;
1102
-GtkNotebook-tab-overlap: 1;
1103
-GtkNotebook-has-tab-gap: false;
1104
-GtkWidget-focus-padding: 0;
1105
-GtkWidget-focus-line-width: 0;
1106
&.frame {
1107
border: 1px solid $borders_color;
1108
// FIXME doesn't work
1109
&.top { border-top-width: 0; }
1110
&.bottom { border-bottom-width: 0; }
1111
&.right { border-right-width: 0; }
1112
&.left { border-left-width: 0; }
1113
}
1114
&.header {
1115
// FIXME: double borders in some case, can't fix it w/o a class tho
1116
// FIXME: doesn't work on dark var
1117
background-color: $bg_color;
1118
1119
// this is the shading of the header behind the tabs
1120
&.frame {
1121
border: 1px solid $borders_color;
1122
&.top { border-bottom-width: 0; }
1123
&.bottom { border-top-width: 0; }
1124
&.right { border-left-width: 0; }
1125
&.left { border-right-width: 0; }
1126
}
1127
1128
&.top {
1129
box-shadow: inset 0 -1px $borders_color; // border
1130
}
1131
&.bottom {
1132
box-shadow: inset 0 1px $borders_color;
1133
}
1134
&.right {
1135
box-shadow: inset 1px 0 $borders_color;
1136
}
1137
&.left {
1138
box-shadow: inset -1px 0 $borders_color;
1139
}
1140
}
1141
tab {
1142
border-width: 0;
1143
border-style: solid;
1144
border-color: transparent;
1145
background-color: transparent;
1146
1147
outline-offset: 0;
1148
1149
$tab_indicator_size: 2px;
1150
// vertical tab sizing
1151
$vt_vpadding: 8px;
1152
$vt_hpadding: 12px;
1153
// horizontal tab sizing
1154
$ht_vpadding: 8px;
1155
$ht_hpadding: 12px;
1156
1157
//FIXME: we get double border in some cases, not considering the broken
1158
//notebook content frame...
1159
&.top, &.bottom { padding: $vt_vpadding $vt_hpadding; }
1160
&.left, &.right { padding: $ht_vpadding $ht_hpadding; }
1161
1162
1163
/* works for testnotebookdnd, but there's a superfluous border
1164
in gedit or web, commented out for now, needs gtk fixes
1165
&.reorderable-page {
1166
&.top {
1167
padding-top: ($vt_vpadding - 1px);
1168
border-top-width: 1px;
1169
border-left-width: 1px;
1170
border-right-width: 1px;
1171
}
1172
&.bottom {
1173
padding-bottom: ($vt_vpadding - 1px);
1174
border-bottom-width: 1px;
1175
border-left-width: 1px;
1176
border-right-width: 1px;
1177
}
1178
&.left {
1179
padding-left: ($ht_hpadding - 1px);
1180
border-left-width: 1px;
1181
border-top-width: 1px;
1182
border-bottom-width: 1px;
1183
}
1184
&.right {
1185
padding-right: ($ht_hpadding - 1px);
1186
border-right-width: 1px;
1187
border-top-width: 1px;
1188
border-bottom-width: 1px;
1189
}
1190
}
1191
*/
1192
&.reorderable-page {
1193
-GtkNotebook-tab-overlap: 1;
1194
&.top, &.bottom {
1195
padding-left: 12px; // for a nicer close button
1196
padding-right: 12px; // placement
1197
border-left-width: 1px;
1198
border-right-width: 1px;
1199
}
1200
&.left, &.right {
1201
border-bottom-width: 1px;
1202
border-top-width: 1px;
1203
}
1204
}
1205
&.top {
1206
&:hover, &.prelight-page { box-shadow: inset 0 -2px $track_color; }
1207
&:active, &.active-page { box-shadow: inset 0 -2px $selected_bg_color; }
1208
}
1209
&.bottom {
1210
&:hover, &.prelight-page { box-shadow: inset 0 2px $track_color; }
1211
&:active, &.active-page { box-shadow: inset 0 2px $selected_bg_color; }
1212
}
1213
&.left {
1214
&:hover, &.prelight-page { box-shadow: inset -2px 0 $track_color; }
1215
&:active, &.active-page { box-shadow: inset -2px 0 $selected_bg_color; }
1216
}
1217
&.right {
1218
&:hover, &.prelight-page { box-shadow: inset 2px 0 $track_color; }
1219
&:active, &.active-page { box-shadow: inset 2px 0 $selected_bg_color; }
1220
}
1221
@each $_tab, $_border in (top, bottom),
1222
(bottom, top),
1223
(left, right),
1224
(right, left) {
1225
&.reorderable-page.#{$_tab} {
1226
border-color: transparent;
1227
&:hover, &.prelight-page {
1228
border-color: $borders_color;
1229
border-#{$_border}-width: 0;
1230
border-#{$_border}-color: transparent;
1231
background-color: $secondary_base_color;
1232
}
1233
&:active, &.active-page {
1234
border-color: $borders_color;
1235
border-#{$_border}-width: 0;
1236
border-#{$_border}-color: transparent;
1237
background-color: $base_color;
1238
}
1239
}
1240
}
1241
.label { //tab text
1242
padding: 0 2px; // needed for a nicer focus ring
1243
font-weight: 500;
1244
color: $secondary_fg_color;
1245
}
1246
.prelight-page .label, .label.prelight-page {
1247
// prelight tab text
1248
color: $fg_color;
1249
}
1250
.active-page .label, .label.active-page {
1251
// active tab text
1252
color: $fg_color;
1253
}
1254
.button { //tab close button
1255
padding: 0;
1256
@extend %image_button;
1257
background-size: ($small_size / 0.8) ($small_size / 0.8), auto;
1258
@extend %simple_flat_button;
1259
& > GtkImage { // this is a hack which makes tabs grow
1260
padding: 4px;
1261
}
1262
}
1263
}
1264
&.arrow {
1265
&:not(:hover):not(:active) { color: gtkalpha(currentColor, $enabled_opacity); }
1266
&:insensitive {
1267
color: $insensitive_fg_color;
1268
}
1269
}
1270
GtkGrid > .entry {
1271
@extend .entry.flat;
1272
}
1273
}
1274
1275
/**************
1276
* Scrollbars *
1277
**************/
1278
1279
$_slider_margin: 4px;
1280
$_slider_fine_tune_margin: 6px;
1281
1282
.scrollbar {
1283
-GtkRange-slider-width: 8 + $_slider_margin * 2 + 1;
1284
-GtkRange-trough-border: 0;
1285
-GtkScrollbar-has-backward-stepper: false;
1286
-GtkScrollbar-has-forward-stepper: false;
1287
-GtkScrollbar-min-slider-length: 24 + $_slider_margin * 2;
1288
// minimum size for the slider.
1289
// sadly can't be in '.slider'
1290
// where it belongs
1291
-GtkRange-stepper-spacing: 0;
1292
-GtkRange-trough-under-steppers: 1;
1293
1294
.button {
1295
border: none;
1296
}
1297
1298
&.overlay-indicator {
1299
&:not(.dragging):not(.hovering) { // Overlay scrolling indicator
1300
-GtkRange-slider-width: 4 + $_slider_margin * 2;
1301
1302
.slider {
1303
margin: $_slider_margin - 1px;
1304
border: 1px solid scale-alpha($base_color, $lower_opacity);
1305
// background-clip: padding-box;
1306
}
1307
1308
.trough {
1309
border-style: none;
1310
background-color: transparent;
1311
}
1312
1313
}
1314
1315
&.dragging,
1316
&.hovering {
1317
.trough {
1318
background-color: scale-alpha($base_color, $higher_opacity);
1319
}
1320
}
1321
}
1322
1323
// trough coloring
1324
.trough {
1325
border: 1px none $borders_color;
1326
background-color: $base_color;
1327
background-clip: $extra_background_clip;
1328
}
1329
1330
// slider coloring
1331
.slider {
1332
background-color: $tertiary_fg_color;
1333
&:hover { background-color: $secondary_fg_color; }
1334
&:active { background-color: $fg_color; }
1335
&:insensitive {
1336
opacity: $disabled_opacity;
1337
}
1338
}
1339
1340
1341
// sizing
1342
.slider {
1343
border-radius: 100px;
1344
margin: $_slider_margin;
1345
}
1346
1347
&.fine-tune .slider { margin: $_slider_fine_tune_margin; }
1348
1349
&.vertical {
1350
1351
.slider {
1352
margin-left: 1px + $_slider_margin;
1353
1354
&:dir(rtl) {
1355
margin-left: $_slider_margin;
1356
margin-right: 1px + $_slider_margin;
1357
}
1358
}
1359
1360
&.fine-tune .slider {
1361
margin-left: 1px + $_slider_fine_tune_margin;
1362
1363
&:dir(rtl) {
1364
margin-left: $_slider_fine_tune_margin;
1365
margin-right: 1px + $_slider_fine_tune_margin;
1366
}
1367
}
1368
1369
.trough {
1370
border-left-style: solid;
1371
1372
&:dir(rtl) {
1373
border-left-style: none;
1374
border-right-style: solid;
1375
}
1376
}
1377
}
1378
1379
&.horizontal {
1380
1381
.slider { margin-top: 1px + $_slider_margin; }
1382
1383
&.fine-tune .slider { margin-top: 1px + $_slider_fine_tune_margin; }
1384
1385
.trough { border-top-style: solid; }
1386
}
1387
}
1388
1389
.scrollbars-junction,
1390
.scrollbars-junction.frame { // the small square between two scrollbars
1391
border-style: solid none none solid;
1392
background-color: $base_color;
1393
1394
&:dir(rtl) { border-style: solid solid none none; }
1395
}
1396
1397
1398
/**********
1399
* Switch *
1400
**********/
1401
1402
GtkSwitch {
1403
-GtkSwitch-slider-width: $small_size;
1404
-GtkSwitch-slider-height: $small_size;
1405
1406
outline-offset: -4px;
1407
outline-radius: 100px;
1408
font-size: 0;
1409
&.trough {
1410
// similar to the .scale
1411
border: 8px solid transparent;
1412
border-radius: 100px;
1413
background-color: $track_color;
1414
// background-clip: padding-box;
1415
&:insensitive {
1416
color: gtkalpha(currentColor, $disabled_opacity);
1417
}
1418
&:active {
1419
background-color: scale-alpha($accent_bg_color, 0.5);
1420
&:insensitive {
1421
background-color: scale-alpha($accent_bg_color, 0.5 * $disabled_opacity);
1422
}
1423
}
1424
}
1425
&.slider {
1426
padding: 4px;
1427
border-radius: 100px;
1428
@include entry(normal);
1429
&:hover { @include entry(focus); }
1430
&:active { background-color: $accent_bg_color; }
1431
&:insensitive { @include entry(insensitive); }
1432
}
1433
.list-row:selected & {
1434
}
1435
1436
}
1437
1438
/*************************
1439
* Check and Radio items *
1440
*************************/
1441
1442
// draw regular check and radio items using our PNG assets
1443
// all assets are rendered from assets.svg. never add pngs directly
1444
1445
@each $w,$a in ('check', 'checkbox'),
1446
('radio', 'radio') {
1447
1448
//standard checks and radios
1449
@each $s,$as in ('', '-unchecked'),
1450
(':hover', '-unchecked-hover'),
1451
(':active', '-unchecked-active'),
1452
(':insensitive', '-unchecked-disabled'),
1453
(':inconsistent', '-mixed'),
1454
(':inconsistent:hover', '-mixed-hover'),
1455
(':inconsistent:active', '-mixed-active'),
1456
(':inconsistent:insensitive', '-mixed-disabled'),
1457
(':checked', '-checked'),
1458
(':checked:hover', '-checked-hover'),
1459
(':checked:active', '-checked-active'),
1460
(':checked:insensitive', '-checked-disabled') {
1461
.#{$w}#{$s} {
1462
-gtk-icon-source: -gtk-scaled(url("assets/#{$a}#{$as}#{$asset_suffix}.png"),
1463
url("assets/#{$a}#{$as}#{$asset_suffix}@2.png"));
1464
&.button.flat {}
1465
}
1466
}
1467
1468
//menu
1469
@each $s,$as in ('', '-unchecked'),
1470
(':insensitive', '-unchecked-disabled'),
1471
(':inconsistent', '-mixed'),
1472
(':inconsistent:insensitive', '-mixed-disabled'),
1473
(':checked', '-checked'),
1474
(':checked:insensitive', '-checked-disabled') {
1475
.menu .menuitem.#{$w}#{$s} {
1476
// color: gtkalpha(currentColor, $hint_opacity);
1477
// -gtk-icon-source: -gtk-icontheme('#{$a}-symbolic');
1478
// &:active, &:checked { -gtk-icon-source: -gtk-icontheme('#{$a}-checked-symbolic'); }
1479
// &:inconsistent { -gtk-icon-source: -gtk-icontheme('#{$a}-mixed-symbolic'); }
1480
-gtk-icon-source: -gtk-scaled(url("assets/menu-#{$a}#{$as}#{$asset_suffix}.png"),
1481
url("assets/menu-#{$a}#{$as}#{$asset_suffix}@2.png"));
1482
}
1483
}
1484
}
1485
1486
//treeview and list-rows
1487
.view.check, .view.radio,
1488
.list-row .check, list-row .radio {
1489
}
1490
1491
//selection-mode
1492
@each $s,$as in ('', '-unchecked'),
1493
(':checked', '-checked') {
1494
.view.content-view.check#{$s}:not(.list) {
1495
-gtk-icon-source: -gtk-scaled(url("assets/selectionmode-checkbox#{$as}#{$asset_suffix}.png"),
1496
url("assets/selectionmode-checkbox#{$as}#{$asset_suffix}@2.png"));
1497
background-color: transparent;
1498
icon-shadow: $z-depth-1;
1499
&:hover, &:active { icon-shadow: $z-depth-2; }
1500
// &:insensitive { icon-shadow: none; }
1501
}
1502
}
1503
1504
GtkCheckButton.text-button, GtkRadioButton.text-button {
1505
// this is for a nice focus on check and radios text
1506
padding: 2px 4px;
1507
outline-offset: 0;
1508
&:insensitive,
1509
&:insensitive:active,
1510
&:insensitive:inconsistent {
1511
// set insensitive color, which is overriden otherwise
1512
// color: $insensitive_fg_color;
1513
}
1514
}
1515
1516
/************
1517
* GtkScale *
1518
************/
1519
.scale,
1520
.scale.scale-has-marks-above.scale-has-marks-below,
1521
.scale.vertical.scale-has-marks-above.scale-has-marks-below {
1522
// FIXME: rationalize
1523
-GtkScale-slider-length: 20;
1524
-GtkRange-slider-width: 20;
1525
-GtkRange-trough-border: 2;
1526
outline-offset: -8px;
1527
outline-radius: 100px;
1528
1529
&.fine-tune {
1530
&.slider { background-size: 80%; }
1531
}
1532
1533
&.slider {
1534
// @include entry(normal);
1535
// border-radius: 50%;
1536
// background-color: $accent_bg_color;
1537
@each $s,$as in ('', ''),
1538
(':insensitive', '-disabled') {
1539
&.slider#{$s} {
1540
$_url: 'assets/scale-slider#{$as}#{$asset_suffix}';
1541
border-style: none;
1542
border-radius: 0;
1543
background-color: transparent;
1544
background-image: -gtk-scaled(url('#{$_url}.png'),
1545
url('#{$_url}@2.png'));
1546
background-repeat: no-repeat;
1547
background-position: center;
1548
background-size: 80%;
1549
box-shadow: none;
1550
}
1551
}
1552
&:hover, &:active { background-size: 100%; }
1553
&:hover {
1554
// @include entry(focus);
1555
// border-radius: 50%; // needed for double marks scales
1556
}
1557
&:insensitive {
1558
// @include entry(insensitive);
1559
// border-radius: 50%; // overridden
1560
}
1561
//OSD sliders
1562
.osd & {
1563
}
1564
}
1565
&.trough {
1566
margin: 10px 12px;
1567
background-color: $track_color;
1568
&.highlight {
1569
background-color: $accent_bg_color;
1570
&:insensitive { background-color: $track_color; }
1571
}
1572
&:insensitive { color: $insensitive_fg_color; }
1573
&.vertical { margin: 12px 10px; }
1574
//OSD troughs
1575
.osd & {
1576
}
1577
}
1578
// marks color
1579
&.separator {
1580
color: $track_color;
1581
}
1582
// scales on selected list rows
1583
.list-row:selected & {
1584
}
1585
}
1586
1587
@each $d,$dn in ('', 'horz'),
1588
('.vertical', 'vert') {
1589
@each $w,$we in ('scale-has-marks-below', 'marks-after'),
1590
('scale-has-marks-above', 'marks-before') {
1591
.scale#{$d}.#{$w} {
1592
-GtkScale-slider-length: 20;
1593
-GtkRange-slider-width: 25;
1594
-GtkRange-trough-border: 2;
1595
1596
@extend %#{$we}-#{$dn};
1597
1598
@each $s,$as in ('', ''),
1599
(':insensitive', '-disabled') {
1600
&.slider#{$s} {
1601
$_url: 'assets/scale-#{$dn}-#{$we}-slider#{$as}#{$asset_suffix}';
1602
border-style: none;
1603
border-radius: 0;
1604
background-color: transparent;
1605
background-image: -gtk-scaled(url('#{$_url}.png'),
1606
url('#{$_url}@2.png'));
1607
background-repeat: no-repeat;
1608
background-position: center;
1609
box-shadow: none;
1610
}
1611
}
1612
}
1613
}
1614
}
1615
1616
%marks-before-horz {
1617
.trough { margin: 15px 12px 10px; }
1618
}
1619
%marks-after-horz {
1620
.trough { margin: 10px 12px 15px; }
1621
}
1622
%marks-before-vert {
1623
.trough { margin: 12px 10px 12px 15px; }
1624
}
1625
%marks-after-vert {
1626
.trough { margin: 12px 15px 12px 10px; }
1627
}
1628
1629
/*****************
1630
* Progress bars *
1631
*****************/
1632
1633
GtkProgressBar {
1634
-GtkProgressBar-min-horizontal-bar-height: 4;
1635
-GtkProgressBar-min-vertical-bar-width: 4;
1636
padding: 0;
1637
font-size: smaller;
1638
color: $tertiary_fg_color;
1639
&.osd {
1640
-GtkProgressBar-xspacing: 0;
1641
-GtkProgressBar-yspacing: 0;
1642
-GtkProgressBar-min-horizontal-bar-height: 4;
1643
}
1644
&.trough { // background
1645
border-radius: 0;
1646
background-color: scale-alpha($selected_bg_color, $lower_opacity);
1647
&.osd {
1648
border-style: none;
1649
box-shadow: none;
1650
// background-color: transparent;
1651
}
1652
}
1653
}
1654
1655
// moving bit
1656
.progressbar {
1657
border-radius: 0;
1658
background-color: $selected_bg_color;
1659
&.left {
1660
border-top-left-radius: 0;
1661
border-bottom-left-radius: 0;
1662
}
1663
&.right {
1664
border-top-right-radius: 0;
1665
border-bottom-right-radius: 0;
1666
}
1667
&.left.right {
1668
box-shadow: none;
1669
}
1670
&.vertical {
1671
&.bottom {
1672
border-bottom-left-radius: 0;
1673
border-bottom-right-radius: 0;
1674
box-shadow: none;
1675
}
1676
&.top {
1677
border-top-left-radius: 0;
1678
border-top-right-radius: 0;
1679
}
1680
}
1681
&.osd {
1682
background-image: none;
1683
background-color: $selected_bg_color;
1684
border-style: none;
1685
border-radius: 0;
1686
}
1687
}
1688
1689
1690
/*************
1691
* Level Bar *
1692
*************/
1693
1694
.level-bar {
1695
box-shadow: $z-depth-1; // needs to be set here to avoid clipping
1696
color: $insensitive_fg_color;
1697
-GtkLevelBar-min-block-width: 36;
1698
-GtkLevelBar-min-block-height: 4;
1699
&.vertical {
1700
-GtkLevelBar-min-block-width: 4;
1701
-GtkLevelBar-min-block-height: 36;
1702
}
1703
&.trough {
1704
padding: 2px;
1705
border-radius: 2px;
1706
@include entry(normal);
1707
&:insensitive { @include entry(insensitive); }
1708
&.indicator-discrete {
1709
&.horizontal { padding: 2px 1px; }
1710
&.vertical { padding: 1px 2px; }
1711
}
1712
}
1713
&.fill-block {
1714
// FIXME: it would be nice to set make fill blocks bigger, but we'd need
1715
// :nth-child working on discrete indicators
1716
background-color: $selected_bg_color;
1717
border-radius: 0;
1718
box-shadow: none;
1719
&.indicator-discrete {
1720
&.horizontal { margin: 0 1px; }
1721
&.vertical { margin: 1px 0; }
1722
}
1723
&.level-high {
1724
background-color: $success_color;
1725
}
1726
&.level-low {
1727
background-color: $warning_color;
1728
}
1729
&.empty-fill-block {
1730
background-color: $track_color;
1731
}
1732
}
1733
}
1734
1735
1736
/**********
1737
* Frames *
1738
**********/
1739
.frame {
1740
border: 1px solid $borders_color;
1741
&.flat { border-style: none; }
1742
padding: 0;
1743
&.action-bar {
1744
padding: $container_padding;
1745
border-width: 1px 0 0;
1746
.button:not(.suggested-action):not(.destructive-action) { @extend %button.flat; }
1747
}
1748
}
1749
1750
GtkScrolledWindow {
1751
GtkViewport.frame { // avoid double borders when viewport inside
1752
// scrolled window
1753
border-style: none;
1754
}
1755
}
1756
1757
//vbox and hbox separators
1758
.separator {
1759
// always disable separators
1760
// -GtkWidget-wide-separators: true;
1761
color: $borders_color;
1762
1763
// Font and File button separators
1764
GtkFileChooserButton &.vertical,
1765
GtkFontButton &.vertical {
1766
// always disable separators
1767
-GtkWidget-wide-separators: true;
1768
}
1769
}
1770
1771
/*********
1772
* Lists *
1773
*********/
1774
1775
.list {
1776
border-color: $borders_color;
1777
background-color: $base_color;
1778
}
1779
1780
.list-row,
1781
.grid-child {
1782
padding: 2px;
1783
}
1784
1785
// FIXME
1786
$row_transition: $longer_transition, background-color 0, color 0;
1787
1788
.list-row.activatable {
1789
transition: $row_transition;
1790
box-shadow: inset 0 0 0 10000px gtkalpha(currentColor, 0);
1791
background-image: -gtk-gradient(radial,
1792
center center, 0,
1793
center center, 0.5,
1794
to(gtkalpha(currentColor, 0)),
1795
to(transparent)),
1796
linear-gradient(to bottom, gtkalpha(currentColor, 0));
1797
background-repeat: no-repeat;
1798
background-position: center, center;
1799
background-size: (192px / 0.8) (192px / 0.8), auto;
1800
&:hover {
1801
transition: $row_transition, box-shadow 0;
1802
box-shadow: inset 0 0 0 10000px gtkalpha(currentColor, 0.05);
1803
}
1804
&:active {
1805
transition: $row_transition, background-image 0;
1806
animation: list_ripple_effect $longer_duration $deceleration_curve forwards;
1807
box-shadow: inset 0 0 0 10000px gtkalpha(currentColor, $lower_opacity / 2);
1808
}
1809
}
1810
1811
.list-row:selected {
1812
@extend %selected_items;
1813
.button {
1814
&:insensitive { color: $insensitive_secondary_selected_fg_color; }
1815
&.flat {
1816
color: $secondary_selected_fg_color;
1817
&:hover, &:active { color: $selected_fg_color; }
1818
&:insensitive { color: $insensitive_secondary_selected_fg_color; }
1819
}
1820
}
1821
}
1822
1823
// transition
1824
.list-row {
1825
// &:hover { transition-duration: 0; }
1826
}
1827
1828
1829
/*********************
1830
* App Notifications *
1831
*********************/
1832
1833
.app-notification,
1834
.app-notification.frame {
1835
@extend %osd;
1836
@extend .toolbar.osd;
1837
.button { @extend %button.flat; }
1838
}
1839
1840
/*************
1841
* Expanders *
1842
*************/
1843
1844
.expander {
1845
-gtk-icon-source: -gtk-icontheme('pan-end-symbolic');
1846
&:dir(rtl) { -gtk-icon-source: -gtk-icontheme('pan-end-symbolic-rtl'); }
1847
&:checked { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); }
1848
&:not(:hover):not(:active) { color: gtkalpha(currentColor, $enabled_opacity); }
1849
&:selected { color: $selected_fg_color; }
1850
}
1851
1852
/************
1853
* Calendar *
1854
***********/
1855
GtkCalendar {
1856
padding: 1px;
1857
border: 1px solid $borders_color;
1858
color: $fg_color;
1859
1860
&:insensitive { color: $insensitive_fg_color; }
1861
1862
&:selected {
1863
@extend .view:selected;
1864
1865
border-radius: 2px + 1px;
1866
}
1867
1868
&.header {
1869
border-style: none none solid;
1870
border-radius: 0;
1871
}
1872
1873
&.button {
1874
@extend %simple_flat_button;
1875
}
1876
1877
&:inconsistent { color: gtkalpha(currentColor, $disabled_opacity); }
1878
&.highlight {
1879
font-size: smaller;
1880
color: gtkalpha(currentColor, $hint_opacity);
1881
}
1882
}
1883
1884
/***********
1885
* Dialogs *
1886
***********/
1887
1888
.message-dialog .dialog-action-area .button {
1889
padding: 8px;
1890
}
1891
1892
.message-dialog { // Message Dialog styling
1893
&.background { background-color: $light_color; }
1894
.titlebar {
1895
border-style: none;
1896
box-shadow: inset 0 1px $highlight_color;
1897
background-color: $light_color;
1898
}
1899
&.csd { // rounded bottom border styling for csd version
1900
&.background {
1901
// bigger radius for better antialiasing
1902
border-bottom-left-radius: 2px;
1903
border-bottom-right-radius: 2px;
1904
}
1905
.dialog-action-area .button {
1906
@extend %simple_flat_button;
1907
padding: 9px 16px 10px;
1908
border-top: 1px solid $borders_color;
1909
border-radius: 0;
1910
background-size: (192px / 0.8) (192px / 0.8), auto;
1911
// &:first-child{ border-bottom-left-radius: 2px; }
1912
// &:last-child { border-bottom-right-radius: 2px; }
1913
&:first-child{ border-radius: 0 0 0 2px; }
1914
&:last-child { border-radius: 0 0 2px 0; }
1915
}
1916
}
1917
}
1918
1919
GtkFileChooserDialog {
1920
.search-bar {
1921
// background-color: $base_color;
1922
// border-color: $bg_color;
1923
}
1924
.dialog-action-box {
1925
border-top: 1px solid $borders_color;
1926
}
1927
}
1928
1929
/***********
1930
* Sidebar *
1931
***********/
1932
1933
.sidebar {
1934
border: none;
1935
background-color: $light_color;
1936
1937
&:selected {
1938
@extend %selected_items;
1939
}
1940
}
1941
1942
GtkSidebarRow {
1943
// Needs overriding of the GtkListBoxRow padding
1944
&.list-row {
1945
padding: 0px;
1946
}
1947
// Using margins/padding directly in the SidebarRow
1948
// will make the animation of the new bookmark row jump
1949
.sidebar-revealer {
1950
padding: 4px 14px 4px 12px;
1951
}
1952
.sidebar-icon {
1953
opacity: $hint_opacity; // dim the device icons
1954
&:dir(ltr) { padding-right: 8px; }
1955
&:dir(rtl) { padding-left: 8px; }
1956
}
1957
.sidebar-label {
1958
&:dir(ltr) { padding-right: 2px; }
1959
&:dir(rtl) { padding-left: 2px; }
1960
}
1961
}
1962
1963
GtkPlacesSidebar.sidebar {
1964
// looks like the label doesn't get all the states so work around
1965
.list-row:selected:insensitive .label { @extend %selected_items:insensitive; }
1966
1967
.sidebar-placeholder-row {
1968
border: solid 1px $selected_bg_color;
1969
}
1970
1971
.sidebar-new-bookmark-row {
1972
color: $accent_bg_color;
1973
}
1974
1975
@at-root .sidebar-button.button { // @at-root needded to not change the specificity making button styling inheritance broken
1976
// so istead of "GtkPlacesSidebar.sidebar .sidebar-button.button" [specificity 0,0,3,1]
1977
// the extended selector ".sidebar-button.button" [specificity 0,0,2,0]
1978
1979
&.image-button { padding: 4px; }
1980
1981
@extend %simple_flat_button;
1982
}
1983
// this is for indicating which sidebar row generated a popover
1984
// see https://bugzilla.gnome.org/show_bug.cgi?id=754411
1985
.has-open-popup { @extend .list-row.activatable:active; }
1986
}
1987
1988
.sidebar-item {
1989
padding: 10px 4px;
1990
> .label {
1991
padding-left: 6px;
1992
padding-right: 6px;
1993
}
1994
&.needs-attention > .label {
1995
@extend %needs_attention;
1996
}
1997
}
1998
1999
/*********
2000
* Paned *
2001
*********/
2002
2003
GtkPaned { // this is for the standard paned separator
2004
2005
-GtkPaned-handle-size: 1; // sets separator width
2006
2007
-gtk-icon-source: none; // removes handle decoration
2008
margin: 0 8px 8px 0; // drag area of the separator, not a real margin
2009
&:dir(rtl) {
2010
margin-right: 0;
2011
margin-left: 8px;
2012
}
2013
.pane-separator {
2014
background-color: $borders_color;
2015
}
2016
}
2017
2018
GtkPaned.wide { // this is for the paned with wide separator
2019
-GtkPaned-handle-size: 6; // wider separator here
2020
margin: 0; // no need of the invisible drag area so, reset margin
2021
.pane-separator {
2022
background-color: transparent;
2023
border-style: none solid;
2024
border-color: $borders_color;
2025
border-width: 1px;
2026
}
2027
&.vertical .pane-separator { border-style: solid none;}
2028
}
2029
2030
2031
/**************
2032
* GtkInfoBar *
2033
**************/
2034
GtkInfoBar {
2035
border-style: none;
2036
}
2037
2038
.info {
2039
background-color: $info_bg_color;
2040
}
2041
2042
.question {
2043
background-color: $question_bg_color;
2044
}
2045
2046
.warning {
2047
background-color: $warning_bg_color;
2048
}
2049
2050
.error {
2051
background-color: $error_bg_color;
2052
}
2053
2054
.info,
2055
.question,
2056
.warning,
2057
.error {
2058
color: $selected_fg_color;
2059
.button {
2060
// @extend .list-row:selected.button;
2061
&:insensitive { color: $insensitive_secondary_selected_fg_color; }
2062
}
2063
.label:selected {
2064
}
2065
}
2066
2067
/************
2068
* Tooltips *
2069
************/
2070
2071
.tooltip {
2072
&.background {
2073
// background-color needs to be set this way otherwise it gets drawn twice
2074
// see https://bugzilla.gnome.org/show_bug.cgi?id=736155 for details.
2075
box-shadow: inset 0 1px $highlight_color;
2076
background-color: scale-alpha($base_color, $higher_opacity);
2077
}
2078
2079
// @extend %osd;
2080
color: $fg_color;
2081
padding: 4px; /* not working */
2082
border-radius: 2px;
2083
box-shadow: none; // otherwise it gets inherited by windowframe.csd
2084
// FIXME: we need a border or tooltips vanish on black background.
2085
&.window-frame.csd {
2086
background-color: transparent;
2087
}
2088
}
2089
2090
.tooltip * { //Yeah this is ugly
2091
padding: 4px;
2092
background-color: transparent;
2093
color: inherit; // just to be sure
2094
}
2095
2096
/*****************
2097
* Color Chooser *
2098
*****************/
2099
2100
GtkColorSwatch {
2101
// This widget is made of two boxes one on top of the other, the lower box is GtkColorSwatch {} the other one
2102
// is GtkColorSwatch > .overlay {}, GtkColorSwatch has the programmatically set background, so most of the style
2103
// is applied to the overlay box.
2104
2105
transition: $shadow_transition;
2106
box-shadow: $z-depth-1;
2107
2108
// we need to re-set the shadow here since it get axed by the previous bit
2109
&:selected { }
2110
2111
// base color corners rounding
2112
// to avoid the artifacts caused by rounded corner anti-aliasing the base color
2113
// sports a bigger radius.
2114
// nth-child is needed by the custom color strip.
2115
// The :not() madness is needed since actually the overlay is selectable by GtkColorSwatch > .overlay
2116
// and GtkColorSwatch.overlay, I know it's weird, but this is gtk+, not a browser.
2117
&.top {
2118
border-top-left-radius: 2px;
2119
border-top-right-radius: 2px;
2120
}
2121
&.bottom {
2122
border-bottom-left-radius: 2px;
2123
border-bottom-right-radius: 2px;
2124
}
2125
&.left, &:first-child:not(.overlay):not(.top) {
2126
border-top-left-radius: 2px;
2127
border-bottom-left-radius: 2px;
2128
}
2129
&.right, &:last-child:not(.overlay):not(.bottom) {
2130
border-top-right-radius: 2px;
2131
border-bottom-right-radius: 2px;
2132
}
2133
&:only-child:not(.overlay) { border-radius: 2px; }
2134
2135
// overlay corner rounding
2136
&.top > .overlay {
2137
border-top-left-radius: 2px;
2138
border-top-right-radius: 2px;
2139
}
2140
&.bottom > .overlay {
2141
border-bottom-left-radius: 2px;
2142
border-bottom-right-radius: 2px;
2143
}
2144
&:first-child:not(.top) > .overlay {
2145
border-top-left-radius: 2px;
2146
border-bottom-left-radius: 2px;
2147
}
2148
&:last-child:not(.bottom) > .overlay {
2149
border-top-right-radius: 2px;
2150
border-bottom-right-radius: 2px;
2151
}
2152
&:only-child > .overlay { border-radius: 2px; }
2153
2154
// hover effect
2155
&:hover { box-shadow: $z-depth-2; }
2156
2157
// no hover effect for the colorswatch in the color editor
2158
GtkColorEditor & {
2159
border-radius: 2px; // same radius as the entry
2160
&:hover { box-shadow: $z-depth-1; }
2161
}
2162
2163
// indicator and keynav outline colors
2164
&.color-dark {
2165
color: white;
2166
}
2167
&.color-light {
2168
color: scale-alpha(black, 0.8);
2169
}
2170
2171
// border color
2172
&.overlay,
2173
&.overlay:selected {
2174
}
2175
2176
// make the add color button looks like, well, a button
2177
&#add-color-button {
2178
background-image: linear-gradient(to right,
2179
$error_bg_color 25%,
2180
$warning_bg_color 25%, $warning_bg_color 50%,
2181
$info_bg_color 50%, $info_bg_color 75%,
2182
$question_bg_color 75%);
2183
color: white;
2184
}
2185
}
2186
2187
2188
/********
2189
* Misc *
2190
********/
2191
2192
//content view (grid/list)
2193
.content-view {
2194
background-color: $bg_color;
2195
// &:hover { -gtk-image-effect: highlight; }
2196
&.rubberband { @extend .rubberband; }
2197
}
2198
2199
.scale-popup {
2200
2201
.osd & { @extend %osd; }
2202
2203
.osd & .button.flat { //FIXME: quick hack, redo properly
2204
}
2205
2206
.button { // +/- buttons on GtkVolumeButton popup
2207
padding: 10px;
2208
}
2209
}
2210
2211
GtkScaleButton.button,
2212
GtkVolumeButton.button {
2213
// I assume both are image-button *by default*
2214
// with the image-button/text-button classes automagically applied depending on the button child these selectors can be deleted.
2215
@extend %image_button;
2216
2217
&.text-button { @extend .text-button }
2218
}
2219
2220
/**********************
2221
* Window Decorations *
2222
*********************/
2223
2224
.window-frame {
2225
transition: $shadow_transition;
2226
border-radius: 2px 2px 0 0;
2227
box-shadow: $z-depth-4;
2228
2229
// FIXME rationalize window-frame shadows
2230
2231
/* this is used for the resize cursor area */
2232
margin: 8px;
2233
2234
&:backdrop {
2235
box-shadow: $z-depth-2;
2236
}
2237
&.tiled {
2238
border-radius: 0;
2239
}
2240
&.popup {
2241
box-shadow: none;
2242
}
2243
// server-side decorations as used by mutter
2244
&.ssd {
2245
box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16); //just doing borders, wm draws actual shadows
2246
}
2247
&.csd {
2248
&.popup {
2249
border-radius: 2px;
2250
box-shadow: $z-depth-2;
2251
}
2252
&.tooltip {
2253
border-radius: 2px;
2254
box-shadow: $z-depth-2;
2255
}
2256
&.message-dialog {
2257
border-radius: 2px;
2258
box-shadow: $z-depth-4;
2259
&:backdrop { box-shadow: $z-depth-2; }
2260
}
2261
}
2262
&.solid-csd {
2263
border-radius: 0;
2264
margin: 4px;
2265
background-color: $warning_color;
2266
// border: solid 1px $borders_color;
2267
box-shadow: none;
2268
}
2269
}
2270
2271
// Window Close button
2272
.header-bar .button.titlebutton,
2273
.titlebar .button.titlebutton {
2274
// @extend %simple_flat_button;
2275
@extend %image_button;
2276
2277
&:active { // add fallback
2278
background-image: -gtk-gradient(radial,
2279
center center, 0,
2280
center center, 0.4,
2281
to(gtkalpha(currentColor, $lower_opacity / 2)),
2282
to(transparent)),
2283
linear-gradient(to bottom, gtkalpha(currentColor, $lower_opacity / 2));
2284
}
2285
}
2286
2287
// catch all extend :)
2288
2289
%selected_items {
2290
background-color: $selected_bg_color;
2291
color: $selected_fg_color;
2292
&:insensitive { color: $insensitive_selected_fg_color; }
2293
}
2294
2295
.monospace {
2296
font: Monospace;
2297
}
2298
2299
/**********************
2300
* Touch Copy & Paste *
2301
*********************/
2302
2303
//touch selection handlebars for the Popover.osd above
2304
.entry.cursor-handle,
2305
.cursor-handle {
2306
background-color: $accent_bg_color;
2307
background-image: none;
2308
box-shadow: none;
2309
border-style: none;
2310
@each $s,$as in ('', ''),
2311
(':hover', '-hover'),
2312
(':active', '-active') { //no need for insensitive and backdrop
2313
&.top#{$s}:dir(ltr), &.bottom#{$s}:dir(rtl) {
2314
$_url: 'assets/text-select-start#{$as}#{$asset_suffix}';
2315
-gtk-icon-source: -gtk-scaled(url('#{$_url}.png'),
2316
url('#{$_url}@2.png'));
2317
padding-left: 10px;
2318
}
2319
&.bottom#{$s}:dir(ltr), &.top#{$s}:dir(rtl) {
2320
$_url: 'assets/text-select-end#{$as}#{$asset_suffix}';
2321
-gtk-icon-source: -gtk-scaled(url('#{$_url}.png'),
2322
url('#{$_url}@2.png'));
2323
padding-right: 10px;
2324
}
2325
&.insertion-cursor#{$s}:dir(ltr), &.insertion-cursor#{$s}:dir(rtl) {
2326
$_url: 'assets/scale-horz-marks-before-slider#{$as}#{$asset_suffix}';
2327
-gtk-icon-source: -gtk-scaled(url('#{$_url}.png'),
2328
url('#{$_url}@2.png'));
2329
}
2330
}
2331
}
2332
2333
/* Decouple the font of context menus from their entry/textview */
2334
.context-menu {
2335
font: initial;
2336
}
2337
2338
.touch-selection {
2339
font: initial;
2340
color: $fg_color;
2341
background-color: $base_color;
2342
box-shadow: $z-depth-2;
2343
&:backdrop { box-shadow: $z-depth-1; }
2344
.button {
2345
}
2346
}
2347
2348
// This is used by GtkScrolledWindow, when content is touch-dragged past boundaries.
2349
// This draws a box on top of the content, the size changes programmatically.
2350
.overshoot {
2351
&.top {
2352
@include overshoot(top);
2353
}
2354
&.bottom {
2355
@include overshoot(bottom);
2356
}
2357
&.left {
2358
@include overshoot(left);
2359
}
2360
&.right {
2361
@include overshoot(right);
2362
}
2363
}
2364
2365
// Overflow indication, works similarly to the overshoot, the size if fixed tho.
2366
.undershoot {
2367
&.top {
2368
@include undershoot(top);
2369
}
2370
2371
&.bottom {
2372
@include undershoot(bottom);
2373
}
2374
2375
&.left {
2376
@include undershoot(left);
2377
}
2378
2379
&.right {
2380
@include undershoot(right);
2381
}
2382
}
2383