/*!
 * # Semantic UI - Modal
 * http://github.com/semantic-org/semantic-ui/
 *
 *
 * Released under the MIT license
 * http://opensource.org/licenses/MIT
 *
 */


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

@type    : 'module';
@element : 'modal';

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

/*******************************
             Modal
*******************************/

.ui.modal {
  display: none;
  position: fixed;
  z-index: @zIndex;

  top: 50%;
  left: 50%;
  text-align: left;

  background: @background;
  border: @border;
  box-shadow: @boxShadow;
  transform-origin: @transformOrigin;

  border-radius: @borderRadius;
  user-select: text;
  will-change: top, left, margin, transform, opacity;
}

.ui.modal > :first-child:not(.icon),
.ui.modal > .icon:first-child + * {
  border-top-left-radius: @borderRadius;
  border-top-right-radius: @borderRadius;
}

.ui.modal > :last-child {
  border-bottom-left-radius: @borderRadius;
  border-bottom-right-radius: @borderRadius;
}

/*******************************
            Content
*******************************/

/*--------------
     Close
---------------*/

.ui.modal > .close {
  cursor: pointer;
  position: absolute;
  top: @closeTop;
  right: @closeRight;
  z-index: 1;

  opacity: @closeOpacity;
  font-size: @closeSize;
  color: @closeColor;

  width: @closeHitbox;
  height: @closeHitbox;
  padding: @closePadding;
}
.ui.modal > .close:hover {
  opacity: 1;
}

/*--------------
     Header
---------------*/

.ui.modal > .header {
  display: block;
  font-family: @headerFontFamily;
  background: @headerBackground;
  margin: @headerMargin;
  padding: @headerPadding;
  box-shadow: @headerBoxShadow;

  color: @headerColor;
  border-bottom: @headerBorder;
}
.ui.modal > .header:not(.ui) {
  font-size: @headerFontSize;
  line-height: @headerLineHeight;
  font-weight: @headerFontWeight;
}

/*--------------
     Content
---------------*/

.ui.modal > .content {
  display: block;
  width: 100%;
  font-size: @contentFontSize;
  line-height: @contentLineHeight;
  padding: @contentPadding;
  background: @contentBackground;
}
.ui.modal > .image.content {
  display: flex;
  flex-direction: row;
}

/* Image */
.ui.modal > .content > .image {
  display: block;
  flex: 0 1 auto;
  width: @imageWidth;
  align-self: @imageVerticalAlign;
}
.ui.modal > [class*="top aligned"] {
  align-self: top;
}
.ui.modal > [class*="middle aligned"] {
  align-self: middle;
}
.ui.modal > [class*="stretched"] {
  align-self: stretch;
}

/* Description */
.ui.modal > .content > .description {
  display: block;
  flex: 1 0 auto;
  min-width: 0px;
  align-self: @descriptionVerticalAlign;
}

.ui.modal > .content > .icon + .description,
.ui.modal > .content > .image + .description {
  flex: 0 1 auto;
  min-width: @descriptionMinWidth;
  width: @descriptionWidth;
  padding-left: @descriptionDistance;
}

/*rtl:ignore*/
.ui.modal > .content > .image > i.icon {
  margin: 0em;
  opacity: 1;
  width: auto;
  line-height: 1;
  font-size: @imageIconSize;
}

/*--------------
     Actions
---------------*/

.ui.modal > .actions {
  background: @actionBackground;
  padding: @actionPadding;
  border-top: @actionBorder;
  text-align: @actionAlign;
}
.ui.modal .actions > .button {
  margin-left: @buttonDistance;
}

/*-------------------
       Responsive
--------------------*/

/* Modal Width */
@media only screen and (max-width : @largestMobileScreen) {
  .ui.modal {
    width: @mobileWidth;
    margin: @mobileMargin;
  }
}
@media only screen and (min-width : @tabletBreakpoint) {
  .ui.modal {
    width: @tabletWidth;
    margin: @tabletMargin;
  }
}
@media only screen and (min-width : @computerBreakpoint) {
  .ui.modal {
    width: @computerWidth;
    margin: @computerMargin;
  }
}
@media only screen and (min-width : @largeMonitorBreakpoint) {
  .ui.modal {
    width: @largeMonitorWidth;
    margin: @largeMonitorMargin;
  }
}
@media only screen and (min-width : @widescreenMonitorBreakpoint) {
  .ui.modal {
    width: @widescreenMonitorWidth;
    margin: @widescreenMonitorMargin;
  }
}

/* Tablet and Mobile */
@media only screen and (max-width : @largestTabletScreen) {
  .ui.modal > .header {
    padding-right: @closeHitbox;
  }
  .ui.modal > .close {
    top: @innerCloseTop;
    right: @innerCloseRight;
    color: @innerCloseColor;
  }
}

/* Mobile */
@media only screen and (max-width : @largestMobileScreen) {

  .ui.modal > .header {
    padding: @mobileHeaderPadding !important;
    padding-right: @closeHitbox !important;
  }
  .ui.modal > .content {
    display: block;
    padding: @mobileContentPadding !important;
  }
  .ui.modal > .close {
    top: @mobileCloseTop !important;
    right: @mobileCloseRight !important;
  }

  /*rtl:ignore*/
  .ui.modal .image.content {
    flex-direction: column;
  }
  .ui.modal .content > .image {
    display: block;
    max-width: 100%;
    margin: 0em auto !important;
    text-align: center;
    padding: @mobileImagePadding !important;
  }
  .ui.modal > .content > .image > i.icon {
    font-size: @mobileImageIconSize;
    text-align: center;
  }

  /*rtl:ignore*/
  .ui.modal .content > .description {
    display: block;
    width: 100% !important;
    margin: 0em !important;
    padding: @mobileDescriptionPadding !important;
    box-shadow: none;
  }

  /* Let Buttons Stack */
  .ui.modal > .actions {
    padding: @mobileActionPadding !important;
  }
  .ui.modal .actions > .buttons,
  .ui.modal .actions > .button {
    margin-bottom: @mobileButtonDistance;
  }
}

