@import "variables.css";
@import "reset.css";
@import "animations.css";
@import "modal.css";
@import "form.css";
@import "buttons.css";
@import "ui-icons.css";
@import "layout.css";
@import "toasts.css";

@import "components/application-component.css";

@font-face{
    font-family: "JetBrains Mono";
    src: url("../fonts/JetBrainsMono-VariableFont_wght.ttf") format("truetype");
}
body{
    width: 100%;
    height: 100vh;
    margin: 0;
    background: var(--bg);
    color: var(--color);
    font-size: 16px;
    font-family: "JetBrains Mono", monospace;
    overflow: hidden;
}
dialog{
color: var(--color);
}
dialog[is=request-component]::backdrop{
    background-color: var(--background-color);
}



input[type=text],input[type=password]{
    display: block;
    width: 100%;
    margin: 0 0 1em;
    padding: .75em 1em;
    background: var(--input-background-color);
    border-radius: .75em;
    border: .15em solid var(--input-border-color);
    color: var(--color);
}

li[data-connection-state]:has(address){
    address:before{
        content: "";
        border-radius: 100%;
        width: 1em;
        height: 1em;
        display: block;
        position: absolute;
        left: 0;
        top: 1em;
    }
    &[data-connection-state="0"] address:before,
    &[data-connection-state="1"] address:before{
        background-color: var(--connection-state-1);
    }
    &[data-connection-state="2"] address:before{
        background-color: var(--connection-state-2);
    }
    &[data-connection-state="3"] address:before{
        background-color: var(--connection-state-3);
    }
}

li[data-address]{
    margin: 0;
    overflow: hidden;
    padding: 0 4em 0 2em;
    >address{
        display: block;
        float: left;
        width: 100%;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        margin: 0;
        padding: .75em 1em;
        background: var(--input-background-color);
        border-radius: .75em;
        border: .15em solid var(--input-border-color);
        transition: width .15s ease-in-out;
        /*&:before{
            content: "";
            background-color: var(--connection-state-1);
            border-radius: 100%;
            width: 1em;
            height: 1em;
            display: block;
            position: absolute;
            left: 0;
            top: 1em;
        }*/
    }
    address+menu{
        display: block;
        overflow: hidden;
        position: absolute;
        top: 0;
        right: 0;
        width: calc((var(--signaling-server-menu-option-size) * 3.5));
        height: var(--signaling-server-menu-option-size);
        margin: 0;
        padding: 0;
        list-style: none;
        transform: translateX(calc((var(--signaling-server-menu-option-size) * 3.5)));
        transition: transform .15s ease-in-out;
        >li{
            display: block;
            position: relative;
            float: left;
            width: var(--signaling-server-menu-option-size);
            height: var(--signaling-server-menu-option-size);
            margin: 0 0 0 .5em;
            padding: 0;
            background-color: transparent;
            >button{
                display: block;
                float: right;
                width: 100%;
                height: 100%;
                border: .15em solid var(--input-border-color);
                border-radius: .75em;
                background-color: var(--background-color);
            }
        }
    }
    address+menu+button{
        display: block;
        position: absolute;
        right: 0;
        width: var(--signaling-server-menu-option-size);
        height: var(--signaling-server-menu-option-size);
        border-radius: .75em;
        border: .15em solid var(--border-color);
        background: var(--background-color);
        transition: transform .15s ease-in-out;
    }
    &:focus-within{
        >address{
            width: calc(100% - ((var(--signaling-server-menu-option-size) * 3.5)));
        }
        address+menu{
            transform: translateX(0);
        }
        address+menu+button{
            transform: scale(0);
        }
    }
}
fieldset{
    >details{
        display: block;
        margin: 0 0 1em;
        background: none;
        border: .125em solid var(--border-color);
        border-radius: .75em;
        padding: 0;
        clear: both;
        >summary{
            padding: 1.25em;
        }
        >fieldset{
            margin: 0 .75em .75em;
        }
    }
}
.optional{
    &:after{
        content: "(optional)";
        margin: 0;
        font-style: italic;
        color: #fa60ff;
    }
}

