:root {
    --background-color: #ffffff;
    --color-one: #c0c5ff;
    --color-two: #5be1e7;
    --color-three: #e5e5e9;
    --text-color: #000000;
    --color-my-message: #158efe;
    --last-move-color: #00000017;
    --line-color: #000000;
    --sub-line-color: #000000;

    --button-text-color: #ffffff;
    
    --inner-width: 420px;
    --gutter: 20px;
    --emoji-sad: '😞';
    --emoji-trophy: '🏆';
    --emoji-hourglass: '⏳';
    --emoji-gold-medal: '🥇';
    --emoji-silver-medal: '🥈';
    --emoji-cat: '🐈';
    --emoji-rocket: '🚀';
    --emoji-magnify: '🔍';
}

/* percent transparent */


/* media query for dark mode */
@media (prefers-color-scheme: dark) {
    :root {
        --background-color: #1a1a1a;
        --text-color: #cccccc;
        --color-one: #c0c5ffBB;
        --color-two: #5be1e7BB;
        --color-three: #e5e5e955;
        --color-my-message: #158efe;
        --last-move-color: #ffffff30;
        --line-color: #ffffff55;
        --sub-line-color: #ffffff55;
        --button-text-color: #cccccc;
    }
}

/* colors for bubles */
/* #969794
#b9b8bd */

* {
    box-sizing: border-box;
}

a {
    color: var(--text-color);
    text-decoration: none;
    font-weight: 900;
}
    a:visited,
    a:visited {
        color: var(--text-color);
    }

html {
    background-color: var(--background-color);
    border-top: 5px solid var(--color-three);
    font-family: 'Poppins', sans-serif;
    color: var(--text-color);
/* 
    overflow: hidden;
    &::before {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
        right: 0;
        padding: 5px;
        background-color: var(--color-three);
        opacity: .8;
        z-index: 99;
    }
    &::after {
        content: 'Under Construction';
        position: absolute;
        color: #bc9e1c;
        font-weight: bold;
        font-size: 80px;
        text-transform: uppercase;
        z-index: 100;
        top: 0;
        transform: rotate(302deg);
        text-wrap: nowrap;
        left: -200px;
        top: 280px;
    } */
}

hr {
    margin: var(--gutter) 0;
}

