﻿@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 '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: 0px;
        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 {
        position: absolute;
        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;
        top: calc(5em + 8px);
        right: 0;
        bottom: 2em;
        left: 0;

        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-top: 0;
        margin-right: @panel-margin;
        margin-bottom: 0px;
        margin-left: @panel-margin;
    }
}

@media print {
   .uv {

       .headerPanel {
           display: none;
       }

       .leftPanel {
           display: none;
       }

       .rightPanel {
           display: none;
       }

       .footerPanel {
           display: none;
       }

       .mobileFooterPanel {
            display: none;
        }
   }
}