dialog {
    /*&[open] {
        animation: popIn .5s ease-in-out forwards;
    }*/
    &[is=application-component]{
        top: 0;
        left: 0;
        width: 100%;
        max-width: 100%;
        height: 100%;
        max-height: 100%;
        margin: 0;
        padding: 0;
        border: none;
        background: var(--background-color);
        color: var(--color);
        overflow: hidden;
        /*>ol{
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            z-index: 1;
            width: 100vw;
            height: 100vh;
            margin: 0;
            padding: 0;
            list-style: none;
            &:has(li){
                display: block;
            }
            >li{
                display: block;
                width: 100%;
                height: 100%;
                margin: 0;
                padding: 0;
            }
        }*/
        >ul{
            display: block;
            position: absolute;
            top: var(--header-height);
        }
    }
}



label:has(input[value=calls-component]){
    background: url("/assets/images/icon-call.svg") no-repeat 50% 50%;
    background-size: 70%;
}
label:has(input[value=messaging-component]){
    background: url("/assets/images/icon-message.svg") no-repeat 50% 50%;
    background-size: 70%;
}
label:has(input[value=contacts-component]){
    background: url("/assets/images/icon-contacts.svg") no-repeat 50% 50%;
    background-size: 70%;
}
label:has(input[value=network-component]){
    background: url("/assets/images/icon-network.svg") no-repeat 50% 50%;
    background-size: 70%;
}
label:has(input[value=settings-component]){
    background: url("/assets/images/icon-account.svg") no-repeat 50% 50%;
    background-size: 70%;
}

label:has(input[name=persist])+label{
    display: none;
}
label:has(input[name=persist]:checked)+label{
    display: block;
}
label:has(input[name=encrypt])+fieldset{
    display: none;
}
label:has(input[name=encrypt]:checked)+fieldset{
    display: block;
}
dialog[is=registration-component]{
    >form{
        >fieldset{
            &:has(output:not(:empty)){
                >details,>label,>fieldset,>button{
                    display: none;
                }
            }
        }
    }
}

/* Multi-select, mobile-friendly, radio-based UI */
menu:has(li>label>span+input[type=radio]){
    display: block;
    padding: 0;
    margin: 1em;
    border-radius: .75em;
    border: .125em solid var(--border-color);
    >li{
        display: block;
        float: left;
        /*height: 100%;*/
        &:nth-of-type(n+2){
            >label{
                border-left: var(--dialog-border);
            }
        }
        >label{
            display: block;
            /*width: 100%;
            height: 100%;*/
            padding: .5em 1em;
            text-align: center;
            &:has(input:checked){
                background: var(--input-background-color);
            }
            >input{
                display: none;
            }
        }
    }
}

