/* -------------------------------------------------------------------------------------

Project Name:   Helixsun
Project URI:    https://helixsun.com
Author:         Retro Medya
Author URI:     https://retromedya.com
License:        The design and development rights of this website belong to Retro Medya.
                Unauthorized copying, distribution, or resale is strictly prohibited.
Version:        1.0

------------------------------------------------------------------------------------- */

@property --a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg
}

@keyframes draw {
    to { stroke-dashoffset: 0 }
}

@keyframes rotating {
    0% { --a: 0deg }
    100% { --a: 360deg }
}

* {
    box-sizing: border-box;
    user-select: none;
    font-family: "Inter Tight", sans-serif;
    color: #f7f7f7;
    margin: 0
}

img {
    pointer-events: none
}

body {
    background: #f7f7f7;
}

body.gray {
    background: #181818;
}

.preloader {
    position: fixed;
    z-index: 1;
    display: flex;
    justify-content: center;
    align-items: center;
    background: #181818;
    width: 100%;
    height: 100%
}

.preloader.hidden {
    opacity: 0;
    visibility: hidden;
    transition: .5s
}

.preloader > svg {
    width: 350px;
    height: 70px
}

.preloader > svg > path {
    fill: none;
    stroke: #f7f7f7;
    stroke-width: 1px;
    stroke-dasharray: 500;
    stroke-dashoffset: 500;
    animation: draw 3s ease-in-out infinite alternate
}

model-viewer {
    position: absolute;
    width: 100%;
    height: 100%;
    filter: contrast(1.2) saturate(1.2)
}

.logo-container {
    position: fixed;
    top: 25px;
    left: 50%;
    transform: translateX(-50%);
    filter: drop-shadow(0 0 3px #f7f7f7);
}

.logo-container > img {
    width: 350px
}

.intro-container {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%)
}

.menu-bar {
    position: fixed;
    top: 50%;
    left: 50px;
    transform: translateY(-50%)
}

.intro-container::before,
.intro-container::after,
.menu-bar::before,
.menu-bar::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 50px;
    background: repeating-conic-gradient(from var(--a), #0f0, #ff0, #0ff, #f0f, #0ff);
    filter: blur(25px);
    animation: rotating 5s linear infinite
}

.intro-container > div {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 50px;
    border-radius: 50px;
    background: #181818;
    padding: 50px
}

.intro-container > div > div {
    display: flex;
    gap: 50px
}

.intro-container > div > div > a {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 25px;
    text-decoration: none;
    white-space: nowrap;
    border: 1px solid #f7f7f7;
    border-radius: 25px;
    width: calc((100% / 2) - 25px);
    padding: 50px;
    transition: .5s
}

.intro-container > div > div > a:hover {
    scale: 1.05
}

.menu-bar > div {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    gap: 10px;
    border-radius: 50px;
    background: #181818;
    padding: 25px
}

.menu-bar > div > div {
    opacity: .5;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
    cursor: pointer;
    transition: .5s
}

.menu-bar > div > div.active {
    opacity: 1
}

.menu-bar > div > div > img {
    scale: .8;
    transition: .5s
}

.menu-bar > div > div.active > img {
    scale: 1
}

.menu-bar > div > div > span {
    font-size: 12px;
    letter-spacing: 1px
}

.config-panel,
.upload-panel {
    position: fixed;
    top: 50%;
    right: -25%;
    transform: translateY(-50%);
    width: 20%;
    transition: .5s
}

.config-panel.active,
.upload-panel.active {
    right: 25px
}

.config-panel::before,
.config-panel::after,
.upload-panel::before,
.upload-panel::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 10px;
    background: repeating-conic-gradient(from var(--a), #0f0, #ff0, #0ff, #f0f, #0ff);
    filter: blur(25px);
    animation: rotating 5s linear infinite
}

.config-panel > div,
.upload-panel > div {
    position: relative;
    z-index: 1;
    display: none;
    border-radius: 10px;
    background: #181818;
    padding: 25px
}

