/*!
 * # Fomantic-UI - Toast
 * http://github.com/fomantic/Fomantic-UI/
 *
 *
 * Released under the MIT license
 * http://opensource.org/licenses/MIT
 *
 */


/*******************************
            Theme
*******************************/

@type    : 'module';
@element : 'toast';

@import (multiple) '../../theme.config';

/*******************************
        Toast container
*******************************/

.ui.toast-container {
    position: fixed;
    z-index: 9999;
  &.top when (@variationToastTop) {
    &.right when (@variationToastRight) {
      top: @toastContainerDistance;
      right: @toastContainerDistance;
      margin-left: @toastContainerDistance;
    }
    &.left when (@variationToastLeft) {
      top: @toastContainerDistance;
      left: @toastContainerDistance;
      margin-right: @toastContainerDistance;
    }
    &.center when (@variationToastCenter) {
      left: 50%;
      transform: translate(-50%, 0);
      top: @toastContainerDistance;
    }
  }
  &.bottom when (@variationToastBottom) {
    &.right when (@variationToastRight) {
      bottom: @toastContainerDistance;
      right: @toastContainerDistance;
      margin-left: @toastContainerDistance;
    }
    &.left when (@variationToastLeft) {
      bottom: @toastContainerDistance;
      left: @toastContainerDistance;
      margin-right: @toastContainerDistance;
    }
    &.center when (@variationToastCenter) {
      left: 50%;
      transform: translate(-50%, 0);
      bottom: @toastContainerDistance;
    }
  }
  & .visible.toast-box,
  .animating.toast-box,
  .toast-box {
    display: table !important;
  }
  & .toast-box {
    margin-bottom: @toastBoxMarginBottom;
    border-radius: @defaultBorderRadius;
    cursor: default;
    &:hover {
      opacity: @toastOpacityOnHover;
    }
    &:not(.unclickable):hover {
      cursor: @toastCursorOnHover;
    }
    & when (@variationToastFloating) {
      &.floating,
      &.hoverfloating:hover {
        box-shadow: @floatingShadow;
        border: @toastBoxBorder;
      }
    }
    &.compact,
    > .compact {
      width: @toastWidth;
    }
    & > .ui.toast,
      > .ui.message {
      margin: @toastMargin;
      position: relative;
    }
    & > .attached.progress when (@variationToastProgress) {
      z-index:1;
      &.bottom {
        margin: @toastMarginProgress -@toastLeftRightMargin @toastMarginBottom;
      }
      &.top {
        margin: @toastMarginBottom -@toastLeftRightMargin @toastMarginProgress;
      }
      & .bar {
        min-width: 0;
      }
      &.info .bar.bar.bar {
        background: @toastInfoProgressColor;
      }
      &.warning .bar.bar.bar {
        background: @toastWarningProgressColor;
      }
      &.success .bar.bar.bar {
        background: @toastSuccessProgressColor;
      }
      .error .bar.bar.bar {
        background: @toastErrorProgressColor;
      }
      &.neutral .bar.bar.bar {
        background: @toastNeutralProgressColor;
      }
    }
    & > .ui.message when (@variationToastMessage) {
      & > .close.icon when (@variationToastClose){
        top: @toastCloseTopDistance;
        right: @toastCloseRightDistance;
      }
      & > .actions:last-child when (@variationToastActions) {
        margin-bottom: @toastActionMargin;
      }
      &.icon when (@variationToastIcon) {
        align-items: inherit;
        & > :not(.icon):not(.actions) {
          padding-left: @toastIconMessageContentPadding;
        }
        & > .icon:not(.close) when (@variationToastIcon) {
          display: inline-block;
          position: absolute;
          width: @toastIconMessageWidth;
          top: 50%;
          transform: translateY(-50%);
        }
        &:not(.vertical) {
          &.actions > .icon:not(.close) when (@variationToastActions) and (@variationToastIcon) {
            top: e(%("calc(50%% - %d)", @toastIconCenteredAdjustment));
            transform: none;
          }
          &.icon.icon.icon when (@variationToastIcon){
            display: block;
          }
        }
      }
    }
    & .ui.toast {
      & > .close.icon when (@variationToastClose){
        cursor: pointer;
        margin: 0;
        opacity: @toastCloseOpacity;
        transition: @toastCloseTransition;
        &:hover {
          opacity: 1;
        }
      }
      &.vertical > .close.icon when (@variationToastVertical) and (@variationToastClose) {
        margin-top: -@toastCloseTopDistance;
        margin-right: -@toastCloseTopDistance;
      }
      &:not(.vertical) > .close.icon when (@variationToastClose) {
        position: absolute;
        top: @toastCloseTopDistance;
        &:not(.left) {
          right: @toastCloseRightDistance;
        }
        &.left {
          margin-left: -@toastCloseRightDistance;
        }
      }
    }
    & .ui.card when (@variationToastCard) {
      margin:0;
      &.attached:not(.vertical) when (@variationToastAttached) {
        &.bottom {
          border-top-left-radius: 0;
          border-top-right-radius: 0;
          &.horizontal {
            & > .image > img {
              border-top-left-radius: 0;
            }
            & > .image:last-child > img {
              border-top-right-radius: 0;
            }
          }
        }
        &.top {
          border-bottom-left-radius: 0;
          border-bottom-right-radius: 0;
          &.horizontal {
            & > .image > img {
              border-bottom-left-radius: 0;
            }
            & > .image:last-child > img {
              border-bottom-right-radius: 0;
            }
          }
        }
      }
      &.horizontal.actions when (@variationToastActions) {
        & > .image > img {
          border-bottom-left-radius: 0;
        }
        & > .image:last-child > img {
          border-bottom-right-radius: 0;
        }
      }
    }
    & .progressing {
      animation-iteration-count: 1;
      animation-timing-function: linear;
      &  when (@variationToastProgress) {
        &.up {
          animation-name: progressUp;
        }
        &.down {
          animation-name: progressDown;
        }
      }
      &.wait {
        animation-name: progressWait;
      }
    }
    &:hover .pausable.progressing {
      animation-play-state: paused;
    }
    & .ui.toast:not(.vertical) {
      display:block;
    }
    & :not(.comment) {
      &:not(.card) .actions when (@variationToastActions) {
        margin: @toastActionMarginTop @toastActionMargin @toastActionMargin @toastActionMargin;
      }
      & .actions when (@variationToastActions) {
        padding: @toastActionPadding @toastActionPadding @toastActionPaddingBottom @toastActionPadding;
        text-align: right;
        &.attached:not(.vertical) when (@variationToastAttached) {
          margin-right: @toastLeftRightMargin;
        }
        &:not(.basic):not(.attached) {
          background: @toastActionBackground;
          border-top: @toastActionBorder;
        }
        &.left {
          text-align: left;
        }
      }
    }
    & when (@variationToastVertical) {
      & .vertical.actions > .button,
      & > .vertical > .vertical.vertical,
      & > .vertical.vertical.vertical {
        display: flex;
      }
    }
    & :not(.comment) .vertical.actions when (@variationToastVertical) and (@variationToastActions) {
      flex-direction: column;
      & > .button {
        justify-content: center;
      }
      &.attached > .button when (@variationToastAttached) {
        align-items: center;
      }
      &:not(.attached) {
        border-top: 0;
        margin-top: -@toastActionPaddingBottom;
        margin-bottom: -@toastActionPaddingBottom;
        margin-left: @toastActionMarginLeft;
        justify-content: space-around;
        &:not(.basic) {
          border-left: @toastActionBorder;
        }
        & > .button:not(:last-child) {
          margin-bottom: @toastActionMarginBottom;
        }
        &.top {
          justify-content: flex-start;
        }
        &.bottom {
          justify-content: flex-end;
        }
      }
    }
  }
}

