board-game
Version:
an online board game engine
766 lines (703 loc) • 15 kB
text/less
@import 'theme';
* { padding: 0; margin: 0; box-sizing: border-box; }
[v-cloak] {
.hidden;
}
* {
-webkit-touch-callout:none;
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
outline: none;
}
input[type=text], input[type=number] {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
a { cursor: pointer; }
@media screen and (min-width: 160px) { html { font-size: 10px; } }
@media screen and (min-width: 320px) { html { font-size: 12px; } }
@media screen and (min-width: 360px) { html { font-size: 14px; } }
@media screen and (min-width: 640px) { html { font-size: 16px; } }
@media screen and (min-width: 768px) { html { font-size: 18px; } }
@media screen and (min-width: 996px) { html { font-size: 20px; } }
@media screen and (min-width: 1200px) { html { font-size: 22px; } }
@media screen and (min-width: 1800px) { html { font-size: 24px; } }
html, body {
overflow: hidden;
touch-action: none;
.min-width;
.text-center;
.full;
}
.web-console {
.text-left;
}
input {
font-size: 1rem;
padding: 0.5em;
}
.seo { width: 0; height: 0; overflow: hidden; }
#app, .main {
.full;
}
@keyframes lazy_loading {
0% { opacity: 0 }
75% { opacity: 0 }
100% { opacity: 1 }
}
@keyframes flash_tip {
0% { opacity: 0.8 }
10% { opacity: 0.5 }
20% { opacity: 0.8 }
30% { opacity: 0.5 }
40% { opacity: 0.8 }
50% { opacity: 0.5 }
60% { opacity: 0.8 }
70% { opacity: 0.5 }
80% { opacity: 0.8 }
90% { opacity: 0.5 }
100% { opacity: 0.8 }
}
body {
.loading {
.absolute(99999);
.full;
.alpha;
animation: lazy_loading 1.6s;
> .icon {
.full;
.flex-center;
}
}
.modal {
overflow: auto;
.absolute(20);
.full;
p {
padding: 0.2em 0.5em;
text-indent: 2em;
.text-left;
}
&.alert {
z-index: 999999;
}
}
.dialog {
.absolute(20);
.full;
.alpha;
.flex-center;
&.alert {
z-index: 21;
}
> .body {
padding: 1em;
border-radius: 1em;
box-shadow: black 0 0 2em;
max-width: 30em;
border-width: 5px;
border-style: solid;
.min-width;
> .content {
padding: 2em 0;
&.settings, &.login {
.flex-row;
.wrap;
> p {
padding: 0.5em 1em;
min-width: 50%;
.text-left;
> .description {
font-size: 0.75em;
}
}
}
input, select{
line-height: 1.5em;
padding: 0.5em;
vertical-align: middle;
min-width: 5em;
background-color: #808080;
color: #ffffff;
border-width: 2px;
border-style: solid;
}
input[type=text], select {
min-width: 5em;
}
a.addon {
border-width: 2px;
border-style: solid;
border-right-width: 0;
border-radius: 0.5em 0 0 0.5em;
line-height: 1.5em;
padding: 0.5em;
word-break: keep-all;
display: inline-block;
vertical-align: middle;
}
input + a.addon {
border-radius: 0 0.5em 0.5em 0;
border-right-width: 2px;
border-left-width: 0;
}
}
}
}
.blur {
filter: blur(3px);
}
@media screen and (max-width: 767px) {
.dialog > .body {
width: 100% ;
}
}
.btn-group {
.flex;
.flex-none;
> .btn {
margin: 0.5em;
border-radius: 0.5em;
line-height: 1.5em;
padding: 0.5em 1.5em;
word-break: keep-all;
border-width: 2px;
border-style: solid;
.flex-1;
.flex-center;
> * {
.flex-1;
}
> i {
.flex-none;
}
}
}
input[type=checkbox] {
opacity: 0;
width: 2.5em;
height: 1.5em;
.absolute(1);
+ label {
width: 2.5em;
height: 1.5em;
line-height: 1em;
border-radius: 0.75em;
vertical-align: middle;
position: relative;
display: inline-block;
&:before {
content: " ";
width: 1.5em;
height: 1.5em;
border-radius: 0.75em;
box-sizing: border-box;
top: 0;
left: 0;
transition: left 0.5s;
border-width: 1px;
border-style: solid;
pointer-events: none;
.absolute(2);
}
}
&:checked + label:before {
left: 1em;
}
}
.panel {
.full;
.flex-column;
> div {
.flex-1;
}
> .top, > .btn-group {
.flex-none;
}
}
.top {
font-size: 1.5em;
line-height: 2em;
height: 2em;
box-shadow: gray 1px 1px;
.width;
.flex-none;
> .btn {
width: 2em;
padding: 0.25em 0.25em 0;
line-height: 0.5em;
> span {
font-size: 0.5rem;
}
}
}
.more {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
top: 2.5em;
right: 1em;
font-size: 1.5em;
border-width: 0.125em;
border-style: solid;
min-width: 5em;
border-radius: 0.5em;
.absolute(20);
&:before {
content: '';
border-style: solid;
border-width: 0.5em;
border-top-width: 0;
border-color: transparent;
overflow: hidden;
top: -0.5em;
right: 1.5em;
.absolute(21);
}
> .btn {
align-items: center;
padding: 0.25em;
.width;
.flex-row;
> i {
.flex-none;
}
> span {
.text-left;
.flex-1;
}
}
}
.hall {
.flex;
overflow: hidden;
> * {
.flex-1;
}
> .controls {
.flex-none;
&.btn-group > .btn {
border-radius: 0.5em;
border: 0;
}
}
.rooms {
display: grid;
}
.room {
border-radius: 0.5em;
margin: 0.5em 0;
height: 6em;
.flex;
.justify(space-between);
> .title {
font-size: 4em;
line-height: 1.5em;
padding-left: 0.5em;
min-width: 1.5em;
}
> .message {
min-width: 10em;
text-align: right;
padding: 1em;
.flex-1;
}
}
}
.teams {
padding: 0.25em;
> .team {
padding: 0.25em;
> .head {
border-radius: 5px;
.flex-center;
}
> .roles {
> .role {
border-radius: 5px;
.flex-center;
> div {
.flex-center;
.full;
}
}
}
}
}
@media screen and (max-width: 767px) {
.hall {
.column;
> .controls {
.width;
}
.btn-group > .btn {
height: 3em;
.justify(space-around);
> i {
font-size: 1em;
}
&.btn-simple {
.flex-none;
width: 3em;
padding: 0.5em;
> span {
.hidden;
}
> i {
margin-left: 0;
margin-right: 0;
}
}
}
.rooms {
grid-auto-rows: 11em;
}
.room {
height: 10em;
margin: 0.5em;
.wrap;
> .btn-group {
.width;
.justify(flex-end);
> .btn {
.flex-none;
}
}
}
}
.teams {
.flex;
.align(flex-start);
.nowrap;
> .team {
.flex-1;
.flex-column;
.nowrap;
> .head {
margin: 0.25em 0;
height: 1.5em;
}
> .roles {
.align(center);
.flex-1;
.flex-column;
.nowrap;
> .role {
.flex-1;
margin: 0.25em 0;
min-width: 10em;
max-width: 25em;
min-height: 3em;
max-height: 5em;
.full;
}
}
}
}
}
@media screen and (min-width: 768px) {
.modal {
.btn-group {
.row;
.justify(center);
> .btn {
.flex-none;
}
}
}
.hall {
.row;
> .controls {
.column;
width: 7em;
}
.btn-group > .btn {
padding: 0.5em 1em;
word-break: normal;
.column;
.flex-none;
> i {
font-size: 2.5em;
padding: 0.2em 0;
}
}
.rooms {
grid-auto-rows: 7em;
}
.room {
margin: 0.5em;
> .btn-group {
float: right;
height: 6em;
width: 6em;
line-height: 6em;
> .btn > i {
font-size: 1.5em;
}
}
}
}
.teams {
> .team {
.flex-row;
> .head {
margin: 0.25em;
width: 3em;
writing-mode: vertical-lr;
> i {
width: 1em;
}
}
> .roles {
.flex-1;
.flex-row;
.wrap;
> .role {
margin: 0.25em;
min-width: 12em;
min-height: 3em;
max-height: 5em;
}
}
}
}
}
@media screen and (min-width: 1200px) {
.hall {
.rooms {
grid-template-columns: 50% 50%;
grid-auto-rows: 7em;
}
}
}
.game {
background: white;
.full;
> div {
.full;
}
}
.unsupported {
color: red;
.hidden;
.center;
.absolute(9999);
.full;
&:before {
font-size: 5em;
}
}
.result {
.align(center);
.absolute(20);
.full;
.flex-column;
> .title {
font-size: 3em;
}
> .btn-group {
.width;
}
}
.control-container {
width: 0 ;
height: 0 ;
> .close {
font-size: 0.8em;
background-color: #aaaaaa;
opacity: 0.8;
width: 2em;
height: 2em;
.absolute(600);
&.flash_tip {
animation: flash_tip 0.5s;
}
&.top {
top: 0;
}
&.bottom {
bottom: 0;
}
&.left {
left: 0;
}
&.right {
right: 0;
}
}
> .control {
opacity: 0.75;
top: 0;
bottom: 0;
left: 0;
right: 0;
.absolute(500);
.flex;
&.half {
width: 50%;
}
> .direction {
.flex-1;
.height;
> div {
.full;
}
.area {
width: 40vmin;
height: 40vmin;
left: 0;
bottom: 0;
border-radius: 50%;
background: @control_area_bg;
.absolute(501);
> .bg {
width: 40vmin;
height: 40vmin;
border-radius: 50%;
overflow: hidden;
.absolute(502);
> div {
text-shadow: 0 0 0.25em white;
.absolute(503);
.flex-center;
&.active {
color: orange;
}
}
> .up {
width: 10vmin;
height: 8vmin;
left: 15vmin;
top: 7vmin;
}
> .right {
width: 8vmin;
height: 10vmin;
left: 25vmin;
top: 15vmin;
}
> .down {
width: 10vmin;
height: 8vmin;
left: 15vmin;
top: 25vmin;
}
> .left {
width: 8vmin;
height: 10vmin;
left: 7vmin;
top: 15vmin;
}
> .upright {
width: 8vmin;
height: 8vmin;
left: 23vmin;
top: 9vmin;
}
> .downright {
width: 8vmin;
height: 8vmin;
left: 23vmin;
top: 23vmin;
}
> .downleft {
width: 8vmin;
height: 8vmin;
left: 9vmin;
top: 23vmin;
}
> .upleft {
width: 8vmin;
height: 8vmin;
left: 9vmin;
top: 9vmin;
}
@direction-border: 1px solid white;
&.four {
font-size: 4vmin;
> div {
border: @direction-border
}
> .up, > .down {
border-top: 0;
border-bottom: 0;
}
> .right, > .left {
border-right: 0;
border-left: 0;
}
}
&.eight {
font-size: 3vmin;
> .upright, > .downright, > .downleft, > .upleft {
font-size: 1.2em;
}
}
}
.handle {
top: 15vmin;
left: 15vmin;
right: 15vmin;
bottom: 15vmin;
}
}
.handle {
cursor: pointer;
width: 10vmin;
height: 10vmin;
border-radius: 50%;
background: @control_button_bg;
.absolute(505);
.flex-center;
}
}
> .buttons {
.flex-1;
.height;
> .button {
cursor: pointer;
font-size: 8vmin;
width: 20vmin;
height: 20vmin;
border-radius: 50%;
background: @control_button_bg;
.absolute(501);
.flex-center;
}
&.square {
> .a {
right: 20vmin;
bottom: 20vmin;
}
> .b {
right: 0;
bottom: 20vmin;
}
> .x {
right: 20vmin;
bottom: 0;
}
> .y {
right: 0;
bottom: 0;
}
> .row {
right: 10vmin;
}
> .column {
bottom: 10vmin;
}
}
}
}
}
}