.config-panel > div.active,
.upload-panel > div.active {
    display: flex;
    flex-direction: column;
    gap: 25px
}

.config-panel > div > div:first-of-type {
    display: flex;
    align-items: center;
    gap: 10px
}

.config-panel > div > div:first-of-type > span:last-of-type {
    margin-left: auto
}

.intro-container > div > span,
.intro-container > div > div > a > span,
.config-panel > div > div:first-of-type > span:first-of-type,
.upload-panel > div > span {
    font-size: 24px;
    letter-spacing: 1px;
    margin-left: 0
}

.upload-panel > div > span > span {
    font-size: 16px
}

.config-panel > div > div:last-of-type {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 10px
}

.config-panel > div > div:last-of-type > div {
    opacity: .4;
    display: flex;
    flex-direction: column;
    gap: 10px;
    cursor: pointer;
    transition: .5s
}

.config-panel > div > div:last-of-type > div.active {
    opacity: 1
}

.config-panel > div > div:last-of-type > div > img {
    border-radius: 10px
}

.config-panel > div > div:last-of-type > div > span {
    font-size: 14px;
    letter-spacing: 1px;
    text-align: center
}

.panel-model > div:last-of-type > div {
    width: calc((100% - 10px) / 2)
}

.panel-color > div:last-of-type > div {
    width: calc((100% - 30px) / 4)
}

.panel-theme > div:last-of-type > div {
    width: calc((100% - 20px) / 3)
}

.panel-surface > div:last-of-type > div {
    width: calc((100% - 10px) / 2)
}

.panel-dimension > div:last-of-type > span,
.panel-border > div:last-of-type > span ,
.panel-customization > div:last-of-type > span {
    font-size: 14px;
    letter-spacing: 1px;
    text-align: center;
    white-space: nowrap;
    cursor: pointer;
    border: 1px solid #f7f7f7;
    border-radius: 10px;
    width: calc(50% - 10px / 2);
    padding: 10px 25px;
    transition: .5s
}

.panel-dimension > div:last-of-type > span:hover,
.panel-dimension > div:last-of-type > span.active,
.panel-border > div:last-of-type > span:hover,
.panel-border > div:last-of-type > span.active,
.panel-customization > div:last-of-type > span:hover,
.panel-customization > div:last-of-type > span.active {
    font-weight: 600;
    color: #181818;
    background: #f7f7f7
}

.intro-container > div > div > a.hidden,
.panel-border > div:last-of-type > span.hidden {
    pointer-events: none;
    opacity: .3
}

.panel-buy > div:last-of-type > span {
    font-size: 14px;
    letter-spacing: 1px;
    width: 100%
}

.panel-buy > div:last-of-type > span > span {
    font-weight: 600;
    float: right
}

.panel-buy > div:last-of-type > span:nth-last-of-type(-n+2) {
    font-size: 16px;
    margin-top: 10px
}

.panel-buy > div:last-of-type > span:last-of-type {
    text-align: center
}

.panel-buy > span,
.warning-panel > span,
.upload-panel > div > div > span:last-of-type {
    font-size: 16px;
    font-weight: 600;
    letter-spacing: 1px;
    color: #181818;
    text-align: center;
    cursor: pointer;
    border: 1px solid #f7f7f7;
    border-radius: 10px;
    background: #f7f7f7;
    width: 100%;
    padding: 10px 25px;
    transition: .5s
}

.panel-buy > span:hover,
.warning-panel > span:hover,
.upload-panel > div > div > span:last-of-type:hover {
    color: #f7f7f7;
    background: #181818
}

.info-panel,
.show-hide-panel {
    position: fixed;
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
    border-radius: 50px;
    background: #181818;
    width: 75px;
    height: 75px;
    right: 25px;
    bottom: 25px
}

.info-panel {
    right: 125px
}

.show-hide-panel.active {
    opacity: .3
}