.ui.vertical.attached when (@variationToastVertical) and (@variationToastAttached) {
  &:not(.left) {
    &.card when (@variationToastCard) {
      & > .image > img {
        border-top-right-radius: 0;
      }
      &.horizontal > .image:last-child > img {
        border-top-right-radius: 0;
        border-bottom-right-radius: 0;
      }
    }
    &.card,
    &.toast {
      border-top-right-radius: 0;
      border-bottom-right-radius: 0;
    }
    &.actions when (@variationToastActions) {
      border-top-right-radius: @toastBorderRadius;
      border-bottom-right-radius: @toastBorderRadius;
      & .button:first-child,
        .button:last-child {
        border-top-left-radius: 0;
        border-bottom-left-radius: 0;
      }
    }
    &.message when (@variationToastMessage) {
      border-top-right-radius: 0;
      border-bottom-left-radius: @toastBorderRadius;
    }
  }
  &.left {
    &.card when (@variationToastCard) {
      & > .image > img {
        border-top-left-radius: 0;
      }
      &.horizontal > .image > img {
        border-top-left-radius: 0;
        border-bottom-left-radius: 0;
      }
    }
    &.card,
    &.toast {
      border-top-left-radius: 0;
      border-bottom-left-radius: 0;
    }
    &.actions when (@variationToastActions) {
      border-top-left-radius: @toastBorderRadius;
      border-bottom-left-radius: @toastBorderRadius;
      & .button:first-child,
        .button:last-child {
        border-top-right-radius: 0;
        border-bottom-right-radius: 0;
      }
      & .button:not(:first-child):not(:last-child) {
        margin-left: -@toastLeftRightMargin;
      }
    }
    &.message.message.message when (@variationToastMessage) {
      border-top-right-radius: @toastBorderRadius;
      border-bottom-right-radius: @toastBorderRadius;
    }
  }
}

