:root {
	--dark: #696969;
	--light: #F5F5F5;
	--purple-1: #CD96CD;
	--purple-2: #8B008B;
}

*:after, *:before { -webkit-box-sizing: border-box; box-sizing: border-box; }
.clearfix:before, .clearfix:after { display: table; content: ''; }
.clearfix:after { clear: both; }

body {
	font-family: 'Comfortaa', cursive;
	color: var(--dark);
	background: var(--light);
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	overflow-y: scroll;
	overflow-x: hidden;
	width: 100vw;
   position: relative;
}

.yarn {
   position: absolute;
   top: 20px;
   left: 20px;
   z-index: 9;
   width: 40vw;
}

.container { position: relative; z-index: 10; }

a { outline: none; color: var(--purple-1); text-decoration: none; }
a:hover, a:focus { text-decoration: underline; }

.hidden {
	position: absolute;
	overflow: hidden;
	width: 0;
	height: 0;
	pointer-events: none;
}

/* ### Header ### */
.header { padding: 2em 1em 4em; text-align: center; }

.header h1 {
	margin: 0.5em 0 0;
	letter-spacing: -1px;
	font-size: 3em;
	line-height: 1;
	font-weight: normal;
}

.header p { font-size: 1.2em; }

/* ### Social Media ### */
.social-media a { font-size: 1.8em; margin: 0 15px; }
.social-media a:hover, .social-media a:focus { color: var(--purple-2); }

/* ### Content ### */
.content { padding: 1em 0 3em; max-width: 1200px; margin: 0 auto; }

.grid { position: relative; margin: 0 auto; }

.js .grid::after {
	content: '';
	position: absolute;
	width: 100%;
	height: 100%;
	top: 0;
	left: 0;
	pointer-events: none;
	background: var(--dark) url(../img/loading.svg) no-repeat 50% 75px;
	background-size: 60px auto;
	-webkit-transition: opacity 0.3s;
	transition: opacity 0.3s;
}

.js .grid--loaded::after { opacity: 0; }

.grid__item { width: 270px; padding: 10px; }
.grid__item--current { opacity: 0 !important; }

.img-wrap { display: block; }
.img-wrap:focus, .img-wrap:hover { outline: none; }
.img-wrap img { display: block; max-width: 100%; margin: 0 auto; }

.preview {
	position: fixed;
	z-index: 1000;
	top: 0;
	left: 0;
	display: -ms-flex;
	display: -webkit-flex;
	display: flex;
	-ms-flex-pack: center;
	-webkit-justify-content: center;
	justify-content: center;
	-ms-flex-line-pack: center;
	-webkit-align-content: center;
	align-content: center;
	-ms-flex-align: center;
	-webkit-align-items: center;
	align-items: center;
	width: 50%;
	height: 100%;
	pointer-events: none;
}

.preview::before {
	content: '';
   color: var(--dark);
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	opacity: 0;
	background: var(--light);
	-webkit-transition: opacity 0.6s;
	transition: opacity 0.6s;
}

.preview--open { pointer-events: auto; }
.preview--open::before { opacity: 1; }

.clone {
	position: fixed;
	z-index: 110;
	-webkit-transition: -webkit-transform 0.5s;
	transition: transform 0.5s;
	-webkit-backface-visibility: hidden;
}

.original {
	position: relative;
	z-index: 120;
	display: block;
	object-fit: contain;
	-webkit-transition: opacity 0.2s;
	transition: opacity 0.2s;
	-webkit-backface-visibility: hidden;
}

.preview--open .animate {
	-webkit-transition: -webkit-transform 0.6s, opacity 0.2s;
	transition: transform 0.6s, opacity 0.2s;
}

.animate {
	-webkit-transition: -webkit-transform 0.3s, opacity 0.2s;
	transition: transform 0.3s, opacity 0.2s;
}

.description:not(.description--preview) {
	background: var(--purple-1);
	border: 4px solid var(--purple-1);
   border-radius: 5px;
   color: var(--light);
   position: relative;
   text-align: center;
}

.description:not(.description--preview):hover, .description:not(.description--preview):focus {
   background: var(--purple-2);
	border: 4px solid var(--purple-2);
}

.description:not(.description--preview):after, .description:not(.description--preview):before {
   bottom: 100%;
	left: 50%;
	border: solid transparent;
	content: "";
	height: 0;
	width: 0;
	position: absolute;
	pointer-events: none;
}

.description:not(.description--preview):after {
   border-color: rgba(46, 139, 87, 0);
	border-bottom-color: var(--purple-1);
	border-width: 10px;
	margin-left: -10px;
}

.description:not(.description--preview):before {
   border-color: rgba(46, 139, 87, 0);
	border-bottom-color: var(--purple-1);
	border-width: 16px;
	margin-left: -16px;
}

.description:not(.description--preview):hover:after, .description:not(.description--preview):focus:after, 
.description:not(.description--preview):hover:before, .description:not(.description--preview):focus:before { border-bottom-color: var(--purple-2); }

