@import "variables";
@import "mixins";
@import "mixins-extended";
@import "icons";
@import "scaffolding";
@import "buttons";
@import "range";
@import "button-groups";
@import "header-panel";
@import "left-panel";
@import "right-panel";
@import "center-panel";
@import "footer-panel";
@import "overlays";
@import "iiif-gallery-component";
@import "iiif-metadata-component";
@import "iiif-tree-component";
@import "catch-all";
@import "sm";
@import "md";
@import "lg";
@import "xl";

:root {
  --uv-grid-left-width-open: 271px;
  --uv-grid-right-width-open: 271px;
  --uv-grid-left-width: 30px;
  --uv-grid-main-width: minmax(0, 1fr);
  --uv-grid-right-width: 30px;
}

.hidden {
  .hidden();
}

.uv {
  // background-color: @body-bg;
  position: relative;

  // Common styles
  .btn-default,
  .btn-primary,
  .btn-success,
  .btn-info,
  .btn-warning,
  .btn-danger {
    .border-radius(0);
  }

  // A button that should not have the browser default characteristics
  .imageBtn {
    background: 0 0;
    border: 0;
    cursor: pointer;
  }

  .action,
  a.action.black,
  input.action {
    display: inline-block;
    background-image: data-uri("../img/sprite.png");
    background-position-x: 0;
    background-position-y: -1000px;
    background-repeat: no-repeat;
    text-transform: none;
    padding: 0 0 0 16px;
    font-weight: bold;
  }

  #debug {
    display: none;
    position: fixed;
    z-index: 1000;

    #sm {
      display: none;
    }

    #md {
      display: none;
    }

    #lg {
      display: none;
    }

    #xl {
      display: none;
    }
  }

  #commsFrame {
    width: 1px;
    height: 1px;
    border: none;
    display: none;
  }

  .headerPanel {
    position: relative;
    color: #fff;
    height: 40px;
  }

  .mainPanel {
    position: relative;
    padding-top: @panel-margin;
    margin-right: @panel-margin;
    margin-bottom: 0;
    margin-left: @panel-margin;
    background: @body-bg; // important, otherwise you see two spinners
  }

  .mainPanel {
    margin: 0;
    padding: 0;
    overflow: hidden;

    .md-mediaquery({
            padding: 0.5rem;
            display: grid;
            grid-template-columns: 
                [left] var(--uv-grid-left-width) 
                [center] var(--uv-grid-main-width)
                [right] var(--uv-grid-right-width);
            grid-template-areas: "left center right";

            transition-property: grid-template-columns;
            transition-timing-function: linear;
            transition-duration: calc(var(--uv-animation) * var(--uv-animation-duration));
        });

    /* hide empty panels */

    &:has(.leftPanel:empty) {
      --uv-grid-left-width: auto;
    }

    &:has(.rightPanel:empty) {
      --uv-grid-right-width: auto;
    }
  }

  .mainPanel.leftPanelOpen {
    --uv-grid-left-width: var(--uv-grid-left-width-open);
  }

  .mainPanel.rightPanelOpen {
    --uv-grid-right-width: var(--uv-grid-right-width-open);
  }

  .mainPanel.leftPanelOpenFull {
    --uv-grid-left-width: 100%;
    --uv-grid-main-width: 0;
    --uv-grid-right-width: 0;

    transition-property: grid-template-columns;
    transition-timing-function: linear;
    transition-duration: calc(
      var(--uv-animation) * var(--uv-animation-duration)
    );
  }

  .centerPanel {
    position: absolute;
    overflow: hidden;
    width: 100%;

    .md-mediaquery({
            z-index: 15;
            grid-area: center;
        });
  }

  .leftPanel,
  .rightPanel {
    background: @panel-dark-bg;
    border: @panel-border;

    overflow: hidden;
    z-index: 20;

    transition-property: all;
    transition-timing-function: linear;
    transition-duration: calc(
      var(--uv-animation) * var(--uv-animation-duration)
    );

    position: absolute;
    inset: calc(5em + 8px) 0 2em;

    width: 100%;
    height: auto;

    .md-mediaquery({
            display: block;
            position: relative;

            top: 0;
            right: 0;
            bottom: 0;
            left: 0;

            width: auto;
            height: auto;
        });

    // by default top and main are shown, as on mobile the panel is transformed to off-screen
    // but on md they're hidden, just in case
    .top,
    .main {
      display: block;

      .md-mediaquery({
                display: none;
            });
    }

    // by default closed is hidden unless on md and up
    // when it serves as a tab to click
    .closed {
      display: none;

      .md-mediaquery({
                display: block;
            });
    }

    // open-finished hides the .closed tab on md+
    &.open-finished {
      .closed {
        display: none;

        .md-mediaquery({
                    display: none;
                });
      }
    }

    // only when the container has open & open-finished can top and main display on md+
    // this prevents the content getting squished when the panels contract when the grid changes
    &.open.open-finished {
      .md-mediaquery({
                .top,
                .main {
                    display: block;
                }
                .closed {
                    display: none;
                }
            });
    }
  }

  .leftPanel {
    right: auto;
    left: 0;
    transform: translateX(-100%);

    .md-mediaquery({
            grid-area: left;
            transform: none;
        });
  }

  .leftPanel.open {
    left: 0;
    transform: none;
    width: min(95%, 25rem);

    .md-mediaquery({
            transition-property: none;
            left: initial;
            right: initial;
            width: auto;
        });
  }

  .rightPanel {
    right: 0;
    left: auto;
    transform: translateX(100%);

    .md-mediaquery({
            grid-area: right;
            transform: none;
        });
  }

  .rightPanel.open {
    transform: none;
    width: min(95%, 30rem);

    .md-mediaquery({
            transition-property: none;
            left: initial;
            right: initial;
            width: auto;
        });
  }

  .footerPanel {
    position: relative;
    margin: 0 @panel-margin;
  }
}

@media print {
  .uv {
    .headerPanel {
      display: none;
    }

    .leftPanel {
      display: none;
    }

    .rightPanel {
      display: none;
    }

    .footerPanel {
      display: none;
    }

    .mobileFooterPanel {
      display: none;
    }
  }
}
