@keyframes zhny-orgtree-node-loading {
  0% {
    transform: translate(-50%, -50%) rotate(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}

// 深色连接线颜色
@dark-line-color: #5970CC;
// 深色节点边框颜色
@dark-node-border-color: #5970CC;

.zhny-orgtree-container {
  display: inline-block;
  padding: 15px;
  .zhny-orgtree {
    display: table;
    text-align: center;
    &:before,
    &:after {
      content: '';
      display: table;
    }
    &:after {
      clear: both;
    }
  }
}

.zhny-orgtree-node,
.zhny-orgtree-node-children {
  position: relative;
  margin: 0;
  list-style-type: none;

  &:before,
  &:after {
    transition: all 0.35s;
  }
}

// 默认节点标签样式
.zhny-orgtree-node-label {
  position: relative;
  .zhny-orgtree.vertical & {
    display: inline-block;
  }
  .zhny-orgtree.horizontal & {
    display: table-cell;
    vertical-align: middle;
  }
  .zhny-orgtree.horizontal .zhny-orgtree-node.collapsed & {
    &::after {
      content: '';
      position: absolute;
      left: 100%;
      top: 0;
      width: 10px;
      height: 50%;
      border-bottom: 1px solid #ddd;
    }
  }
  .zhny-orgtree.vertical .zhny-orgtree-node.collapsed & {
    &::after {
      content: '';
      position: absolute;
      left: 0;
      top: 100%;
      width: 50%;
      height: 11px;
      border-right: 1px solid #ddd;
      .skin-dark & {
        border-right: 1px solid @dark-line-color;
      }
    }
  }
  .zhny-orgtree-node-label-inner {
    padding: 10px 15px;
    text-align: center;
    color: #333;
    border-radius: 3px;
    white-space: nowrap;
    border: 1px solid #ddd;
    box-shadow: 0 1px 5px rgba(0, 0, 0, 0.15);
    .skin-dark & {
      color: #fff;
      border: 1px solid @dark-node-border-color;
    }
    .no-node-style & {
      border: none;
      padding: 0;
      box-shadow: none;
    }
  }
}

// 展开/收缩按钮
.zhny-orgtree-node-btn {
  position: absolute;
  width: 20px;
  height: 20px;
  z-index: 10;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 50%;
  transition: all 0.35s ease;
  cursor: pointer;
  .skin-dark & {
    background-color: @dark-node-border-color;
    border: 1px solid @dark-node-border-color;
  }

  // 垂直方向按钮位置控制
  .vertical & {
    top: 100%;
    left: 50%;
    margin-top: 11px;
    margin-left: 0;
    transform: translateX(-50%);
  }

  // 水平方向按钮位置控制
  .horizontal & {
    top: 50%;
    left: 100%;
    margin-top: 0;
    margin-left: 10px;
    transform: translateY(-50%);
  }

  // 鼠标悬停样式
  &:hover {
    background-color: #e7e8e9;
    .skin-dark & {
      background-color: #95ADFF;
    }
  }

  // 非loading状态下的按钮样式
  .zhny-orgtree-node:not(.loading) & {
    &:before,
    &:after {
      content: '';
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
      background: #a3a3a3;
      .skin-dark & {
        background: #fff;
      }
    }

    &:before {
      width: 10px;
      height: 1px;
    }

    &:after {
      width: 1px;
      height: 10px;
    }
  }

  .zhny-orgtree-node.loading & {
    pointer-events: none;
    &:before {
      content: '';
      position: absolute;
      left: 50%;
      top: 50%;
      width: 10px;
      height: 10px;
      border-radius: 50%;
      border-left: 1px solid #a3a3a3;
      background: none!important;
      transform: translate(-50%, -50%);
      animation: zhny-orgtree-node-loading 1s linear infinite;
      .skin-dark & {
        border-left: 1px solid #fff;
      }
    }
    &:after {
     display: none;
    }
  }

  &.expanded:after {
    height: 0 !important;
  }
}

.zhny-orgtree-node {
  padding-top: 20px;
  display: table-cell;
  vertical-align: top;
  .zhny-orgtree.horizontal .zhny-orgtree-node-children > & {
    display: block;
  }

  &.is-leaf,
  &.collapsed {
    padding-left: 10px;
    padding-right: 10px;
  }

  &:before,
  &:after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 50%;
    height: 19px;
  }

  &:after {
    left: 50%;
    border-left: 1px solid #ddd;
    .skin-dark & {
      border-left: 1px solid @dark-line-color;
    }
  }

  &:not(:first-child):before,
  &:not(:last-child):after {
    border-top: 1px solid #ddd;
    .skin-dark & {
      border-top: 1px solid @dark-line-color;
    }
  }

  .collapsable &.collapsed {
    padding-bottom: 30px;
  }
}

.zhny-orgtree > .zhny-orgtree-node {
  padding-top: 0;

  &:after {
    border-left: 0;
  }
}

.zhny-orgtree-node-children {
  .zhny-orgtree.vertical & {
    display: table;
    padding-top: 21px;
    &:before {
      content: '';
      position: absolute;
      top: 0;
      left: 50%;
      width: 0;
      height: 20px;
      border-left: 1px solid #ddd;
      .skin-dark & {
        border-left: 1px solid @dark-line-color;
      }
    }
  }
  .zhny-orgtree.horizontal & {
    display: table-cell;
    padding-left: 20px;
    &:before {
      content: '';
      position: absolute;
      top: 50%;
      left: 0;
      width: 20px;
      height: 0;
      border-left: 0;
      border-top: 1px solid #ddd;
      .skin-dark & {
        border-top: 1px solid @dark-line-color;
      }
    }
  }
}

.zhny-orgtree.vertical {
  .collapsable &.collapsed {
    .zhny-orgtree-node-label:after {
      content: '';
      position: absolute;
      top: 100%;
      left: 0;
      width: 50%;
      height: 20px;
      border-right: 1px solid #ddd;
    }
  }
}

.zhny-orgtree.horizontal {
  .zhny-orgtree-node {
    display: table-cell;
    float: none;
    padding-top: 0;
    padding-left: 20px;

    &.is-leaf,
    &.collapsed {
      padding-top: 10px;
      padding-bottom: 10px;
    }

    &:before,
    &:after {
      width: 19px;
      height: 50%;
    }

    &:after {
      top: 50%;
      left: 0;
      border-left: 0;
    }

    &:only-child:before {
      top: 1px;
      border-bottom: 1px solid #ddd;
    }

    &:not(:first-child):before,
    &:not(:last-child):after {
      border-top: 0;
      border-left: 1px solid #ddd;
      .skin-dark & {
        border-left: 1px solid @dark-line-color;
      }
    }

    &:not(:only-child):after {
      border-top: 1px solid #ddd;
      .skin-dark & {
        border-top: 1px solid @dark-line-color;
      }
    }

    .org-tree-node-inner {
      display: table;
    }
  }

  &.collapsable .zhny-orgtree-node.collapsed {
    padding-right: 30px;

    .zhny-orgtree-node-label:after {
      top: 0;
      left: 100%;
      width: 20px;
      height: 50%;
      border-right: 0;
      border-bottom: 1px solid #ddd;
    }
  }

  & > .zhny-orgtree-node:only-child:before {
    border-bottom: 0;
  }
}
