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