* { // padding: 0; background-clip: padding-box; -GtkToolButton-icon-spacing: 0; -GtkTextView-error-underline-color: $error; // The size for scrollbars. The slider is 2px smaller, but we keep it // up so that the whole area is sensitive to button presses for the // slider. The stepper button is larger in both directions, the slider // only in the width -GtkScrolledWindow-scrollbar-spacing: 0; -GtkToolItemGroup-expander-size: 11; -GtkWidget-text-handle-width: 24; -GtkWidget-text-handle-height: 24; -GtkDialog-button-spacing: $space-size / 1px; -GtkDialog-action-area-border: $space-size / 1px; // We use the outline properties to signal the focus properties // to the adwaita engine: using real CSS properties is faster, // and we don't use any outlines for now. outline-style: solid; outline-width: 2px; outline-color: transparent; outline-offset: -4px; -gtk-outline-radius: $corner-radius; -gtk-secondary-caret-color: $primary; &:focus { outline-color: $overlay-checked; } } %selected_items { color: $text; background-color: $overlay-checked; } %selected_items_color { color: $primary; background-color: rgba($primary, 0.2); } %selected_items_primary { color: on($primary); background-color: $primary; } %linked { border-radius: 0; &:first-child { border-top-left-radius: $corner-radius; border-bottom-left-radius: $corner-radius; } &:last-child { border-top-right-radius: $corner-radius; border-bottom-right-radius: $corner-radius; } &:only-child { border-radius: $corner-radius; } } %linked-vertical { border-radius: 0; &:first-child { border-top-left-radius: $corner-radius; border-top-right-radius: $corner-radius; } &:last-child { border-bottom-left-radius: $corner-radius; border-bottom-right-radius: $corner-radius; } &:only-child { border-radius: $corner-radius; } } /*************** * Base States * ***************/ .background { background-color: $background; color: $text; &.csd { // Set csd windows botttom border radius border-radius: 0 0 $window-radius $window-radius; } &.maximized, &.solid-csd { // No radius when windows maximized border-radius: 0; } } *:disabled { -gtk-icon-effect: dim; } .gtkstyle-fallback { background-color: $background; color: $text; &:hover { background-color: darken($background, 5%); color: $text; } &:active { background-color: darken($background, 10%); color: $text; } &:disabled { background-color: $background; color: $text-disabled; } &:selected { background-color: $primary; color: on($primary); } } .view { background-color: $base; color: $text; &:hover { box-shadow: inset 0 0 0 9999px $overlay-hover; } &:disabled { color: $text-disabled; } // &:hover, &:selected { border-radius: $corner-radius; } &:selected { @extend %selected_items_primary; &:hover { box-shadow: none; } } .background.csd &:selected { @extend %selected_items; } } widget.view { // border-radius: $corner-radius; &:selected { @extend %selected_items_primary; } } window.background.csd > stack.view { border-radius: 0 0 $window-radius $window-radius; } textview { // FIXME: we need to override background-color to ensure text rendering text { background-color: $base; selection { &:focus, & { @extend %selected_items_primary; }} } border { background-color: $base-alt; color: $text-secondary; // FIXME: not working } } iconview { &:hover, &:selected { border-radius: $corner-radius; } } .rubberband, rubberband { border: 1px solid $primary; background-color: rgba($primary, 0.3); } flowbox { rubberband { @extend rubberband; } flowboxchild { padding: 4px; border-radius: $corner-radius; color: $text; &:selected { @extend %selected_items_color; } } } .content-view .tile { &:selected { background-color: transparent; } } label { caret-color: currentColor; // this shouldn't be needed. &.separator { color: $text-secondary; } selection { @extend %selected_items_primary; } &:disabled { color: $text-disabled; // selection { color: $text-disabled; } headerbar &, tab &, button & { color: inherit; } } &.osd { border-radius: $corner-radius; background-color: $tooltip; color: on($tooltip); } } .dim-label { color: $text-secondary; } assistant { .sidebar { padding: 4px 0; // background-color: $base; // border-top: 1px solid $divider; } // &.csd .sidebar { border-top-style: none; } .sidebar label { min-height: $medium-size; padding: 0 12px; color: $text-disabled; font-weight: 500; &.highlight { color: $text; } } } // %osd, .osd { opacity: 0.9; } /********************* * Spinner Animation * *********************/ @keyframes spin { to { -gtk-icon-transform: rotate(1turn); } } spinner { background: none; opacity: 0; // non spinning spinner makes no sense -gtk-icon-source: -gtk-icontheme('process-working-symbolic'); &:checked { opacity: 1; animation: spin 1s linear infinite; &:disabled { opacity: 0.5; } } } /**************** * Text Entries * ****************/ %entry, entry { %entry_basic, & { min-height: $medium-size; padding: 0 8px; border-radius: $corner-radius; caret-color: currentColor; // this shouldn't be needed. @include entry(normal); &:focus { @include entry(checked); } &:drop(active) { @include entry(hover); } &:disabled { @include entry(disabled); } &.flat { min-height: 0; padding: 2px; border-radius: 0; background-color: transparent; } image { // icons inside the entry color: $text-secondary; &:hover, &:active { color: $text; } &:disabled { color: $text-disabled; } &.left { margin-left: ($medium-size - 16px) / 2 - 8px; margin-right: 6px; } &.right { margin-left: 6px; margin-right: ($medium-size - 16px) / 2 - 8px; } } undershoot { &.left { @include undershoot(left); } &.right { @include undershoot(right); } } selection { @extend %selected_items_primary; } // entry error and warning style @each $e_type, $e_color in (error, $error), (warning, $warning) { &.#{$e_type} { @include entry(normal, $e_color); &:focus { @include entry(checked, $e_color); } &:disabled { @include entry(disabled, $e_color); } } } .osd & { } } progress { margin: 2px -8px; border-bottom: 2px solid $primary; background-color: transparent; } // linked entries .linked:not(.vertical) > & { @extend %linked; } // Vertically linked entries .linked.vertical > & { @extend %linked-vertical; } } %entry_raised { border-radius: $corner-radius; @include entry(raised-normal); &:focus { @include entry(raised-focus); } &:drop(active) { @include entry(raised-hover); } &:disabled { @include entry(raised-disabled); } // entry error and warning style @each $e_type, $e_color in (error, $error), (warning, $warning) { &.#{$e_type} { @include entry(raised-normal, $e_color); &:focus { @include entry(raised-focus, $e_color); } &:disabled { @include entry(raised-disabled, $e_color); } image { color: on($e_color, secondary); &:hover, &:active { color: on($e_color); } &:disabled { color: on($e_color, disabled); } } } } } treeview entry { &.flat, & { background-color: $base; &, &:focus { border-image: none; box-shadow: none; } } } .entry-tag { margin: 2px; border-radius: $circular-radius; box-shadow: none; background-color: $track-disabled; color: $text; &:hover { background-image: image($overlay-hover); } // side margins: compensate the entry padding with a negative margin // then the negative margin itself :dir(ltr) & { margin-left: 4px; margin-right: 0; padding-left: 12px; padding-right: 8px; } :dir(rtl) & { margin-left: 0; margin-right: 4px; padding-left: 8px; padding-right: 12px; } // seems any sizing doesn't work &.button { box-shadow: none; background-color: transparent; &:not(:hover):not(:active) { color: $text-secondary; } } } /*********** * Buttons * ***********/ // stuff for .needs-attention @keyframes needs-attention { from { background-image: -gtk-gradient(radial, center center, 0, center center, 0.001, to($primary), to(transparent)); } to { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to($primary), to(transparent)); } } %button-on-dark { color: on(dark, secondary); &:focus, &:hover, &:active, &:checked { color: on(dark); } &:disabled { color: on(dark, secondary-disabled); } &:checked:disabled { color: on(dark, disabled); } } %button-basic { @include button(normal); &:focus, &:checked:focus { @include button(focus); } &:hover { @include button(hover); } &:active { @include button(active); } &:disabled { @include button(disabled); } &:checked { @include button(checked); } &:checked:hover { @include button(checked-hover); } &:checked:disabled { @include button(checked-disabled); } } %circular-button { // The Bloody Circul Button border-radius: $circular-radius; label { padding: 0; } } %small-button { min-height: $small-size; min-width: $small-size; padding: 0; border-radius: $circular-radius; } button { min-height: 24px; min-width: 16px; padding: ($medium-size - 24px) / 2 ($medium-size - 16px) / 2; border-radius: $corner-radius; font-weight: 500; @extend %button-basic; &:drop(active) { @include button(hover); } @at-root %button-flat, &.flat { @at-root %button-flat-simple, & { @include button(flat-normal); &:focus { @include button(flat-focus); } &:hover { @include button(flat-hover); } &:active { @include button(flat-active); } &:disabled { @include button(flat-disabled); } } &:checked, &:checked:hover { @include button(flat-checked); } &:checked:disabled { @include button(flat-checked-disabled); } } &.text-button { min-width: 32px; padding-left: $space-size * 2 + 4px; padding-right: $space-size * 2 + 4px; &.flat { } } &.image-button { min-width: 24px; padding: ($medium-size - 24px) / 2; // @extend %circular-button; // &.destructive-action { border-radius: $corner-radius; } } // NOTE: Some image-only buttons use this as well &.text-button.image-button { min-width: 24px; padding: ($medium-size - 24px) / 2; border-radius: $corner-radius; label { &:first-child { margin-left: 16px - ($medium-size - 24px) / 2; } &:last-child { margin-right: 16px - ($medium-size - 24px) / 2; } } &.flat label { &:first-child { margin-left: 12px - ($medium-size - 24px) / 2; } &:last-child { margin-right: 12px - ($medium-size - 24px) / 2; } } image:not(:only-child) { margin: 0 (24px - 16px) / 2; } } .linked:not(.vertical) > & { @extend %linked; // &:focus { box-shadow: none; } } .linked.vertical > & { @extend %linked-vertical; // &:focus { box-shadow: none; } } .linked:not(.vertical) > &.flat, .linked.vertical > &.flat { &:not(:only-child) { // specificity bump border-radius: $corner-radius; &.image-button:not(.text-button) { border-radius: $circular-radius; } } // &:focus { box-shadow: inset 0 0 0 9999px $overlay-focus; } } // big standalone buttons like in Documents pager &.osd { min-width: $small-size; min-width: $small-size; padding: ($large-size - 24px) / 2 ($large-size - 16px) / 2; background-color: $primary; color: on($primary); &:hover { background-color: mix(on($primary), $primary, 12%); color: on($primary); } &:active { background-color: mix(on($primary), $primary, 26%); color: on($primary); } &.image-button, &.circular { padding: ($large-size - 24px) / 2; > image { padding: 0; } } &:disabled { opacity: 0; } } // overlay / OSD style // .osd & { } // Suggested and Destructive Action buttons @each $b_type, $b_color in (suggested-action, $suggested), (destructive-action, $destructive) { &.#{$b_type} { background-color: $b_color; color: on($b_color); box-shadow: none; &:disabled { @include button(disabled); } &:hover { box-shadow: inset 0 0 0 9999px transparent, 0 2px (4px * .6) -1px rgba($b_color, 0.2), 0 4px (5px * .6) 0 rgba($b_color, 0.14), 0 1px (10px * .6) 0 rgba($b_color, 0.12); } &:checked { background-color: mix(on($b_color), $b_color, percentage(0.3)); } &:checked:hover { box-shadow: inset 0 0 0 9999px transparent, 0 3px 3px -3px rgba($b_color, 0.3), 0 2px 3px -1px rgba($b_color, 0.24), 0 2px 5px 0 rgba($b_color, 0.12); } &:focus { box-shadow: 0 0 0 2px rgba($b_color, 0.35); } &.flat { background-color: transparent; color: $b_color; &:disabled { @include button(flat-disabled); } &:checked { background-color: rgba($b_color, 0.3); } } .osd & { } } } .stack-switcher > & { // to position the needs attention dot, padding is added to the button // child, a label needs just lateral padding while an icon needs vertical // padding added too. > label { margin: 0 -6px; padding: 0 6px; } > image { margin: -3px -6px; padding: 3px 6px; } &.needs-attention { > label, > image { @extend %needs-attention; } &:checked { > label, > image { animation: none; background-image: none; } } } } // hide separators &.font, &.file { separator { @extend %hide_separators; }} // &.font { > box > box > label { font-weight: bold; }} // inline-toolbar buttons .inline-toolbar & { // @extend %button-flat; &:not(.text-button) { @extend %circular-button; } } .primary-toolbar & { -gtk-icon-shadow: none; } // tango icons don't need shadows &.close, &.circular { @extend %circular-button; min-width: 24px; padding: ($medium-size - 24px) / 2; } } %needs-attention { animation: needs-attention $ripple-fade-in-duration $ease-out forwards; background-repeat: no-repeat; background-position: right 3px; background-size: 6px 6px; &:dir(rtl) { background-position: left 3px; } } // menu buttons modelbutton.flat, .menuitem.button.flat { min-height: $menuitem-size; padding: 0 8px; border-radius: $corner-radius; color: $text; @extend %button-flat-simple; &:selected { @extend %selected_items; } } modelbutton.flat arrow { &.left { -gtk-icon-source: -gtk-icontheme("pan-start-symbolic"); } &.right { -gtk-icon-source: -gtk-icontheme("pan-end-symbolic"); } } button.color { min-height: $small-size; min-width: $small-size; padding: $space-size; colorswatch:only-child { // &, overlay { border-radius: 0; } } } /********* * Links * *********/ *:link, %links { color: $link; } *:visited { color: $link-visited; } button.link { &:link { &, &:focus, &:hover, &:active { color: $link; } } &:visited { &, &:focus, &:hover, &:active { color: $link-visited; } } > label { text-decoration-line: underline; } } /***************** * GtkSpinButton * *****************/ spinbutton { &:not(.vertical) { // in this horizontal configuration, the whole spinbutton // behaves as the entry, so we extend the entry styling // and nuke the style on the internal entry @extend %entry; padding: 0; entry { min-width: $large-size - 8px * 2; // reset all the other props since the spinbutton node is styled here margin: 0; border-image: none; border-radius: 0; box-shadow: none; background-color: transparent; } button { @extend %button-flat-simple; @extend %small-button; // margin: $space-size; border: solid $space-size transparent; // Remove unwanted focus indicator &:focus:not(:hover):not(:active):not(:disabled) { box-shadow: inset 0 0 0 9999px transparent; color: $text-secondary; } &.up:dir(ltr), &.down:dir(rtl) { margin-left: -$space-size / 2; } &.up:dir(rtl), &.down:dir(ltr) { margin-right: -$space-size / 2; } } } // OSD horizontal // .osd &:not(.vertical) { } // Vertical &.vertical { // in the vertical configuration, we treat the spinbutton // as a box, and tweak the style of the entry in the middle // so that it's linked // FIXME: this should not be set at all, but otherwise it gets the wrong // color @extend %entry; padding: 0; &:disabled { color: $text-disabled; } entry { // @extend %entry_raised; margin: 0; border-image: none; border-radius: 0; box-shadow: none; background-color: transparent; min-height: $medium-size; min-width: $large-size - $space-size; padding: 0; } button { @extend %button-flat-simple; @extend %small-button; padding: 0; border: solid $space-size transparent; // Remove unwanted focus indicator &:focus:not(:hover):not(:active) { box-shadow: inset 0 0 0 9999px transparent; color: $text-secondary; } &.up { margin: 0 $space-size/2; } &.down { margin: 0 $space-size/2; } } } // OSD vertical // .osd &.vertical { } // Misc treeview &:not(.vertical) { min-height: 0; border-style: none; border-radius: 0; entry { min-height: 0; padding: 1px 2px; } } } /************** * ComboBoxes * **************/ combobox { arrow { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); min-height: 16px; min-width: 16px; } decoration { transition: none; } // workaround for menuitem selection button.combo { cellview { &:dir(ltr) { margin-left: 8px - ($medium-size - 16px) / 2; } &:dir(rtl) { margin-right: 8px - ($medium-size - 16px) / 2; } } } &.linked { button:nth-child(2) { &:dir(ltr) { border-top-left-radius: 0; border-bottom-left-radius: 0; } &:dir(rtl) { border-top-right-radius: 0; border-bottom-right-radius: 0; } } } > .linked:not(.vertical) > entry:not(:only-child) { border-radius: $corner-radius; &:first-child { margin-right: -$medium-size; padding-right: $medium-size; } &:last-child { margin-left: -$medium-size; padding-left: $medium-size; } } > .linked:not(.vertical) > button:not(:only-child) { @extend %button-flat; // @extend %small-button; min-height: 16px; min-width: 16px; margin: ($medium-size - $small-size) / 2; padding: ($small-size - 16px) / 2; border-radius: $corner-radius; } } // the combo is a composite widget so the way we do button linking doesn't // work, special case needed. See // https://bugzilla.gnome.org/show_bug.cgi?id=733979 combobox > .linked > button.combo { padding: ($medium-size - 24px) / 2 ($medium-size - 16px) / 2; // reset } .linked:not(.vertical) > combobox { &:not(:first-child) > box > button.combo { border-top-left-radius: 0; border-bottom-left-radius: 0; } &:not(:last-child) > box > button.combo { border-top-right-radius: 0; border-bottom-right-radius: 0; } } .linked.vertical > combobox { &:not(:first-child) > box > button.combo { border-top-left-radius: 0; border-top-right-radius: 0; } &:not(:last-child) > box > button.combo { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } } button.combo:only-child { border-radius: $corner-radius; font-weight: normal; @include entry(normal); &:focus { @include entry(focus); } &:hover { @include entry(hover); } &:checked { @include entry(checked); } &:disabled { @include entry(disabled); } } /************ * Toolbars * ************/ toolbar { -GtkWidget-window-dragging: true; padding: 2px; background-color: $background; button { @extend %button-flat; } // on OSD .osd & { background-color: transparent; } // stand-alone OSD toolbars @at-root %toolbar_osd, &.osd { transition: $transition-shadow; padding: $space-size; border-radius: $corner-radius; box-shadow: $shadow-z4, inset 0 1px highlight($surface); background-color: $surface; &:backdrop { box-shadow: $shadow-z2, inset 0 1px highlight($surface); } &.left, &.right, &.top, &.bottom { border-radius: 0; } // positional classes for `attached` osd toolbars &.bottom { box-shadow: none; background-color: transparent; background-image: linear-gradient(to bottom, transparent, rgba(black, 0.1) 30%, rgba(black, 0.2) 50%, rgba(black, 0.4)); } } // toolbar separators &.horizontal > separator { margin: 2px; } &.vertical > separator { margin: 2px; } &:not(.inline-toolbar):not(.osd) { scale, entry, spinbutton, button { margin: 2px; } .linked entry, .linked spinbutton, .linked button { &:not(:first-child) { margin-left: 0; } &:not(:last-child) { margin-right: 0; } } spinbutton { entry, button { margin: 0; } } switch { margin: 2px + $space-size 2px; } } } // searchbar, location-bar & inline-toolbar .inline-toolbar { padding: $space-size; border-style: solid; border-width: 0 1px 1px; border-color: $divider; background-color: $base-alt; } searchbar > revealer > box, .location-bar { padding: $space-size; border-style: solid; border-width: 0 0 1px; border-color: $divider; background-color: $background; background-clip: border-box; } searchbar > revealer > box { // workaround: undo the GtkContainer:border-width and use CSS padding instead margin: -$space-size; } /*************** * Header bars * ***************/ %titlebar-button { @extend %button-flat; color: $titlebar-text-secondary; .linked:not(.vertical) > & { border-radius: $corner-radius; } &:focus, &:hover, &:active, &:checked { color: $titlebar-text; } &:disabled { color: $titlebar-text-secondary-disabled; } &:checked { &:disabled { background-color: transparent; color: $titlebar-text-disabled; } } &:backdrop { color: $titlebar-text-disabled; &:focus, &:hover, &:active { color: $titlebar-text-secondary; } &:disabled { color: $titlebar-text-secondary-disabled; } &:checked { color: $titlebar-text-secondary; &:disabled { color: $titlebar-text-secondary-disabled; } } } } %titlebar-entry { background-color: $titlebar-fill; color: $titlebar-text; &:disabled { background-color: $titlebar-fill; color: $titlebar-text-disabled; } image { color: $titlebar-text-secondary; &:hover, &:active { color: $titlebar-text; } &:disabled { color: $titlebar-text-disabled; } } } .titlebar { transition: all $duration $ease-out; background-color: $titlebar; color: $titlebar-text; border-radius: $window-radius $window-radius 0 0; @if $variant == 'light' or $rimless == 'true' { box-shadow: inset 0 -1px $border, inset 0 1px highlight($titlebar); } @else { box-shadow: inset 0 -1px $border; } &:disabled { color: $titlebar-text-disabled; } &:backdrop { color: $titlebar-text-secondary; &:disabled { color: $titlebar-text-secondary-disabled; } } .csd &:backdrop { background-color: $titlebar-backdrop; } .title { padding: 0 12px; font-weight: bold; } .subtitle { padding: 0 12px; font-size: smaller; } .subtitle, .dim-label { transition: color $duration $ease-out; color: $titlebar-text-secondary; &:backdrop { color: $titlebar-text-disabled; } } // Don't draw titlebar above titlebar .titlebar { background-color: transparent; box-shadow: none; } // separator between headerbars + separator, + separator.sidebar { background-color: $titlebar; background-image: none; transition: all $duration $ease-out; @if $variant == 'light' or $rimless == 'true' { box-shadow: inset 0 -1px $border, inset 0 1px highlight($titlebar); } @else { box-shadow: inset 0 -1px $border; } &:backdrop { background-color: $titlebar-backdrop; } } &.selection-mode + separator, &.selection-mode + separator.sidebar, .selection-mode & + separator, .selection-mode & + separator.sidebar { background-color: $primary; &:backdrop { background-color: $primary; } } .background.csd.unified & + separator, .background.csd.unified & + separator.sidebar { // reset box-shadow: inset 0 -1px $border; } entry { @extend %titlebar-entry; } .linked:not(.vertical) > entry { border-radius: $corner-radius; margin-left: $space-size / 2; margin-right: $space-size / 2; } button.suggested-action, button.destructive-action { &:disabled { background-color: $titlebar-fill; color: $titlebar-text-disabled; } } @if $variant == 'light' and $topbar == 'dark' { stackswitcher { // reset background-color: on($titlebar, fill); &.linked:not(.vertical) > button:not(.suggested-action):not(.destructive-action) { &:checked { background-color: rgba(white, 0.15); color: $titlebar-text; } } } } // FIXME: Ugly overriding .path-bar button:not(.suggested-action):not(.destructive-action).text-button { min-width: 0; padding-left: ($medium-size - 24px) / 2; padding-right: ($medium-size - 24px) / 2; } &.selection-mode { // 0.1ms was a workaround for https://gitlab.gnome.org/GNOME/gtk/issues/698 // but let's keep it for backwards compatibility. transition: background-color 0.1ms $ripple-fade-in-duration, color $duration $ease-out; animation: ripple-on-headerbar $ripple-fade-in-duration $ease-out; box-shadow: inset 0 1px highlight($primary), inset 0 -1px $border; background-color: $primary; color: on($primary); &:backdrop { color: on($primary, secondary); } .subtitle:link { color: on($primary); } button:not(.suggested-action):not(.destructive-action) { border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 0%, transparent 0%) 0 0 0 / 0 0 0px; color: on($primary); &:disabled { color: on($primary, disabled); } &:checked { border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 100%, transparent 0%) 0 0 2 / 0 0 2px; color: on($primary); &:disabled { color: on($primary, disabled); } } &:backdrop { &:not(.titlebutton) { color: on($primary, secondary); } &:disabled { color: on($primary, secondary-disabled); } &:checked { color: on($primary, secondary); &:disabled { color: on($primary, secondary-disabled); } } } } .selection-menu { padding-left: 16px; padding-right: 16px; arrow { -GtkArrow-arrow-scaling: 1; } .arrow { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); } } } .selection-mode { box-shadow: inset 0 1px highlight($primary); // Avoid double shadows background-color: $primary; } // squared corners when the window is maximized, tiled, or fullscreen .tiled &, .tiled-top &, .tiled-right &, .tiled-bottom &, .tiled-left &, .maximized &, .fullscreen & { border-radius: 0; } &.default-decoration { min-height: $small-size; padding: $space-size $space-size * 2; border-radius: $window-radius $window-radius 0 0; box-shadow: inset 0 1px highlight($titlebar); .tiled &, .maximized &, .fullscreen & { box-shadow: none; border-radius: 0; } button.titlebutton { min-height: $small-size; min-width: $small-size; margin: 0; padding: 0; } .background.csd & { @if $rimless == 'false' and $variant == 'dark' { box-shadow: inset 0 -1px $border; } @else { box-shadow: inset 0 1px highlight($titlebar), inset 0 -1px $border; } } // workaround for non-animatable buttons .background:not(.csd) & button.titlebutton:active { background-size: 1000% 1000%; } } .solid-csd & { &:dir(rtl), &:dir(ltr) { // specificity bump border-radius: 0; box-shadow: none; // just remove the highlight } } } headerbar { // The sizing factor needs to be defined in the headerbar node for the case of split headerbars min-height: $large-size; padding: 0 $space-size; box.vertical & { background-color: $titlebar; } // add vertical margins to common widget on the headerbar to avoid them spanning the whole height entry, spinbutton, button { margin-top: $space-size; margin-bottom: $space-size; } button, button.image-button { border-radius: $corner-radius; } > box.left, > box.right { // Titlebutton space padding: 0 if($window_button == 'mac', $space-size, $space-size - 2px); } button:not(.suggested-action):not(.destructive-action) { @extend %titlebar-button; } separator.titlebutton, separator.sidebar { margin-top: $large-size / 4; margin-bottom: $large-size / 4; background-color: transparent; } switch { margin-top: ($large-size - 24px) / 2; margin-bottom: ($large-size - 24px) / 2; } // reset button margins of the spinbutton spinbutton button { margin-top: 0; margin-bottom: 0; } // FIXME: This is a hacky workaround. .entry-tag { margin-top: 5px; margin-bottom: 5px; } &.windowhandle { viewswitcher { button:not(.titlebutton):not(.suggested-action):not(.destructive-action) { border-radius: 0; margin: 0; min-width: 120px; padding: 0; > stack > box { padding: 0 $space-size * 2; } &:focus { box-shadow: none; } } } > button.popup { label, image { min-height: 0; } } viewswitchertitle > squeezer { margin-top: 0; margin-bottom: 0; background: none; > viewswitcher { margin: 0 0; background: none; > box.horizontal > button.radio { margin: 0; padding: 0; border-radius: 0; } } } } } /************ * Pathbars * ************/ %pathbar_button, .path-bar.linked:not(.vertical) > button { padding-left: ($medium-size - 24px) / 2; padding-right: ($medium-size - 24px) / 2; border-radius: $corner-radius / 2; margin-left: 1px; margin-right: 1px; background-color: $overlay-focus; &:disabled { background-color: $overlay-normal; } &:first-child { border-top-left-radius: $corner-radius; border-bottom-left-radius: $corner-radius; } &:last-child { border-top-right-radius: $corner-radius; border-bottom-right-radius: $corner-radius; } &:checked { background-color: $overlay-focus-hover; color: $text; } label, image { margin-left: $space-size / 2; margin-right: $space-size / 2; } &.slider-button { padding-left: ($small-size - 16px) / 2; padding-right: ($small-size - 16px) / 2; } } /************** * Tree Views * **************/ treeview.view { @at-root * { -GtkTreeView-horizontal-separator: 4; -GtkTreeView-grid-line-width: 1; -GtkTreeView-grid-line-pattern: ''; -GtkTreeView-tree-line-width: 1; -GtkTreeView-tree-line-pattern: ''; -GtkTreeView-expander-size: 16; } border-left-color: $track; // this is actually the tree lines color, border-top-color: $divider; // while this is the grid lines color, better then nothing .csd &:not(:selected):not(:hover):not(.progressbar):not(.expander):not(.trough):not(.separator) { background-color: transparent; } // FIXME: Avoid transparency background-color being slightly darker &:selected { background-image: image($overlay-checked); background-color: $base; color: $text; } .csd &:selected { @extend %selected_items; background-image: none; } rubberband { @extend rubberband; } // to avoid borders being overridden by the previously set props &:hover, &:selected { border-radius: 0; } &.separator { min-height: $space-size; color: $divider; } // FIXME: box-shadow, background-color and background-image are not available here. &:drop(active) { border-style: solid none; border-width: 9999px; border-color: $overlay-hover; &.after { border-top-style: none; } &.before { border-bottom-style: none; } } &.expander { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); -gtk-icon-transform: rotate(-90deg); &:dir(rtl) { -gtk-icon-transform: rotate(90deg); } &:checked { -gtk-icon-transform: unset; } color: $text-secondary; &:hover, &:active { color: $text; } &:disabled { color: $text-secondary-disabled; } } &.progressbar { // progress bar in treeviews border: none; box-shadow: none; background-color: $primary; background-image: none; border-radius: $circular-radius; color: on($primary); &:selected, &:selected:hover, &:selected:focus { box-shadow: none; background-color: mix($text, $primary, 15%); color: on($primary); &:backdrop { color: on($primary); } } &:backdrop, &:selected:backdrop { background-color: $track; } } &.trough { // progress bar trough in treeviews border: none; box-shadow: none; background-color: $track-disabled; background-image: none; border-radius: $circular-radius; padding: 0; margin: 0; &:selected, &:selected:hover, &:selected:focus { box-shadow: none; background-color: $track-disabled; } &:backdrop, &:selected:backdrop { background-color: $divider; } } header { button { @extend %row_activatable; padding: 2px $space-size; border-style: none solid solid none; border-width: 1px; border-color: $divider; border-radius: 0; background-clip: border-box; &:not(:focus):not(:hover):not(:active) { color: $text-secondary; } &, &:disabled { background-color: $base; } &:last-child { border-right-style: none; } } } button.dnd, header.button.dnd { // for treeview-like derive widgets padding: 2px 6px; border-style: none solid solid; border-width: 1px; border-color: $divider; border-radius: 0; box-shadow: none; background-color: $base; background-clip: border-box; color: $primary; } acceleditor > label { background-color: $primary; } // see tests/testaccel to test } /********* * Menus * *********/ menubar, .menubar { -GtkWidget-window-dragging: true; padding: 0; background-color: $titlebar; color: $titlebar-text; box-shadow: inset 0 -1px $border; &:backdrop { color: $titlebar-text-secondary; } .csd & { transition: $transition; &:backdrop { background-color: $titlebar-backdrop; } } > menuitem { transition: $transition; min-height: 20px; padding: 4px 8px; color: $titlebar-text-secondary; border-radius: $corner-radius; &:hover { // Seems like it :hover even with keyboard focus transition: none; background-color: $overlay-checked; color: $titlebar-text; } &:backdrop { color: $titlebar-text-disabled; } &:disabled { color: $titlebar-text-secondary-disabled; } label:disabled { color: inherit; } // to inherit the above color > window.popup.background > menu { menuitem { transition: none; } } } } // Needed to make the border-radius of menus work // otherwise the background bleeds out of the menu edges .background.popup { background-color: transparent; } menu, .menu, .context-menu { margin: $space-size; // See https://bugzilla.gnome.org/show_bug.cgi?id=591258 padding: $space-size; background-color: $surface; background-clip: border-box; border-radius: $menu-radius; border: 1px solid $solid-border; .csd & { border: none; @if $rimless == 'true' { box-shadow: inset 0 1px highlight($surface); } @else { box-shadow: inset 0 0 0 1px highlight($surface); } } menuitem { transition: background-color $duration $ease-out; min-height: 20px; min-width: 40px; padding: 4px 8px; color: $text; font: initial; text-shadow: none; border-radius: $corner-radius; &:hover { background-color: $overlay-hover; } &:active { background-color: $overlay-active; } &:disabled { color: $text-disabled; } accelerator { color: $text-secondary; } &:disabled accelerator { color: $text-secondary-disabled; } // submenu indicators arrow { min-height: 16px; min-width: 16px; &:dir(ltr) { -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); margin-left: 8px; } &:dir(rtl) { -gtk-icon-source:-gtk-icontheme('pan-end-symbolic-rtl'); margin-right: 8px; } } // avoids labels color being overridden, see // https://bugzilla.gnome.org/show_bug.cgi?id=767058 label { &:dir(rtl), &:dir(ltr) { color: inherit; }} } .view:selected { background-color: mix($text, $surface, 10%); } // overflow arrows > arrow { min-height: 16px; min-width: 16px; padding: 4px; background-color: $surface; color: $text-secondary; &.top { margin-top: 0; // border-bottom: 1px solid $divider; border-radius: $corner-radius; -gtk-icon-source: -gtk-icontheme('pan-up-symbolic'); } &.bottom { margin-top: 4px * 2; margin-bottom: -4px * 3; // border-top: 1px solid $divider; border-radius: $corner-radius; -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); } &:hover { background-image: image($overlay-hover); color: $text; } &:disabled { border-color: transparent; background-color: transparent; color: transparent; // color: $text-secondary-disabled; } } separator { margin: 4px 0; } } /************ * Popovers * ************/ popover.background { transition: $transition-shadow; padding: 0; background-color: $surface; border-radius: $menu-radius; &, .csd & { @if $rimless == 'true' { border: none; box-shadow: $shadow-z4; &:backdrop { box-shadow: $shadow-z3; } } @else if $variant == 'dark' { border: 1px solid highlight($surface); box-shadow: $shadow-z5, 0 0 0 1px $window-border; background-clip: border-box; &:backdrop { box-shadow: $shadow-z3, 0 0 0 1px $window-border; } } @else { border: 1px solid rgba(black, 0.15); box-shadow: $shadow-z5; background-clip: padding-box; &:backdrop { box-shadow: $shadow-z3; } } } > stack { margin: 0; } // remove extra padding from menu style popovers > toolbar { margin: 0; } > list, > .view, > toolbar { border-style: none; box-shadow: none; background-color: transparent; } > scrolledwindow > viewport.frame > list { background-color: transparent; padding: $space-size; > row { border-radius: $corner-radius; padding: $space-size; } } // FIXME: Use the popover color instead of transparent as a workaround for .view .view:not(:selected), toolbar { background-color: $surface; } .linked > button:not(.radio) { border-radius: $corner-radius; &:first-child { border-radius: $corner-radius; } &:last-child { border-radius: $corner-radius; } &:only-child { border-radius: $corner-radius; } } &.menu button, button.model { @extend %button-flat; min-height: 32px; padding: 0 8px; border-radius: $corner-radius; // &:checked { color: $primary; } } separator { margin: $space-size / 2 0; } list separator { margin: 0; } } /************* * Notebooks * *************/ %tabs_tab { transition: $transition, background-size 0ms, background-image 0ms; min-height: $small-size; min-width: $small-size; padding: $space-size / 2 $space-size * 2; border: none; outline: none; background-clip: padding-box; color: $text-secondary; font-weight: 500; border-radius: $modal-radius; &:hover { background-color: $fill; color: $text; } &:disabled { color: $text-secondary-disabled; } &:checked { transition: $transition; background-color: if($variant == 'light', rgba($base, 1), rgba(white, 0.15)); color: $text; box-shadow: 0 1px 3px rgba(black, 0.1); &:disabled { color: $text-disabled; } } } notebook { frame > paned > & > header, &.frame > header { background-color: $fill; } &, &.frame { background-color: $base; border-radius: $modal-radius + $space-size; } &.frame frame { > border { border: none; border-radius: $modal-radius; } > list { // @extend %circular_list; row.activatable { border-radius: $corner-radius; } } } > header { border: none; background-color: $fill; padding: $space-size / 2; margin: $space-size / 2; border-radius: $modal-radius + $space-size / 2; // background-clip: border-box; &.top > tabs > arrow { @extend %notebook_vert_arrows; border-top-style: none; } &.bottom > tabs > arrow { @extend %notebook_vert_arrows; border-bottom-style: none; } @at-root %notebook_vert_arrows { padding-left: 4px; padding-right: 4px; &.down { margin-left: 0; -gtk-icon-source: -gtk-icontheme('pan-start-symbolic'); } &.up { margin-right: 0; -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); } } &.left > tabs > arrow { @extend %notebook_horz_arrows; border-left-style: none; } &.right > tabs > arrow { @extend %notebook_horz_arrows; border-right-style: none; } @at-root %notebook_horz_arrows { padding-top: 4px; padding-bottom: 4px; &.down { margin-top: 0; -gtk-icon-source: -gtk-icontheme('pan-up-symbolic'); } &.up { margin-bottom: 0; -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); } } > tabs > arrow { @extend %button-flat-simple; min-height: 16px; min-width: 16px; border-radius: $corner-radius; } tab { @extend %tabs_tab; // FIXME: The tab node doesn't have :drop(active), instead its child box has it. > box { transition: background-color $duration $ease-out; margin: -$space-size -12px; padding: $space-size 12px; &:drop(active) { background-color: $divider; color: $text; } } // colors the button like the label, overridden otherwise button.flat { @extend %small-button; &:last-child { margin-left: $space-size; margin-right: $space-size - 12px; } &:first-child { margin-left: $space-size - 12px; margin-right: $space-size; } } button.close-button { min-width: $small-size; min-height: $small-size; } } &.top, &.bottom { tabs { // padding-left: 8px; // padding-right: 8px; &:not(:only-child) { &:first-child { margin-left: 0; } &:last-child { margin-right: 0; } } tab.reorderable-page { border-style: solid; } } } &.left, &.right { tabs { // padding-top: 8px; // padding-bottom: 8px; &:not(:only-child) { &:first-child { margin-top: 0; } &:last-child { margin-bottom: 0; } } tab.reorderable-page { border-style: solid; } } } } > stack:not(:only-child) { // the :not(:only-child) is for "hidden" notebooks background-color: transparent; border-radius: $corner-radius; } } /************** * Scrollbars * **************/ scrollbar { $_slider_min_length: 24px; // disable steppers @at-root * { -GtkScrollbar-has-backward-stepper: false; -GtkScrollbar-has-forward-stepper: false; } transition: $transition; background-color: $base; // scrollbar border &.top { border-bottom: 1px solid $divider; } &.bottom { border-top: 1px solid $divider; } &.left { border-right: 1px solid $divider; } &.right { border-left: 1px solid $divider; } // slider slider { transition: background-color $duration $ease-out; min-width: 8px; min-height: 8px; border: 4px solid transparent; border-radius: $circular-radius; background-clip: padding-box; background-color: $text-disabled; &:hover { background-color: $text-secondary; } &:active { background-color: $text; } &:disabled { background-color: $text-secondary-disabled; } } &.fine-tune { slider { min-width: 4px; min-height: 4px; } &.horizontal slider { margin: 2px 0; } &.vertical slider { margin: 0 2px; } } &.overlay-indicator { &:not(.fine-tune) slider { transition-property: background-color, min-height, min-width; } &:not(.dragging):not(.hovering) { border-color: transparent; background-color: transparent; slider { min-width: 4px; min-height: 4px; margin: 4px - 1px; border: 1px solid rgba($base, 0.3); } button { min-width: 4px; min-height: 4px; margin: 4px - 1px; border: 1px solid rgba($base, 0.3); border-radius: $circular-radius; background-color: $text-disabled; background-clip: padding-box; -gtk-icon-source: none; &:disabled { background-color: $text-secondary-disabled; } } &.horizontal { slider { min-width: $_slider_min_length; } button { min-width: 8px; } } &.vertical { slider { min-height: $_slider_min_length; } button { min-height: 8px; } } } &.dragging, &.hovering { background-color: rgba($surface, 0.9); } } &.horizontal slider { min-width: $_slider_min_length; } &.vertical slider { min-height: $_slider_min_length; } // button styling button { @extend %button-flat-simple; min-width: 16px; min-height: 16px; padding: 0; border-radius: 0; } // button icons &.vertical { button { &.down { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); } &.up { -gtk-icon-source: -gtk-icontheme('pan-up-symbolic'); } } } &.horizontal { button { &.down { -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); } &.up { -gtk-icon-source: -gtk-icontheme('pan-start-symbolic'); } } } } /********** * Switch * **********/ switch { transition: all $duration $ease-out; margin: $space-size 0; border: none; border-radius: $circular-radius; background-color: $text-disabled; background-clip: padding-box; font-size: 0; color: transparent; &:checked { background-color: $assets-color; } &:disabled { opacity: 0.5; } // hide on/off icons for >=3.24.5 // image { // margin: -8px; // -gtk-icon-transform: scale(0); // } slider { transition: all $duration $ease-out; min-width: $small-size - 4px; min-height: $small-size - 4px; margin: if($variant == 'light', 1px, 0); border-radius: $circular-radius; outline: none; box-shadow: none; background-color: white; border: none; color: transparent; } &:focus slider, &:hover slider, &:focus:hover slider { box-shadow: 0 0 0 6px $divider; } // row:selected & { } } /************************* * Check and Radio items * *************************/ // draw regular check and radio items using our PNG assets // all assets are rendered from assets.svg. never add pngs directly // selection-mode .view.content-view.check:not(list), .content-view .tile check:not(list) { min-height: 40px; min-width: 40px; margin: 0; padding: 0; box-shadow: none; background-color: transparent; background-image: none; @each $s, $as in ('', '-unchecked'), (':checked', '-checked') { &#{$s} { -gtk-icon-source: -gtk-scaled(url("assets/selectionmode-checkbox#{$as}#{$asset-suffix}.png"), url("assets/selectionmode-checkbox#{$as}#{$asset-suffix}@2.png")); } } } checkbutton, radiobutton { outline: none; } checkbutton.text-button, radiobutton.text-button { // this is for a nice focus on check and radios text padding: 2px; label:not(:only-child) { margin: 0 4px; } } check, radio { min-height: 20px; min-width: 20px; margin: $space-size / 2; padding: 0; border-radius: $circular-radius; color: transparent; background-color: $divider; transition: $transition, box-shadow $ripple-fade-out-duration / 2 $ease-out; &:hover { box-shadow: 0 0 0 6px $fill; background-color: rgba($text, 0.15); } &:active { box-shadow: 0 0 0 6px $divider; background-color: rgba($text, 0.20); } &:disabled { background-color: $fill; } &:checked, &:indeterminate { color: on($assets-color); background-color: $assets-color; &:hover { box-shadow: 0 0 0 6px rgba($assets-color, 0.15); background-color: lighten($assets-color, 10%); } &:active { box-shadow: 0 0 0 6px rgba($assets-color, 0.20); background-color: $assets-color; } &:disabled { color: on($assets-color, disabled); background-color: rgba($assets-color, 0.35); } } popover modelbutton.flat & { &, &:focus, &:hover, &:focus:hover, &:active, &:disabled { transition: none; // FIXME: this is a workaround for a popover check/radio long transition issue box-shadow: none; background-image: none; } &.left:dir(rtl) { margin-left: -$space-size / 2; margin-right: $space-size; } &.right:dir(ltr) { margin-left: $space-size; margin-right: -$space-size / 2; } } menu menuitem & { transition: none; margin: 0; // this is a workaround for a menu check/radio size allocation issue padding: 0; &:dir(ltr) { margin-right: $space-size; margin-left: -$space-size / 2; } &:dir(rtl) { margin-left: $space-size; margin-right: -$space-size / 2; } &, &:hover, &:disabled, &:checked:hover, &:indeterminate:hover { box-shadow: none; } } } %check, check { &:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-checked-symbolic.svg")); } &:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-mixed-symbolic.svg")); } } %radio, radio { &:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-checked-symbolic.svg")); } &:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-mixed-symbolic.svg")); } } %small_check, menu menuitem check { min-height: 16px; min-width: 16px; &:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-checked-symbolic.svg")); } &:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-mixed-symbolic.svg")); } } %small_radio, menu menuitem radio { min-height: 16px; min-width: 16px; &:checked { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-checked-symbolic.svg")); } &:indeterminate { -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-mixed-symbolic.svg")); } } // ANIMATION: // this is made with those pretty convoluted transitions, since checks and radios have to animate only on state changes, // the transformation is set on the active state and it get reset on the checked state. check:not(:checked):active { -gtk-icon-transform: rotate(90deg); } // radio:not(:checked):active { -gtk-icon-transform: scale(0); } check:not(:checked):indeterminate:active, radio:not(:checked):indeterminate:active { -gtk-icon-transform: scaleX(-1); } // instead of rotateY(180deg) treeview.view { radio, check { padding: 0; margin: 0; &:not(:hover):not(:disabled):not(:checked):not(:indeterminate) { background-color: $divider; } &, &:hover, &:disabled, &:checked:hover, &:indeterminate:hover { box-shadow: none; } } &:selected, &:selected:focus { radio, check { &:checked, &:indeterminate { background-color: $assets-color; color: on($assets-color); background-image: none; } } } } /************ * GtkScale * ************/ scale { // sizing $_marks_length: 8px; $_marks_distance: 7px; $trough_size: 2px; $finetune_trough_size: 4px; $slider_size: 18px; $slider_margin: -($slider_size - $trough_size) / 2; $finetune_slider_margin: -($slider_size - $finetune_trough_size) / 2; $color_slider_margin: -($slider_size) * 3 / 4; $color_marks_slider_margin: -($slider_size - 16px) - $color_slider_margin; min-height: $trough_size; min-width: $trough_size; &.horizontal { padding: ($medium-size - $trough_size) / 2 12px; } &.vertical { padding: 12px ($medium-size - $trough_size) / 2; } // the slider is inside the trough, so to have make it bigger there's a negative margin slider { min-height: $slider_size; min-width: $slider_size; margin: $slider_margin; } // click-and-hold the slider to activate &.fine-tune { &.horizontal { min-height: $finetune_trough_size; padding-top: ($medium-size - $finetune_trough_size) / 2; padding-bottom: ($medium-size - $finetune_trough_size) / 2; } &.vertical { min-width: $finetune_trough_size; padding-left: ($medium-size - $finetune_trough_size) / 2; padding-right: ($medium-size - $finetune_trough_size) / 2; } // to make the trough grow in fine-tune mode slider { margin: $finetune_slider_margin; } } // the backing bit trough { transition: background-color $duration $ease-out; outline: none; background-color: $track; &:disabled { background-color: $track-disabled; } } // the colored part of the backing bit highlight { transition: background-image $duration $ease-out; background-image: image($primary); &:disabled { background-color: $background; background-image: image($text-secondary-disabled); } } // this is another differently styled part of the backing bit, the most relevant use case is for example // in media player to indicate how much video stream as been cached fill { transition: background-color $duration $ease-out; background-color: $track; &:disabled { background-color: transparent; } } slider { transition: all $duration $ease-out; border-radius: $circular-radius; color: $primary; background-color: $base; box-shadow: inset 0 0 0 2px $primary; &:hover { box-shadow: inset 0 0 0 2px $primary, 0 0 0 8px $divider; } &:active { box-shadow: inset 0 0 0 4px $primary, 0 0 0 8px $divider; } &:disabled { box-shadow: inset 0 0 0 2px $text-secondary-disabled; } } marks, value { color: $text-secondary; } indicator { background-color: $track; color: transparent; } //marks margins @each $scale_orient, $marks_class, $marks_pos, $marks_margin in (horizontal, top, top, bottom), (horizontal, bottom, bottom, top), (vertical, top, left, right), (vertical, bottom, right, left) { &.#{$scale_orient} marks { &.#{$marks_class} { margin-#{$marks_margin}: $_marks_distance; margin-#{$marks_pos}: -($_marks_distance + $_marks_length); } } &.#{$scale_orient}.fine-tune marks { &.#{$marks_class} { margin-#{$marks_margin}: $_marks_distance - 1px; margin-#{$marks_pos}: -($_marks_distance + $_marks_length - 1px); } } } &.horizontal { indicator { min-height: $_marks_length; min-width: 1px; } } &.vertical { indicator { min-height: 1px; min-width: $_marks_length; } } // *WARNING* scale with marks madness following @each $dir_class, $dir_infix in ('horizontal', 'horz'), ('vertical', 'vert') { @each $marks_infix, $marks_class in ('marks-before', 'marks-before:not(.marks-after)'), ('marks-after', 'marks-after:not(.marks-before)') { &.#{$dir_class}.#{$marks_class} { slider { transition: background-color $duration $ease-out, background-size $ripple-fade-out-duration $ease-out, background-image $ripple-fade-out-opacity-duration $ease-out; min-height: 32px; min-width: 32px; margin: -15px; border-radius: 50%; background-size: auto, 1000% 1000%; background-repeat: no-repeat; background-position: center center; background-color: transparent; &, &:hover, &:active, &:disabled { box-shadow: none; } &:focus { background-color: $overlay-focus; } &:hover { background-color: $overlay-hover; } &:focus:hover { background-color: $overlay-focus-hover; } &:active { transition: background-color $duration $ease-out, background-size 0ms, background-image 0ms; animation: ripple-on-slider $ripple-fade-in-duration $ease-out forwards; background-size: auto, 0% 0%; background-color: $overlay-hover; } @each $state, $state_infix in ('', ''), (':disabled', '-disabled') { &#{$state} { $_scale_asset: 'assets/scale-#{$dir_infix}-#{$marks_infix}-slider#{$state_infix}#{$asset-suffix}'; background-image: -gtk-scaled(url('#{$_scale_asset}.png'), url('#{$_scale_asset}@2.png')), radial-gradient(circle, transparent 10%, transparent 0%); } } &:active { $_scale_asset: 'assets/scale-#{$dir_infix}-#{$marks_infix}-slider#{$asset-suffix}'; background-image: -gtk-scaled(url('#{$_scale_asset}.png'), url('#{$_scale_asset}@2.png')), radial-gradient(circle, $overlay-active 10%, transparent 0%); } } } } } &.color { min-height: 0; min-width: 0; &.horizontal { padding: 0 0 12px 0; slider { &:dir(ltr), &:dir(rtl) { // specificity bump margin-bottom: $color_slider_margin; margin-top: $color_marks_slider_margin; } } } &.vertical { &:dir(ltr) { padding: 0 0 0 12px; slider { margin-left: $color_slider_margin; margin-right: $color_marks_slider_margin; } } &:dir(rtl) { padding: 0 12px 0 0; slider { margin-right: $color_slider_margin; margin-left: $color_marks_slider_margin; } } } } } /***************** * Progress bars * *****************/ progressbar { // sizing &.horizontal { trough, progress { min-height: $space-size; } } &.vertical { trough, progress { min-width: $space-size; } } // FIXME: insensitive state missing and some other state should be set probably color: $text-secondary; font-size: smaller; trough { border-radius: $corner-radius; background-color: $track-disabled; } progress { border-radius: $corner-radius; background-color: $primary; } &.osd { // progressbar.osd used for epiphany page loading progress min-width: $space-size; min-height: $space-size; background-color: transparent; trough { background-color: transparent; } progress { background-color: $primary; } } trough.empty progress { all: unset; } // makes the progress indicator disappear, when the fraction is 0 } /************* * Level Bar * *************/ levelbar { &.horizontal { block { min-height: $space-size; } &.discrete block { min-width: $medium-size; &:not(:last-child) { margin-right: 2px; } } } &.vertical { block { min-width: $space-size; } &.discrete block { min-height: $medium-size; &:not(:last-child) { margin-bottom: 2px; } } } // imitate the entry style trough { border-radius: $corner-radius; // &:disabled { background-color: $base-alt; } } block { &.low { background-color: $warning; } &.high, &:not(.empty) { background-color: $primary; } &.full { background-color: $success; } &.empty { background-color: $track-disabled; } } } /**************** * Print dialog * *****************/ printdialog { paper { padding: 0; border: 1px solid $divider; background-color: $base; color: $text; } .dialog-action-box { margin: 12px; } } /********** * Frames * **********/ %frame { margin: 0; padding: 0; border: 1px solid $divider; border-radius: 0; box-shadow: none; } .frame { @extend %frame; &.view { border-radius: $corner-radius; } &.flat { border-style: none; } } frame { & > border { @extend %frame; } &.flat > border, & > border.flat, statusbar & > border { border: none; } // for backward compatibility } actionbar > revealer > box { padding: $space-size; border-top: 1px solid $divider; background-color: $base; background-clip: border-box; .background.csd box.vertical > & { border-radius: 0 0 $window-radius $window-radius; } button:not(.suggested-action):not(.destructive-action) { @extend %button-flat; } .linked > button:not(.suggested-action):not(.destructive-action) { @extend %button-basic; } // .linked:not(.vertical) > entry:not(:only-child) { border-radius: $corner-radius; } } scrolledwindow { viewport.frame { // avoid double borders when viewport inside scrolled window border: none; } stack &.frame { // border-radius: $corner-radius; viewport.frame list { border: none; } } // This is used when content is touch-dragged past boundaries. // draws a box on top of the content, the size changes programmatically. @at-root overshoot { &.top { @include overshoot(top); } &.bottom { @include overshoot(bottom); } &.left { @include overshoot(left); } &.right { @include overshoot(right); } } // // Overflow indication, works similarly to the overshoot, the size if fixed tho. // @at-root undershoot { // &.top { @include undershoot(top); } // // &.bottom { @include undershoot(bottom); } // // &.left { @include undershoot(left); } // // &.right { @include undershoot(right); } // } @at-root junction { // the small square between two scrollbars border-style: solid none none solid; border-width: 1px; border-color: $divider; background-color: $base; &:dir(rtl) { border-style: solid solid none none; } } } // vbox and hbox separators separator { min-width: 1px; min-height: 1px; background-color: $divider; } %hide_separators { min-width: 0; min-height: 0; background-color: transparent; } /********* * Lists * *********/ %circular_list { border-radius: $corner-radius + 1px; box-shadow: none; border: 1px solid $divider; > separator { background: none; min-height: 0; } } %circular_row { border-radius: 0; &:not(:first-child) { border-top: 1px solid $border; } &:first-child { border-top-left-radius: $corner-radius; border-top-right-radius: $corner-radius; } &:last-child { // Not use ? border-bottom-left-radius: $corner-radius; border-bottom-right-radius: $corner-radius; } &:only-child { border-radius: $corner-radius; } &:focus { box-shadow: inset 0 0 0 1000px $overlay-focus; } } list { border-color: $divider; background-color: $base; row { padding: $space-size / 2; } &.content:not(.conversation-listbox) { @extend %circular_list; > row { @extend %circular_row; } } &.navigation-sidebar { padding: $space-size / 2; > row { border-radius: $corner-radius; } } } row { @at-root %row_activatable, &.activatable { transition: $transition, background-size $ripple-fade-out-duration $ease-out, background-image $ripple-fade-out-opacity-duration $ease-out; outline: none; box-shadow: inset 0 0 0 9999px transparent; background-image: radial-gradient(circle, transparent 10%, transparent 0%); background-repeat: no-repeat; background-position: center; background-size: 1000% 1000%; &:focus { box-shadow: inset 0 0 0 9999px $overlay-focus; } &:hover { transition: $transition, box-shadow 0ms, background-size $ripple-fade-out-duration $ease-out, background-image $ripple-fade-out-opacity-duration $ease-out; box-shadow: inset 0 0 0 9999px $overlay-hover; } &.has-open-popup, // this is for indicathing which row generated a popover see https://bugzilla.gnome.org/show_bug.cgi?id=754411 &:active { transition: $transition, background-size 0ms, background-image 0ms; animation: ripple $ripple-fade-in-duration $ease-out forwards; box-shadow: inset 0 0 0 9999px $overlay-hover; background-image: radial-gradient(circle, $overlay-active 10%, transparent 0%); background-size: 0% 0%; } button.circular { @extend %button-flat-simple; } } &:selected { color: inherit; // for overlays background-color: $divider; image, label { color: $text; } button image, button label { color: inherit; } &:disabled { image, label { color: $text-disabled; } } } } /********************* * App Notifications * *********************/ .app-notification { // @extend %osd; @extend %toolbar_osd; margin: 8px; button { @extend %button-flat; &.text-button:not(:disabled) { color: $primary; } } &.frame, border { border-style: none; } } /************* * Expanders * *************/ expander { title > arrow { transition: all $duration $ease-out; min-width: 16px; min-height: 16px; -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); -gtk-icon-transform: rotate(-90deg); &:dir(rtl) { -gtk-icon-transform: rotate(90deg); } &:checked { -gtk-icon-transform: unset; } color: $text-secondary; &:hover, &:active { color: $text; } &:disabled { color: $text-secondary-disabled; } } } /************ * Calendar * ************/ calendar { padding: 1px; border: 1px solid $divider; color: $text; &:disabled { color: $text-disabled; } &:selected { @extend %selected_items; border-radius: $corner-radius + 1px; } &.header { border-style: none none solid; border-color: $divider; border-radius: 0; } &.button { @extend %button-flat-simple; } &.highlight { color: $text-secondary; font-weight: 500; } &:indeterminate { color: $text-secondary-disabled; } } /*********** * Dialogs * ***********/ messagedialog { // Message Dialog styling &.background { background-color: $surface; &.csd { // rounded bottom border styling for csd version border-bottom-left-radius: $window-radius; border-bottom-right-radius: $window-radius; } } .titlebar { min-height: $small-size; border-style: none; box-shadow: none; background-color: $surface; color: $text; &:backdrop { background-color: $surface; color: $text-secondary; } } .dialog-action-box { margin-top: -$space-size; // padding: $space-size; button, .linked:not(.vertical) > button { @extend %button-flat; &, &:first-child, &:last-child { border-radius: $corner-radius; } &:not(:last-child) { margin-right: $space-size; } &.suggested-action:not(:disabled) { color: $suggested; } &.destructive-action:not(:disabled) { color: $destructive; } } } } filechooser { .csd & { background-color: $base; border-radius: 0 0 $window-radius $window-radius; } .dialog-action-box { border-top: 1px solid $divider; } #pathbarbox { border-bottom: 1px solid $divider; background-color: $background; > stack > box > button { // The new folder button @extend %button-flat; @extend %circular-button; } } stack.view { background-color: transparent; padding: 0; scrolledwindow { background-color: transparent; border-radius: 0 0 $window-radius 0; list { background-color: transparent; } } > placesview { background-color: transparent; // border-bottom-right-radius: $window-radius; > actionbar { &, > revealer > box { background-color: transparent; } } } frame > border { border: none; } } .csd & placessidebar { background: none; border-bottom-left-radius: $window-radius; } actionbar { &, > revealer > box { background-color: transparent; } } } // filechooserbutton:drop(active) { // box-shadow: none; // } /*********** * Sidebar * ***********/ .sidebar { border-style: none; // background-color: $base; &:not(separator) { @at-root %sidebar_left, &:dir(ltr), &.left, &.left:dir(rtl) { border-right: 1px solid $divider; border-left-style: none; } @at-root %sidebar_right, &:dir(rtl), &.right { border-left: 1px solid $divider; border-right-style: none; } } list { background-color: transparent; } paned & { &.left, &.right, &.left:dir(rtl), &:dir(rtl), &:dir(ltr), & { border-style: none; }} } stacksidebar.sidebar { & { &:dir(ltr), &.left, &.left:dir(rtl) { list { @extend %sidebar_left; }} &:dir(rtl), &.right { list { @extend %sidebar_right; }} } + separator.vertical, separator.horizontal { @extend %hide_separators; } list { padding: $space-size / 2; background-color: $base; // This should not be necessary, but the parent stacksidebar ignores background-color. } row { min-height: 32px; padding: 0 $space-size / 2; border-radius: $corner-radius; &:selected { background-color: $primary; color: on($primary); font-weight: 500; label, image { color: on($primary); } } + row { margin-top: $space-size / 2; } > label { padding-left: $space-size; padding-right: $space-size; color: inherit; } &.needs-attention > label { @extend %needs-attention; } } } // separator.sidebar { // background-color: $divider; // } /**************** * File chooser * ****************/ // dim the sidebar icons, see bug #786613 for details on this oddity row image.sidebar-icon { transition: color $duration $ease-out; color: $text-secondary; &:disabled { color: $text-secondary-disabled; } } placessidebar.sidebar { > viewport.frame { border-style: none; } list { padding: $space-size; > separator { @extend %hide_separators; } } row { // Needs overriding of the GtkListBoxRow padding min-height: 32px; margin: 0; // Remove unwanted hard-coded vertical margins with -1px padding: 0; border-radius: $corner-radius; // Using margins/padding directly in the SidebarRow // will make the animation of the new bookmark row jump > revealer { padding: 0 8px 0 16px; } &:selected { background-color: $divider; font-weight: 500; // &, image.sidebar-icon, button.sidebar-button { color: $text; } } &:disabled { color: $text-disabled; } image.sidebar-icon { &:dir(ltr) { padding-right: 8px; } &:dir(rtl) { padding-left: 8px; } } label.sidebar-label { color: inherit; &:dir(ltr) { padding-right: 2px; } &:dir(rtl) { padding-left: 2px; } } button.sidebar-button { @extend %button-flat-simple; @extend %small-button; } &.sidebar-placeholder-row { background-color: $overlay-hover; } &.sidebar-new-bookmark-row { color: $primary; image.sidebar-icon { color: $primary; } } &:drop(active) { transition: $transition, box-shadow 0ms, background-size $ripple-fade-out-duration $ease-out, background-image $ripple-fade-out-opacity-duration $ease-out; box-shadow: inset 0 0 0 9999px $overlay-hover; } } } placesview { .server-list-button > image { -gtk-icon-transform: rotate(0turn); } .server-list-button:checked > image { -gtk-icon-transform: rotate(-0.5turn); } // this selects the "connect to server" label > actionbar > revealer > box > label { padding-left: 8px; padding-right: 8px; } } /********* * Paned * *********/ paned { > separator { min-width: 1px; min-height: 1px; -gtk-icon-source: none; // defeats the ugly default handle decoration border-style: none; // just to be sure background-color: transparent; // workaround, using background istead of a border since the border will get rendered twice (?) background-image: image($divider); background-size: 1px 1px; background-clip: content-box; // avoids borders image being rendered twice (?) &.wide { min-width: 6px; min-height: 6px; background-color: $background; background-image: image($divider), image($divider); background-size: 1px 1px, 1px 1px; } } &.horizontal > separator { background-repeat: repeat-y; &:dir(ltr) { margin: 0 -8px 0 0; padding: 0 8px 0 0; background-position: left; } &:dir(rtl) { margin: 0 0 0 -8px; padding: 0 0 0 8px; background-position: right; } &.wide { margin: 0; padding: 0; background-repeat: repeat-y, repeat-y; background-position: left, right; } } &.vertical > separator { margin: 0 0 -8px 0; padding: 0 0 8px 0; background-repeat: repeat-x; background-position: top; &.wide { margin: 0; padding: 0; background-repeat: repeat-x, repeat-x; background-position: bottom, top; } } } /************** * GtkInfoBar * **************/ infobar { border: none; margin-bottom: 0; &.info { & > revealer > box, &:hover > revealer > box, &:backdrop > revealer > box { background-color: $base; link:link { color: on($primary); } button { &, &.text-button:not(:disabled) { color: $primary; } } } } &.action, &.question { & > revealer > box, &:backdrop > revealer > box { background-color: $primary; color: on($primary); link:link { color: on($primary); } button { &, &:hover, &:focus, &:active, &:checked, &.text-button:not(:disabled) { color: on($primary); } } } &:hover > revealer > box { background-color: if($variant == 'light', lighten($primary, 5%), darken($primary, 5%)); } } &.warning { & > revealer > box, &:backdrop > revealer > box { background-color: $warning; color: on($warning); link:link { color: on($warning); } button { @extend %button-on-dark; &, &:hover, &:focus, &:active, &:checked, &.text-button:not(:disabled) { color: on($warning); } } } &:hover > revealer > box { background-color: if($variant == 'light', lighten($warning, 5%), darken($warning, 5%)); } } &.error { & > revealer > box, &:backdrop > revealer > box { background-color: $error; color: on($error); link:link { color: on($error); } button { &, &:hover, &:focus, &:active, &:checked, &.text-button:not(:disabled) { color: on($error); } } } &:hover > revealer > box { background-color: if($variant == 'light', lighten($error, 5%), darken($error, 5%)); } } } /************ * Tooltips * ************/ tooltip { &.background { // background-color needs to be set this way otherwise it gets drawn twice // see https://bugzilla.gnome.org/show_bug.cgi?id=736155 for details. background-color: $tooltip; color: on($tooltip); } &.background.csd { border-radius: $corner-radius; } // padding: 4px; /* not working */ border-radius: $corner-radius/2; box-shadow: none; // otherwise it gets inherited by windowframe.csd &:not(.csd):not(.unity-csd) { // border: 1px solid $divider; // border-radius: $corner-radius + 1px; // background-clip: $background-clip-extra; } // FIXME: we need a border or tooltips vanish on black background. decoration { background-color: transparent; } > box { margin: -6px; // Remove hard-coded 6px margin min-height: 32px - 4px * 2; padding: 4px 8px; } * { // workaround for Eclipse. // do not include any declaration here. } } /***************** * Color Chooser * *****************/ colorswatch { // This widget is made of two boxes one on top of the other, the lower box is colorswatch {} the other one // is colorswatch overlay {}, colorswatch has the programmatically set background, so most of the style is // applied to the overlay box. // base color corners rounding // to avoid the artifacts caused by rounded corner anti-aliasing the base color // sports a bigger radius. // nth-child is needed by the custom color strip. &.top { border-top-left-radius: $corner-radius; border-top-right-radius: $corner-radius; overlay { border-top-left-radius: $corner-radius; border-top-right-radius: $corner-radius; } } &.bottom { border-bottom-left-radius: $corner-radius; border-bottom-right-radius: $corner-radius; overlay { border-bottom-left-radius: $corner-radius; border-bottom-right-radius: $corner-radius; } } &.left, &:first-child:not(.top) { border-top-left-radius: $corner-radius; border-bottom-left-radius: $corner-radius; overlay { border-top-left-radius: $corner-radius; border-bottom-left-radius: $corner-radius; } } &.right, &:last-child:not(.bottom) { border-top-right-radius: $corner-radius; border-bottom-right-radius: $corner-radius; overlay { border-top-right-radius: $corner-radius; border-bottom-right-radius: $corner-radius; } } &.dark { color: on(dark); } &.light { color: on(light); } overlay { transition: $transition-shadow; &:hover { box-shadow: 0 0 0 2px $primary; } } &#add-color-button { border-radius: $corner-radius 0 0 $corner-radius; &:only-child { border-radius: $corner-radius; } overlay { background-color: $fill; &:hover { background-color: $divider; box-shadow: none; } &:active { background-color: $track; } } } &:disabled { opacity: 0.5; overlay { box-shadow: none; } } &#editor-color-sample { border-radius: $menu-radius; overlay { border-radius: $menu-radius; } overlay:hover { box-shadow: $shadow-z1; } } } // colorscale popup colorchooser .popover.osd { transition: $transition-shadow; border-radius: $corner-radius; box-shadow: $shadow-z4, inset 0 1px highlight($surface); background-color: $surface; &:backdrop { box-shadow: $shadow-z2, inset 0 1px highlight($surface); } } /******** * Misc * ********/ // content view (grid/list) .content-view { background-color: $background; // &:hover { -gtk-icon-effect: highlight; } rubberband, .rubberband { @extend rubberband; } } // .scale-popup { // .osd & { @extend %osd; } // // .osd & button.flat { // FIXME: quick hack, redo properly // } // // button { // +/- buttons on GtkVolumeButton popup // } // } /********************** * Window Decorations * **********************/ decoration { transition: $transition-shadow; border-radius: $window-radius; // background-color: $background; @if $rimless == 'true' { box-shadow: $shadow-z16, 0 0 36px transparent; } @else { box-shadow: $shadow-z16, 0 0 0 1px $window-border, 0 0 36px transparent; @if $variant == 'dark' { .background.csd & { border: 1px solid highlight($background); background-clip: border-box; background-color: $background; } } } // this is used for the resize cursor area margin: 8px; &:backdrop { // the transparent shadow here is to enforce that the shadow extents don't // change when we go to backdrop, to prevent jumping windows. // The biggest shadow should be in the same order then in the active state // or the jumping will happen during the transition. @if $rimless == 'true' { box-shadow: $shadow-z4, 0 0 36px transparent; } @else { box-shadow: $shadow-z4, 0 0 0 1px $window-border, 0 0 36px transparent; } } .maximized &, .fullscreen &, .tiled &, .tiled-top &, .tiled-right &, .tiled-bottom &, .tiled-left & { border-radius: 0; } .popup & { box-shadow: none; border: none; } // server-side decorations as used by mutter .ssd & { border: none; border-radius: $window-radius $window-radius 0 0; @if $rimless == 'true' { box-shadow: none; } @else { box-shadow: 0 0 0 1px $window-border; // just doing borders, wm draws actual shadows } } .metacity & { border-bottom-left-radius: 0; border-bottom-right-radius: 0; border: none; } .csd.popup & { border-radius: $menu-radius; border: none; @if $rimless == 'true' { box-shadow: $shadow-z4; } @else { box-shadow: $shadow-z5, 0 0 0 1px $window-border; } } tooltip.csd & { border-radius: $menu-radius; box-shadow: none; border: none; } messagedialog.csd & { border-radius: $window-radius; @if $variant == 'dark' { border: 1px solid highlight($surface); background-color: $surface; background-clip: border-box; } } .solid-csd & { margin: 0; padding: 2px; border-radius: 0; box-shadow: none; background-color: $titlebar; border: 1px solid $solid-border; &:backdrop { background-color: $titlebar-backdrop; } } } // Windows button %mac_window_button { min-height: 16px; min-width: 16px; padding: 0; margin: 0 $space-size - 2px; &.minimize, &.maximize, &.close { color: transparent; &:hover { box-shadow: none; } &:active { box-shadow: inset 0 0 0 9999px rgba(black, if($topbar == 'dark', 0.12, 0)); background-image: radial-gradient(circle, rgba(black, 0.12) 10%, transparent 0%); } &:hover, &:active { color: if($colorscheme != 'dracula', white, rgba(black, 0.5)); } &:backdrop { background-color: $titlebar-track; &:hover, &:active { color: $titlebar-text-disabled; } } } &.minimize { // Window minimize button background-color: $titlebutton-min; &:active { background-color: mix($titlebar-text, $titlebutton-min, 25%); } } &.maximize { // Window maximize button background-color: $titlebutton-max; &:active { background-color: mix($titlebar-text, $titlebutton-max, 25%); } } &.close { // Window close button background-color: $titlebutton-close; &:active { background-color: mix($titlebar-text, $titlebutton-close, 25%); } } } %normal_window_button { min-height: 22px; min-width: 22px; padding: 0; margin: 0 $space-size - 2px; &.minimize, &.maximize, &.close { color: $titlebar-text-secondary; background-color: gtkalpha(currentColor, 0.1); &:hover { color: $titlebar-text; background-color: gtkalpha(currentColor, 0.15); } &:active { color: $titlebar-text; background-color: gtkalpha(currentColor, 0.2); } &:backdrop { opacity: 0.65; } } } %firefox_window_button { &.minimize, &.maximize, &.close { background-repeat: no-repeat; background-size: 16px 16px; background-position: center; &, &:hover, &:active { box-shadow: none; color: transparent; animation: none; transition: $transition; } } &.minimize { // Window minimize button &:hover, &:active { background-image: url("assets/scalable/minimize.svg"); } } &.maximize { // Window maximize button &:hover, &:active { background-image: url("assets/scalable/maximize.svg"); } } &.close { // Window close button &:hover, &:active { background-image: url("assets/scalable/close.svg"); } } } button.titlebutton:not(.suggested-action):not(.destructive-action) { @extend %circular-button; @if $window_button == 'mac' { @extend %mac_window_button; .background.csd headerbar.titlebar.default-decoration & { @extend %firefox_window_button; } } @else { @extend %normal_window_button; } .background.csd.maximized headerbar.titlebar.default-decoration &.maximize, .background.csd.fullscreen headerbar.titlebar.default-decoration &.maximize, .background.csd.tiled headerbar.titlebar.default-decoration &.maximize { &:hover, &:active { background-image: url("assets/scalable/unmaximize.svg"); } } } .monospace { font-family: monospace; } /********************** * Touch Copy & Paste * **********************/ // touch selection handlebars for the Popover.osd above cursor-handle { color: $primary; -gtk-icon-source: -gtk-recolor(url("assets/scalable/cursor-handle-symbolic.svg")); &.top:dir(ltr), &.bottom:dir(rtl) { -gtk-icon-transform: rotate(90deg); } &.bottom:dir(ltr), &.top:dir(rtl) { -gtk-icon-transform: unset; } &.insertion-cursor:dir(ltr), &.insertion-cursor:dir(rtl) { padding-top: 6px; -gtk-icon-transform: rotate(45deg); } } .context-menu { font: initial; } // Decouple the font of context menus from their entry/textview // shortcut window keys .keycap { min-width: 28px - 8px * 2; min-height: 28px - 2px; margin-top: 2px; padding-bottom: 2px; padding-left: 8px; padding-right: 8px; border: solid 1px $divider; border-radius: $corner-radius + 1px; box-shadow: inset 0 -2px $divider; background-color: $surface; color: $text; font-size: smaller; } :not(decoration):not(window):drop(active) { // FIXME needs to be done widget by widget, this wildcard should really die caret-color: $primary; } stackswitcher { min-height: 0; padding: $space-size / 2; // margin: $space-size 0; border-radius: $corner-radius + $space-size / 2; background-color: $fill; border: none; &.linked:not(.vertical) > button:not(.suggested-action):not(.destructive-action) { margin: 0 0; background-color: transparent; border-radius: $corner-radius; padding: ($medium-size - 24px - $space-size) / 2 ($medium-size - 16px) / 2; &.text-button { min-width: 100px; } &:focus:not(:hover):not(:checked) { box-shadow: none; } &:checked { transition: $transition; background-color: if($variant == 'light', rgba($base, 1), rgba(white, 0.15)); color: $text; box-shadow: 0 1px 3px rgba(black, 0.06); } } button.text-button { min-width: 100px; } // FIXME aggregate with buttons button.circular, button.text-button.circular { // FIXME aggregate with buttons min-width: $medium-size; min-height: $medium-size; padding: 0; } } /************* * App Icons * *************/ // Outline for low res icons .lowres-icon { // -gtk-icon-shadow: none; } // Drapshadow for large icons .icon-dropshadow { // -gtk-icon-shadow: none; } /********* * Emoji * *********/ popover.emoji-picker { padding: 0; entry { border-bottom: 1px solid $divider; border-image: none; border-radius: 0; box-shadow: none; background-color: transparent; } scrolledwindow { border-bottom: 1px solid $divider; } } button.emoji-section { margin: 4px; &:checked { // background-color: transparent; color: $primary; } &:not(:last-child) { margin-right: 0; } } popover.emoji-picker .emoji { min-width: 3em; min-height: 3em; padding: 0 8px; // font-size: larger; widget { transition: $transition; border-radius: $corner-radius; &:hover { background-color: $overlay-hover; } } } popover.emoji-completion { padding: 8px 0; arrow { border: none; background: none; } .emoji-completion-row { min-height: $menuitem-size; padding: 0 12px; } .emoji:hover { background-color: $overlay-hover; } }