/* UI sub-component dialog styles jump off */
ul>li>dialog[is]{
    >form{
        fieldset{
            border: .125em solid var(--border-color);
            border-radius: .75em;
            padding: 1em;
            >menu{
                /*display: block;*/
                margin: 0 0 1em;
                text-align: center;
                >li{
                    display: inline-block;
                    position: relative;
                    width: 3em;
                    height: 3em;
                    >button{
                        display: block;
                        width: 100%;
                        height: 100%;
                        border: .125em solid var(--border-color);
                        border-radius: .75em;
                        background-color: var(--background-color);
                    }
                }
            }
        }
    }
    /* Component header styles */
    form>header{
        margin: 0;
        padding: 1em;
        border-bottom: .125em solid var(--border-color);
        >span{
            font-size: 1.25em;
            font-weight: 600;
        }
        >button {
            display: block;
            position: absolute;
            top: .6em;
            width: 2.5em;
            height: 2.5em;
            border: .115em solid var(--button-border-color);
            border-radius: .5em;
            background-color: var(--button-accent-color);
            transition: right .15s ease-in-out;
            &:nth-of-type(1){
                right: .5em;
            }
            &[name]:before{
                background-color: #fff;
            }
        }
    }
    >dialog[is]{
        display: block;
        position: absolute;
        width: 100%;
        height: 100%;
        background: transparent;
        transition: left .25s ease-in-out;
        &:not([is=call-component]){
            overflow: hidden;
        }
        /* Sidebar/entry list component styles */
        &:has(form>header+menu+menu){
            >form{
                >menu:first-of-type{
                    float: left;
                }
                >menu+menu{
                    float: right;
                    margin: 1em 1em 1em 0;
                    min-width: 5.5em;
                    >li{
                        display: block;
                        float: left;
                        width: 2.5em;
                        height: 2.5em;
                        background-color: var(--background-color);
                        &:not(:first-of-type){
                            margin: 0 0 0 .75em;
                        }
                        >label,>button{
                            display: block;
                            width: 100%;
                            height: 100%;
                            background-color: var(--background-color);
                            border: .125em solid var(--border-color);
                            border-radius: .5em;
                            &:before{
                                content: "";
                                display: block;
                                position: absolute;
                                top: 0;
                                left: 0;
                                width: 100%;
                                height: 100%;
                                mask-size: 70%;
                                mask-position: center;
                                mask-repeat: no-repeat;
                                background-color: var(--icon-color);
                            }
                            &:has([name=toggle_select]):before{
                                mask-image: url("/assets/images/icon-select.svg");
                            }
                            >input[type=checkbox]{
                                display: none;
                            }
                        }
                    }
                    &:has(label>input:checked)~fieldset{
                        >menu{
                            >li{
                                >label{
                                    left: 0;
                                }
                                >details{
                                    padding: 0 0 0 5em;
                                    >summary{
                                        padding: 0 0 0 5em;
                                        &:before{
                                            left: 3em;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                >fieldset{
                    display: block;
                    position: absolute;
                    top: 8.3em;
                    width: 100%;
                    height: calc(100% - 3.5em);
                    overflow-y: auto;
                    border: none;
                    padding: 0;
                    margin: 0;
                    &:not(:has(>menu>li)):before{
                        display: block;
                        width: 100%;
                        padding: 2em;
                        text-align: center;
                        font-size: 1.25em;
                        font-style: italic;
                        font-weight: 400;
                        border-top: .125em solid var(--border-color);
                        color: #a4a4a4;
                    }
                    &:has(>menu>li){
                        border-top: .125em solid var(--border-color);
                    }
                    &:nth-of-type(1){
                        left: 0;
                    }
                    &:nth-of-type(2){
                        left: 100%;
                    }
                    >menu{
                        >li{
                            >menu{
                                display: block;
                                position: absolute;
                                z-index: 1;
                                width: 11.5em;
                                height: 5em;
                                top: 0;
                                right: 0;
                                padding: 1em .25em;
                                transform: translateX(12.5em);
                                transition: transform .15s ease-in-out;
                                overflow: hidden;
                                background: var(--background-color);
                                >li{
                                    display: block;
                                    float: left;
                                    width: var(--signaling-server-menu-option-size);
                                    height: var(--signaling-server-menu-option-size);
                                    margin: 0 0 1em .5em;
                                    padding: 0;
                                    background-color: transparent;
                                    >button{
                                        display: block;
                                        float: right;
                                        width: 100%;
                                        height: 100%;
                                        border: .15em solid var(--input-border-color);
                                        border-radius: .75em;
                                        background-color: transparent;
                                    }
                                }
                            }
                            >button:last-child{
                                display: block;
                                position: absolute;
                                top: .85em;
                                right:.75em;
                                width: var(--signaling-server-menu-option-size);
                                height: var(--signaling-server-menu-option-size);
                                background-image: url("/assets/images/icon-chevron.svg");
                                background-color: transparent;
                                border-radius: .75em;
                                border: .15em solid var(--input-border-color);
                            }
                            &:has(>menu:focus-within),
                            &:has(>button:last-of-type:focus-within){
                                >menu{
                                    transform: translateX(0);
                                }
                                >button{
                                    opacity: 0;
                                }
                            }
                        }
                    }
                }
                >menu:first-of-type:has(>li:nth-of-type(2)>label>input:checked){
                    &~fieldset:nth-of-type(1){
                        left: -100%;
                    }
                    &~fieldset:nth-of-type(2){
                        left: 0;
                    }
                }
            }
        }
        /* Content window styles */
        &:has(form>label:first-child>input[name=display]){
            >form{
                >label,>button[name=manage]{
                    display: block;
                    position: absolute;
                    z-index: 2;
                    width: 2.5em;
                    height: 2.5em;
                    border: .125em solid var(--button-border-color);
                    background-color: var(--button-background-color);
                    border-radius: .75em;
                    &:before{
                        content: "";
                        display: block;
                        position: absolute;
                        top: 0;
                        left: 0;
                        width: 100%;
                        height: 100%;
                        mask-size: 70%;
                        mask-position: center;
                        mask-repeat: no-repeat;
                        background-color: #fff;
                    }
                    &:is(label){
                        top: .6em;
                        left: .6em;
                        &:before{
                            mask-image: url("/assets/images/icons.svg#chevron");
                        }
                        >input{
                            display: none;
                        }
                    }
                    &:is(button[name=manage]){
                        top: .6em;
                        left: 3.8em;
                    }
                }
                &:has(>ol>li){
                    >label:nth-of-type(1):has(input:not(:checked)){
                        left: -3.5em;
                        transform: rotate(180deg);
                    }
                }
            }
        }
        &:nth-of-type(2):has(form>ol>li){
            >form>label{
                left: -3em;
            }
        }
    }
    /* Control sidebar state/position */
    &:has(dialog:nth-of-type(2)>form>label>input:checked){
        &>dialog:nth-of-type(1){
            left: -200%;
        }
        &>dialog:nth-of-type(2){
            left: 0;
        }
    }
}

/* Menu List pane component */
fieldset:has(menu>li>details){
    clear: both;
    display: none;
    margin: 0;
    padding: 0;
    border: none;
    border-radius: 0;
    border-top: .125em solid var(--border-color);

    >menu{
        height: calc(100% - 5em);
        overflow-y: auto;
        >li{
            display: block;
            position: relative;
            width: 100%;
            overflow: hidden;
            border-bottom: .125em solid var(--border-color);
            >label{
                display: block;
                position: absolute;
                top: 0;
                left: -5em;
                width: 5em;
                height: 100%;
                text-align: center;
                line-height: 5em;
                border-right: .15em solid var(--border-color);
                transition: left .15s ease-in-out;
                >input[type=checkbox]{
                    width: 1.25em;
                    height: 1.25em;
                }
                >input:not(:checked){
                    filter: opacity(.5);
                }
            }
            >details{
                display: block;
                width: 100%;
                min-height: 5em;
                margin: 0;
                padding: 0;
                border: none;
                transition: all .15s ease-in-out;
                >summary{
                    display: block;
                    position: absolute;
                    z-index: 1;
                    top: 0;
                    left: 0;
                    width: calc(100% - 14em);
                    height: 3em;
                    padding: 0;
                    margin: 1em 1em 1em 3em;
                    transition: padding .15s ease-in-out;
                    &:before{
                        content: "";
                        display: block;
                        position: absolute;
                        left: -2em;
                        top: 1em;
                        width: 1em;
                        height: 1em;
                        border-radius: 100%;
                        background-color: var(--connection-state-1);
                        transition: left .15s ease-in-out;
                    }
                    >button{
                        height: 100%;
                        width: 100%;
                        border-radius: 0;
                        overflow: hidden;
                        white-space: nowrap;
                        text-overflow: ellipsis;

                        background: var(--input-background-color);
                        border-radius: .75em;
                        border: .15em solid var(--input-border-color);
                        padding: .75em 1em;
                        text-align: left;
                        &[name=focus]:empty:before{
                            content: unset;
                        }
                    }
                }
                >ol{
                    >li{
                        height: 5em;
                        padding: 1em;
                        >address{
                            display: block;
                            white-space: nowrap;
                            width: 100%;
                            overflow: hidden;
                            text-overflow: ellipsis;
                            margin: 0 0 0 1.75em;
                            padding: .75em 1em;
                            background: var(--input-background-color);
                            border-radius: .75em;
                            border: .15em solid var(--input-border-color);
                        }
                        &[data-connection-state]>address:before{
                            left: 1em;
                        }
                    }
                }
                /* Details open state */
                &[open]{
                    >summary:has(button:empty){
                        >button{
                            background: none;
                            border: none;
                        }
                        &:before{
                            display: none;
                        }
                        &:after{
                            display: none;
                        }
                        &+ol{
                            margin: 0;
                            >li{
                                width: calc(100% - 10em);
                            }
                        }
                    }
                    >summary:has(button:not(:empty)){
                        &:after{
                            content: "△";
                            position: absolute;
                            z-index: 1;
                            left: calc(100% + .5em);
                            top: .33em;
                            font-size: 1.5em;
                        }
                        &+ol{
                            margin-top: 5em;
                            >li{
                                width: 100%;
                            }

                        }
                    }
                }
                &:not([open]){
                    >summary:has(button:not(:empty)){
                        &:after{
                            content: "▽";
                            position: absolute;
                            z-index: 1;
                            left: calc(100% + .5em);
                            top: .25em;
                            font-size: 1.5em;
                        }
                    }
                }
            }
            >time{
                display: block;
                position: absolute;
                top: 0;
                left: calc(100% - 10em);
                width: 7em;
                text-align: center;
                line-height: 5em;
                font-weight: 400;
                filter: opacity(.75)
            }
            >menu{
                transition: right .15s ease-in-out;
            }
        }
    }
}