.ui.attached:not(.vertical) when (@variationToastAttached) {
  &:not(.top) {
    &.actions when (@variationToastActions) {
      border-bottom-left-radius: @toastBorderRadius;
      border-bottom-right-radius: @toastBorderRadius;
      & .button:first-child {
        border-bottom-left-radius: @toastBorderRadius;
      }
      & .button:last-child {
        border-bottom-right-radius: @toastBorderRadius;
      }
    }
  }
  &.top {
    &.actions when (@variationToastActions) {
      border-top-left-radius: @toastBorderRadius;
      border-top-right-radius: @toastBorderRadius;
      & .button:first-child {
        border-top-left-radius: @toastBorderRadius;
      }
      & .button:last-child {
        border-top-right-radius: @toastBorderRadius;
      }
    }
  }
}

/*******************************
            Toast
*******************************/

.ui.toast {
    display: none;
    border-radius: @defaultBorderRadius;
    padding: @toastPadding;
    margin: @toastMargin;
    color: @toastInvertedTextColor;
    background-color: @toastNeutralColor;
  & > .content > .header {
    font-weight: bold;
    color: inherit;
    margin:0;
  }
  &.info when (@variationToastInfo) {
    background-color: @toastInfoColor;
    color: @toastTextColor;
  }
  &.warning when (@variationToastWarning) {
    background-color: @toastWarningColor;
    color: @toastTextColor;
  }
  &.success when (@variationToastSuccess) {
    background-color: @toastSuccessColor;
    color: @toastTextColor;
  }
  &.error when (@variationToastError) {
    background-color: @toastErrorColor;
    color: @toastTextColor;
  }
  &.neutral {
    background-color: @toastNeutralColor;
    color: @toastNeutralTextColor;
  }
  & > .icon:not(.close) when (@variationToastIcon) {
    font-size: @toastIconFontSize;
  }
  &:not(.vertical) {
    & > .icon:not(.close) when (@variationToastIcon) {
      position: absolute;
      & + .content {
        padding-left: @toastIconContentPadding;
      }
    }
    & > .close.icon + .content when (@variationToastClose){
      padding-left: @toastCloseDistance;
    }
    & > .ui.image when (@variationToastImage) {
      position: absolute;
      &.avatar + .content {
        padding-left: @toastAvatarImageContentPadding;
        min-height: @toastAvatarImageHeight;
      }
      &.mini + .content {
        padding-left: @toastMiniImageContentPadding;
        min-height: @toastMiniImageHeight;
      }
      &.tiny + .content {
        padding-left: @toastTinyImageContentPadding;
        min-height: @toastTinyImageHeight;
      }
      &.small + .content {
        padding-left: @toastSmallImageContentPadding;
        min-height: @toastSmallImageHeight;
      }
    }
    & when (@variationToastImage) or (@variationToastIcon) {
      & > .centered.image,
      > .centered.icon {
        transform: translateY(-50%);
        top: 50%;
      }
    }
    &.actions > .centered.image when (@variationToastActions) and (@variationToastImage) {
      top: e(%("calc(50%% - %d)", @toastImageCenteredAdjustment));
    }
    &.actions > .centered.icon when (@variationToastActions) and (@variationToastIcon) {
      top: e(%("calc(50%% - %d)", @toastIconCenteredAdjustment));
    }
  }
  &.vertical when (@variationToastVertical) {
    & > .close.icon + .content when (@variationToastClose){
      padding-left: @toastCloseDistanceVertical;
    }
    & when (@variationToastImage) or (@variationToastIcon) {
      & > .ui.image + .content,
      > .icon:not(.close) + .content {
        padding-left: @toastImageContentPadding;
      }
    }
    & > .ui.image when (@variationToastImage){
      align-self: flex-start;
      flex-shrink:0; /* IE11 fix */
    }
    & when (@variationToastImage) or (@variationToastIcon) {
      & > .centered.image,
      > .centered.icon {
        align-self: center;
      }
    }
  }

  &.attached when (@variationToastAttached) {
    &.bottom {
      border-top-left-radius: 0;
      border-top-right-radius: 0;
    }
    &.top {
      border-bottom-left-radius: 0;
      border-bottom-right-radius: 0;
    }
  }
}