.warning-panel,
.info-panel > div {
    opacity: 0;
    visibility: hidden;
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    display: flex;
    flex-direction: column;
    gap: 25px;
    cursor: default;
    border-radius: 10px;
    background: #181818;
    box-shadow: 0 0 10px #f7f7f7;
    width: 50%;
    padding: 25px;
    transition: .5s
}

.warning-panel.active,
.info-panel > div.active {
    opacity: 1;
    visibility: visible
}

.warning-panel.active::before,
.info-panel > div.active::before {
    content: "";
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: -1;
    background: rgba(24, 24, 24, .5);
    width: 100vw;
    height: 100vh
}

.warning-panel > div:first-of-type,
.info-panel > div > div:first-of-type {
    display: flex;
    justify-content: space-between;
    align-items: center
}

.warning-panel > div:first-of-type > span,
.info-panel > div > div:first-of-type > span {
    font-size: 24px;
    font-weight: 600;
    letter-spacing: 1px
}

.warning-panel > div:first-of-type > div,
.info-panel > div > div:first-of-type > div {
    cursor: pointer;
    background: url(../img/icon/close.svg);
    width: 30px;
    height: 30px
}

.warning-panel > div:last-of-type,
.info-panel > div > div:last-of-type {
    display: flex;
    flex-direction: column;
    gap: 10px
}

.warning-panel > div:last-of-type > span,
.info-panel > div > div:last-of-type > span {
    font-size: 14px;
    line-height: 24px;
    letter-spacing: 1px
}

.upload-panel > div > input {
    display: none
}

.upload-panel > div > div {
    display: flex;
    gap: 25px
}

.upload-panel > div > div > input:first-of-type {
    font-size: 16px;
    font-weight: 600;
    letter-spacing: 1px;
    color: #f7f7f7;
    border: 1px solid #f7f7f7;
    border-radius: 10px;
    background: none;
    outline: none;
    padding: 10px
}

.upload-panel > div > div > input:last-of-type {
    -webkit-appearance: none;
    cursor: pointer;
    border: none;
    border-radius: 10px;
    background: none;
    height: auto;
    padding: 0
}

.upload-panel > div > div > input:last-of-type::-webkit-color-swatch-wrapper {
    border-radius: 10px;
    padding: 0
}

.upload-panel > div > div > input:last-of-type::-webkit-color-swatch {
    border: none;
    border-radius: 10px
}

.upload-panel > div > div > select {
    font-size: 16px;
    font-weight: 600;
    cursor: pointer;
    border: 1px solid #f7f7f7;
    border-radius: 10px;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='292.4' height='292.4'%3E%3Cpath fill='%23FFFFFF' d='M287 69.4a17.6 17.6 0 0 0-13-5.4H18.4c-5 0-9.3 1.8-12.9 5.4A17.6 17.6 0 0 0 0 82.2c0 5 1.8 9.3 5.4 12.9l128 127.9c3.6 3.6 7.8 5.4 12.8 5.4s9.2-1.8 12.8-5.4L287 95c3.5-3.5 5.4-7.8 5.4-12.8 0-5-1.9-9.2-5.5-12.8z'/%3E%3C/svg%3E")  no-repeat right .7em center / .65em auto;
    outline: none;
    appearance: none;
    width: calc((100% - 25px) / 2);
    padding: 10px
}

.upload-panel > div > div > select > option {
    color: #181818
}

.upload-panel > div > span:last-of-type:not(:only-of-type),
.upload-panel > div > div > span:first-of-type {
    font-size: 16px;
    font-weight: 600;
    letter-spacing: 1px;
    text-align: center;
    cursor: pointer;
    border: 1px solid #f7f7f7;
    border-radius: 10px;
    width: 100%;
    padding: 10px 25px;
    transition: .5s
}

.upload-panel > div > span:last-of-type:not(:only-of-type):hover,
.upload-panel > div > div > span:first-of-type:hover {
    color: #181818;
    background: #f7f7f7
}

.none {
    display: none
}