body { 
    margin: 0;
    padding: var(--gutter);
    transition: background-image 0.9s ease;
}
    body.winner-X {
        background: radial-gradient(white, transparent), radial-gradient(var(--color-two), transparent);
        background-image: radial-gradient(#5be1e799, transparent)
    }
    body.winner-O {
        background: radial-gradient(white, transparent), radial-gradient(var(--color-one), transparent);
        background-image: radial-gradient(#c0c5ff99, transparent);
    }

#react-root {
    max-width: var(--inner-width);
    margin: auto;
        /* maybe new */
        /* display: flex; */
        /* flex-direction: column; */
        /* height: calc(100dvh - 5px - (var(--gutter) * 2)); */
}
    main {
        /* margin-bottom: 80px; */
            /* maybe new */
            /* display: flex;
            flex-direction: column;
            max-height: 100%; */
    }



header {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    padding-bottom: var(--gutter);
}


/* Header */
.title-wrapper {
    flex-basis: 66.66%;
}
    .title-wrapper .title a {
        text-decoration: none;
        color: var(--text-color);
    }

.title-super {
    display: block;
    -webkit-text-stroke-width: 3px;
    -webkit-text-stroke-color: var(--text-color);
    font-size: 70px;
    color: var(--color-two);
    text-transform: uppercase;
    font-family: monospace;
    letter-spacing: -3px;
    font-weight: bold;

    background: var(--color-two);
    background-clip: text;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    text-shadow: 0px 0px #00000000;
}
.title-ttt {
    text-transform: uppercase;
    letter-spacing: 0px;
    font-weight: bold;
    font-size: 35px;
    display: block;
    margin-top: -15px;
    font-weight: bolder;
}

.logo-wrapper {
    font-family: 'Nunito', sans-serif;
    display: flex;
    flex-basis: 33.33%;
    flex-wrap: wrap;
    flex-grow: 1;
    align-items: stretch;
    max-width: 140px;
}

    .logo-wrapper .logo-icon {
        font-size: 80px;
        flex-basis: 50%;
        display: flex;
        justify-content: center;
        align-content: center;
        font-weight: bold;
        text-transform: uppercase;
        overflow: hidden;
        line-height: .8;
    }
        .logo-icon.logo-icon-o {
            color: var(--color-one);
        }
        .logo-icon.logo-icon-x {
            color: var(--color-two);
        }



.players-container {
    flex-basis: 100%;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    margin-top: 10px;

}
    .players-container .player-container {
        flex-basis: calc(50% - 10px);       
    }

        .player-container:only-child {
            flex-basis: 100%;
        }

        .player-container .player-number {
            font-size: 10px;
            font-weight: 900;
        }
        .player-container .player-name {
            border: 1px solid black;
            text-align: center;
            padding: 2px;
            text-transform: capitalize;
        }
        .player-container .player-name.primary {
            background-color: var(--color-two);
        }
        .player-container .player-name.alternate {
            background-color: var(--color-one);
        }
        .player-container .player-name.secondary {
            background-color: var(--color-three);
        }

    .game-observer {
        flex-basis: 100%;
        padding: 5px 10px;
        background-color: var(--color-three);
        margin-top: 10px;
        margin-bottom: -10px;
        width: 100%;
        text-align: center;
    }




.main-game-board::after,
.main-game-board::before {
    content: '';
    height: 100%;
    background: red;
    position: absolute;
    top: 0;
    left: calc(33.33% - 3px);
}



.board {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    background-color: var(--background-color);
    align-items: center;
    flex-basis: calc(33.33% - 10px);
    aspect-ratio: 1 / 1;

}
    .board.main-game-board {
        width: 100%;
        height: 100%;
        align-content: space-between;
        justify-content: space-between;

        --line-distance: 66.66%;
        --line-width: 3px;
        background-repeat: no-repeat;

        background-image: 
            linear-gradient(
                to top,
                transparent var(--line-distance),
                var(--line-color) var(--line-distance), /* Black line starts */
                var(--line-color) calc(var(--line-distance) + var(--line-width)), /* Black line ends (2px width) */
                transparent calc(var(--line-distance) + var(--line-width)) /* Rest of the background */
            ),
            linear-gradient(
                to bottom,
                transparent var(--line-distance),
                var(--line-color) var(--line-distance), /* Black line starts */
                var(--line-color) calc(var(--line-distance) + var(--line-width)), /* Black line ends (2px width) */
                transparent calc(var(--line-distance) + var(--line-width)) /* Rest of the background */
            ),
            linear-gradient(
                to left,
                transparent var(--line-distance),
                var(--line-color) var(--line-distance), /* Black line starts */
                var(--line-color) calc(var(--line-distance) + var(--line-width)), /* Black line ends (2px width) */
                transparent calc(var(--line-distance) + var(--line-width)) /* Rest of the background */
            ),
            linear-gradient(
                to right,
                transparent var(--line-distance),
                var(--line-color) var(--line-distance), /* Black line starts */
                var(--line-color) calc(var(--line-distance) + var(--line-width)), /* Black line ends (2px width) */
                transparent calc(var(--line-distance) + var(--line-width)) /* Rest of the background */
            );
    }
    .main-game-board.board-game-winner {
        font-family: 'Nunito', sans-serif;
    }
    .board-game-winner::before {            
            font-family: 'Nunito', sans-serif;
            background-color: var(--background-color);
            position: absolute;
            width: 100%;
            height: 100%;
            text-align: center;
            font-weight: bold;
            text-transform: uppercase;
            overflow: hidden;
            line-height: 1;
            font-size: min(28vw, 200px);
            font-size: min(28vw, calc(var(--inner-width)/3.2));
            z-index: 1;
        }
        .board-game-winner.board-game-winner-X::before {
            content: 'X';
            color: var(--color-two);   
        }
        .board-game-winner.board-game-winner-O::before {
            content: 'O';
            color: var(--color-one);
        }


.board-game-available-O .board-square {
    cursor: pointer;
    background-color: var(--color-one);
}
.board-game-available-X .board-square {
    cursor: pointer;
    background-color: var(--color-two);
}

.board-game-winner .board-square {
    visibility: hidden;
}

.board-square {
    position: relative;
    flex-grow: 1;
    flex-basis: 33.33%;
    aspect-ratio : 1 / 1;
    display: flex;
    justify-content: space-around;
    align-items: center;
    background-size: contain;
    background-repeat: no-repeat;
    border: 1px solid var(--sub-line-color);
    background-color: var(--background-color);

    
}
    .board-square.board-square-selected {
        font-family: 'Nunito', sans-serif;
    }
    .board-square.board-square-selected::before {            
        background-color: var(--background-color);
        position: absolute;
        width: 100%;
        height: 100%;
        text-align: center;
        font-weight: bold;
        text-transform: uppercase;
        overflow: hidden;
        line-height: 1;
        /* font-size: min(9.5vw, 70px); */
        font-size: min(9.5vw, calc(var(--inner-width)/9.1) );
        /* 640/70 */
    }
    .board-square.board-square-selected.board-square-selected-by-X::before {
        content: 'X';
        color: var(--color-two);   
    }

    .board-square.board-square-selected.board-square-selected-by-O::before {
        content: 'O';
        color: var(--color-one);
    }

    .board-square.board-square-last-move::before {
        background-color: var(--last-move-color);
    }
  
@keyframes shimmer {
    100% {-webkit-mask-position:left}
}

.shimmer {
    /* --shimmer: linear-gradient(-60deg,#000 30%,#0005,#000 70%) right/300% 100%;
    mask: var(--shimmer);
    -webkit-mask: var(--shimmer); */
    mask:linear-gradient(-60deg,#000 30%,#0005,#000 70%) right/300% 100%;
    -webkit-mask:linear-gradient(-60deg,#000 30%,#0005,#000 70%) right/300% 100%;
    background-repeat: no-repeat;
    animation: shimmer 2.5s infinite;
}


/* My Games */
.list ul {
    padding: 0;
    list-style: none;
}
.list .my-games-list {
    padding-bottom: 80px;
}
.list-item {
    text-transform: capitalize;
    margin-top: var(--gutter);
    border-radius: 8px;
    padding: 4px 10px;
    background-color: var(--color-three);

    
}
    .list-item.list-item-X {
        background-color: var(--color-two);
    }
    .list-item.list-item-O {
        background-color: var(--color-one);
    }
    .list-item a {
        display: flex;
        align-items: center;
        justify-content: space-between;
        flex-direction: row-reverse;
        color: var(--text-color);
        text-decoration: none;
        font-weight: 900;
        color: var(--button-text-color);
    }
        .list-item a:visited,
        .list-item a:visited {
            color: var(--button-text-color);
        }
        .list-item a::before {
            content: var(--emoji-hourglass);
            font-size: 25px;
        }
        .list-item a.my-loss::before {
            content: var(--emoji-silver-medal);
        }
        .list-item a.my-win::before {
            content: var(--emoji-gold-medal);
        }
        .list-item a.my-games::before {
            content: var(--emoji-magnify);
        }
        .list-item a.start-new-game::before {
            content: var(--emoji-rocket);
        }
        .list-item a.my-turn::before {
            content: ''
        }
        .list-item a span {
            font-family: 'Nunito', sans-serif;
            font-size: 25px;
        }





.stats {
    display: flex;
    
}
    .stats.stats--all .stat {
        opacity: 1;
    }
    .stats.stats--win .stat-win {
        opacity: 1;
    }
    .stats.stats--loss .stat-loss {
        opacity: 1;
    }
    .stats.stats--in_progress .stat-in_progress {
        opacity: 1;
    }

    .stats .stat {
        opacity: .3;
        flex-basis: 33.33%;
        text-align: center;
        
        font-size: 25px;
        font-weight: bold;
    }
        .stat::before {
            display: block;
            font-size: 50px;
            font-weight: bold;
        }
        .stat:nth-of-type(1)::before {
            content: var(--emoji-gold-medal);
        }
        .stat:nth-of-type(2)::before {
            content: var(--emoji-silver-medal);
        }
        .stat:nth-of-type(3)::before {
            content: var(--emoji-hourglass);
        }

.my-games-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
}
    .my-games-header button.button {
        flex-basis: 33%;
        align-self: baseline;
        color: var(--color-one);
        background-color: unset;
    }

form input {
    display: block;
    width: 100%;
    margin-top: var(--gutter);
    padding: 10px;
    border: 2px groove var(--color-two);
    background-color: var(--background-color);
    color: var(--button-text-color);
    border-radius: 8px;
}

.button {
    border-radius: 8px;
    display: block;
    width: 100%;
    margin-top: var(--gutter);
    padding: 12px;
    background-color: var(--color-two);
    border: none;
    color: var(--button-text-color);
}
    .button.secondary {
        background-color: var(--color-three);
    }
    .button.alternate {
        background-color: var(--color-one);
    }

.join-requests li {
    text-align: center;
    padding: 8px;
}


.signup-message a {
    color: var(--color-one);
    text-decoration: none;
    font-weight: bold;
}

.footer {
    position: fixed;
    bottom: 0;
    left: 0;
    margin: auto;
    background-color: var(--background-color);
    width: 100%;
    transform: translateX(-50%);
    left: 50%;
    box-shadow: 0px 35px 28px 17px rgba(0,0,0,0.75);
}
.footer-inner {
        padding: var(--gutter);
        padding-top: 0;
        margin: auto;
        max-width: calc(var(--inner-width) + (var(--gutter) * 2));
    }
    .footer a {
        color: white;
        text-decoration: none;
    }
    .footer a:visited,
    .footer a:visited {
        color: var(--button-text-color);
    }

.form-error {
    color: transparent;
    text-align: center;
    font-weight: bold;
    margin: 0;
    margin-bottom: -15px;
    font-size: 12px;    
}

    .form-error.error-show {
        color: red;
    }
    .form-error.error-hidden {
        visibility: hidden;
    }





.chat-container {
    margin-top: var(--gutter);
    overflow: scroll;
    max-height: 200px;
    /* margin-bottom: 50px; */
}

.chat-controls {
    display: flex;
    padding-top: var(--gutter);
    /* position: fixed; */
    /* bottom: var(--gutter); */
    /* width: calc(100% - (var(--gutter) * 2)); */
}
    .chat-controls-input {
        flex-grow: 1;
    }
    .chat-controls-input input {
            width: 100%;
            padding: 10px;
            color: var(--text-color);
            background-color: var(--background-color);
            border: 2px groove var(--color-two);
            border-top-left-radius: 8px;
            border-bottom-left-radius: 8px;
            border-right: none;
            border-top-right-radius: 0;
            border-bottom-right-radius: 0;
            margin-top:0;   
    }
    
    .chat-controls-send {
        flex-basis: 100px;
    }

    .chat-controls-send button {
        width: 100%;
        padding: 10px;
        border: 2px groove var(--color-two);
        border-top-right-radius: 8px;
        border-bottom-right-radius: 8px;
        border-left: 2px groove var(--color-two);
        background-color: var(--color-two);
        color: var(--button-text-color);
    }


    .chat-body-content-messages-message {
        display: flex;
        padding-top: var(--gutter);
        /* align-items: flex-start; */
        padding-top: 5px;
        line-height: 1.1;
        overflow-wrap: break-word;
    }
    

    .chat-body-content-messages-message.group .chat-body-content-messages-message-avatar {
        visibility: hidden;
    }
    
    .chat-body-content-messages-message.my-message {
        flex-direction: row-reverse;
    }

    .chat-body-content-messages-message.my-message .chat-body-content-messages-message-text  {
        margin-right: 10px;
        margin-left: 0;
        background-color: var(--color-my-message);
        color: white;
    }


    .chat-body-content-messages-message:not(.group) .chat-body-content-messages-message-text {
        border-top-left-radius: 0;
        border-top-right-radius: 8px;
    }        
    
    .chat-body-content-messages-message.my-message:not(.group) .chat-body-content-messages-message-text {
        border-top-left-radius: 8px;
        border-top-right-radius: 0;
    }        


    .chat-body-content-messages-message:not(.group){
        padding-top: 10px;     
    }       
    .chat-body-content-messages-message.group {
        padding-top: 2px;
    } 



        .chat-body-content-messages-message-avatar {
            background-color: #aaaaaa;
            border-radius: 50%;
            width: 40px;
            height: 40px;
        }
        .chat-body-content-messages-message-avatar::before {
            content: '';
            font-family: 'Nunito', sans-serif;
            display: block;
            width: 100%;
            height: 100%;
            font-size: 30px;
            text-align: center;
            line-height: 1.3;
            color: white;
            text-transform: uppercase;
            /* get content from data elemetn */
            content: attr(data-initial);
        }
            

        .chat-body-content-messages-message-text {
            background-color: var(--color-three);
            color: var(--text-color);
            max-width: 65%;
            margin-left: 10px;
            padding: 10px;
            border-radius: 8px;
        }