.ui.hoverfloating.message:hover when (@variationToastMessage) and (@variationToastFloating) {
  box-shadow: 0 0 0 1px inset, @floatingShadow;
}

.ui.center.toast-container .toast-box,
.ui.right.toast-container .toast-box {
    margin-left: auto;
}

.ui.center.toast-container .toast-box {
    margin-right: auto;
}

/*--------------
     Colors
-------------- */

each(@colors, {
  @color: replace(@key, '@', '');
  @c: @colors[@@color][color];
  @l: @colors[@@color][light];

  .ui.@{color}.toast {
    background-color: @c;
    color: @toastTextColor;
  }
  & when (@variationToastInverted) {
    .ui.inverted.@{color}.toast,
    .ui.toast-container .toast-box > .inverted.@{color}.attached.progress .bar {
      background-color: @l;
      color: @toastInvertedTextColor;
    }
  }
})

& when (@variationToastInverted) {
  .ui.inverted.toast {
    color: @toastTextColor;
    background-color: @toastInvertedColor;
  }
}

@media only screen and (max-width: @mobileToastBreakpoint) {
  .ui.toast-container .toast-box {
    &.toast-box,
    & > .compact,
    & > .vertical > *,
    & > * {
      width: auto;
      max-width: 100%;
    }
    & > *:not(.vertical) {
      min-width: @mobileWidth;
    }
    & when (@variationToastCard) {
      & > .ui.card.horizontal,
      > .vertical > .ui.horizontal.card {
        min-width: initial;
      }
    }
  }
}

/*---------------
   Progress Bar
 ----------------*/
&  when (@variationToastProgress) {
  @keyframes progressDown {
    0% {
      width: 100%;
    }
    100% {
      width: 0;
    }
  }
  @keyframes progressUp {
    0% {
      width: 0;
    }
    100% {
      width: 100%;
    }
  }
}
@keyframes progressWait {
  0% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
