/**
 * Roundcube Webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

/*** List and treelist widgets ***/

.listing {
    tbody td,
    li {
        border-bottom: 1px solid @color-list-border;
        cursor: default;
        font-weight: normal;
        line-height: @listing-line-height;
    }

    tbody td,
    li a {
        padding: 0 .5rem;
        white-space: nowrap;
        vertical-align: middle;
        color: @color-list;
    }

    tbody td {
        .overflow-ellipsis();
        outline: none;

        a {
            color: @color-list;
        }
    }

    li a {
        display: block;
        text-decoration: none;
        cursor: default;
        width: 100%;
    }

    li.selected,
    tr.selected td {
        color: @color-list-selected;
        background-color: @color-list-selected-background;
    }

    td.selection {
        padding: 0 0 0 .5em;
        width: 2em;
        text-align: center;

        & > input {
            vertical-align: middle;
        }
    }

    &:not(.withselection) td.selection {
        display: none;
    }

    td.name {
        .overflow-ellipsis();
    }

    td.action {
        padding: 0 .5em;
        width: 2em;
        text-align: center;

        &:empty {
            width: 0;
        }

        a {
            display: block;
            overflow: hidden;
            text-decoration: none;

            &:before {
                &:extend(.font-icon-class);
                margin: 0;
                font-size: 1rem;
            }
        }

        a.pushgroup:before {
            content: @fa-var-chevron-right;
        }
    }

    li.droptarget > a,
    tr.droptarget > td {
        background-color: @color-list-droptarget-background;
    }

    li.disabled,
    tr.disabled td {
        color: @color-list-deleted;
    }

    li > a.virtual,
    li.virtual > a {
        opacity: .4;
    }

    span.secondary {
        color: @color-list-secondary;
    }
}

// Focus indicator
html:not(.touch) {
    .listing {
        li > a,
        tbody tr > td:first-child,
        &:not(.withselection) tbody tr > td.selection + td {
            border-left: 2px solid transparent;
        }

        li > a:focus,
        &.focus tbody tr.focused > td:first-child,
        &.focus:not(.withselection) tbody tr.focused > td.selection + td {
            border-left: 2px solid @color-list-focus-indicator;
            outline: 0;
        }
    }
}

table.listing {
    width: 100%;
    table-layout: fixed;
    // border-spacing/border-collapse here fix problem with our focus indicator
    // when the table cells use overflow: hidden. I.e. we use border-spacing:0
    // instead of Bootstrap's border-collapse:collapse. Is this cross-browser?
    border-spacing: 0;
    border-collapse: unset;
}

ul.listing {
    margin: 0;
    padding: 0;

    & > ul {
        padding: 0;
    }

    li {
        .overflow-ellipsis();
        white-space: nowrap;
        position: relative;
        list-style: none;

        ul {
            border-top: 1px solid @color-list-border;
            padding-left: 1.5em;

            li:last-child {
                border-bottom: none;
            }
        }

        .custom-switch {
            position: absolute;
            padding: 0;
            top: 0;
            right: 0;
            height: @listing-line-height;
            vertical-align: middle;

            .custom-control-label {
                &:before,
                &:after {
                    margin-top: .4rem;

                    html.touch & {
                        margin-top: .75rem;
                    }
                }
            }

            html.touch & {
                height: @listing-touch-line-height;
            }
        }
    }

    &.simplelist {
        li {
            padding: 0 .5rem;
        }
    }
}

.listing-info {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 80%;
    text-align: center;
    font-weight: bold;
    color: @color-list-secondary;
}

html.touch {
    .listing:not(.toolbar) li,
    .listing tbody td {
        line-height: @listing-touch-line-height;
        font-size: 1.2rem;
    }

    li input[type=checkbox] {
        height: @listing-touch-line-height;
    }

    td.selection {
        padding: 0;
        width: 3em;
    }
}

@media screen and (max-width: @screen-width-large) {
    .listing.selection-large-only {
        li.selected {
            color: @color-list;
            background-color: transparent;
        }
    }
}


/* icons */

