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