html(lang="es", dir="ltr")
head
meta(name="viewport", content="width=device-width, user-scalable=no, initial-scale=1.0")
meta(charset="utf-8")
link(rel="stylesheet", type="text/css", href="main.css")
body#main
a.button#button OPEN KEYBOARD
div.main
div.minitel#base
div.minitel__b
div.mt#mt
div.mt__front.face
div.mta
div.mta__front.face
div.mta__back.face
div.mta__right.face
div.mta__left.face
div.mta__top.face
div.mta__bottom.face
div.mt__back.face
div.mt__right.face
div.mt__left.face
div.mt__top.face
div.key-numbers
div.key-column
div.key-nb#9.key
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 9
div.key-nb__bottom.face
div.key-nb#8.key
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 8
div.key-nb__bottom.face
div.key-nb#7
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 7
div.key-nb__bottom.face
div.key-column
div.key-nb#6
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 6
div.key-nb__bottom.face
div.key-nb#5
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 5
div.key-nb__bottom.face
div.key-nb#4
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 4
div.key-nb__bottom.face
div.key-column
div.key-nb#3
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 3
div.key-nb__bottom.face
div.key-nb#2
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 2
div.key-nb__bottom.face
div.key-nb#1
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 1
div.key-nb__bottom.face
div.key-column
div.key-nb
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face *
div.key-nb__bottom.face
div.key-nb#0
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face 0
div.key-nb__bottom.face
div.key-nb
div.key-nb__front.face
div.key-nb__back.face
div.key-nb__right.face
div.key-nb__left.face
div.key-nb__top.face #
div.key-nb__bottom.face
div.keys
div.key-column
div.key-b
div.key-b__front.face
div.key-b__back.face
div.key-b__right.face
div.key-b__left.face
div.key-b__top.face
div.key-b__bottom.face
div.key-b
div.key-b__front.face
div.key-b__back.face
div.key-b__right.face
div.key-b__left.face
div.key-b__top.face
div.key-b__bottom.face
div.key-b
div.key-b__front.face
div.key-b__back.face
div.key-b__right.face
div.key-b__left.face
div.key-b__top.face
div.key-b__bottom.face
div.key-b
div.key-b__front.face
div.key-b__back.face
div.key-b__right.face
div.key-b__left.face
div.key-b__top.face
div.key-b__bottom.face
div.key-b
div.key-b__front.key-b__front--g.face
div.key-b__back.key-b__back--g.face
div.key-b__right.key-b__right--g.face
div.key-b__left.key-b__left--g.face
div.key-b__top.key-b__top--g.face
div.key-b__bottom.key-b__bottom--g.face
div.key-column
div.key#a
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face A
div.key__bottom.face
div.key#z
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face Z
div.key__bottom.face
div.key#e
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face E
div.key__bottom.face
div.key#r
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face R
div.key__bottom.face
div.key#t
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face T
div.key__bottom.face
div.key#y
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face Y
div.key__bottom.face
div.key#u
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face U
div.key__bottom.face
div.key#i
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face I
div.key__bottom.face
div.key#o
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face O
div.key__bottom.face
div.key#p
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face P
div.key__bottom.face
div.key#Backspace
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face
div.key__bottom.face
div.key-column
div.key#q
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face Q
div.key__bottom.face
div.key#s
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face S
div.key__bottom.face
div.key#d
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face D
div.key__bottom.face
div.key#f
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face F
div.key__bottom.face
div.key#g
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face G
div.key__bottom.face
div.key#h
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face H
div.key__bottom.face
div.key#j
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face J
div.key__bottom.face
div.key#k
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face K
div.key__bottom.face
div.key#l
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face L
div.key__bottom.face
div.key#m
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face M
div.key__bottom.face
div.key-column
div.key#w
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face W
div.key__bottom.face
div.key#x
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face X
div.key__bottom.face
div.key#c
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face C
div.key__bottom.face
div.key#v
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face V
div.key__bottom.face
div.key-s.key#espace
div.key-s__front.face
div.key-s__back.face
div.key-s__right.face
div.key-s__left.face
div.key-s__top.key__top.face ESPACE
div.key-s__bottom.face
div.key#b
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face B
div.key__bottom.face
div.key#n
div.key__front.face
div.key__back.face
div.key__right.face
div.key__left.face
div.key__top.face N
div.key__bottom.face
div.mt__bottom.face
//------------
div.mfb
div.mfb__front.face #[span ASTAR]
div.mfb__back.face
div.mfb__right.face
div.mfb__left.face
div.mfb__top.face
div.mfb__bottom.face
div.mft
div.mft__front.face
div.mft__back.face
div.mft__right.face
div.mft__left.face
div.mft__top.face
div.mft__bottom.face
div.mfl
div.mfl__front.face
div.mfl__back.face
div.mfl__right.face
div.mfl__left.face
div.mfl__top.face
div.mfl__bottom.face
div.mfr
div.mfl__front.face
div.led#led
div.mfl__back.face
div.mfl__right.face
div.mfl__left.face
div.mfl__top.face
div.mfl__bottom.face
//------------
- var br = '<br>'
div.mb
div.mb__front.face
div.screen #[div.screen__shadow#screen-s] Star Key Labs: .115 !{br}!{br} #[span.text#screen]#[span.cursor ]
div.mb__back.face
div.mb__right.face
div.mb__left.face
div.mb__top.face
div.mb__bottom.face
div.ml
div.ml__front.face
div.ml__back.face
div.ml__right.face
div.ml__left.face
div.ml__top.face
div.ml__bottom.face
div.mr
div.mr__front.face
div.mr__back.face
div.mr__right.face
div.mr__left.face
div.mr__top.face
div.mr__bottom.face
div.mc
div.mc__front.face
div.mc__back.face
div.mc__right.face
div.mc__left.face
div.mc__top.face
div.mc__bottom.face
div.mbl
div.mbl__front.face
div.mbl__back.face
div.mbl__right-1.face
div.mbl__right-2.face
div.mbl__left-1.face
div.mbl__left-2.face
div.mbl__top.face
div.mbl__bottom.face
div.mbl-2
div.mbl__front.face
div.mbl__back.face
div.mbl__right-1.face
div.mbl__right-2.face
div.mbl__left-1.face
div.mbl__left-2.face
div.mbl__top.face
div.mbl__bottom.face
script(src="main.js")
View Compiled
$blue-1: #1CB5BE;
$blue-2: #006E85;
$blue-3: #175373;
$gray: rgba(60, 60, 120, 0.2);
$background: rgb(230,0,122);
$background: linear-gradient(90deg, rgba(230,0,122,1) 15%, rgba(0,112,235,1) 50%, rgba(10,226,255,1) 85%);
$beige-1: #FAF5EB;
$beige-2: #F7EFE4;
$beige-3: #A0A1A3;
$beige-a: #e4ddd2;
$brown-1: #B69992;
$brown-2: #7F6C78;
$brown-3: #574C65;
/***********************/
/***********************/
@mixin cube($width, $height, $depth) {
&__front{ @include cube-front($width, $height, $depth); }
&__back{ @include cube-back($width, $height, $depth); }
&__right{ @include cube-right($width, $height, $depth); }
&__left{ @include cube-left($width, $height, $depth); }
&__top{ @include cube-top($width, $height, $depth);}
&__bottom{ @include cube-bottom($width, $height, $depth); }
}
/************************/
/* Mixin para crear cubo ( Caras siempre al frente ) */
/************************/
@mixin cube-front($width, $height, $depth) {
width: $width;
height: $height;
transform-origin: bottom left;
transform: rotateX(-90deg) translateZ( -($height - ($depth * 2) ) );
}
@mixin cube-back($width, $height, $depth) {
width: $width;
height: $height;
transform-origin: top left;
transform: rotateX(-90deg) rotateY(180deg) translateX(-$width) translateY(-$height) ;
}
@mixin cube-right($width, $height, $depth) {
width: $depth * 2;
height: $height;
transform-origin: top left;
transform: rotateY(90deg) rotateZ(-90deg) translateZ($width) translateX(-$depth * 2) translateY(-$height);
}
@mixin cube-left($width, $height, $depth) {
width: $depth * 2;
height: $height;
transform-origin: top left;
transform: rotateY(-90deg) rotateZ(90deg) translateY(-$height);
}
@mixin cube-top($width, $height, $depth) {
width: $width;
height: $depth * 2;
transform-origin: top left;
transform: translateZ($height) ;
}
@mixin cube-bottom($width, $height, $depth) {
width: $width;
height: $depth * 2;
transform-origin: top left;
transform: rotateY(180deg) translateX(-$width);
}
/**/
*, *::after, *::before {
margin: 0;
padding: 0;
box-sizing: border-box;
transform-style: preserve-3d;
tap-highlight-color: transparent;
}
/* Generic */
body{
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100vh;
background: rgb(230,0,122);
background: linear-gradient(90deg, rgba(230,0,122,1) 15%, rgba(0,112,235,1) 50%, rgba(10,226,255,1) 85%);
overflow: hidden;
min-height: 300px;
min-width: 400px;
font-family: monospace;
color: white;
font-size: .6vmax;
}
.face{ position: absolute; }
/***************/
.main{
width: 30vmax;
height: 30vmax;
}
.minitel{
position: relative;
width: 26vmax;
height: 30vmax;
transform:
perspective(10000px)
rotateX(52deg)
rotateZ(-46deg)
scale(.8)
translateZ(-10vmax)
;
transition: transform .5s ease;
background-color: $gray;
box-shadow:
-5vmax -5vmax 0 $gray,
-5vmax 0vmax 0 $gray,
0vmax -5vmax 0 $gray
;
&__b{
width: 100%;
height: 100%;
background-color: $blue-3;
position: relative;
transform: translateZ(-1px) ;
}
&::before,
&::after{
content: '';
position: absolute;
left: -30%;
bottom: 5%;
width: 40%;
height: 115%;
transform: translateZ(-1px) skewY(10deg);
background-color: $gray;
}
&::after{
height: 60%;
width: 40%;
top: -30%;
transform: skewY(10deg);
border-top-left-radius: 10%;
border-bottom-left-radius: 10%;
}
}
/******************/
.button{
display: flex;
justify-content: center;
align-items: center;
position: absolute;
left: 50%;
bottom: 50px;
width: 130px;
height: 30px;
z-index: 10000;
transform: translateX(-50%) translateZ(10000px);
font-size: 12px;
letter-spacing: .5px;
background-color: $blue-2;
color: white;
cursor: pointer;
transition: hover .35s ease;
@media (min-width: 830px){
left: calc(100% - 180px);
transform:translateZ(10000px);
}
&:hover{
background-color: $blue-3;
transition: .35s ease;
}
}
.text{ word-break: break-all; }
.cursor{
display: inline-block;
width: .75vmax;
margin-left: .25vmax;
border-bottom: .2vmax solid white;
animation: cursor 1s ease infinite;
}
.led{
position: absolute;
bottom: 0;
left: 50%;
height: .5vmax;
width: .5vmax;
transform: translateX(-50%);
background-color: $brown-3;
border-radius: 50%;
transition: 2s ease;
}
.screen{
position: absolute;
top: 2vmax;
left: 2vmax;
width: 22vmax;
height: 14vmax;
transform: translateZ(2vmax);
overflow: hidden;
padding: 3.2vmax 3vmax;
font-size: 1vmax;
text-transform: uppercase;
color: rgba(white, .75);
letter-spacing: .2vmax;
background-color: $blue-2;
box-shadow:
inset .5vmax .5vmax .5vmax $blue-3,
inset -.5vmax -.5vmax .5vmax $blue-3;
&::before{
content: '';
position: absolute;
top: 0;
left: 50%;
width: 180%;
height: 24%;
transform: translateX(-50%);
background-image: linear-gradient(to bottom, $blue-3, rgba($blue-3, .3) );
border-bottom-left-radius: 50%;
border-bottom-right-radius: 50%;
}
&::after{
content: '';
position: absolute;
top: 26%;
left: 12%;
width: 25%;
height: 65%;
border-radius: .4vmax;
background-image: linear-gradient(120deg, rgba(white, .045), transparent );
}
&__shadow{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 10%;
background-image: linear-gradient(to top, rgba($brown-3, .2) ,rgba($brown-2, .5), rgba($brown-2, .3) );
border-top-left-radius: 50%;
border-top-right-radius: 50%;
filter: blur(.3vmax);
transition: 2s ease;
}
}
/*********************/
.keys{
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: flex-start;
position: absolute;
top: 7%;
left: 5%;
width: 90%;
height: 86%;
transform: translateZ(-.25vmax);
transition: transform .1s ease;
.key-column{
&:nth-of-type(1){ width: 75%; }
&:nth-of-type(3){ margin-left: 1vmax; }
&:nth-of-type(4){ margin-left: .5vmax; }
}
}
$width-mt: 1.2vmax;
$height-mt: .5vmax;
$depth-mt: .4vmax;
.key{
@include cube($width-mt, $height-mt, $depth-mt);
width: $width-mt;
height: $depth-mt;
position: relative;
bottom: 0;
&-column{
display: flex;
justify-content: space-between;
position: relative;
width: 70%;
height: 1vmax;
margin-top: .4vmax;
}
&-numbers{
position: absolute;
bottom: 8%;
right: 7%;
height: 27%;
width: 15%;
transform: translateZ(-.25vmax);
.key-column{
width: 100%;
margin-top: 0vmax;
align-items: flex-end;
}
}
&__front{ background-color: darken($brown-2, 5); }
&__back{ background-color: darken($brown-2, 5); }
&__right{ background-color: darken($brown-1, 5); }
&__left{ background-color: darken($brown-3, 5); }
&__top{
display: flex;
justify-content: center;
align-items: center;
background-color: darken($brown-1, 5);
}
&__bottom{ background-color: darken($brown-3, 5); }
}
$width-mtsp: 1vmax;
$height-mtsp: .5vmax;
$depth-mtsp: .3vmax;
.key-nb{
@include cube($width-mtsp, $height-mtsp, $depth-mtsp);
width: $width-mtsp;
height: $depth-mtsp;
position: relative;
bottom: 0;
&__front{ background-color: lighten($brown-3, 10); }
&__back{ background-color: darken($brown-2, 5); }
&__right{ background-color: darken($brown-1, 5); }
&__left{ background-color: darken($brown-3, 5); }
&__top{
display: flex;
justify-content: center;
align-items: center;
background-color: lighten($brown-3, 25);
color: white;
font-size: .7vmax;
}
&__bottom{ background-color: darken($brown-3, 5); }
}
$width-mtsp: 5vmax;
$height-mtsp: .5vmax;
$depth-mtsp: .4vmax;
.key-s{
@include cube($width-mtsp, $height-mtsp, $depth-mtsp);
width: $width-mtsp;
height: $depth-mtsp;
position: relative;
bottom: 0;
&__front{ background-color: darken($brown-2, 5); }
&__back{ background-color: darken($brown-2, 5); }
&__right{ background-color: darken($brown-1, 5); }
&__left{ background-color: darken($brown-3, 5); }
&__top{
display: flex;
justify-content: center;
align-items: center;
background-color: darken($brown-1, 5);
}
&__bottom{ background-color: darken($brown-3, 5); }
}
$width-mtsp: 3vmax;
$height-mtsp: .4vmax;
$depth-mtsp: .3vmax;
.key-b{
@include cube($width-mtsp, $height-mtsp, $depth-mtsp);
width: $width-mtsp;
height: $depth-mtsp;
position: relative;
bottom: 0;
&__front{
background-color: lighten($beige-3, 10);
&--g{ background-color: darken($blue-2, 5); }
}
&__back{
background-color: darken($beige-2, 5);
&--g{ background-color: darken($blue-2, 5); }
}
&__right{
background-color: darken($beige-1, 5);
&--g{ background-color: darken($blue-1, 5); }
}
&__left{
background-color: darken($beige-3, 5);
&--g{ background-color: darken($blue-3, 5); }
}
&__top{
display: flex;
justify-content: center;
align-items: center;
background-color: lighten($beige-3, 25);
color: $brown-3;
font-size: .7vmax;
&--g{
background-color: darken($blue-1, 5);
color: white;
}
}
&__bottom{
background-color: darken($beige-3, 5);
&--g{ background-color: darken($blue-3, 5); }
}
}
$width-mt: 24vmax;
$height-mt: 1vmax;
$depth-mt: 8vmax;
.mt{
@include cube($width-mt, $height-mt, $depth-mt);
width: $width-mt;
height: $depth-mt;
position: absolute;
bottom: 9vmax;
left: 1vmax;
transform: translateZ(.5vmax);
transition: bottom 2s;
&__front{
width: $width-mt;
height: $height-mt * 1.5;
transform-origin: bottom left;
transform: rotateX(-90deg) translateZ( -($height-mt - ($depth-mt * 1.95)) ) translateY(.25vmax);
}
&__back{ background-color: $brown-1; }
&__right{ background-color: $brown-1; }
&__left{ background-color: $brown-3; }
&__top{ background-image: linear-gradient(to bottom, $brown-3 50% , darken($brown-1, 5) 50%); }
&__bottom{ background-color: $brown-3; }
}
.mt-is-open{
bottom: 0vmax;
transition: bottom 2s;
}
$width-mta: 26vmax;
$height-mta: .75vmax;
$depth-mta: .75vmax;
.mta{
@include cube($width-mta, $height-mta, $depth-mta);
width: $width-mta;
height: $depth-mta;
position: absolute;
left: -1vmax;
&__front{ background-color: $brown-3; }
&__back{ background-color: $brown-1; }
&__right{ background-color: $brown-1; }
&__left{ background-color: $brown-3; }
&__top{ background-color: $brown-2; }
&__bottom{ background-color: $brown-3; }
}
$width-mfb: 26vmax;
$height-mfb: 2vmax;
$depth-mfb: 2vmax;
.mfb,
.mft{
@include cube($width-mfb, $height-mfb, $depth-mfb);
width: $width-mfb;
height: $depth-mfb;
position: absolute;
bottom: 2vmax;
transform: translateZ(2vmax);
&__front{
display: flex;
align-items: center;
background-color: $brown-2;
padding-left: 2vmax;
> span{
padding: .075vmax .4vmax;
letter-spacing: .1vmax;
font-size: .7vmax;
font-style: italic;
color: $beige-2;
line-height: 1;
border: .1vmax solid $beige-2;
}
}
&__back{ background-color: transparent; }
&__right{ background-color: $brown-2; }
&__left{ background-color: $brown-3; }
&__top{ background-color: $brown-1; }
&__bottom{ background-color: $brown-3; }
}
.mfb{
&__top{
background-image: linear-gradient(to bottom, lighten($brown-3, 2) 60%, $brown-1 65%);
overflow: hidden;
&::before{
content: '';
position: absolute;
top: 0;
right: 2vmax;
width: 5%;
height: 120%;
transform: rotateZ(-20deg);
background-color: lighten($brown-3, 2);
}
}
}
.mft{ transform: translateZ(18vmax); }
$width-mfl: 2vmax;
$height-mfl: 14vmax;
$depth-mfl: 2vmax;
.mfl,
.mfr{
@include cube($width-mfl, $height-mfl, $depth-mfl);
width: $width-mfl;
height: $depth-mfl;
position: absolute;
bottom: 2vmax;
transform: translateZ(4vmax);
&__front{ background-color: $brown-2; }
&__back{ background-color: transparent; }
&__right{ background-color: $brown-2; }
&__left{ background-color: $brown-3; }
&__top{ background-color: transparent; }
&__bottom{ background-color: transparent; }
}
.mfr{ right: 0; }
$width-mb: 26vmax;
$height-mb: 20vmax;
$depth-mb: 3vmax;
.mb{
@include cube($width-mb, $height-mb, $depth-mb);
width: $width-mb;
height: $depth-mb;
position: absolute;
bottom: 7vmax;
&__front{ background-color: $beige-3; }
&__back{ background-color: $beige-1; }
&__right{ background-color: $beige-1; }
&__left{ background-color: $beige-3; }
&__top{ background-color: $beige-1; }
&__bottom{ background-color: $beige-3; }
}
$width-ml: 7vmax;
$height-ml: 20vmax;
$depth-ml: 7vmax;
.ml{
@include cube($width-ml, $height-ml, $depth-ml);
width: $width-ml;
height: $depth-ml;
position: absolute;
bottom: 17vmax;
&__front{ background-color: transparent; }
&__back{ background-color: $beige-1; }
&__right{ background-color: $beige-1; }
&__left{ background-color: $beige-3; }
&__top{ background-color: $beige-1; }
&__bottom{background-color: $beige-3; }
}
$width-mr: 7vmax;
$height-mr: 20vmax;
$depth-mr: 7vmax;
.mr{
@include cube($width-mr, $height-mr, $depth-mr);
width: $width-mr;
height: $depth-mr;
position: absolute;
bottom: 17vmax;
right: 0vmax;
&__front{ background-color: transparent; }
&__back{ background-color: $beige-2; }
&__right{ background-color: $beige-1; }
&__left{ background-color: $beige-a; }
&__top{ background-color: $beige-1; }
&__bottom{ background-color: $beige-3; }
}
$width-mc: 12vmax;
$height-mc: 16vmax;
$depth-mc: 10vmax;
.mc{
@include cube($width-mc, $height-mc, $depth-mc);
width: $width-mc;
height: $depth-mc;
position: absolute;
bottom: 20vmax;
left: 7vmax;
&__front{ background-color: $beige-1; }
&__back{ background-color: $beige-a; }
&__right{ background-color: $beige-1; }
&__left{ background-color: $beige-2; }
&__top{ background-color: $beige-2; }
&__bottom{ background-color: $beige-2; }
}
$width-ml: 7vmax;
$height-ml: 20vmax;
$depth-ml: 3vmax;
.mbl,
.mbl-2{
width: $width-ml;
height: $depth-ml;
position: absolute;
top: 0;
&__front{
width: $width-ml;
height: $height-ml;
transform-origin: bottom left;
transform: rotateX(-90deg) translateZ( -($height-ml - ($depth-ml * 2) ) );
background-color: transparent;
}
&__back{
width: $width-ml;
height: #{ $height-ml - 2.2vmax } ;
transform-origin: top left;
transform: rotateX(-90deg) rotateY(180deg) translateX(-$width-ml) translateY(- #{ $height-ml - 1.2vmax }) ;
background-color: $beige-a;
}
&__right-1{
width: $depth-ml * 2;
height: #{$height-ml / 2 };
transform-origin: top left;
transform: rotateY(90deg) rotateZ(-90deg) translateZ($width-ml) translateX(-$depth-ml * 2) translateY(-#{$height-ml / 2 });
background-image: linear-gradient(-10deg, transparent 1vmax, $beige-1 1vmax);
}
&__right-2{
width: $depth-ml * 2;
height: #{$height-ml / 2 };
transform-origin: top left;
transform: rotateY(90deg) rotateZ(-90deg) translateZ($width-ml) translateX(-$depth-ml * 2) translateY(-#{$height-ml});
background-image: linear-gradient(11deg, $beige-1 9.8vmax, transparent 9.8vmax );
}
&__left-1{
width: $depth-ml * 2;
height: #{$height-ml / 2 };
transform-origin: top left;
transform: rotateY(-90deg) rotateZ(90deg) translateY(-#{$height-ml / 2 });
background-image: linear-gradient(10deg, transparent 1vmax, $beige-3 1vmax );
}
&__left-2{
width: $depth-ml * 2;
height: #{$height-ml / 2 };
transform-origin: top left;
transform: rotateY(-90deg) rotateZ(90deg) translateY(-#{$height-ml });
background-image: linear-gradient(
-11deg,
$beige-3 5vmax,
darken($beige-3, 10) 5vmax,
darken($beige-3, 10) 5.5vmax,
$beige-3 5.5vmax,
$beige-3 6.5vmax,
darken($beige-3, 10) 6.5vmax,
darken($beige-3, 10) 7vmax,
$beige-3 7vmax,
$beige-3 9.8vmax,
transparent 9.8vmax
);
}
&__top{
width: $width-ml;
height: #{$depth-ml * 2.05};
transform-origin: bottom left;
transform: translateZ(#{$height-ml - .1vmax }) translateY(-.085vmax) rotateX(11deg);
background-color: $beige-2;
}
&__bottom{
width: $width-ml;
height: $depth-ml * 2;
transform-origin: bottom left;
transform: rotateY(180deg) translateX(-$width-ml) rotateX(10deg);
background-color: $beige-3;
}
}
.mbl-2{
right: 0;
.mbl__left-1{ background-image: linear-gradient(10deg, transparent 1vmax, $beige-a 1vmax ); }
.mbl__left-2{ background-image: linear-gradient(-11deg, $beige-a 9.8vmax, transparent 9.8vmax );}
}
/***********/
.is-led-on{
background-color: #e31b4e;
transition: 2s ease;
animation: cursor 2s infinite;
}
.is-key-pressed{
transform: translateZ(-.1vmax);
transition: transform .1s ease;
.key__top{
&::before{
content: '';
position: absolute;
width: 100%;
height: 100%;
background-color: rgba($blue-1, .5);
}
}
}
.is-shadow-big{
height: 30%;
transition: 2s ease;
}
@keyframes cursor {
0%{opacity: .75}
100%{opacity: .25}
}
View Compiled
/*
Designed by: Guillaume Kurkdjian
Original image: https://electronicitems.tumblr.com/page/2
*/
const main = document.querySelector("#main");
const base = document.querySelector("#base");
const button = document.querySelector("#button");
const key = document.querySelectorAll(".key")
const mt = document.querySelector("#mt");
const sc = document.querySelector("#screen");
const scs = document.querySelector("#screen-s");
const lef = document.querySelector("#led");
let con = 0;
let state= true;
let addKey = (e) => {
let kc = event.keyCode;
let kp = event.key;
if( (kc >= 65 && kc <= 90) ) {
console.log("valid")
let current = document.querySelector(`#${kp}`);
current.classList.add("is-key-pressed");
sc.innerHTML += kp;
con++;
}
if (kc == 32) {
sc.innerHTML += " ";
document.querySelector('#espace').classList.add("is-key-pressed");
}
if (kc == 8) {
sc.innerHTML = "";
document.querySelector('#Backspace').classList.add("is-key-pressed");
}
if (con > 40) { sc.innerHTML = ""; con = 0; }
}
let removeKey = (e) => {
let kp = event.key;
let kc = event.keyCode;
if( (kc >= 65 && kc <= 90) ) {
let current = document.querySelector(`#${kp}`);
current.classList.remove("is-key-pressed");
}
if (kc == 8)
document.querySelector('#Backspace').classList.remove("is-key-pressed");
if (kc == 32)
document.querySelector('#espace').classList.remove("is-key-pressed");
}
let kb = (e) => {
mt.classList.toggle("mt-is-open");
scs.classList.toggle("is-shadow-big");
led.classList.toggle("is-led-on");
if ( state ) {
window.addEventListener("keydown", addKey);
window.addEventListener("keyup", removeKey);
state = false;
}
else if ( !state ) {
window.removeEventListener("keydown", addKey);
window.removeEventListener("keyup", removeKey);
state = true;
}
}
let rtBase = (e) => {
var x = e.pageX / window.innerWidth - 0.5;
var y = e.pageY / window.innerHeight - 0.5;
base.style.transform = `
perspective(10000px)
rotateX(${ y * 10 + 60}deg)
rotateZ(${ - x * 30 - 20}deg)
scale(.8)
translateZ(-10vmax)
`;
}
function runOnKeys(func, codes) {
let pressed = new Set();
document.addEventListener('keydown', function(event) {
pressed.add(event.code);
for (let code of codes) { // are all keys in the set?
if (!pressed.has(code)) {
return;
}
}
// yes, they are
// during the alert, if the visitor releases the keys,
// JavaScript does not get the "keyup" event
// and pressed set will keep assuming that the key is pressed
// so, to evade "sticky" keys, we reset the status
// if the user wants to run the hotkey again - let them press all keys again
pressed.clear();
func();
});
document.addEventListener('keyup', function(event) {
pressed.delete(event.code);
});
}
runOnKeys(
() => alert("Welcome to Star Key Labs"),
"KeyS",
"KeyK",
"KeyL"
);
main.addEventListener("mousemove", rtBase);
button.addEventListener("click", kb);
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.