.description:not(.description--preview) h3 { margin: 0; display: inline-block; padding: 7px 0; }
/* .description:hover, .description:focus { color: #2E8B57; } */
/* .js .description--grid { display: none; } */

.description--preview {
	font-size: 2em;
   background-color: var(--light);
   color: var(--dark);
	position: absolute;
	z-index: 140;
	width: 100%;
	left: 100%;
	top: 0;
	height: 100%;
	padding: 0 1em;
	display: -ms-flex;
	display: -webkit-flex;
	display: flex;
	-ms-flex-direction: column;
	-webkit-flex-direction: column;
	flex-direction: column;
	-ms-flex-pack: center;
	-webkit-justify-content: center;
	justify-content: center;
	-ms-flex-align: start;
	-webkit-align-items: flex-start;
	align-items: flex-start;
	opacity: 0;
	-webkit-transition: opacity 1s, -webkit-transform 1s;
	transition: opacity 1s, transform 1s;
	-webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
	transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
	-webkit-transform: translate3d(0, 30px, 0);
	transform: translate3d(0, 30px, 0);
}

.preview--open .description--preview {
	opacity: 1;
	-webkit-transition-delay: 0.2s;
	transition-delay: 0.2s;
	-webkit-transform: translate3d(0, 0, 0);
	transform: translate3d(0, 0, 0);
}

.description--preview h3 {
	font-weight: normal;
	margin: 0;
}

/* ### Grid Loader ### */

/* ### Details ### */
.description:not(.description--preview) .details { display: none; }
.details { max-width: 100%; }

.details ul {
	line-height: 1;
	position: relative;
	margin: 0;
	padding: 0;
	list-style: none;
}

.details ul li {
	font-size: 0.5em;
	position: relative;
	display: inline-block;
	margin: 0 1em 0 0;
	padding: 0.15em 0;
	white-space: nowrap;
	opacity: 0;
	color: var(--light);
	-webkit-transition: -webkit-transform 1s, opacity 1s;
	transition: transform 1s, opacity 1s;
	-webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
	transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
	-webkit-transform: translate3d(0, 20px, 0);
	transform: translate3d(0, 20px, 0);
}

.preview--open .details ul li {
	opacity: 1;
	-webkit-transform: translate3d(0, 0, 0);
	transform: translate3d(0, 0, 0);
}

.preview--open .details ul li:nth-child(1) {
	-webkit-transition-delay: 0.2s;
	transition-delay: 0.2s;
}

.preview--open .details ul li:nth-child(2) {
	-webkit-transition-delay: 0.3s;
	transition-delay: 0.3s;
}

.preview--open .details ul li:nth-child(3) {
	-webkit-transition-delay: 0.4s;
	transition-delay: 0.4s;
}

.preview--open .details ul li:nth-child(4) {
	-webkit-transition-delay: 0.5s;
	transition-delay: 0.5s;
}

.preview--open .details ul li:nth-child(5) {
	-webkit-transition-delay: 0.6s;
	transition-delay: 0.6s;
}

.details ul li:first-child { font-weight: bold; color: var(--dark); }
.icon { margin-right: 5px; color: var(--purple-1); }

/* ### Close button ### */
.action {
	font-size: 1.5em;
	margin: 0;
	padding: 0;
	cursor: pointer;
	vertical-align: top;
	color: var(--purple-1);
	border: none;
	background: none;
}

.action:hover, .action:focus { color: var(--purple-1); outline: none; }

.action--close {
	position: fixed;
	z-index: 150;
	top: 0;
	right: 0;
	padding: 1em;
	opacity: 0;
	-webkit-transition: opacity 0.3s, -webkit-transform 0.3s;
	transition: opacity 0.3s, transform 0.3s;
	-webkit-transform: scale3d(0.6, 0.6, 1);
	transform: scale3d(0.6, 0.6, 1);
}

.preview--image-loaded .action--close {
	opacity: 1;
	-webkit-transform: scale3d(1, 1, 1);
	transform: scale3d(1, 1, 1);
}

.text-hidden {
	position: absolute;
	display: block;
	overflow: hidden;
	width: 0;
	height: 0;
	color: transparent;
}

.scroll-to-top {
   position: fixed;
   bottom: 20px;
   right: 20px;
   font-size: 1.5em;
   border: 0 none;
   background-color: var(--purple-1);
   color: #ffffff;
   padding: 7px 17px;
}

.scroll-to-top:hover, .scroll-to-top:focus, .scroll-to-top:active {
   background-color: var(--purple-2);
}

@media screen and (max-width: 40em) {
	.description--preview h3 { font-size: 1em; }
}

@media screen and (max-width: 50em) {
	.header { padding: 2em 5%; }
}

@media screen and (max-width: 40em) {
	.header h1 { font-size: 2.15em; }
}
