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;
    border-spacing: 0;

    %spinbutton_horz_entry {
      min-width: 28px;
      // reset all the other props since the spinbutton node is styled here
      margin: 0;
      background: none;
      background-color: transparent;
      border: none;
      border-radius: 0;
      box-shadow: none;
      padding: 6px;

      &:backdrop:disabled { background-color: transparent; }
    }

    > text {
      @extend %spinbutton_horz_entry;
    }

    /* :not here just to bump specificity above that of the list button styling */
    > button.image-button.up:not(.flat),
    > button.image-button.down:not(.flat) {
      min-height: 16px;
      margin: 0;
      padding-bottom: 0;
      padding-top: 0;
      color: mix($fg_color, $base_color, 90%);
      background-image: none;
      border-style: none none none solid;
      border-color: transparentize($borders_color, 0.7);
      border-radius: 0;
      box-shadow: none;
      background-color: transparent;

      &:dir(rtl) { border-style: none solid none none; }

      &:hover {
        color: $fg_color;
        background-color: darken($bg_color,5%);
      }

      &:disabled {
        color: transparentize($insensitive_fg_color, 0.7);
        background-color: transparent;
      }

      &:active {
        background-color: transparentize(black, 0.9);
        box-shadow: inset 0 2px 3px -1px transparentize(black, 0.8);
      }

      &:dir(ltr):last-child { border-radius: 0 6px 6px 0; }

      &:dir(rtl):first-child { border-radius: 6px 0 0 6px; }
    }
  }

  // OSD horizontal
  .osd &:not(.vertical) {
    > text {
      @extend %spinbutton_horz_entry;
    }

    > button.image-button.up:not(.flat),
    > button.image-button.down:not(.flat) {
      @include button(undecorated);

      color: $osd_fg_color;
      border-style: none none none solid;
      border-color: transparentize($osd_borders_color, 0.3);
      border-radius: 0;
      box-shadow: none;
      -gtk-icon-shadow: 0 1px black;

      &:dir(rtl) { border-style: none solid none none; }

      &:hover {
        @include button(undecorated);

        color: $osd_fg_color;
        border-color: transparentize(opacify($osd_borders_color, 1), 0.5);
        background-color: darken($osd_bg_color,10%);
        -gtk-icon-shadow: 0 1px black;
        box-shadow: none;
      }

      &:disabled {
        @include button(undecorated);

        color: $osd_insensitive_fg_color;
        border-color: transparentize(opacify($osd_borders_color, 1), 0.5);
        -gtk-icon-shadow: none;
        box-shadow: none;
      }

      &:dir(ltr):last-child { border-radius: 0 6px 6px 0; }

      &:dir(rtl):first-child { border-radius: 6px 0 0 6px; }
    }
  }

  // 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
    &:disabled { color: $insensitive_fg_color; }

    &:drop(active) {
      border-color: transparent;
      box-shadow: none;
    }

    > text {
      @extend %entry;

      min-height: 32px;
      min-width: 32px;
      padding: 0;
      border-radius: 0;

      > selection {
        background-color: $backdrop_selected_bg_color;
        color: transparent;
        &:focus-within {
          color: $fg_color;
        }
      }
      > block-cursor { @include entry(block_cursor); }
    }

    > button {
      min-height: 32px;
      min-width: 32px;
      padding: 0;

      &.up { @extend %top_button; }

      &.down { @extend %bottom_button; }
    }

    %top_button {
      border-bottom-style: none;
      border-bottom-left-radius: 0;
      border-bottom-right-radius: 0;
    }

    %bottom_button {
      border-top-style: none;
      border-top-left-radius: 0;
      border-top-right-radius: 0;
    }
  }

  // OSD vertical
  .osd &.vertical > button:first-child {
    @include button(osd);

    &:hover { @include button(osd-hover);}

    &:active { @include button(osd-active); }

    &:disabled { @include button(osd-insensitive); }
  }

  // Misc
  treeview &:not(.vertical) {
    min-height: 0;
    border-style: none;
    border-radius: 0;

    > text {
      min-height: 0;
      padding: 1px 2px;
    }
  }

  font-feature-settings: "tnum";
}

