@picker-cell-inner-cls: ~"@{picker-prefix-cls}-cell-inner";

.picker-cell-inner-style {
  min-width: 24px;
  height: 24px;
  line-height: 24px;
  width: 24px;
}

.@{picker-prefix-cls} {
  @picker-arrow-size: 7px;
  @picker-year-month-cell-width: 60px;
  @picker-panel-width: @picker-panel-cell-width * 7 + @padding-sm * 2 + 4;
  @picker-year-month-panel-width: 312px;
  @picker-week-panel-width: 312px;

  &-panel {
    display: inline-flex;
    flex-direction: column;
    text-align: center;
    background: @calendar-bg;
    border: @border-width-base @border-style-base @picker-border-color;
    border-radius: @border-radius-base;
    outline: none;

    &-focused {
      border-color: @primary-color;
    }
  }

  // ========================================================
  // =                     Shared Panel                     =
  // ========================================================
  &-decade-panel,
  &-quarter-panel,
  &-week-panel,
  &-date-panel,
  &-time-panel {
    display: flex;
    flex-direction: column;
    width: @picker-panel-width;
  }

  // ======================= Header =======================
  &-header {
    display: flex;
    padding: 0 @padding-xs;
    color: @heading-color;
    border-bottom: @border-width-base @border-style-base @picker-border-color;

    > * {
      flex: none;
    }

    button {
      padding: 0;
      color: @disabled-color;
      line-height: @picker-header-text-height;
      background: transparent;
      border: 0;
      cursor: pointer;
      transition: color @animation-duration-slow;
    }

    > button {
      min-width: 1.6em;
      font-size: @font-size-base;

      &:hover {
        color: @text-color;
      }
    }

    &-view {
      flex: auto;
      font-weight: 500;
      line-height: @picker-header-text-height;

      button {
        color: inherit;
        font-weight: inherit;

        &:not(:first-child) {
          margin-left: @padding-xs;
        }

        &:hover {
          color: @primary-color;
        }
      }
    }
  }

  // Arrow button
  &-prev-icon,
  &-next-icon,
  &-super-prev-icon,
  &-super-next-icon {
    color: @color-neutral-text-3;
    position: relative;
    display: inline-block;
    width: @picker-arrow-size;
    height: @picker-arrow-size;

    &::before {
      position: absolute;
      top: 0;
      left: 0;
      display: inline-block;
      width: @picker-arrow-size;
      height: @picker-arrow-size;
      border: 0 solid currentcolor;
      border-width: 1.5px 0 0 1.5px;
      content: "";
    }
  }

  &-super-prev-icon,
  &-super-next-icon {
    &::after {
      position: absolute;
      top: ceil((@picker-arrow-size / 2));
      left: ceil((@picker-arrow-size / 2));
      display: inline-block;
      width: @picker-arrow-size;
      height: @picker-arrow-size;
      border: 0 solid currentcolor;
      border-width: 1.5px 0 0 1.5px;
      content: "";
    }
  }

  &-prev-icon,
  &-super-prev-icon {
    transform: rotate(-45deg);
  }

  &-next-icon,
  &-super-next-icon {
    transform: rotate(135deg);
  }

  // ======================== Body ========================
  &-content {
    width: 100%;
    table-layout: fixed;
    border-collapse: collapse;

    th,
    td {
      position: relative;
      min-width: 24px;
      font-weight: 400;
    }

    th {
      height: 30px;
      color: @text-color;
      line-height: 30px;
    }
  }

  .picker-cell-inner(@cellClassName) {
    &::before {
      position: absolute;
      top: 50%;
      right: 0;
      left: 0;
      z-index: 1;
      height: @picker-panel-cell-height;
      transform: translateY(-50%);
      transition: all @animation-duration-slow;
      content: "";
    }

    // >>> Default
    .@{cellClassName} {
      position: relative;
      z-index: 2;
      display: inline-block;
      min-width: @picker-panel-cell-height;
      height: @picker-panel-cell-height;
      line-height: @picker-panel-cell-height;
      border-radius: @border-radius-base;
      transition: background @animation-duration-slow,
        border @animation-duration-slow;
    }

    // >>> Hover
    &:hover:not(&-in-view),
    &:hover:not(&-selected):not(&-range-start):not(&-range-end):not(&-range-hover-start):not(&-range-hover-end) {
      .@{cellClassName} {
        //.picker-cell-inner-style();
        background: @picker-basic-cell-hover-color;
      }
    }

    // >>> Today
    &-in-view&-today .@{cellClassName} {
      &::before {
        display: inline-block;
        content: "";
        position: absolute;
        bottom: -4px;
        left: 50%;
        transform: translateX(-50%);
        z-index: 1;
        width: 4px;
        height: 4px;
        border-radius: 50%;
        background-color: @primary-color;
      }
    }

    // >>> In Range
    &-in-view&-in-range {
      position: relative;

      &::before {
        background: @picker-basic-cell-active-with-range-color;
      }
    }

    // >>> Selected
    &-in-view&-selected,
    &-in-view&-range-start,
    &-in-view&-range-end {
      .@{cellClassName} {
        //.picker-cell-inner-style();
        color: @text-color-inverse;
        background: @primary-color;
      }
    }

    &-in-view&-range-start {
      &::before {
        background: @primary-1;
      }
    }

    &-in-view&-range-start:not(&-range-start-single):not(&-disabled),
    &-in-view&-range-end:not(&-range-end-single):not(&-disabled) {
      &::before {
        background: @picker-basic-cell-active-with-range-color;
      }
    }

    &-in-view&-range-start {
      //border-top-left-radius: 50%;
      //border-bottom-left-radius: 50%;
      //overflow: hidden;

      &::before {
        left: 50% !important;
      }

      &.@{picker-prefix-cls}-cell-range-start-single::before {
        right: 50%;
      }
    }

    &-in-view&-range-end::before {
      //border-top-right-radius: 14px;
      //border-bottom-right-radius: 14px;
      //overflow: hidden;
      right: 50% !important;
    }

    // >>> Range Hover
    &-in-view&-range-hover-start:not(&-in-range):not(&-range-start):not(&-range-end),
    &-in-view&-range-hover-end:not(&-in-range):not(&-range-start):not(&-range-end),
    &-in-view&-range-hover-start&-range-start-single,
    &-in-view&-range-hover-start&-range-start&-range-end&-range-end-near-hover,
    &-in-view&-range-hover-end&-range-start&-range-end&-range-start-near-hover,
    &-in-view&-range-hover-end&-range-end-single,
    &-in-view&-range-hover:not(&-in-range) {
      &::after {
        position: absolute;
        top: 50%;
        left: 0;
        right: 0;
        z-index: 0;
        height: 24px;
        //width: 100%;
        background: @primary-1;
        //border-top: @border-width-base dashed
        //  @picker-date-hover-range-border-color;
        //border-bottom: @border-width-base dashed
        //  @picker-date-hover-range-border-color;
        transform: translateY(-50%);
        transition: all @animation-duration-slow;
        content: "";
      }
    }

    // Add space for stash
    &-range-hover-start::after,
    &-range-hover-end::after,
    &-range-hover::after {
      right: 0;
      left: 2px;
    }

    // Hover with in range
    &-in-view&-in-range&-range-hover::before,
    &-in-view&-range-start&-range-hover::before,
    &-in-view&-range-end&-range-hover::before,
    &-in-view&-range-start:not(&-range-start-single)&-range-hover-start::before,
    &-in-view&-range-end:not(&-range-end-single)&-range-hover-end::before,
    .@{picker-prefix-cls}-panel
      > :not(.@{picker-prefix-cls}-date-panel)
      &-in-view&-in-range&-range-hover-start::before,
    .@{picker-prefix-cls}-panel
      > :not(.@{picker-prefix-cls}-date-panel)
      &-in-view&-in-range&-range-hover-end::before {
      background: @picker-date-hover-range-color;
    }

    // range start border-radius
    &-in-view&-range-start:not(&-range-start-single):not(&-range-end)
      .@{cellClassName} {
      //border-radius: @border-radius-base 0 0 @border-radius-base;
    }

    // range end border-radius
    &-in-view&-range-end:not(&-range-end-single):not(&-range-start)
      .@{cellClassName} {
      //border-radius: 0 @border-radius-base @border-radius-base 0;
    }

    // DatePanel only
    .@{picker-prefix-cls}-date-panel
      &-in-view&-in-range&-range-hover-start
      .@{cellClassName},
    .@{picker-prefix-cls}-date-panel
      &-in-view&-in-range&-range-hover-end
      .@{cellClassName} {
      &::after {
        position: absolute;
        top: 0;
        bottom: 0;
        z-index: -1;
        background: @picker-date-hover-range-color;
        transition: all @animation-duration-slow;
        content: "";
      }
    }

    .@{picker-prefix-cls}-date-panel
      &-in-view&-in-range&-range-hover-start
      .@{cellClassName}::after {
      right: -5px - @border-width-base;
      left: 0;
    }

    .@{picker-prefix-cls}-date-panel
      &-in-view&-in-range&-range-hover-end
      .@{cellClassName}::after {
      right: 0;
      left: -5px - @border-width-base;
    }

    // Hover with range start & end
    &-range-hover&-range-start::after {
      right: 50%;
    }

    &-range-hover&-range-end::after {
      left: 50%;
    }

    // Edge start
    tr > &-in-view&-range-hover:first-child::after,
    tr > &-in-view&-range-hover-end:first-child::after,
    &-in-view&-start&-range-hover-edge-start&-range-hover-edge-start-near-range::after,
    &-in-view&-range-hover-edge-start:not(&-range-hover-edge-start-near-range)::after,
    &-in-view&-range-hover-start::after {
      left: 16px !important;
      //border-left: @border-width-base dashed
      //  @picker-date-hover-range-border-color;
      border-top-left-radius: @border-radius-base;
      border-bottom-left-radius: @border-radius-base;
    }

    // Edge end
    tr > &-in-view&-range-hover:last-child::after,
    tr > &-in-view&-range-hover-start:last-child::after,
    &-in-view&-end&-range-hover-edge-end&-range-hover-edge-end-near-range::after,
    &-in-view&-range-hover-edge-end:not(&-range-hover-edge-end-near-range)::after,
    &-in-view&-range-hover-end::after {
      right: 16px !important;
      //border-right: @border-width-base dashed
      //  @picker-date-hover-range-border-color;
      border-top-right-radius: @border-radius-base;
      border-bottom-right-radius: @border-radius-base;
    }

    // >>> Disabled
    &-disabled {
      color: @picker-basic-cell-disabled-color;
      pointer-events: none;

      .@{cellClassName} {
        background: transparent;
      }

      &::before {
        background: @picker-basic-cell-disabled-bg;
      }
    }
    &-disabled&-today .@{cellClassName}::before {
      border-color: @disabled-color;
    }
  }

  &-cell {
    padding: 2px 0;
    color: @disabled-text-color;
    cursor: pointer;

    // In view
    &-in-view {
      color: @text-color;
    }

    .picker-cell-inner(~"@{picker-cell-inner-cls}");
  }

  &-decade-panel,
  &-year-panel,
  &-quarter-panel,
  &-month-panel {
    .@{picker-prefix-cls}-content {
      height: @picker-panel-without-time-cell-height * 4;
    }

    .@{picker-cell-inner-cls} {
      width: 66px;
      //padding: 0 @padding-xs;
    }
  }

  &-quarter-panel {
    .@{picker-prefix-cls}-content {
      height: 56px;
    }
  }

  // ======================== Footer ========================
  &-footer {
    width: min-content;
    min-width: 100%;
    line-height: @picker-text-height - 2 * @border-width-base;
    text-align: center;
    border-bottom: @border-width-base @border-style-base transparent;

    .@{picker-prefix-cls}-panel & {
      border-top: @border-width-base @border-style-base @picker-border-color;
    }

    &-extra {
      padding: 0 @padding-sm;
      line-height: @picker-text-height - 2 * @border-width-base;
      text-align: left;

      &:not(:last-child) {
        border-bottom: @border-width-base @border-style-base
          @picker-border-color;
      }
    }
  }

  &-now {
    text-align: left;
  }

  &-today-btn {
    color: @link-color;

    &:hover {
      color: @link-hover-color;
    }

    &:active {
      color: @link-active-color;
    }

    &&-disabled {
      color: @disabled-color;
      cursor: not-allowed;
    }
  }

  // ========================================================
  // =                       Special                        =
  // ========================================================

  // ===================== Decade Panel =====================
  &-decade-panel {
    .@{picker-cell-inner-cls} {
      padding: 0 (@padding-xs / 2);
    }

    .@{picker-prefix-cls}-cell::before {
      display: none;
    }
  }

  // ============= Year & Quarter & Month Panel =============
  &-year-panel,
  &-quarter-panel,
  &-month-panel {
    @hover-cell-fixed-distance: (
      (
          ((@picker-panel-width - @padding-xs * 2) / 3) -
            @picker-year-month-cell-width
        ) / 2
    );

    //@hover-cell-fixed-distance: 16px;

    .@{picker-prefix-cls}-body {
      padding: 0 @padding-xs;
    }

    //.@{picker-cell-inner-cls} {
    //  width: @picker-year-month-cell-width;
    //}

    .@{picker-prefix-cls}-cell-range-hover-start::after {
      left: @hover-cell-fixed-distance;
      //border-left: @border-width-base dashed
      //  @picker-date-hover-range-border-color;
      border-radius: @border-radius-base 0 0 @border-radius-base;

      .@{picker-prefix-cls}-panel-rtl & {
        right: @hover-cell-fixed-distance;
        border-right: @border-width-base dashed
          @picker-date-hover-range-border-color;
        border-radius: 0 @border-radius-base @border-radius-base 0;
      }
    }
    .@{picker-prefix-cls}-cell-range-hover-end::after {
      right: @hover-cell-fixed-distance;
      //border-right: @border-width-base dashed
      //  @picker-date-hover-range-border-color;
      border-radius: 0 @border-radius-base @border-radius-base 0;

      .@{picker-prefix-cls}-panel-rtl & {
        left: @hover-cell-fixed-distance;
        //border-left: @border-width-base dashed
        //  @picker-date-hover-range-border-color;
        border-radius: @border-radius-base 0 0 @border-radius-base;
      }
    }
  }

  // ====================== Week Panel ======================
  &-week-panel {
    width: @picker-week-panel-width;

    .@{picker-prefix-cls}-body {
      padding: @padding-xs @padding-sm;
    }

    // Clear cell style
    .@{picker-prefix-cls}-cell {
      &:hover .@{picker-cell-inner-cls},
      &-selected .@{picker-cell-inner-cls},
      .@{picker-cell-inner-cls} {
        background: transparent !important;
      }
    }

    .@{picker-prefix-cls}-cell {
      &.@{picker-prefix-cls}-cell-today {
      }

      .@{picker-cell-inner-cls} {
        height: 28px;
        line-height: 28px;
      }
    }

    &-row {
      td {
        transform-style: preserve-3d;
        transition: background @animation-duration-slow;

        &::before {
          height: 28px;
          transform: translate3d(0, -50%, -1px);
        }
      }

      &:hover td {
        background: transparent;

        &::before {
          background: @primary-1;
        }

        &:first-child {
          &::before {
            border-radius: @border-radius-base 0 0 @border-radius-base;
          }
        }

        &:last-child {
          &::before {
            border-radius: 0 @border-radius-base @border-radius-base 0;
          }
        }
      }

      &-selected td,
      &-selected:hover td {
        &::before {
          background: @primary-color;
        }

        &:first-child {
          &::before {
            border-radius: @border-radius-base 0 0 @border-radius-base;
          }
        }

        &:last-child {
          &::before {
            border-radius: 0 @border-radius-base @border-radius-base 0;
          }
        }

        &.@{picker-prefix-cls}-cell-week {
          color: fade(@text-color-inverse, 50%);
        }

        &.@{picker-prefix-cls}-cell-today .@{picker-cell-inner-cls}::before {
          border-color: @text-color-inverse;
        }

        .@{picker-cell-inner-cls} {
          color: @text-color-inverse;
        }
      }
    }
  }

  // ====================== Year&Month Panel ======================
  &-year-panel,
  &-month-panel {
    width: @picker-year-month-panel-width;

    .@{picker-prefix-cls}-body {
      padding: 17px @padding-xs;
    }

    .@{picker-prefix-cls}-cell {
      &:last-child {
        &::before {
          right: 16px;
        }
      }

      &:first-child {
        &::before {
          left: 16px;
        }
      }

      &.@{picker-prefix-cls}-cell-disabled {
        .@{picker-cell-inner-cls} {
          //background: @picker-basic-cell-disabled-bg;
        }

        &.@{picker-prefix-cls}-cell-selected {
          .@{picker-cell-inner-cls} {
            background: @primary-3;
          }
        }
      }

      .@{picker-cell-inner-cls} {
        height: 26px;
      }
    }
  }

  // ====================== Date Panel ======================
  &-date-panel {
    .@{picker-prefix-cls}-body {
      padding: @padding-md @padding-md;
    }

    .@{picker-prefix-cls}-content {
      width: @picker-panel-cell-width * 7;

      th {
        width: @picker-panel-cell-width;
      }
    }

    .@{picker-prefix-cls}-cell .@{picker-cell-inner-cls} {
      border-radius: @border-radius-circle;
    }
  }

  // ==================== Datetime Panel ====================
  &-datetime-panel {
    display: flex;

    .@{picker-prefix-cls}-time-panel {
      border-left: @border-width-base @border-style-base @picker-border-color;
    }

    .@{picker-prefix-cls}-date-panel,
    .@{picker-prefix-cls}-time-panel {
      transition: opacity @animation-duration-slow;
    }

    // Keyboard
    &-active {
      .@{picker-prefix-cls}-date-panel,
      .@{picker-prefix-cls}-time-panel {
        opacity: 0.3;

        &-active {
          opacity: 1;
        }
      }
    }
  }

  // ====================== Time Panel ======================
  &-time-panel {
    width: auto;
    min-width: auto;

    .@{picker-prefix-cls}-content {
      display: flex;
      flex: auto;
      height: @picker-time-panel-column-height;
    }

    &-column {
      flex: 1 0 auto;
      width: @picker-time-panel-column-width;
      margin: 0;
      padding: 0;
      overflow-y: hidden;
      text-align: left;
      list-style: none;
      transition: background @animation-duration-slow;

      &::after {
        display: block;
        height: @picker-time-panel-column-height -
          @picker-time-panel-cell-height;
        content: "";
        .@{picker-prefix-cls}-datetime-panel & {
          height: @picker-time-panel-column-height -
            @picker-time-panel-cell-height + 2 * @border-width-base;
        }
      }

      &:not(:first-child) {
        border-left: @border-width-base @border-style-base @picker-border-color;
      }

      &-active {
        background: @calendar-column-active-bg;
      }

      &:hover {
        overflow-y: auto;
      }

      > li {
        margin: 0;
        padding: 0;

        &.@{picker-prefix-cls}-time-panel-cell {
          .@{picker-prefix-cls}-time-panel-cell-inner {
            display: block;
            width: 100%;
            height: @picker-time-panel-cell-height;
            margin: 0;
            //padding: 0 0 0 ((@picker-time-panel-column-width - 28px) / 2);
            text-align: center;
            color: @text-color;
            line-height: @picker-time-panel-cell-height;
            border-radius: 0;
            cursor: pointer;
            transition: background @animation-duration-slow;

            &:hover {
              background: @item-hover-bg;
            }
          }

          &-selected {
            .@{picker-prefix-cls}-time-panel-cell-inner {
              color: @primary-color;
              font-weight: 500;
            }
          }

          &-disabled {
            .@{picker-prefix-cls}-time-panel-cell-inner {
              color: @disabled-color;
              background: transparent;
              cursor: not-allowed;
            }
          }
        }
      }
    }
  }
}

// Fix IE11 render bug by css hacks
// https://github.com/ant-design/ant-design/issues/21559
// https://codepen.io/afc163-1472555193/pen/mdJRaNj?editors=0110
/* stylelint-disable selector-type-no-unknown,selector-no-vendor-prefix */
_:-ms-fullscreen,
:root {
  .@{picker-prefix-cls}-range-wrapper {
    .@{picker-prefix-cls}-month-panel .@{picker-prefix-cls}-cell,
    .@{picker-prefix-cls}-year-panel .@{picker-prefix-cls}-cell {
      padding: 21px 0;
    }
  }
}