.listing.iconized li {
    a:before {
        &:extend(.font-icon-class);
        height: 2em; // TODO: ?
        margin-right: .5rem;
    }
    &.preferences > a:before {
        content: @fa-var-sliders-h;
    }
    &.folders > a:before {
        content: @fa-var-folder;
    }
    &.responses > a:before {
        content: @fa-var-comment;
    }
    &.identities > a:before {
        content: @fa-var-id-card;
    }
    &.password > a:before {
        content: @fa-var-lock;
    }
    &.addressbook a:before {
        .font-icon-regular(@fa-var-address-book);
    }
    &.contactgroup a:before {
        .font-icon-solid(@fa-var-users);
    }
    &.contactsearch a:before {
        content: @fa-var-search;
    }
    &.filter > a:before {
        content: @fa-var-filter;
    }
    &.vacation > a:before {
        .font-icon-regular(@fa-var-clock);
    }
    &.forward > a:before {
        content: @fa-var-share-square;
    }
    &.enigma.keys > a:before {
        content: @fa-var-key;
    }
    &.info > a:before,
    &.userinfo > a:before {
        content: @fa-var-info-circle;
    }
    &.twofactorauth > a:before {
        content: @fa-var-sign-in-alt;
    }

    a.help:before {
        content: @fa-var-life-ring;
    }
    a.about:before {
        .font-icon-regular(@fa-var-question-circle);
    }
    a.license:before {
        content: @fa-var-shield-alt;
    }

    // autocomplete popup
    & > i:before {
        &:extend(.font-icon-class);
        content: @fa-var-user;
        margin-left: .5rem;
    }
    &.group > i:before {
        content: @fa-var-users;
    }
}

html.ie11 .listing.iconized li a:before {
    font-size: 1.25rem;
}

.listing.iconized tr {
    td:before {
        &:extend(.font-icon-class);
        margin-right: .5rem;
    }
    &.contact.person td.name:before {
        content: @fa-var-user;
    }
    &.contact.group td.name:before {
        content: @fa-var-users;
    }
    &.general > td.section:before {
        content: @fa-var-desktop;
    }
    &.mailbox > td.section:before {
        .font-icon-regular(@fa-var-envelope);
    }
    &.mailview > td.section:before {
        content: @fa-var-inbox;
    }
    &.compose > td.section:before {
        content: @fa-var-paper-plane;
    }
    &.addressbook > td.section:before {
        content: @fa-var-users;
    }
    &.folders > td.section:before {
        .font-icon-regular(@fa-var-folder);
    }
    &.server > td.section:before {
        content: @fa-var-server;
    }
    &.encryption > td.section:before {
        content: @fa-var-lock;
    }
    &.calendar > td.section:before {
        content: @fa-var-calendar;
    }
    &.chat > td.section:before {
        content: @fa-var-comments;
    }
}

/* selectable list: e.g. spellcheck language selection */
.listing.iconized.selectable li {
    a:before {
        &:extend(.font-icon-class);
        content: "";
    }
    a.selected:before {
        content: @fa-var-check;
    }
}

.popupmenu .listing {
    li > a {
        border-left: 0;

        &:not(.disabled):hover {
            color: @color-menu-hover;
            background-color: @color-menu-hover-background;
        }
    }

    li.selected {
        color: @color-menu-hover;
        background-color: @color-menu-hover-background;
    }

    td {
        .overflow-ellipsis();
    }
}

ul.treelist {
    li {
        div.treetoggle {
            position: absolute;
            top: 0;
            left: 0;
            width: @listing-treetoggle-width;
            cursor: pointer;
            background-color: transparent;

            &:before {
                &:extend(.font-icon-class);
                content: @fa-var-angle-right;
                margin-left: .25em;
                font-size: 1em;
            }

            &.expanded:before {
                content: @fa-var-angle-down;
            }
        }

        & > a {
            .overflow-ellipsis();
            padding-left: @listing-treetoggle-width;
        }

        &.selected {
            // reset .listing selection style
            color: inherit;
            background-color: transparent;

            & > div > a, // this is used e.g. by kolab_addressbook
            & > a {
                color: @color-list-selected;
                background-color: @color-list-selected-background;
            }
        }

        ul {
            padding: 0;

            li {
                padding-left: 0;
                a { padding-left: (2 * @listing-treetoggle-width); }
                div.treetoggle { left: @listing-treetoggle-width; }

                li {
                    a { padding-left: (3 * @listing-treetoggle-width); }
                    div.treetoggle { left: (2 * @listing-treetoggle-width); }

                    li {
                        a { padding-left: (4 * @listing-treetoggle-width); }
                        div.treetoggle { left: (3 * @listing-treetoggle-width); }

                        li {
                            a { padding-left: (5 * @listing-treetoggle-width); }
                            div.treetoggle { left: (4 * @listing-treetoggle-width); }

                            li {
                                a { padding-left: (6 * @listing-treetoggle-width); }
                                div.treetoggle { left: (5 * @listing-treetoggle-width); }
                            }
                        }
                    }
                }
            }
        }
    }

    &.notree {
        div.treetoggle {
            display: none;
        }

        li > a {
            padding-left: .5em;
        }
    }
}

