@import 'wagtailadmin/scss/helpers';

.page-editor {
    .content-wrapper {
        margin-bottom: 10em;
    }

    .breadcrumb {
        margin: -1.2em 0 2em;

        @include media-breakpoint-up(sm) {
            margin-top: -1.8em;
        }
    }

    .modal .breadcrumb {
        margin: 0;
        background-color: transparent;

        a {
            color: $color-grey-2;
        }

        li:hover {
            background-color: $color-grey-4;
        }

        .home {
            padding-left: 0;
        }
    }

    .header-title {
        padding-left: 3.1em;

        @include media-breakpoint-down(xs) {
            padding-left: 0;
            margin-left: -28px;
            // Because it's nested within tab-merged which we've given padding
            // on mobile viewports due to snippets
        }
    }
}

$object-title-height: 40px;

// An object is the basic wrapper around any field or group of fields in the editor interface
.object {
    @include nice-padding();
    position: relative;

    &:first-child {
        border: 0;
    }

    &.focused {
        border-color: $color-input-focus-border;
    }

    fieldset {
        padding-top: $object-title-height + 12px;
        padding-left: 0;
        padding-right: 0;
    }

    .object-help {
        display: block;
        position: relative;
        z-index: 1;
        top: $object-title-height;
        margin-top: 0;
        padding-top: 1em;
        padding-right: $grid-gutter-width / 2;
        padding-left: 3em;
        opacity: 1;

        .icon-help-inverse {
            float: left;
            margin-left: -2em;
            margin-top: 0.3em;
        }
    }

    &:hover .object-help {
        opacity: 1;
    }

    > .title-wrapper {
        box-sizing: border-box;
        height: $object-title-height;
        -webkit-font-smoothing: auto;
        background: $color-salmon-light;
        color: #200200;
        text-transform: uppercase;
        padding: 0.9em 0 0.9em 4.1em;
        font-size: 0.95em;
        margin: 0;
        line-height: 1.5em;
        font-weight: normal;
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        z-index: 1;
        overflow: hidden;

        label {
            display: inline;
            text-transform: inherit;
            font-weight: inherit;
            float: none;
            width: auto;
            color: inherit;
            font-size: inherit;
        }

        &:before {
            @include font-smoothing;
            text-shadow: none;
            font-family: wagtail;
            text-transform: none;
            content: map-get($icons, 'arrow-down');
            text-align: center;
            display: block;
            position: absolute;
            z-index: 2;
            font-size: 2em;
            top: 0;
            line-height: 1.8em;
            left: 0;
            width: 1.7em;
            color: $color-white;
            padding: 0;
            margin: 0;
            background-color: $color-salmon;
        }
    }

    .halloeditor {
        padding-top: 1em; // to provide space for editor buttons
        padding-bottom: 1em;

        &.expanded {
            padding-top: 5em; // to provide space for editor buttons
            padding-bottom: 2em;
        }

    }

    &.required {
        > .title-wrapper label:after {
            content: '*';
            color: $color-red;
            font-weight: bold;
            display: inline-block;
            margin-left: 0.5em;
            line-height: 1em;
            font-size: 13px;
        }
    }

    // Special full-width, one-off fields i.e a single text or textarea input
    &.full {
        fieldset {
            display: block;
            float: none;
        }

        li {
            padding: 0;
        }

        .halloeditor {
            padding-top: 3em; // to provide space for editor buttons
            padding-bottom: 3em;

            &.expanded {
                padding-top: 5em; // to provide space for editor buttons
                padding-bottom: 5em;
            }
        }

        .error-message {
            @include nice-padding();
            padding-bottom: 2em;
        }

        .error,
        .error input,
        .error textarea,
        .error .halloeditor {
            background-color: $color-input-error-bg;
        }
    }

    // cursory styling for streamfield. Main styling in client/src/components/StreamField/StreamField.scss
    &.stream-field {
        background-color: #f6f6f6;
        padding-left: 20px;
        padding-right: 20px;

        &.required .field > label:after {
            display: none;
        }

        .object-layout_big-part {
            max-width: 100%;
        }

        fieldset {
            padding-bottom: 0;
            max-width: unset;
            // Workaround to make sure blocks do not overflow horizontally.
            min-width: 0;
        }

        .block_field > .field-content {
            width: 100%;
        }
    }

    // special panel for the publishing fields, requires a bit more pizzazz
    &.publishing {
        > .title-wrapper:before {
            content: map-get($icons, 'date');
            font-size: 1.8rem;
            line-height: 1.4em;
            width: 1.4em;
        }
    }

    .multiple {
        padding: 4.5em 0 0;

        fieldset {
            padding-top: 0;
            padding-bottom: 0;
        }
    }

    .fields {
        max-width: 100%;
    }

    // removes top padding from multiples used within another panel
    .fields .multiple {
        padding-top: 0;
    }

    .add {
        padding-top: 1em;
    }

    &.empty {
        border-bottom: 1px solid $color-white;

        > h3 {
            margin: 0;
            border-bottom: 1px solid $color-white;
        }

        // wrapper around add button for mutliple objects. Default version is wordless plus button for contracted groups of fields
        .add {
            @include transition(background-color 0.2s ease);
            position: relative;
            z-index: 2;
            top: 0;
            left: 0;
            width: 3.3em;
            padding: 0;
            margin: 0 0 0 -20px;
            cursor: pointer;

            .button {
                border-radius: 0;
                overflow: visible;
                background-color: $color-salmon-light;
                font-size: 0; // helps fake the effect of t.ext-replace class, which can't be used here.
                width: 2em;

                // stylelint-disable max-nesting-depth
                &:before {
                    position: relative;
                    padding: 0;
                    line-height: 1.8em; // specific height required as parent 'a' has no height
                    font-size: 1.4rem;
                    width: 1.8em;
                    background-color: $color-salmon;
                }

                &:hover:before {
                    background-color: darken($color-salmon, 5%);
                }
            }
        }

        .multiple {
            padding: 0;
        }
    }

    &.collapsible {
        // li.collapsed gets its height from the fieldset only, which is now hidden
        // and h2 has position: absolute which doesn't add to it either, so it would be 0 without this
        min-height: 41px;

        .title-wrapper {
            &:before {
                content: map-get($icons, 'collapse-up');
                cursor: pointer;
            }
        }

        &.collapsed {
            .title-wrapper {
                &:before {
                    content: map-get($icons, 'collapse-down');
                }
            }
        }
    }
}

