/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

#main {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
}

* {
    font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
}

.header {
    background-color: #fff;
    box-shadow: 0 0  20px rgba(0, 0, 0, 0.05);
    position: relative;
    z-index: 20;
    height: 55px;
}

.header>* {
    display: inline-block;
    vertical-align: middle;
}

.header h1 {
    color: #222;
    line-height: 50px;
    margin: 0;
    font-size: 20px;
}

#logo>* {
    display: inline-block;
    vertical-align: middle;
}

#logo img {
    height: 30px;
    margin-right: 20px;
}

.el-aside {
    box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
    position: relative;
    z-index: 10;
}

.el-main {
    background: #f3f4fa;
    padding: 0;
}

.nav-toolbar, .test-run-controls {
    background: #fff;
    position: fixed;
    width: 330px;
    z-index: 2;
    /* box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); */
    border-bottom: 1px solid #eee;
}

.test-run-controls {
    z-index: 1;
    position: sticky;
    width: 100%;
    top: 0px;
    background: #896bda;
    box-shadow: 0 0 20px rgb(0 0 0 / 20%);
    border-bottom: none;
}

.test-run-row {
    padding: 5px 20px;
}

.nav-toolbar .el-button {
    padding-left: 8px;
    padding-right: 8px;
}

.run-config-item {
    margin: 0 5px;
    color: #fff;
    font-size: 12px;
    display: inline-block;
    vertical-align: middle;
}
.run-config-item>* {
    display: inline-block;
    vertical-align: middle;
    font-size: 12px;
    color: #fff;
}

.run-config-item .el-progress-circle__track {
    stroke: rgba(255, 255, 255, 0.3)!important;
}
.run-config-item .el-progress-circle__path {
    stroke: rgba(255, 255, 255, 1)!important;
}

.run-config-item .el-input__inner,
.run-config-item .el-button-group {
    border: none;
}
.run-config-item .el-button {
    border-color: #fff;
}

.run-config-item .label {
    margin-right: 2px;
    margin-left: 5px;
    text-transform: uppercase;
}


.test-list {
    overflow-x: hidden;
    background: #fff;
    margin: 0;
    padding: 0;

    position: absolute;
    top: 48px;
    bottom: 0;
    right: 0;
    left: 0;
    overflow-y: scroll;
}
.test-list li {
    list-style: none;
    padding-left: 10px;
    cursor: pointer;
    color: #222;
}
.test-list li .el-checkbox {
    margin-right: 5px;
}
.test-list li a.menu-link {
    display: inline-block;
    text-decoration: none;
    font-size: 14px;
    line-height: 40px;
    color: #222;
    margin-left: 3px;
    cursor: pointer;
}
.test-list li a.menu-link i {
    font-size: 16px;
    margin-left: 10px;
    color: #ccc;
}

.test-list li.active {
    background: #5470C6;
}
.test-list li.active a {
    color: #fff;
}
.test-list li:hover {
    border-right: 4px solid #5470C6
}
.test-list li>* {
    vertical-align: middle;
    display: inline-block
}

.test-list .el-progress__text {
    font-size: 12px!important;
}

.el-progress.is-success .el-progress__text {
    color: #67C23A;
    -webkit-text-stroke: 1px #67C23A;
}
.el-progress.is-exception .el-progress__text {
    color: #F56C6C;
    -webkit-text-stroke: 1px #F56C6C;
}

.no-result {
    text-align: center;
    font-size: 30px;
    padding: 100px 0;
    color: #ccc;
}

.test-result {
    padding: 20px;
    margin-top: 20px;
}

.test-result .el-progress__text {
    font-size: 14px!important;
}

.test-result h3 {
    font-size: 40px;
    font-weight: 200;
    padding: 0;
    margin: 0;
}

.test-result .title {
    margin-left: 20px;
}
.test-result .title>* {
    display: inline-block;
    vertical-align: middle;
}
.test-result .title a {
    margin-left: 10px;
    font-size: 20px;
    font-weight: 200;
    text-decoration: none;
}
.test-result .title a:hover {
    text-decoration: underline;
}

.single-test-ops {
    padding: 20px 20px 0 10px;
}
.single-test-ops .el-button {
    margin-left: 10px;
}

.test-screenshots {
    margin-top: 20px;
    padding: 0 20px;
}

.test-screenshots h4 {
    margin-top: 60px;
}

.test-screenshots .preview {
    cursor: pointer;
    color: #409eff;
    float: right;
    font-size: 20px;
}
.test-screenshots .preview:hover {
    text-decoration: underline;
}

.test-screenshots img {
    /* height: 200px; */
    width: 100%;
}
.test-screenshots h4 {
    font-size: 30px;
    font-weight: 200;
    color: #162436;
}

.test-errors, .test-logs {
    margin-top: 20px;
    padding: 0 20px;
}

.test-logs .log-item {
    margin: 10px 20px;
    color: #909399;
}

.test-errors .error-item {
    margin: 10px 20px;
    color: #f56c6c
}

iframe {
    border: none;
    overflow: overlay;
}

#tests-runs-dialog .el-dialog {
    width: 90%;
    max-width: 1200px;
}


::-webkit-scrollbar {
    height: 8px;
    width: 8px;
    -webkit-transition: all 0.3s ease-in-out;
    transition: all 0.3s ease-in-out;
    -webkit-border-radius: 2px;
    border-radius: 2px
}

::-webkit-scrollbar-button {
    display: none
}

::-webkit-scrollbar-thumb {
    width: 8px;
    min-height: 15px;
    background: rgba(50,50,50,0.6) !important;
    -webkit-transition: all 0.3s ease-in-out;
    transition: all 0.3s ease-in-out;
    -webkit-border-radius: 2px;
    border-radius: 2px
}

::-webkit-scrollbar-thumb:hover {
    background: rgba(0,0,0,0.5) !important
}