@media (max-width: 1600px) {
    .logo-container > img {
        width: 200px
    }

    .menu-bar > div > div > img,
    .config-panel > div > div:first-of-type > img,
    .info-panel > img,
    .show-hide-panel > img {
        width: 25px
    }

    .config-panel,
    .upload-panel {
        right: -30%;
        width: 25%
    }

    .intro-container > div > span,
    .intro-container > div > div > a > span,
    .config-panel > div > div:first-of-type > span:first-of-type,
    .upload-panel > div > span,
    .warning-panel > div:first-of-type > span,
    .info-panel > div > div:first-of-type > span {
        font-size: 18px
    }

    .config-panel > div > div:last-of-type > div > span,
    .panel-dimension > div:last-of-type > span,
    .panel-border > div:last-of-type > span,
    .panel-customization > div:last-of-type > span,
    .panel-buy > div:last-of-type > span,
    .warning-panel > div:last-of-type > span,
    .info-panel > div > div:last-of-type > span {
        font-size: 12px
    }

    .panel-buy > div:last-of-type > span:last-of-type,
    .panel-buy > span,
    .warning-panel > span,
    .upload-panel > div > div > input:first-of-type,
    .upload-panel > div > div > select,
    .upload-panel > div > span:last-of-type:not(:only-of-type),
    .upload-panel > div > div > span:first-of-type,
    .upload-panel > div > div > span:last-of-type {
        font-size: 14px
    }

    .info-panel {
        right: 100px
    }

    .info-panel,
    .show-hide-panel {
        width: 50px;
        height: 50px
    }
}

@media (max-width: 1024px) {
    model-viewer {
        width: 75%
    }

    .logo-container > img {
        width: 300px
    }

    .menu-bar {
        top: auto;
        bottom: 25px;
        left: 50%;
        transform: translateX(-50%)
    }

    .menu-bar > div {
        flex-direction: row;
        gap: 10px;
        padding: 15px 25px
    }

    .menu-bar > div > div {
        width: 83px
    }

    .config-panel,
    .upload-panel {
        right: -35%;
        width: 30%
    }

    .panel-color > div:last-of-type > div,
    .panel-theme > div:last-of-type > div {
        width: calc((100% - 10px) / 2)
    }

    .panel-customization > div:last-of-type > span {
        width: 100%
    }
}

@media (max-width: 480px) {
    model-viewer {
        width: 100%;
        height: 70%
    }

    .logo-container > img {
        width: 250px
    }

    .intro-container > div > div {
        flex-direction: column
    }

    .intro-container > div > div > a {
        width: 100%
    }

    .intro-container > div > div > a > img {
        width: 50px
    }

    .menu-bar {
        width: 75%
    }

    .menu-bar > div {
        padding: 25px
    }

    .menu-bar > div > div > span,
    .config-panel::before,
    .config-panel::after,
    .config-panel > div > div:first-of-type,
    .upload-panel::before,
    .upload-panel::after {
        display: none
    }

    .config-panel,
    .upload-panel {
        top: auto;
        right: auto;
        bottom: 125px;
        left: -80%;
        transform: none;
        width: 75%
    }

    .config-panel.active,
    .upload-panel.active {
        left: 50%;
        transform: translateX(-50%)
    }

    .panel-model > div:last-of-type > div,
    .panel-color > div:last-of-type > div,
    .panel-theme > div:last-of-type > div,
    .panel-surface > div:last-of-type > div {
        width: calc((100% - 30px) / 4)
    }

    .panel-customization > div:last-of-type > span {
        width: calc(50% - 10px / 2)
    }

    .info-panel,
    .show-hide-panel {
        right: -25px;
        bottom: -25px;
        justify-content: flex-start;
        align-items: flex-start;
        width: 75px;
        height: 75px;
        padding: 15px
    }

    .show-hide-panel {
        left: -25px;
        justify-content: flex-end
    }

    .warning-panel,
    .info-panel > div {
        width: 95%;
        max-height: 85vh
    }

    .warning-panel > div:last-of-type,
    .info-panel > div > div {
        overflow: auto
    }
}