/*** Folders list widget ***/

.folderlist {
    li {
        &.mailbox {
            &.unread {
                & > a {
                    padding-right: 2.8em;
                    font-weight: bold;
                }
            }

            .unreadcount {
                position: absolute;
                top: 0;
                right: 0;
                min-width: 2em;
                line-height: 1.4rem;
                margin: ((@listing-line-height - 1.4 * @page-font-size) / 2);
                padding: 0 .3em;
                border-radius: .4em;
                background: @color-list-badge-background;
                color: @color-list-badge;
                text-align: center;
                font-weight: bold;

                html.touch & {
                    line-height: 2rem;
                    margin: ((@listing-touch-line-height - 2 * @page-font-size) / 2);
                }
            }

            &.recent {
                & > a {
                    color: @color-list-recent;

                    & > .unreadcount {
                        background: @color-list-recent-badge-background;
                        color: @color-list-recent-badge;
                    }
                }
            }

            &.root {
                display: none !important;
                // FIXME: This element is confusing, I propose to not use it
            }
        }

        a:before {
            &:extend(.font-icon-class);
            .font-icon-regular(@fa-var-folder);
            margin-right: .5rem;
        }

        &.inbox > a:before {
            .font-icon-solid(@fa-var-inbox);
        }
        &.trash a:before {
            .font-icon-solid(@fa-var-trash-alt);
        }
        &.trash.empty > a:before {
            .font-icon-regular(@fa-var-trash-alt);
        }
        &.drafts a:before {
            .font-icon-solid(@fa-var-pencil-alt);
        }
        &.sent a:before {
            .font-icon-solid(@fa-var-paper-plane);
        }
        &.junk a:before {
            .font-icon-solid(@fa-var-fire-alt);
        }
        &.archive > a:before {
            .font-icon-solid(@fa-var-archive);
        }
        &.ns-shared > a:before {
            .font-icon-solid(@fa-var-share-alt);
        }
        &.ns-other > a:before {
            .font-icon-solid(@fa-var-user-friends);
        }
    }

    // folder-selector fix for left padding
    &.menu a:before {
        margin-left: .5em;
    }
}


/*** Messages list widget ***/

.messagelist > thead,
.messagelist .branch,
table.fixedcopy {
    display: none;
}

