.v-center {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
}
.v-row {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  /* flex: 1; */
}
.v-row-c {
  display: flex;
  flex-direction: row;
  align-items: center;
}
.v-row-l {
  display: flex;
  flex-direction: row;
  align-items: flex-start;
}
.v-row-r {
  display: flex;
  flex-direction: row;
  align-items: flex-end;
}
.v-row-wrap {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-content: flex-start;
}

.v-column {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  /* flex: 1; */
}
.v-column-c {
  display: flex;
  flex-direction: column;
  align-items: center;
  /* flex: 1; */
}
.v-column-l {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}
.v-column-r {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
}

.v-label {
  color: #aaa;
  font-size: 12px;
}

.v-row-margin12 > :not(.v-label):not(:last-child) {
  margin-bottom: 12px;
}

.v-sub-margin6 > *:not(:first-child) {
  margin-left: 6px;
}

.v-sub-margin12 > *:not(:first-child) {
  margin-left: 12px;
}

.v-sub-margin20 > *:not(:first-child) {
  margin-left: 20px;
}

.v-sub-margin24 > *:not(:first-child) {
  margin-left: 24px;
}

.v-sub-margin32 > *:not(:first-child) {
  margin-left: 32px;
}

.v-column-margin6 > *:not(:first-child) {
  margin-top: 6px;
}
.v-column-margin12 > *:not(:first-child) {
  margin-top: 12px;
}
.v-column-margin24 > *:not(:first-child) {
  margin-top: 24px;
}

.v-full {
  flex: 1;
}
/* ---flex盒子 填充大小--- */
.v-box {
  position: relative;
}
.v-box-full {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
}

/* ---滚动条--- */
.v-scroll {
  overflow: auto;
}
.v-scroll-h {
  overflow: hidden;
}
.v-scroll-h:hover {
  overflow: auto;
}

/* ---表单样式--- */
.v-item {
  margin-bottom: 12px;
}
.v-item > span:first-child {
  padding-right: 12px;
  text-align: right;
  width: 88px;
  color: #333;
}
.v-item > *:last-child(1) {
  flex: 1;
}
.v-item > .required::before {
  display: inline-block;
  margin-right: 4px;
  color: #f5222d;
  font-size: 14px;
  font-family: SimSun, sans-serif;
  line-height: 1;
  content: '*';
}

/* ---工具栏--- */
.toolbar {
  padding: 12px 0;
  display: flex;
  flex-direction: row;
  align-items: center;
}

.toolbar > *:not(:first-child) {
  margin-left: 6px;
}

.toolbar.m12 > *:not(:first-child) {
  margin-left: 12px;
}

.subtitle {
  font-size: 16px;
  /* font-weight: bold; */
  color: #999;
  /* margin-bottom: 6px; */
  margin-right: 12px;
}

.act-xy:active {
  transform: translate(1px, 1px);
}
.act-zoomin:active {
  transform: scale(0.95, 0.95);
}
.act-zoomout:active {
  transform: scale(1.05, 1.05);
}

.arrow-right {
  height: 12px;
  width: 12px;
  border-radius: 1px;
  border-left: 2px solid #cccccc;
  border-top: 2px solid #cccccc;
  transform: rotate(135deg);
}

/* https://cn.vuejs.org/v2/guide/transitions.html#%E8%BF%87%E6%B8%A1%E7%9A%84%E7%B1%BB%E5%90%8D */

.slide-enter {
  opacity: 0;
  transform: translateX(22px);
  z-index: 10;
}

.slide-leave-to {
  opacity: 0;
  transform: translateX(-22px);
}

.slide-enter-active,
.slide-leave-active {
  transition: transform 0.2s, opacity 0.2s;
  transition-timing-function: ease-out;
  will-change: transform;

  position: absolute;
  left: 0;
  top: 0;
  height: 100vh;
  width: 100vw;
}

.down-enter {
  opacity: 0;
  transform: translateY(-20px);
}

.down-leave-to {
  opacity: 0;
  transform: translateY(20px);
}

.down-enter-active,
.down-leave-active {
  transition: transform 0.2s, opacity 0.2s;
  transition-timing-function: ease-out;
  will-change: transform;

  position: absolute;
  left: 0;
  top: 0;
  height: 100vh;
  width: 100vw;
}

.up-enter {
  opacity: 0;
  transform: translateY(20px);
}

.up-leave-to {
  opacity: 0;
  transform: translateY(-20px);
}

.up-enter-active,
.up-leave-active {
  transition: transform 0.2s, opacity 0.2s;
  transition-timing-function: ease-out;
  will-change: transform;

  position: absolute;
  left: 0;
  top: 0;
  height: 100vh;
  width: 100vw;
}

.updown-enter {
  opacity: 0;
  transform: translateY(20px);
}

.updown-leave-to {
  opacity: 0;
  transform: translateY(20px);
}

.updown-enter-active,
.updown-leave-active {
  transition: transform 0.2s, opacity 0.2s;
  transition-timing-function: ease-out;
  will-change: transform;

  position: absolute;
  left: 0;
  top: 0;
  height: 100vh;
  width: 100vw;
}

.show-enter {
  opacity: 0;
}

.show-leave-to {
  opacity: 0;
  transition: none;
}

.show-enter-active,
.show-leave-active {
  transition: opacity 0.2s;
  transition-timing-function: ease;
  /* will-change: transform; */

  position: absolute;
  left: 0;
  top: 0;
  /* height: 100vh; */
  /* bottom: 0; */
  width: 100vw;
}

/* 两种动画样式，用于对话框 */

.fade-enter {
  opacity: 0;
  transform: scale(1.05) translateZ(0px);
}

.fade-enter-active {
  transition: transform 0.35s, opacity 0.35s;
  transition-timing-function: cubic-bezier(0.18, 0.89, 0.32, 1.28);
  will-change: transform;

  position: absolute;
  left: 0;
  top: 0;
  height: 100vh;
  width: 100vw;
}

.fade-leave-active {
  transition: transform 0.2s, opacity 0.2s;
  transition-timing-function: ease;
  will-change: transform;

  position: absolute;
  left: 0;
  top: 0;
  height: 100vh;
  width: 100vw;
}

.fade-leave-to {
  opacity: 0;
  transform: scale(0.95) translateZ(0px);
}

.bloom-enter {
  opacity: 0;
  transform: scale(0.95) translateZ(0px);
}

.bloom-enter-active {
  transition: transform 0.2s, opacity 0.35s;
  transition-timing-function: ease;
  will-change: transform;
  /* cubic-bezier(0.18, 0.89, 0.32, 1.28); */
  /* transform: scale(1) translateZ(0px); */

  position: absolute;
  left: 0;
  top: 0;
  height: 100vh;
  width: 100vw;
}

.bloom-leave-active {
  transition: transform 0.2s, opacity 0.2s;
  transition-timing-function: ease;
  will-change: transform;
}

.bloom-leave-to {
  opacity: 0;
  transform: scale(1.05) translateZ(0px);
}
