362 lines
No EOL
5.5 KiB
SCSS
362 lines
No EOL
5.5 KiB
SCSS
$thickness: 5px;
|
|
$duration: 2500;
|
|
$delay: $duration/6;
|
|
$background: #222222;
|
|
|
|
@mixin polka($size, $dot, $base, $accent) {
|
|
background: $base;
|
|
background-image: radial-gradient($accent $dot, transparent 0);
|
|
background-size: $size $size;
|
|
background-position: 0 -2.5px;
|
|
}
|
|
|
|
.loader {
|
|
margin: 0;
|
|
|
|
display: block;
|
|
position: fixed;
|
|
top: 0;
|
|
bottom: 0;
|
|
left: 0;
|
|
right: 0;
|
|
|
|
z-index: 900;
|
|
text-align: center;
|
|
}
|
|
|
|
.loader .half {
|
|
position: fixed;
|
|
background: #222222;
|
|
top: 0;
|
|
bottom: 0;
|
|
width: 50%;
|
|
height: 100%;
|
|
}
|
|
|
|
.loader .half.right {
|
|
right: 0;
|
|
}
|
|
|
|
.loader .half.left {
|
|
left: 0;
|
|
}
|
|
|
|
.bookshelf_wrapper {
|
|
position: relative;
|
|
top: 40%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
|
|
.books_list {
|
|
margin: 0 auto;
|
|
width: 300px;
|
|
padding: 0;
|
|
}
|
|
|
|
.book_item {
|
|
position: absolute;
|
|
top: -120px;
|
|
box-sizing: border-box;
|
|
list-style: none;
|
|
width: 40px;
|
|
height: 120px;
|
|
opacity: 0;
|
|
background-color: #1e6cc7;
|
|
border: $thickness solid white;
|
|
transform-origin: bottom left;
|
|
transform: translateX(300px);
|
|
animation: travel #{$duration}ms linear infinite;
|
|
|
|
&.first {
|
|
top: -140px;
|
|
height: 140px;
|
|
|
|
&:before,
|
|
&:after {
|
|
content: '';
|
|
position: absolute;
|
|
top: 10px;
|
|
left: 0;
|
|
width: 100%;
|
|
height: $thickness;
|
|
background-color: white;
|
|
}
|
|
|
|
&:after {
|
|
top: initial;
|
|
bottom: 10px;
|
|
}
|
|
}
|
|
|
|
&.second,
|
|
&.fifth {
|
|
&:before,
|
|
&:after {
|
|
box-sizing: border-box;
|
|
content: '';
|
|
position: absolute;
|
|
top: 10px;
|
|
left: 0;
|
|
width: 100%;
|
|
height: $thickness*3.5;
|
|
border-top: $thickness solid white;
|
|
border-bottom: $thickness solid white;
|
|
}
|
|
|
|
&:after {
|
|
top: initial;
|
|
bottom: 10px;
|
|
}
|
|
}
|
|
|
|
&.third {
|
|
&:before,
|
|
&:after {
|
|
box-sizing: border-box;
|
|
content: '';
|
|
position: absolute;
|
|
top: 10px;
|
|
left: 9px;
|
|
width: 12px;
|
|
height: 12px;
|
|
border-radius: 50%;
|
|
border: $thickness solid white;
|
|
}
|
|
|
|
&:after {
|
|
top: initial;
|
|
bottom: 10px;
|
|
}
|
|
}
|
|
|
|
&.fourth {
|
|
top: -130px;
|
|
height: 130px;
|
|
|
|
&:before {
|
|
box-sizing: border-box;
|
|
content: '';
|
|
position: absolute;
|
|
top: 46px;
|
|
left: 0;
|
|
width: 100%;
|
|
height: $thickness*3.5;
|
|
border-top: $thickness solid white;
|
|
border-bottom: $thickness solid white;
|
|
}
|
|
}
|
|
|
|
&.fifth {
|
|
top: -100px;
|
|
height: 100px;
|
|
}
|
|
|
|
&.sixth {
|
|
top: -140px;
|
|
height: 140px;
|
|
|
|
&:before {
|
|
box-sizing: border-box;
|
|
content: '';
|
|
position: absolute;
|
|
bottom: 31px;
|
|
left: 0px;
|
|
width: 100%;
|
|
height: $thickness;
|
|
background-color: white;
|
|
}
|
|
|
|
&:after {
|
|
box-sizing: border-box;
|
|
content: '';
|
|
position: absolute;
|
|
bottom: 10px;
|
|
left: 9px;
|
|
width: 12px;
|
|
height: 12px;
|
|
border-radius: 50%;
|
|
border: $thickness solid white;
|
|
}
|
|
}
|
|
|
|
&:nth-child(2) {
|
|
animation-delay: #{$delay*1}ms;
|
|
}
|
|
|
|
&:nth-child(3) {
|
|
animation-delay: #{$delay*2}ms;
|
|
}
|
|
|
|
&:nth-child(4) {
|
|
animation-delay: #{$delay*3}ms;
|
|
}
|
|
|
|
&:nth-child(5) {
|
|
animation-delay: #{$delay*4}ms;
|
|
}
|
|
|
|
&:nth-child(6) {
|
|
animation-delay: #{$delay*5}ms;
|
|
}
|
|
|
|
}
|
|
|
|
.shelf {
|
|
width: 300px;
|
|
height: $thickness;
|
|
margin: 0 auto;
|
|
background-color: white;
|
|
position: relative;
|
|
|
|
&:before,
|
|
&:after {
|
|
content: '';
|
|
position: absolute;
|
|
width: 100%;
|
|
height: 100%;
|
|
@include polka(10px, 30%, $background, rgba(255, 255, 255, 0.5));
|
|
top: 200%;
|
|
left: 5%;
|
|
animation: move #{$duration/10}ms linear infinite;
|
|
}
|
|
|
|
&:after {
|
|
top: 400%;
|
|
left: 7.5%;
|
|
}
|
|
|
|
}
|
|
|
|
@keyframes move {
|
|
|
|
from {
|
|
background-position-x: 0;
|
|
}
|
|
|
|
to {
|
|
background-position-x: 10px;
|
|
}
|
|
|
|
}
|
|
|
|
@keyframes travel {
|
|
|
|
0% {
|
|
opacity: 0;
|
|
transform: translateX(300px) rotateZ(0deg) scaleY(1);
|
|
}
|
|
|
|
6.5% {
|
|
transform: translateX(279.5px) rotateZ(0deg) scaleY(1.1);
|
|
}
|
|
|
|
8.8% {
|
|
transform: translateX(273.6px) rotateZ(0deg) scaleY(1);
|
|
}
|
|
|
|
10% {
|
|
opacity: 1;
|
|
transform: translateX(270px) rotateZ(0deg);
|
|
}
|
|
|
|
17.6% {
|
|
transform: translateX(247.2px) rotateZ(-30deg);
|
|
}
|
|
|
|
45% {
|
|
transform: translateX(165px) rotateZ(-30deg);
|
|
}
|
|
|
|
49.5% {
|
|
transform: translateX(151.5px) rotateZ(-45deg);
|
|
}
|
|
|
|
61.5% {
|
|
transform: translateX(115.5px) rotateZ(-45deg);
|
|
}
|
|
|
|
67% {
|
|
transform: translateX(99px) rotateZ(-60deg);
|
|
}
|
|
|
|
76% {
|
|
transform: translateX(72px) rotateZ(-60deg);
|
|
}
|
|
|
|
83.5% {
|
|
opacity: 1;
|
|
transform: translateX(49.5px) rotateZ(-90deg);
|
|
}
|
|
|
|
90% {
|
|
opacity: 0;
|
|
}
|
|
|
|
100% {
|
|
opacity: 0;
|
|
transform: translateX(0px) rotateZ(-90deg);
|
|
}
|
|
|
|
}
|
|
|
|
/* Automated loader timeout */
|
|
$loader_timeout: 2.5s;
|
|
.loader:not(.started) {
|
|
&, & > .half, & > .bookshelf_wrapper {
|
|
-moz-animation: _loader_hide 0s ease-in $loader_timeout forwards;
|
|
-webkit-animation: _loader_hide 0s ease-in $loader_timeout forwards;
|
|
-o-animation: _loader_hide 0s ease-in $loader_timeout forwards;
|
|
animation: _loader_hide 0s ease-in $loader_timeout forwards;
|
|
-webkit-animation-fill-mode: forwards;
|
|
animation-fill-mode: forwards;
|
|
}
|
|
}
|
|
|
|
.loader:not(.started) + #critical-load {
|
|
display: block !important;
|
|
opacity: 0;
|
|
|
|
-moz-animation: _loader_show 0s ease-in $loader_timeout forwards;
|
|
-webkit-animation: _loader_show 0s ease-in $loader_timeout forwards;
|
|
-o-animation: _loader_show 0s ease-in $loader_timeout forwards;
|
|
animation: _loader_show 0s ease-in $loader_timeout forwards;
|
|
-webkit-animation-fill-mode: forwards;
|
|
animation-fill-mode: forwards;
|
|
|
|
.error::before {
|
|
content: 'Failed to startup app loader!';
|
|
}
|
|
|
|
.detail::before {
|
|
content: 'Lookup the console for more details';
|
|
}
|
|
}
|
|
|
|
@keyframes _loader_hide {
|
|
to {
|
|
width: 0;
|
|
height: 0;
|
|
overflow: hidden;
|
|
}
|
|
}
|
|
|
|
@-webkit-keyframes _loader_hide {
|
|
to {
|
|
width: 0;
|
|
height: 0;
|
|
visibility: hidden;
|
|
}
|
|
}
|
|
|
|
@keyframes _loader_show {
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@-webkit-keyframes _loader_show {
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
} |