.messagelist {
    td {
        border-left: 0;
        width: 2em;
        vertical-align: top;
        font-size: 1rem !important;
    }

    td.subject {
        width: 100%;
        padding-right: 0;
        display: flex;
        flex-wrap: wrap;

        a {
            text-decoration: none;
            cursor: default;
        }

        span {
            line-height: 2em;

            &.size,
            &.date {
                font-size: 90%;
                color: @color-list-secondary;
            }

            &.fromto {
                .overflow-ellipsis();
                flex: 1;
                font-size: 90%;
                color: @color-list-secondary;
                padding-left: 1.5em;
                padding-right: .5rem;
            }

            &.subject {
                .overflow-ellipsis();
                width: 100%;
                user-select: none
            }
        }
    }

    td.threads {
        padding: 0 0 0 .25rem;
        width: 1.5em;
    }

    td.flags {
        width: 2.5em;

        & > span {
            height: 1.7em;
            line-height: 1.7em;
            display: block;

            &.flag {
                cursor: pointer;
            }
        }
    }

    tr.flagged td,
    tr.flagged td.subject span.subject a,
    tr.flagged td.subject span.date,
    tr.flagged td.subject span.fromto {
        color: @color-list-flagged;
    }

    tr.deleted td,
    tr.deleted td.subject span.subject a,
    tr.deleted td.subject span.date,
    tr.deleted td.subject span.fromto {
        color: @color-list-deleted;
    }

    tr.unread td.subject span.subject {
        font-weight: bold;
    }

    // thread parent message with unread children
    tr.unroot td.subject a {
        text-decoration: underline;
    }

    tr.thread td.threads div:before {
        &:extend(.font-icon-class);
        content: @fa-var-angle-right;
        cursor: pointer;
        width: 1em;
    }

    tr.thread.expanded td.threads div:before {
        content: @fa-var-angle-down;
    }

    td.subject span.msgicon.status {
        &:before {
            &:extend(.font-icon-class);
            content: @fa-var-circle;
            cursor: pointer;
            font-size: .4rem;
            width: 1.1rem;
            height: 2rem;
        }

        &.unread:before {
            content: @fa-var-circle;
            color: @color-list-unread-status;
            font-size: .5rem;
        }

        &.unreadchildren:before {
            .font-icon-regular(@fa-var-circle);
            font-size: .5rem;
        }

        &.replied:before {
            .font-icon-solid(@fa-var-reply);
            font-size: 1rem;
        }

        &.forwarded:before {
            .font-icon-solid(@fa-var-share);
            font-size: 1rem;
        }

        &.replied.forwarded:before {
            .font-icon-solid(@fa-var-reply);
            font-size: 1rem;
        }

        &.replied.forwarded:after {
            &:extend(.font-icon-class);
            .font-icon-solid(@fa-var-share);
            font-size: 1rem;
            opacity: .5;
            margin: 0 -0.1em 0 -1.25em;
        }
    }

    tr.deleted td.subject span.msgicon.status {
        &:before {
            .font-icon-solid(@fa-var-ban) !important;
            font-size: 1rem;
        }

        &:after {
            display: none !important;
        }
    }

    span.attachment span {
        &:extend(.font-icon-class);
        color: @color-list-icon;

        &:before {
            margin: 0;
            content: @fa-var-paperclip;
        }
        &.report:before {
            .font-icon-regular(@fa-var-file-alt);
        }
        &.encrypted:before {
            content: @fa-var-lock;
        }
        &.vcard:before {
            .font-icon-regular(@fa-var-user); // vcard_attachments plugin
        }
    }

    span.flagged:before {
        &:extend(.font-icon-class);
        content: @fa-var-flag;
    }

    tr.flaggedroot:not(:hover) span.unflagged:before {
        &:extend(.font-icon-class);
        content: @fa-var-flag;
        color: @color-list-icon;
    }

    tr:hover span.unflagged:before {
        &:extend(.font-icon-class);
        .font-icon-regular(@fa-var-flag);
    }

    span.size {
        display: none;
    }

    tr:hover {
        span.date {
            display: none;
        }
        span.size {
            display: inline;
        }
    }

    &.sort-size {
        span.date {
            display: none;
        }
        span.size {
            display: inline;
        }

        tr:hover {
            span.date {
                display: inline;
            }
            span.size {
                display: none;
            }
        }
    }
}

// On touch devices hide flag icon, but do it in a way
// that saves as much room as possible, keeping the attachment icon
html.layout-phone,
html.touch {
    .messagelist {
        tr {
            position: relative;
            display: flex; // Safari fix (#8433)
        }

        td.selection,
        td.threads {
            line-height: 3.8em; // because of display:flex above
        }

        td.flags {
            position: absolute;
            top: .25rem;
            right: 0;
            bottom: 0;
            background-color: transparent;

            .flag {
                visibility: hidden;
            }
        }

        td.subject {
            padding-right: .5em;

            .subject {
                padding-right: 1.5rem;
            }
        }
    }
}


/* Contacts list */

.contactlist {
    .contact.readonly td {
        font-style: italic;
    }

    td.action {
        // TODO
        a {
            // TODO
        }
    }

    // for contacts list in mail compose
    td.contact:before {
        &:extend(.font-icon-class);
        content: @fa-var-user;
    }

    // for contacts list in mail compose
    td.contactgroup:before {
        &:extend(.font-icon-class);
        content: @fa-var-users;
    }

    span.email {
        display: inline;
        color: @color-list-secondary;
        font-style: italic;
        margin-left: .5em;
    }

    li {
        a:before {
            &:extend(.font-icon-class);
            margin-right: .5rem;
        }

        a.addressbook::before {
            .font-icon-regular(@fa-var-address-book);
        }

        a.contactgroup::before {
            .font-icon-solid(@fa-var-users);
        }
    }
}


