terrazzo-terminal 0.2.8

A simple web-based terminal emulator built on Terrazzo.
.outer,
.inner {
    box-sizing: border-box;
    padding: 0;
    margin: 0;
    height: 100%;
}

.inner {
    display: flex;
    flex-direction: column;
}

.header {
    @include trz-header;
    border: 1px solid var(--color);
    box-sizing: border-box;
    flex: 0 0 auto;
}

.port-forwards {
    --padding: 10px;
    --half-padding: calc(var(--padding) / 2);

    display: flex;
    flex-direction: column;
    overflow-y: scroll;

    .port-forward,
    .add {
        border: 1px solid var(--color);
        border-radius: var(--padding);
        margin-top: var(--padding);
        padding: var(--half-padding);
    }

    .port-forward {
        .title {
            margin: var(--half-padding);
            display: flex;
            align-items: center;

            img.status {
                --size: 24px;
                margin-left: auto;
                padding-right: var(--half-padding);
                margin: 0;
            }

            img.delete {
                --size: 20px;
                margin: 0;
                margin-left: auto;
                padding: var(--half-padding);
                position: relative;
                right: calc(-1 * var(--half-padding));
                cursor: pointer;

                &:hover {
                    background-color: var(--color);
                }
            }

            img.status,
            img.delete {
                width: var(--size);
                height: var(--size);
            }

            span.tag {
                background-color: rgba(255, 255, 255, 0.2);
                padding: 3px;
                border: 1px solid var(--color);
                border-radius: 7px;
                text-transform: uppercase;
            }
        }

        .port-forward-body {
            display: flex;
            flex-direction: row;

            .from {
                flex: 1 1 0;
                margin-right: var(--half-padding);
            }

            .to {
                flex: 1 1 0;
                margin-left: var(--half-padding);
            }
        }

        .port-forward-status {
            margin: var(--half-padding);
            margin-top: var(--padding);
        }

        .active-checkbox {
            margin: var(--half-padding);
        }
    }

    .host-port-definition {
        margin: var(--half-padding);
        margin-bottom: 0;

        .endpoint {
            background-color: var(--color);
            padding: var(--half-padding);
            margin-bottom: var(--half-padding);
        }

        .remote,
        .host,
        .port {
            display: flex;
            flex-direction: row;
            align-items: center;
        }

        .remote {
            position: relative;

            &::after {
                content: '▼';
                position: absolute;
                top: 50%;
                right: calc(var(--padding) + 5px);
                color: var(--color);
                transform: translateY(-50%);
                pointer-events: none;
            }

            select {
                width: 100%;
                border: 1px dotted white;
                border-radius: 0;
                padding: var(--half-padding);
                margin: var(--half-padding);
                margin-left: var(--padding);
                margin-right: 0;
                color: inherit;
                background: none;
                @include trz-no-outline;
                font: inherit;
            }
        }

        .host,
        .port {
            input {
                width: 100%;
                border: 0;
                border-bottom: 1px dotted white;
                border-radius: 0;
                padding: var(--half-padding);
                margin: var(--half-padding);
                margin-left: var(--padding);
                margin-right: 0;
                color: inherit;
                background: none;
                @include trz-no-outline;
                font: inherit;
            }
        }
    }

    .add {
        cursor: pointer;
        display: flex;
        align-items: center;

        img {
            --size: 24px;
            width: var(--size);
            height: var(--size);
            margin: 0;
            padding: var(--half-padding);

        }

        &:hover {
            div {
                background-color: var(--color);

                img {
                    filter: invert(1);
                }
            }
        }
    }
}