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