/* Attachments list */

@attachmentslist-item-height:   2rem;

.attachmentslist {
    padding: 0;
    margin: 0;

    background-color: @color-attachmentlist-background;
    border: 1px solid @color-attachmentlist-border;

    &:empty {
        padding: 0;
        border: 0;
    }

    li {
        list-style: none;
        display: inline-flex;
        white-space: nowrap;
        line-height: @attachmentslist-item-height;
        padding: 0 .25em;
        max-width: 100%;

        &:before {
            &:extend(.font-icon-class);
            .font-icon-regular(@fa-var-file);
            height: @attachmentslist-item-height;
            margin: 0;
        }

        &.txt:before,
        &.text:before {
            .font-icon-regular(@fa-var-file-alt);
        }

        &.pdf:before {
            .font-icon-regular(@fa-var-file-pdf);
        }

        &.odt:before,
        &.doc:before,
        &.docx:before,
        &.msword:before {
            .font-icon-regular(@fa-var-file-word);
        }

        &.ods:before,
        &.xls:before,
        &.xlsx:before,
        &.msexcel:before {
            .font-icon-regular(@fa-var-file-excel);
        }

        &.rar:before,
        &.zip:before,
        &.gz:before {
            .font-icon-regular(@fa-var-file-archive);
        }

        &.image:before,
        &.jpg:before,
        &.jpeg:before,
        &.png:before {
            .font-icon-regular(@fa-var-file-image);
        }

        &.mp3:before,
        &.audio:before {
            .font-icon-regular(@fa-var-file-audio);
        }

        &.m4p:before,
        &.video:before {
            .font-icon-regular(@fa-var-file-video);
        }

        &.ics:before,
        &.calendar:before {
            // TODO
        }

        &.vcard:before {
            .font-icon-regular(@fa-var-address-card);
        }

        &.html:before {
            .font-icon-regular(@fa-var-file-code);
        }

        &.eml:before,
        &.rfc822:before {
            // TODO
        }

        &.odp:before,
        &.otp:before,
        &.ppt:before,
        &.pptx:before,
        &.ppsx:before,
        &.vnd.mspowerpoint:before {
            .font-icon-regular(@fa-var-file-powerpoint);
        }

        &.sig:before,
        &.pgp-signature:before,
        &.pkcs7-signature:before {
            // TODO
        }

        &.application.asc:before {
            // TODO
        }

        &.application.pgp-keys:before {
            // TODO
        }

        a {
            text-decoration: none;
            line-height: @attachmentslist-item-height;
            height: @attachmentslist-item-height;
        }

        a.cancelupload:before,
        a.delete:before {
            &:extend(.font-icon-class);
            content: @fa-var-trash-alt;
            line-height: @attachmentslist-item-height;
            height: @attachmentslist-item-height;
            margin: 0;
        }

        a.dropdown:before {
            margin: 0;
        }

        &.uploading:before {
            .animated-icon-class();
            .font-icon-solid(@fa-var-circle-notch);
        }

        a.filename {
            display: flex;
            overflow: hidden;
            padding: 0 .2em;
        }

        .attachment-name {
            .overflow-ellipsis();
            color: @color-font;
        }

        .attachment-size {
            color: @color-list-secondary;
            padding-left: .25em;
        }
    }
}

.keylist {
    padding: 0;
    list-style: none;

    li {
        line-height: 2;

        &:before {
            &:extend(.font-icon-class);
            content: @fa-var-key;
            line-height: 1.5;
        }
    }
}

#identities-table {
    td.mail:before {
        &:extend(.font-icon-class);
        content: @fa-var-id-card;
    }
}

#responses-table {
    td.name:before {
        &:extend(.font-icon-class);
        content: @fa-var-comment;
    }
}

#filterslist {
    td.name:before {
        &:extend(.font-icon-class);
        content: @fa-var-filter;
    }
}

#filtersetslist {
    td.name:before {
        &:extend(.font-icon-class);
        content: @fa-var-file-alt;
    }
}

#subscription-table {
    li.mailbox a {
        padding-right: 2.5rem;
    }
}
