<html lang="en">
<head>
<meta charset="UTF-8">
<title>Pepe#69</title>
</head>
<body id="background">
<div id="flash"></div>
<div id="pepe">
<style id="generic">
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}
html{
position: absolute;
height: 100%;
width: 100%;
padding: env(safe-area-inset-top) 0 calc(env(safe-area-inset-bottom) + 34px) 0;
}
#pepe{
width: 100%;
height: 100%;
position: absolute;
box-sizing: border-box;
display: flex;
align-items: center;
top: 0;
}
#background{
width: 100%;
height: 100%;
position: fixed;
overflow: hidden;
}
#flash{
background: #FFF;
opacity: 0;
width: 100%;
height: 100%;
transition: ease opacity 200ms;
}
#background.blue {
background: linear-gradient(-45deg, #2200ff, #0076ff, #00abff, #00d5ff);
background-size: 400% 400%;
animation: gradient 15s ease infinite;
background-attachment: fixed;
}
#background.yellow {
background: linear-gradient(-45deg, #ffc60d, #ffd601, #ffe600, #fff700);
background-size: 400% 400%;
animation: gradient 10s ease infinite;
background-attachment: fixed;
}
#background.green {
background: linear-gradient(-45deg, #2eab00, #30c600, #2fe200, #2bff00);
background-size: 400% 400%;
animation: gradient 10s ease infinite;
background-attachment: fixed;
}
#background.red {
background: linear-gradient(-45deg, #ff0077, #ff075e, #ff2145, #ff3729);
background-size: 400% 400%;
animation: gradient 10s ease infinite;
background-attachment: fixed;
}
@keyframes gradient { 0% {background-position: 0% 50%;} 50% {background-position: 100% 50%;} 100% {background-position: 0% 50%;} }
section {
display: grid;
grid-template-columns: repeat(16, 1fr);
grid-template-rows: repeat(16, 1fr);
gap: 0;
place-items: start;
width: 80vw;
height: 80vw;
margin: auto auto auto -40vw;
left: 50%;
position: absolute;
}
@media all and (orientation: landscape){
section{width: 80vh; height: 80vh; margin: auto auto auto -40vh;}
body {
grid-template-areas:
". . . . . . . . . . . . . . . ."
". . . . . . . . . . . . . . . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . x x x x x x x x x x x x . ."
". . . . . . . . . . . . . . . ."
". . . . . . . . . . . . . . . .";
}
.body * { width:100%; height:100%; grid-area:x; }
.part * { width:100%; height:100%; }
</style><style id="base">
/* Pepe Base */
.base * { background: #00cc66;}
.base *:nth-child(1) { grid-column :7;grid-row :4;}
.base *:nth-child(2) { grid-column :8;grid-row :4;}
.base *:nth-child(3) { grid-column :10;grid-row :4;}
.base *:nth-child(4) { grid-column :11;grid-row :4;}
.base *:nth-child(5) { grid-column :4;grid-row :7;}
.base *:nth-child(6) { grid-column :6;grid-row :5;}
.base *:nth-child(7) { grid-column :7;grid-row :5;}
.base *:nth-child(8) { grid-column :8;grid-row :5;}
.base *:nth-child(9) { grid-column :9;grid-row :5;}
.base *:nth-child(10) { grid-column :10;grid-row :5;}
.base *:nth-child(11) { grid-column :11;grid-row :5;}
.base *:nth-child(12) { grid-column :12;grid-row :5;}
.base *:nth-child(13) { grid-column :7;grid-row :7;}
.base *:nth-child(14) { grid-column :6;grid-row :6;}
.base *:nth-child(15) { grid-column :7;grid-row :6;}
.base *:nth-child(16) { grid-column :8;grid-row :6;}
.base *:nth-child(17) { grid-column :9;grid-row :6;}
.base *:nth-child(18) { grid-column :10;grid-row :6;}
.base *:nth-child(19) { grid-column :11;grid-row :6;}
.base *:nth-child(20) { grid-column :12;grid-row :6;}
.base *:nth-child(21) { grid-column :13;grid-row :6;}
.base *:nth-child(22) { grid-column :5;grid-row :7;}
.base *:nth-child(23) { grid-column :6;grid-row :7;}
.base *:nth-child(24) { grid-column :7;grid-row :7;}
.base *:nth-child(25) { grid-column :8;grid-row :7;}
.base *:nth-child(26) { grid-column :9;grid-row :7;}
.base *:nth-child(27) { grid-column :10;grid-row :7;}
.base *:nth-child(28) { grid-column :11;grid-row :7;}
.base *:nth-child(29) { grid-column :12;grid-row :7;}
.base *:nth-child(30) { grid-column :13;grid-row :7;}
.base *:nth-child(31) { grid-column :5;grid-row :8;}
.base *:nth-child(32) { grid-column :6;grid-row :8;}
.base *:nth-child(33) { grid-column :7;grid-row :8;}
.base *:nth-child(34) { grid-column :8;grid-row :8;}
.base *:nth-child(35) { grid-column :9;grid-row :8;}
.base *:nth-child(36) { grid-column :10;grid-row :8;}
.base *:nth-child(37) { grid-column :11;grid-row :8;}
.base *:nth-child(38) { grid-column :12;grid-row :8;}
.base *:nth-child(39) { grid-column :5;grid-row :9;}
.base *:nth-child(40) { grid-column :4;grid-row :10;}
.base *:nth-child(41) { grid-column :6;grid-row :9;}
.base *:nth-child(42) { grid-column :7;grid-row :9;}
.base *:nth-child(43) { grid-column :8;grid-row :9;}
.base *:nth-child(44) { grid-column :9;grid-row :9;}
.base *:nth-child(45) { grid-column :10;grid-row :9;}
.base *:nth-child(46) { grid-column :11;grid-row :9;}
.base *:nth-child(47) { grid-column :12;grid-row :9;}
.base *:nth-child(48) { grid-column :13;grid-row :9;}
.base *:nth-child(49) { grid-column :5;grid-row :10;}
.base *:nth-child(50) { grid-column :6;grid-row :10;}
.base *:nth-child(51) { grid-column :7;grid-row :10;}
.base *:nth-child(52) { grid-column :8;grid-row :10;}
.base *:nth-child(53) { grid-column :9;grid-row :10;}
.base *:nth-child(54) { grid-column :10;grid-row :10;}
.base *:nth-child(55) { grid-column :11;grid-row :10;}
.base *:nth-child(56) { grid-column :12;grid-row :10;}
.base *:nth-child(57) { grid-column :13;grid-row :10;}
.base *:nth-child(58) { grid-column :4;grid-row :9;}
.base *:nth-child(59) { grid-column :5;grid-row :11;}
.base *:nth-child(60) { grid-column :6;grid-row :11;}
.base *:nth-child(61) { grid-column :7;grid-row :11;}
.base *:nth-child(62) { grid-column :8;grid-row :11;}
.base *:nth-child(63) { grid-column :9;grid-row :11;}
.base *:nth-child(64) { grid-column :10;grid-row :11;}
.base *:nth-child(65) { grid-column :11;grid-row :11;}
.base *:nth-child(66) { grid-column :12;grid-row :11;}
.base *:nth-child(67) { grid-column :5;grid-row :6;}
.base *:nth-child(68) { grid-column :4;grid-row :8;}
.base *:nth-child(69) { grid-column :6;grid-row :12;}
.base *:nth-child(70) { grid-column :7;grid-row :12;}
.base *:nth-child(71) { grid-column :8;grid-row :12;}
.base *:nth-child(72) { grid-column :9;grid-row :12;}
.base *:nth-child(73) { grid-column :10;grid-row :12;}
.base *:nth-child(74) { grid-column :11;grid-row :12;}
.part * { width:100%; height:100%; }
</style><style id="eyes">
/* eyes */
.eye * { background :#339966;}
/* left eye */
.eye *:nth-child(1) { grid-column :8;grid-row :7;background: white;}
.eye *:nth-child(2) { grid-column :9;grid-row :7;background: black;}
.eye *:nth-child(3) { grid-column :10;grid-row :7;background :white;}
/* shadow */
.eye *:nth-child(4) { grid-column :7;grid-row :7;}
/* right eye */
.eye *:nth-child(5) { grid-column :11;grid-row :7;background: white;}
.eye *:nth-child(6) { grid-column :12;grid-row :7;background: black;}
.eye *:nth-child(7) { grid-column :13;grid-row :7;background :white;}
/* Look Left*/
.eye.lookleft *:nth-child(1) { grid-column :11;grid-row :7;background: white;}
.eye.lookleft *:nth-child(2) { grid-column :12;grid-row :7;background: white;}
.eye.lookleft *:nth-child(3) { grid-column :13;grid-row :7;background: black;}
.eye.lookleft *:nth-child(5) { grid-column :8;grid-row :7;background: white;}
.eye.lookleft *:nth-child(6) { grid-column :9;grid-row :7;background: white;}
.eye.lookleft *:nth-child(7) { grid-column :10;grid-row :7;background: black;}
</style><style id="mouth">
/* Straight */
.mouth * { background: red; margin-top: 0;}
@media all and (orientation:landscape) {.mouth *{margin-top: 0;}}
/* top lips */
.mouth *:nth-child(1) { grid-column :8;grid-row :10;}
.mouth *:nth-child(2) { grid-column :9;grid-row :10;}
.mouth *:nth-child(3) { grid-column :10;grid-row :10;}
.mouth *:nth-child(4) { grid-column :11;grid-row :10;}
.mouth *:nth-child(5) { grid-column :12;grid-row :10;}
.mouth *:nth-child(6) { grid-column :13;grid-row :10;}
/* sad and happy extra pixels */
.mouth *:nth-child(7) { grid-column :7;grid-row :9; display:none}
.mouth *:nth-child(8) { grid-column :7;grid-row :11; display:none}
/* mouth happy */
.mouth.happy *:nth-child(7){ grid-column: 7; grid-row: 9; display:block;}
/* mouth sad */
.mouth.sad *:nth-child(8){ grid-column: 7; grid-row: 11; display:block;}
/* Rendering here */
</style><section class="part base">
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
</section><section class="part eye">
<div></div><div></div><div></div><div></div><div></div><div></div><div></div>
</section><section class="part mouth">
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<style id="bounce">
/* interactions */
#pepe.bounce{
animation: bounce 1s ease;
}
@keyframes bounce {
0%, 30%, 50%, 80%, 100% {transform: translateY(0);}
20% {transform: translateY(-20px);}
40% {transform: translateY(-10px);}
}
</style><script id="interactions">
let pxl = document.getElementById("pepe");
let bg = document.getElementById("background");
let flash = document.getElementById("flash");
let mouth = document.querySelector(".mouth");
let eye_ = document.querySelector(".eye");
let look_left = false;
let look_interval;
let colors = ["blue","yellow","green","red"];
let current_bg = colors[Math.floor(Math.random() * colors.length)];
let moods = ["happy", "neutral", "sad"];
let current_mood = moods[Math.floor(Math.random() * moods.length)];
bg.classList.add(current_bg);
if (mouth !== null){
mouth.classList.add(current_mood);
}
let stats_on = false;
let tappedTwice = false;
let current_animation = '';
let interact = function(animation){
if(!tappedTwice) {
if(pxl.classList.contains(current_animation)){
pxl.classList.remove(current_animation);
}
void bg.offsetWidth;
flash.style.cssText = "opacity: 0.420";
setTimeout(function(){
//bg
bg.classList.remove(current_bg);
current_bg = colors[Math.floor(Math.random() * colors.length)];
bg.classList.add(current_bg);
//mood
if (mouth !== null) {
mouth.classList.remove(current_mood);
}
current_mood = moods[Math.floor(Math.random() * moods.length)];
if (mouth !== null) {
mouth.classList.add(current_mood);
}
if(current_mood == "neutral"){
clearInterval(look_interval);
look_interval = setInterval(function(){
if(eye_ !== null){
eye_.classList.add('lookleft');
setTimeout(function(){
eye_.classList.remove('lookleft');
}, 6000)
}
}, 5000);
}else{
lookleft = false;
clearInterval(look_left);
}
}, 100)
setTimeout(function(){
flash.style.cssText = ""
},200)
void pepe.offsetWidth;
current_animation = animation;
pepe.classList.add(current_animation);
tappedTwice = true;
setTimeout( function() { tappedTwice = false; }, 300 );
return false;
}
setTimeout(function(){
stats_on = true;
stats.style.cssText = "top: 0;";
document.getElementById('stats').classList.add('stats_on');
},200)
}
let close_stats = function(){
stats_on = false;
stats.style.cssText = "";
}
document.getElementById("pepe").addEventListener('click', function(){interact('bounce');});
document.getElementById("pepe").addEventListener('touchstart', function(){interact('bounce');});
document.getElementById("pepe").addEventListener('touchstart', function (e) {e.preventDefault();});
</script></body>
</html>