// Custom styles that make some fields look more important
.full input,
.full textarea,
.full .halloeditor {
    @include nice-padding;
    border-radius: 0;
    padding-top: 2em;
    padding-bottom: 2em;
    font-size: 1.2em;
    line-height: 1.6em;
}

.title input,
.title textarea,
.title .halloeditor {
    font-size: 2em;
    font-family: $font-serif;
}

// Footer control bar for perfoming actions on the page
footer .preview {
    button,
    .button {
        @include media-breakpoint-down(xs) {
            width: 100%;
            margin-top: 2px;
            margin-bottom: 2px;
            height: 3em;
        }

        background-color: lighten($color-grey-2, 10%);
        border-color: lighten($color-grey-2, 10%);

        &:hover {
            background-color: $color-grey-2;
            border-color: $color-grey-2;
        }
    }

    .dropdown {
        input[type=button],
        input[type=submit],
        button,
        .button {
            background-color: lighten($color-grey-2, 10%);
            border-color: lighten($color-grey-2, 10%);

            &:hover {
                background-color: $color-grey-2;
                border-color: $color-grey-2;
            }
        }

        ul,
        .dropdown-toggle {
            background-color: lighten($color-grey-2, 10%);
        }

        .dropdown-toggle:hover,
        &.open > .button + .dropdown-toggle {
            background-color: $color-grey-2;
        }
    }
}

@include media-breakpoint-up(sm) {
    .object {
        fieldset {
            // Override column mixin for column items.
            display: block;
            // Override column mixin for column items.
            float: none;
            max-width: 1024px;
            padding-left: 0;
            padding-right: 0;

            fieldset {
                width: 100%;
            }
        }

        .object-layout {
            display: flex;
            flex-flow: row-reverse wrap;

            &_small-part {
                // IE11 requires units on the flex basis. Unitless breaks.
                // stylelint-disable-next-line length-zero-no-unit
                flex: 1 0 0%;
            }

            &_big-part {
                // IE11 requires units on the flex basis. Unitless breaks.
                // stylelint-disable-next-line length-zero-no-unit
                flex: 5 0 0%;
            }
        }

        .object-help {
            padding-bottom: 40px;
            margin-left: 10px;
            opacity: 0;
        }

        &.stream-field {
            .object-help {
                padding-left: 6.4em;
            }
        }

        &.full {
            fieldset {
                // Override column mixin for column items.
                display: block;
                // Override column mixin for column items.
                float: none;
                margin-left: -51px;
                padding: 0;
                padding-top: $object-title-height;
            }

            input,
            textarea,
            .halloeditor {
                border-width: 0 1px;
            }

            .field {
                padding: 0;
            }

            .field-content {
                display: block;
                float: none;
                width: auto;
                padding: inherit;
            }
        }

        .multiple {
            @include column(10);
            padding-left: 0;
            padding-right: 0;
        }

        &.empty .add {
            margin: 0 0 0 -50px;
        }
    }
}