/*--------------
    Coupling
---------------*/

.ui.inverted.dimmer > .ui.modal {
  box-shadow: @invertedBoxShadow;
}

/*******************************
             Types
*******************************/

.ui.basic.modal {
  background-color: transparent;
  border: none;
  border-radius: 0em;
  box-shadow: none !important;
  color: @basicModalColor;
}
.ui.basic.modal > .header,
.ui.basic.modal > .content,
.ui.basic.modal > .actions {
  background-color: transparent;
}
.ui.basic.modal > .header {
  color: @basicModalHeaderColor;
}
.ui.basic.modal > .close {
  top: @basicModalCloseTop;
  right: @basicModalCloseRight;
}

.ui.inverted.dimmer > .basic.modal {
  color: @basicInvertedModalColor;
}
.ui.inverted.dimmer > .ui.basic.modal > .header {
  color: @basicInvertedModalHeaderColor;
}

/* Tablet and Mobile */
@media only screen and (max-width : @largestTabletScreen) {
  .ui.basic.modal > .close {
    color: @basicInnerCloseColor;
  }
}


/*******************************
             States
*******************************/

.ui.active.modal {
  display: block;
}

/*******************************
           Variations
*******************************/

/*--------------
    Scrolling
---------------*/

/* A modal that cannot fit on the page */
.scrolling.dimmable.dimmed {
  overflow: hidden;
}
.scrolling.dimmable.dimmed > .dimmer {
  overflow: auto;
  -webkit-overflow-scrolling: touch;
}
.scrolling.dimmable > .dimmer {
  position: fixed;
}
.modals.dimmer .ui.scrolling.modal {
  position: static !important;
  margin: @scrollingMargin auto !important;
}

/* undetached scrolling */
.scrolling.undetached.dimmable.dimmed {
  overflow: auto;
  -webkit-overflow-scrolling: touch;
}
.scrolling.undetached.dimmable.dimmed > .dimmer {
  overflow: hidden;
}
.scrolling.undetached.dimmable .ui.scrolling.modal {
  position: absolute;
  left: 50%;
  margin-top: @scrollingMargin !important;
}

/* Coupling with Sidebar */
.undetached.dimmable.dimmed > .pusher {
  z-index: auto;
}

@media only screen and (max-width : @largestTabletScreen) {
  .modals.dimmer .ui.scrolling.modal {
    margin-top: @mobileScrollingMargin !important;
    margin-bottom: @mobileScrollingMargin !important;
  }
}


/*--------------
   Full Screen
---------------*/

.ui.fullscreen.modal {
  width: @fullScreenWidth !important;
  left: @fullScreenOffset !important;
  margin: @fullScreenMargin;
}
.ui.fullscreen.scrolling.modal {
  left: 0em !important;
}
.ui.fullscreen.modal > .header {
  padding-right: @closeHitbox;
}
.ui.fullscreen.modal > .close {
  top: @innerCloseTop;
  right: @innerCloseRight;
  color: @innerCloseColor;
}


/*--------------
      Size
---------------*/

.ui.modal {
  font-size: @medium;
}

/* Small */
.ui.small.modal > .header:not(.ui) {
  font-size: @smallHeaderSize;
}

/* Small Modal Width */
@media only screen and (max-width : @largestMobileScreen) {
  .ui.small.modal {
    width: @smallMobileWidth;
    margin: @smallMobileMargin;
  }
}
@media only screen and (min-width : @tabletBreakpoint) {
  .ui.small.modal {
    width: @smallTabletWidth;
    margin: @smallTabletMargin;
  }
}
@media only screen and (min-width : @computerBreakpoint) {
  .ui.small.modal {
    width: @smallComputerWidth;
    margin: @smallComputerMargin;
  }
}
@media only screen and (min-width : @largeMonitorBreakpoint) {
  .ui.small.modal {
    width: @smallLargeMonitorWidth;
    margin: @smallLargeMonitorMargin;
  }
}
@media only screen and (min-width : @widescreenMonitorBreakpoint) {
  .ui.small.modal {
    width: @smallWidescreenMonitorWidth;
    margin: @smallWidescreenMonitorMargin;
  }
}

/* Large Modal Width */
.ui.large.modal > .header {
  font-size: @largeHeaderSize;
}
@media only screen and (max-width : @largestMobileScreen) {
  .ui.large.modal {
    width: @largeMobileWidth;
    margin: @largeMobileMargin;
  }
}
@media only screen and (min-width : @tabletBreakpoint) {
  .ui.large.modal {
    width: @largeTabletWidth;
    margin: @largeTabletMargin;
  }
}
@media only screen and (min-width : @computerBreakpoint) {
  .ui.large.modal {
    width: @largeComputerWidth;
    margin: @largeComputerMargin;
  }
}
@media only screen and (min-width : @largeMonitorBreakpoint) {
  .ui.large.modal {
    width: @largeLargeMonitorWidth;
    margin: @largeLargeMonitorMargin;
  }
}
@media only screen and (min-width : @widescreenMonitorBreakpoint) {
  .ui.large.modal {
    width: @largeWidescreenMonitorWidth;
    margin: @largeWidescreenMonitorMargin;
  }
}


.loadUIOverrides();
