Pen Settings

HTML

CSS

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URLs added here will be added as <link>s in order, and before the CSS in the editor. You can use the CSS from another Pen by using its URL and the proper URL extension.

+ add another resource

JavaScript

Babel includes JSX processing.

Add External Scripts/Pens

Any URL's added here will be added as <script>s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.

+ add another resource

Packages

Add Packages

Search for and use JavaScript packages from npm here. By selecting a package, an import statement will be added to the top of the JavaScript editor for this package.

Behavior

Auto Save

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

Format on Save

If enabled, your code will be formatted when you actively save your Pen. Note: your code becomes un-folded during formatting.

Editor Settings

Code Indentation

Want to change your Syntax Highlighting theme, Fonts and more?

Visit your global Editor Settings.

HTML

              
                <!-- Textures courtesy of https://www.transparenttextures.com/ -->

<span>Arrows to move around<br>Click the landmass to reset</span>
<div id="controls">
  ZOOM
  <input id="zoom" type="range" min="1" max="1.75" step=".25" value="1"></input><br>
HUE&nbsp;
<input id="hue" type="range" min="0" max="360" step="45" value="1"></input><br><br>

<label for="night">&#9728;</label>
</div>

<input id="night" type="checkbox"></input>
<div id="god">
  <div id="ground"></div>
  <div id="box">
    <div id="boxOverlay"></div>
    <div id="boxOverlay2"></div>
  </div>
</div>

              
            
!

CSS

              
                body {
  width:100vw;
  height:100vh;
  padding:0;
  margin:0;
  overflow:hidden;
  background:skyblue;
  font-family:monospace;
  /*   transition:1s; */
}
body:before {
  content:'';
  position:absolute;
  top:0;
  left:0;
  width:100%;
  height:100%;
  /*   background-color:red; */
  background-image:linear-gradient(25deg, white 5%, transparent 35%), linear-gradient(-25deg, white 5%, transparent 35%);
  z-index:9;
  pointer-events:none;
}

#player {
  width:;
  height:;
  /*   background: red; */
  position: absolute;
  left: 50%;
  top: 50%;
  z-index: 1000;
/*   outline: 2px solid red; */
}
#player:before {
  content: '';
  width: 100%;
  height: 20%;
  background: black;
  border-radius: 50%;
  position: absolute;
  left: 0;
  bottom: 0;
  transform: rotate(45deg) translate(-30%, 100%);
  opacity: .25;
  filter: blur(2px);
}
#player:after {
  content:'';
  width: 100%;
  height: 100%;
  background: var(--img-src);
  background-size: 200% 100%;  
  position: absolute;
  left: 0;
  top: 0;
  transform: var(--pl-moving);
}

.moving:after {
  animation: moving 1s steps(2) infinite;
}
@keyframes moving {
  50% { background-position: 200% 0; }
}

span {
  position: absolute;
  bottom: 10px;
  left: 10px;
  text-align: left;
  z-index: 9;
  user-select: none;
}

#controls {
  position:fixed;
  right:15px;
  top:15px;
  font-family:monospace;
  text-align:right;
  z-index:99999999;
  background:steelblue;
  padding:10px;
  border-radius:5px;
  color:white;
}
#night {
  opacity:0;
  position:absolute;
  top:-999px;
  left:-999px;
}
#night:checked + #god {
  background-color:#003;
  background-image: 
    radial-gradient(2px 2px at 20px 30px, #eee, rgba(0,0,0,0)),
    radial-gradient(2px 2px at 40px 70px, #fff, rgba(0,0,0,0)),
    radial-gradient(2px 2px at 50px 160px, #ddd, rgba(0,0,0,0)),
    radial-gradient(2px 2px at 90px 40px, #fff, rgba(0,0,0,0)),
    radial-gradient(2px 2px at 130px 80px, #fff, rgba(0,0,0,0)),
    radial-gradient(2px 2px at 160px 120px, #ddd, rgba(0,0,0,0));
  background-repeat: repeat;
  background-size: 200px 200px;
}

label {
  border-radius:5px;
  border:0;
  padding:5px;
  text-align:center;
  background:rgba(0,0,0,0);
  transition:.5s;
  font-size:20px;
  line-height:20px;
  color:white;
}
label:hover {
  color:gold;
}

#god {
  width:100vw;
  height:100vh;
  position:absolute;
  transition:1s;
  background:skyblue;
  /*   pointer-events: none; */
}

#box {
  position:absolute;
  left:50%;
  top:50%;
  transform:translate(-50%,-50%) rotateX(45deg) rotateZ(-45deg);
  background-color:ForestGreen;
  background-image:url('http://www.transparenttextures.com/patterns/asfalt-dark.png');
  box-shadow:
    -1px 1px #060,
    -2px 2px #060,
    -3px 3px #060,
    -4px 4px #060,
    -5px 5px #060,
    -6px 6px #630,
    -7px 7px #630,
    -8px 8px #630,
    -9px 9px #630,
    -10px 10px #630,
    -11px 11px #630,
    -12px 12px #630,
    -13px 13px #630,
    -14px 14px #630,
    -15px 15px #630,
    -16px 16px #630,
    -17px 17px #630,
    -18px 18px #630,
    -19px 19px #630,
    -20px 20px #630,
    -21px 21px #630,
    -22px 22px #630,
    -23px 23px #630,
    -24px 24px #630,
    -25px 25px #630,
    -26px 26px #630,
    -27px 27px #630,
    -28px 28px #630,
    -29px 29px #630,
    -30px 30px #630,
    -31px 31px #630;  
  animation:bob 5s linear infinite;
}
@keyframes bob {
  50% { top:47%; }
}

#boxOverlay, #boxOverlay2 {
  width:50%;
  height:50%;
  position:absolute;
  left:10%;
  top:10%;
  border-radius:15px;
  background:#008400;
  background-image:url('http://www.transparenttextures.com/patterns/asfalt-dark.png');
}

#ground {
  height:50vh;
  position:absolute;
  bottom:0;
  left:50%;
  transform:translateX(-50%);
  background:url('https://www.transparenttextures.com/patterns/cartographer.png'), linear-gradient(to right, saddlebrown 50%, Sienna 50%);
  display:none;
}

#ground:after {
  content:'';
  position:absolute;
  top:0;
  left:0;
  width:100%;
  height:100%;
  /*   background-color:red; */
  background-image:url('https://www.transparenttextures.com/patterns/nice-snow.png');
  filter:blur(5px);
  animation:mist 15s ease-in-out infinite;
}
@keyframes mist {
  50% { background-position:-50% 0%; }
}
.feature {
  /*   border-radius:5px; */
}

#river {
  background-color:dodgerblue;
  background-image:radial-gradient(circle, rgba(255,255,255,.25) 15%, dodgerblue 15%);
  background-size:10px 10px;
  animation:flow 20s linear infinite;
  box-shadow:inset 0px 0px 15px rgba(0,0,255,.5);
  z-index:99;
}
@keyframes flow {
  100% { background-position:0% 100%; }
}

#bridge {
  width:125%;
  background-color:saddleBrown;
  background-image:linear-gradient(to right, saddlebrown 50%, rgba(0,0,0,.25) 50%);
  background-size:10px;
  position:absolute;
  left:-12.5%;
}
#bridge:after {
  content:'';
  position:absolute;
  left:12.5%;
  top:100%;
  width:80%;
  height:5px;
  background:rgba(0,0,0,.25)
}

#fall {
  width:70%;
  height:100vh;
  position:absolute;
  background:red;
  transform-origin:top left;
  transform:rotate(45deg) skewY(-45deg);
  background-color:dodgerblue;
  background-image:radial-gradient(circle, rgba(255,255,255,.25) 15%, dodgerblue 15%);
  background-size:10px 10px;
  animation:flow 10s linear infinite;
  box-shadow:inset 0px 0px 15px rgba(0,0,255,.5);
}
.fallLeft {
  transform:rotate(-45deg) skewY(45deg) !important;
}

.tree {
  position:absolute;  
  /*   background: linear-gradient(to top right, rgba(0,0,0,.15), transparent 35%); */
  border-radius:50%;  
  transform-origin: bottom left;
  transition: .5s;
}
/* .tree:hover {
  transform: translate(50%, -50%);
}
.tree:hover:before {
  height: 100%;
  left: 25%;
  bottom: 0;
  transition: .5s;
} */
.tree:before {
  content:'';
  position:absolute;
  width: 50%;
  height: 10%;
  left: 5%;
  bottom: 25%;
  background: orangered;
  transform:rotate(45deg) translate(15%,75%);
  clip-path: polygon(0% 0%, 100% 0%, 50% 100%);
}
.tree:after {
  content:'';
  background: linear-gradient(to right, #040 50%, #060 50%);
  clip-path: polygon(0% 25%, 15% 15%, 35% 15%, 45% 20%, 50% 40%, 55% 20%, 65% 15%, 85% 15%, 100% 25%, 100% 50%, 85% 35%, 75% 30%, 55% 100%, 45% 100%, 25% 30%, 15% 35%, 0 50%);
  position:absolute;
  bottom: 0;
  left: 12.5%;
  width: 75%;
  height: 80%;
  transform: rotate(45deg) translateY(-25%);
}

.caught {
  z-index: 10001;
  animation: caught .25s linear forwards;
}
@keyframes caught {
  100% { transform: translate(50%, -50%); }
}
.caught:before {
  animation: caught2 .25s linear forwards;
}
@keyframes caught2 {
  100% { 
    height: 100%;
    left: 25%;
    bottom: 0; 
  }
}

/* .tree:hover .bird {
animation:fly 3s ease-in forwards;
} */

/* @keyframes fly {
0% { opacity:1; }
100% { top: 1000px; transform: scale(6) rotate(45deg) translateY(-25%); opacity:0;}
} */
.bird {
  width:30px;
  height:30px;
  background-image:url('https://www.fg-a.com/birds/seagull-flying-animated.gif');
  background-size:100% 100%;
  transform:rotate(45deg) translateY(-25%);
  position:absolute;
  transition:2s;
  z-index:99999999;
  opacity:0;
}

#fish {
  width:30px;
  height:30px;
  background:linear-gradient(to bottom left, red, transparent), radial-gradient(circle at 25% 75%, white 5%, #400 5%);
  border-radius:50% 0 50% 0;
  transform:scale(.25) rotate(-45deg);
  opacity:0;
  background-size:100% 100%;
  position:absolute;
  box-shadow:20px 20px rgba(0,0,0,.25);
}
#fish:after {
  content:'';
  position:absolute;
  left:75%;
  top:-37.5%;
  width:50%;
  height:75%;
  border-radius:50% 0% 0% 50%;
  transform:rotate(-45deg);
  background:linear-gradient(to right, red, #400);
  box-shadow:0px 20px rgba(0,0,0,.25);
}

/* #river:hover #fish {
animation:jump 1s linear forwards;
}
@keyframes jump {
0% { opacity:0; transform:scale(.25) rotate(-25deg) translateY(0%);}
10% { opacity:1; }
50% { opacity:1; transform:translateY(162%) scale(.75) rotate(-45deg); }
90% { opacity:1; }
100% { opacity:0; transform:translateY(325%) scale(.25) rotate(-65deg); }
} */

:root {
  --pl-moving: rotate(45deg) scale(1);
  --img-src: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKYAAABkCAYAAAF7r3teAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAJOZJREFUeNpiYKAA3D+wqgGbOBOaov/INAEDQWo+4DWUFANB4Pv7lwyKDmETQOrR9TChK/7z4ytBA6+tn/yfU1D8AcgwIAAZzojL0AMg4vf3LyDqAi4DH5/YKsDEwgZiPgC5lpGR8QG6GkYkxWAvfH5+j0ErMJcRh4Fwb4LUAV2L4UoMQ5unLGCozUlg+PHxDcPvrx+BsowMzKxsDGw8gmDNyIb++/Ob4dvbpwwgVzMyMTOwcvKAxUHqWECMZ+vn//8LpEEGQsB/Bk4hCWTLG0EE6+WbDL911SHhxsLKwM4nDLQXEYIwV8NdenfP0v9sPAIMPz+9ZWBm40DxDrIX7+xaBHYtuhqsEfX1zWOG7++e41UMAj+/vEdxHbLFIPz353eEocBwUSQmff77/RNdqBHZJyru8QgreUTl7rNy8YETNbKX0WOXR1yBQdk1hvHvrx8wdQ3E5GdQDgnAm/jXTvyPL+cBBBBtAal5H586JuQCApnGB65vnAYuoYAGJ2AznIkcX/3/9xcUQYJAB8wnpjx1IGTg7Z0L/nOLyn6AllRY8z7cUF5JJQYWDu79IIV4Sqj/HPyioCwqgJ7cLi5rbUApUJALChD49OQWAyMwb//+/jmRT1IZ5MUDQAtBxWGBRXAaw4m1syC58PVjcBnw/98/BjZufpCQI9CiA2BDX07t+P/LWBdu6K8vH8CKkbMg0OL1QCY8/f78/A5YgrFjLSNQir5fwOKOiZkFa74Ge3FpKyg8GQgUKIlMyIUuw///OA2ElA9MDH9//8Bm4ASQum9vnwHL2V/zWZCTCUgTDPz+9okBVBYgAxZO3kRg+M3HZal2cAEjPPavbZiSwCUsxaDkFMkIMhwE/v75tQA9uXDwicxn5xUClvjPFmArbLCCG5tn/Ce2zsenDiCA8GlqQOK/p2apRI6jWLA1j0DJFFhd1QO5DUD+fSAtQC0HotcByAUevihiwSJW/xe1FlIAGY6vRCDFkbAiCFp07f/97TNK+4gUh2I07agVkkiOhIcsNAAMgeIX8JnBiMVQB6Ah4DIV1EYCFW2sXLwMqu4JjKQ6EL04BYEfH18zgEIRVGiBmkxE5Uh0h2IzGNYGBpbPE97eOTcR2NxJABZkEwxiasGt8gtLmgWAcu+ZmJgLtYLyJxAyC9b6/PLyAajEg7ee/v35ueDfv7+NwKLlPqhowSgckQx+j5xpkCsMEPjy6iE4FBiBGOgooAXM4JYr0AKgJ3jgZSDQ8AePj276z8DMDNd77uotBiNtNUSdAqwGQK0xsFkgM5mYsYYiVofiCwVwYxVUETHijiX0KET3OKQK+A+p1Ai0U9EAOP1i2Hxpeft/UAiB0iUoWpjZ2LElZbyORDaLmY0T7DAWdiDNyoHXsxC//GP4B2yegrpQzEA9sKSBM9f///uHgZmDm6Aj8Te1/oEdBqpHwdFLQowQbOtxCkqAE/uvrx8YYPUpuoFgBxBhAahe5hKSBPcdf3x6g02JIKzbQVKuRwdX107YD2zaOSA1pkAGfyA3hG/vmA9MVtxEhyIyAAjAm/W8NhFE4d3sNmnzAxMppRIK8UelIGJy82hBTyKiBw+KUm/iQQS9qRW8SsCLHrwU9GYPKnjzEv8AUaggOaXSgxiETW2MmjaN73u7s0w2s8luNnSgsN3SN2/nzfvm+77xA+iVPdAVxSj/nPWSBYdArIwpuU9hyYhKh1g+ymhpDAmCiYVewZi2t+OhQzw+S4nXvFRyKAkhTs7+hxOgwO8ImlQCIgIRKSn065PASf7b6q02AoOIJDK5SElKjKuhEtiDkCNQueE40XgT1SFwVjGH31ExKfFonJO/hM5yCn5h1CT/NupuMjBcOu0/dGj8cqtDsRdDNQ5K61W6UfZj7cOqhXMZq0hgfp1evUaCYq4goN43u000dFtxN62Rk4NdKuAM5gW8ReKsNZm1Bz11TAXlckc8leVGkn2GEMPynsIosyQrlJ1IBLtI5KRx4vK9dRUZBtzU/GacO3lWpwCnwGqKV+5XJHpmGYlU9tjFW26shaPz3fcv1IgCBQDl2m5tMi3DD7F17filu/qX1TJbQYKD9hkq+Xy+Kxh683dLS6eSPcE3N6o99AtYCrYExiP2rAgqE+qby2Vi7FWX/YM/Nn9841jM/DlezNkOrR71KuK55ZYlxOlrt7WX5QfafGFO8lGSFNSWFZwsZAU1hOy/uJBV/6l1Zqb5+dmjO71Fp4RAiG05gXiGS3QnpjK2SWRz0FLfnox/XNOE5yUnbCvAOgVOUeAJZVJe6mVsfHeT7D8sICmm/BGDEvQ2lD5M8wB0d+CHD4Ehhe7pqvSTfdUQnDIgru4HG7udbW2b8Iz3jn3zEloGwGSVLwOAEn6KMTAEkeZeQikS6RzvFSQ3KpADCWAUmIkkdytEWZAEIYGxQNivostNz344j5Xb7bQ100hGZj46F0q3ocYwApVWPK+9elyIp/bV8JG65+uz9NIyJ5PcKAE1cwOkQfUHmqiLOOhmTDZAOa5TjIOBzm7YKox/7BX7M3xxjeN8vS+HM8wEYekOReoOXL1BCfYliTuP9GyBLwXR0Yqx6HElfN0yxJrMzbBUBgvqEEqE1d3KJDE59k/mwGGiUftZG0s+I4JWFs7d0CWJW/INjE52Ojszeyh35MxVvb01GmFRWoNIBs/Vd8/5MnMcWvnr26d0Lk+7U4aJFVOUoCLTtnGJeTSPtCahtMh/AYi3ltYmoig8jzTGxEeLXQgqxoUL3ZjuRDeRbgQLtogI6iJd2E0RjEtRjFh0p0V/QBWqIqItojuldSNupPW50xbFB1aJorbamo73O3ducjOZmdxkJs3ZTEpp78l37z2P73yjvDD6ZdwtP2dVePJmGfPtGHtctH/sYT6Ohr2GXguQolVxtiV29ztVz+VdAhAnnJxEo3xTzX6yM2kng+RX1zcRxGLJZE8FfIG0abQJmXcOHUy2yJigIjwmVPmwOJkQgQQVmBEtKg/UlUDKgDus2y+tBjmZaXR6gjOS+SHBX6KSx+8g8pGZ3SYBOcb8SQt+SwiQ5GQCbQZ7DPkUQLmGXXMxR12sLGwyMjFXWJhvKpjY3ML8XFqwOgDR3nyi/+WTiOoUxRoak2hiVSjxNPC9lGe/NmlIlWgTgMywUJMRQIKGQ00nwLGn/knB8ZXIpXCAVGVWx914QTcxkRTkx5uQbIbQ7MMw13YAaTGgSZkgAynlgCthZHiVk/mIxcI0RnMmFbSlWOpy7amGWyoQnVNjkGpiFImNff/kngVyzKmcQJFPXW3IZZKu4HBFncbj5wJrNmc1cRrELje6vpRZIj8DqOjKnUBKpzHQGLUmML1A9IqbUibv2LB9z2SDgPTNwk77830GCsEyEH/NvJtmICcFQcSRB7lhZVOHTg6W8z0DKZYHJkiGwPKBEFRv3t27SRnMvsP7rZJkuTb7x8LBz89vubyA2IPSEpa2qFmFwuC2gyey5Oy1gUwkGh/i5FS8TBziQoi2bt/Xl3cywATQ71mir08e79e6dm4r94fdHs3WVsx+/cA5JOEbPXVBvxWBxa1DompJrCZ62jlTsu2Ms4TSXXY/d/Pew9MHujor/hoSno6ODu1IT2eZ/EY2iB9RSpGTttPiM6cKdYIVcop/7IstY4kCO++W+OS21YuthkEAf3/ssbYyEde8JiMwiLn4TMDgmiZDAlXjTxlgDCoAPvH9ClyXG5ieTkPD9OnLV23Prh3ucYot/if/GWm/OMohGl18LoJanU92cmYf7161MFeAydpc9Sv/pTRcMYwSqLWZL93qBuZU9OmLpBWPaQtbNiuvgtOIK67bo6ZaZhGSjfrNjf022ssgWoMyqt7xg4shaY3a13xaNQEpOQ7JMmIMjTbMlqCOjqoO4d88GM5HV7S1em1qsTYOD0Q/Q53aW/XOPbt+zkq0r/cuB2yZYgg2Xk1x4PQL6yLeopIoAWZRWPGTTjbKfFGYHD47huuKYRjtsA0cTiDNTyOReuKOF7mgDCTzK8fjr0Fxmo9LTXpZAsPnsIDEjfv78xvF+sVCAcUr3yi2DjI8zc6kg1TtSE0SfyllYpFU6gzgoVjq8Knc8xvnT5dfEWRkPSy/lPjMl7cu5PGaDNZkJV/1Dggvl0BQxItWfiJp7FtXLLJs3rMitmbxDmQt/wkDVOZDHjNFA76RXy1FHxWrhpoBDNSbgzSAg3iJMaJx/QWuFigsRXd78RoW2BkuiagAcrBWIF+PXE4yAKci0RhtDvkG3oB0yKZmmRad0rCSXeB2Eg6b0RjN1J3apzlWS4L4wBeIr1nnFwfp/9NYclW787QAxGw9TmNkiq7JTbUx/yufnfsxs5GBmVretjZNhIYozqsU3Q1LQFt7jk4zECaNxOqUVwv1+s4lC3IUfDG9MqMXSYQte/tDdZyVP5tY6JkyIu5+vbo9mDNbYmkDCdI03M5MQyjCQENwlCQerWDdpy6oMSBHIrFEd3m5FG5sDMJnuqeSQmGanY6kfBL9xCdLZpbVu7gw360nzCXf3P8CUHd1sVFUUfjO7GzZ0kKGkBAjD93iz4NR2fpAwgvZJsaYGGLrA8ZATEl80BfTojyYSEqDKDEmXVT0EdQAoiGtiT75s+XNF2wrCtESu4JSsbFdKKVut93xnjP3Tu/O3Pnbnf3xJkua3WX37Jlzzz3n3u/7JvCAo9AgVN1mHuw3jDSkaLeNca/UwIzsabooWLOv5oR5LaAh8z6v62SNQQ0wlIEmcqJ9Z36iVt8VtFXw4/LaKTfpJnUk1r0Nc6YX/Ya9npQ8PdgkgTkvqX0bGpmDPlEnwxmlmyAqLdiOuFXm8f5sRdoBlSxAcCbCasrk/2DV7oPUBGfkYLdwcrpf8l648Nm65UwwSji8TwqGDIvvaaJxEg7SOHWHjZzEkeNROTJwZNqMEkc/TqWVZfM9bRubISqzsAnDMdkCqrhLkgb0KL9b8ytyJU9vtz9RcALAxxroz7TAIeTIjbwIOPDJi0O1mua623Os7JAy4+m40KioFGeR0Jt3yhxpyDV9DtcsZ8q+kI0+l6j0XDVrHZVi7mYgVysqGRIOB6QBMYLd8mqkOdNYLbq99LRbZNqPQOsUlcOyqOSbL6xexsUTnOgSlZ3V2OAZmT7QwLRH1DZi9EuickJISVgvAy6K221jyQ9Va4DvNJfsZlv5cBVwPM4x0YCoLLuwfAUXUCHz3JEuvy1fTa4M25vLS6biGj5TODsfakBUZjnuHk5Q2QqeEWthuyM5aUBMBQ11pgh25UDYWpCVvMb177/qF21J6FvMxSDR9juf/hxDKl54YaWPbEM7Mq4JR+LW0YmHeR4EXCioKvBCnbE6h6cvfD4MQAJbf44nrmz0Rgl4DR2Z1NBBDxzSWJ0cOS7bmYJcaZ3nQw4FIS9bVPLIJSY+KNJZpPkYnQKDTC0N9yFMmYE6OTLlt2BCb27XbDY1hPGgYEK26VGzyERHwlGFCzICphY/meSrJ31Or7Ej0yQgNBwucFFAwwEIgi2SOS++tGxMnj7aN3nmaL/vd7oYHQiEb67oBcQ/EraKggZKDZ0ZqrBFGVhMTSZxCtDKt2eu5hSiJMuCxDAmDGL0pva+XtZsTJ55c5r+3yRI88WA6QYXwzB6H3hy/2gYZ4YyGqUfFFOfhTsTRWWg41AUHYxN7TskzaegBUyn5qAaa4EpmH/omZelq+vXpz/ombpFRnY/1hHYLoDNAL6Jiy+Aczl6ziIIKJZDcaGiHV/ndurUybNvzccT7TrH29vO4KUIYhlyOHnkw9PTh17aW1H0zP02aQPfW9ZCZORLpZUuHgE/nj2GKnpgsE2axXHCOXjgRbzAL+zZ7fjO5185QlI7dpIDzz7ueA3zJps1oNGMEGyOXUccOymD7TDKS05RtWQLTV+IZ5ekOhm8xrEADbzxbrZjq1xfNnPyHOLZRUEex2rPGBNlDrWcauikZExfOvd2nkbzKDhSJDiJraF9MZM5kY9fc9fxsbVNIQ5iA3NkiTYYuDipa9BIIpAYrIuuYJmXhPebePzgWcvhzN4ndiV37XDmeGAzfPrlt+TiL9fIJ8cOerafaJyq2CJgjcVAC3ydOhPUYIkmh9dUNJ7q3ula/xbugO6PxlgWqsAEES+6aroU/qZ2gU4VymrHE4H2PB3OlDkSxsysWa9NTU25/hgoR1SOJlZVm7GqBUglAn0FbirAJXC9VvHYzN+ktJmm3xYn8u2bjzMOnS3JXiIii8OwQGJyeLlrH69JSg/p4NPMa7qB3gyPzDJjhUiQNAFMJ70swdsXoXzsxk0Cj5K+kazcV74I+Tly+e5tuhLHLerKGhcodOEx5LUhYmeBpVsuXsIDppUHt5HShuDccdi1KdyaXaOtKKZiWkiDobXrlLV4f3x33ohfmUI6DdBqAttFox+EALkanEmpqax688N0Ol6EO5RABCynHiIkFhxmDW0bn94VONHXWHqhh9nCREJcYRRxQ0fGIiMzQIn3EbX1VJDSCCIzHebTwWBgjKjxeFUG+115tkM0HOSzoCTiWlt+gt1VjDImneK3IxNkCkVlcFBoNLB7aYF90s4/Qj4mdWLZ1mA4tfKq7JaGEe1iDkMnQx2VMWzbV9hCFpZwWkfpSBLiMOufqz/oC39OoQ3iA+zhjlTwbkzr6rIdyE88PXeNFm7m+kClUMZq5YGNuhwRTKFQh1mKMkw7KSR7wd1R7E6DhQajVqmfThWAGjTv1UnRMfcUC4T2qSbrwiIvxczGPxqDQ+2DKvxfxVSvhb0Bzpzj0qhROZIr55gz1LAYahIKjq75RADhcpKgLwj8H0774zTjiEZI0AJrCcW/FVtXE8EAig7ynmgdbN7vgEU9raXx5gy27k0LGAbMYNYpKJE6sooh9v1EsC+StOP6IT999k6WOjeNFD/NbAbgeEQNa7hiRUWk+SjUNKeNaM5xZl+mtFB1ueP5IQ/vebV7pbA4sLy0gLK8ywt5+pjr1bxr3pJwjy2Z8ZGVFqGcSW3qpv9Mg0yJEi0QojuoLY/sOQhHyWU0RdXH6K4yh1ZpN79BQrUjte9Qjk6xvAnNYSK51Tl1jAngjlXzIaqP0RO4A80TcJk3gxsPO9hF3GyQtqenKjEcVBD4MS7YxpWHQ0J2YA9gUxiue6j9THFcGT2RhQ6icGcOi2GzHGKGG4H2C/KLs9dztE5NQT3ocv/O0KeEV744MQ92tbd1kMXZa5Y6vFGCsiiwMzujBpi5RublkfdSarwlDQVx+5YO1PgpLt0mK0uLpma0UQqSCzfRHwmf47b6h0ZTULvStDTROf8dFZw3bkZoI9z5qPjvnUBTvhZIPVdn0h8/jsVp3CxOW2hkbbhnG9Fa28nS3F94vzNRfto17a6uZlxW2Irkw2h0Z3mBbk2vdevJxnvvx4tOu6KBWzemxu7OzYzxGy9U07pG40wmGmKfy/HW9syjz72mwKO4tIAi46ISuj0X0jJiYGn+ZqcQyRmW7CuFpeRdOhwg4ysgQUYf3aoSS8ORg8s4XqOq132axxNt41pruzSafj6fSdEUMI6yY+sSso+KXLjOsm30/ZFWfQunFzrYxHC/WrALuhTF436sdXOm0MDD3mbOnmPo4oRqBPCQfEzD6NKXzx+fjiXWJ2UKDkIE9zbEmbIBBHkatT2aC0G+kbLiKCqQaLdrfdblIlfUYNMFpUeRawflG63Pjhsd7hFZ09lS4c25S10iapiN/c2ghFAqLo9JSqNNtZra4vhPgPauLTauowzPnHO8blKabNomIg+VthJCgjaKAy9960aIJ5DiqChRATVrhRfaSrVpuMmijmkEUkqxIyp4IXIiyEOiIFsUCfGA7AghIR5qV2kitUJ4IZSi0CoOqRPba+9h/rmdObPnftuzdkZp7bjd9e6/33+Zf/75vsxRxC9iwTlSFXmwDUZ8jip/jgFUUjKAMi9+0xpIW+vKj8ezmNsvsB+YqUHgjY8lbcTw54CKZ7qI3d8mBCQVTihq95znsjI0yjDyPhw+hiK2fvklE78xg3mU4b2ITQRGNbv4rclec2ojI+OAUfzGLAZjeHvQ7Es1jCxki0bIWyGgbPZiKZRVxJwKAVQtyGNDUpC64BbxyfuAjMUpciDF7xjjdWrhdb6VkZGkx4rjF60XDMV4M6AEaET8dQP3QXnJNaAIg9rQn/fRRD8YtQOq3CD3ylrD5L//Iy5fbLcj5jHZXuDCX0LSSFl1rzozpAS4vzqBs8i7HUiwNckPsr9jaHIoyqYzpK53Zb5eS+WyhhQ352FkDEAaJuHstfsGYAMhiHLt9j4oFf1G4fyujQJn/VfWuNd8uPZ8szHBNtdrwKRvDuY31SmK9dUVVAkAJudpq+mgFBO/Cuecuha2IChlPQkpe92DD0XLTr79yjBpyIC1ULQenpWB0TiQ3EfTmkbd0x4Pd7WWINqqj2EjTWhLA1MFJYzqtz2uFQAolSM4T1CmAKRYh4t+75n1MXWj+QyjqAaX0VJMy6vLR1P1/BYCZU2AEm7Le9mTCls4VyI6QBmUssHecCkTZr9VMiIvUHajB5oJMH0UPINWXQW0SqARsJpFp5Mug3IxFJROqdMhVaPv3qWtCRjVIFLZHngp9mC3bJ4WmElTq0zt1Gs9liKcvKWiJd99z4v07QVKaAspG8shdaPj1ePUBZ6ljSvb/PRIYHX1CDMVMLlMOL0LH7KWvCImRFqvuonuNLURoV4aQEi5AJSUvFu3DfSGKbeVU1O6IpqigiFLJL9sBMCueNNCJxq8KWUqj3B16W2vDRMIZPstrdU0uRUQyU/AqIS9zjkOLSGFAtAV0ZQoWwuKkKptPZrxHdG314EJHgtXHly1ZoQeZseGx0njHRfDx7cAKOkJGKRuHVQa2ZOLuETtccJjafoPuF6iaKXrJdnBvObkuwXMKxSYxKNd9A19vsCshu3a2Vy8Ey3LZLCsFtDCIdYya8hOBqi53lumupmU4QtS987dMiPBrRJSE1KSQ/J4uFffJP9fLSxty9oUZC7dFySWOCBL14bLAphNVkj3u5q/ao3IyV/HWF3ZogD2AyYTV61symjJmTOnkQ8ZD4zfQ3RU5DcIQFe5aKyFDCWTcDvWxCbJr1YXGUhrwpcqbecCTFKINwFkcA1U1C2w02Msv+3AyOiZara7qFRGNkO05IAMm5n0dtS+fhcgWQm0QmWVBaeZX+qGSFt56GE9Sp7LgxA464VTGDvJeaukS4WoqbPOC+5aEYnTCkuUBJTxOdYCFu1kwG3aEFBqfc5S1pGZAjMxIH3W2vJtTsCHXYMbEIFJ1F147KkvHehhUC6iPPTlCBiXP3zf82DDgxVX1pELv3615vN6lijDRYIFrODIMMZI/VszDEuyUXLyhPGN1trkviMnlnIFZlRuvWS2blM6OdEaUdLXCAFnIe2ity+cqhMPqfNr603Utmf2f200UYR5/ZWXF9+c+2vtV6e/l8trhaxz9783ZMTUsg2dNbj70fu0RkUukm/M/3h99Da7FGlTlpBz5Ov4fo1ZnYbeC6cGDMOcxWZf1QQKJ042RuVBKIeC5cHras+QH4xEbdrjGKCc+uDmR429ex7JFRxgSLWm2mitNpf+eX2Oe3odqwZG7h6qk9bsBfLteWLYcyQS+AKLGHiQRGUgiaxSw3IFDKG/IvheidMskO+HPvXF5yJFlW989Znp31/5yyDYavoXP471/t+69h79+rknPh3BVmuUIcWVsoGHkWSb5Zs36GZU2kcyOwtwSpo3BQkO4Tv7wxigYQyR7BXGiTNMEsBNGX2VQdPqp+QihsWp/ylzcyQ4RTrmjPRMp0dHJi794U/Dx79+FH35qc8Wmg6B+GiZRAZhXMZFJl665v0uB2WGZQRM60vEwGeIcYGoY4kAkqQdc54YtQqtGfB60Q2IwAk5EjTJTRx48OLv/jj9y0tvElD+KJyOmy/yGDQxdZF+Pzo6iubn59GzX/h8IPk9ddy1FbbB5IAUvEb/+/ffNDkE3CGP4AAJu77Xo6hwegBpm4GUlgvw+2DH78XUELAiXSPGESLlwPOvvD7/1rV3qfdHjZgghQDs/cePH4e8g549OBD5Q1IXEIvSAWQPj8eqBoUeAToCAPkXNSzbeEHKAWJ9iM7Q6jLCj1XFmgti4krCzQyL2BiBjV0B4bvP+/LjOyl7oyNtgjPTYWKMJBhVxQY1iup2xUoAcEdSTgDG2cvg98ImzIviMmBFpu+I0i6a+PkPX45lZIgWAEpYZ8+epV93oKOd8hIRFm04K8SxQr8DIx9Dq1EU+0QA4f3QCwRyWjerUNhaCGkL1ZNkhh+82EDPnXgV3Vm+S50fQBkWLXm7rgOoAEyqMKECUtFncSInDoyqLsf3i2GQkdZbjO3TtMLsFplaL4z9PLKUkrpILYoOf/P78u+gxwKGj7soZxc07XWvV4DpMrIeUdX05FHw26KWsrn3g+cHp/HA24JcaWMWpAHk73joQdQCkQjTRHkv1kK6yZkNsUvbRkiyuH/m57yZLgDkUNzTpTBg1s2bH86aNz5gxXZ1B2rveTSWsEXi2vLeHal+5BjZ6ASjBtQcjRupB3jjz7+1K1dJSt5wDha8FEyy36W3UOvj2+7IpwkvuRWtcl2pqcvCgFkz7iwvWu/93V1wP7YXbex5NNcNDwx46JpmUu4mXxDK6MgL9VjtIi71M4vvriBMwJm7E5MoCTI8jCtesRHQuxdjp1S77zSbH9q7JJGTgfKRXbmlJer1fLLG0V/CSbWO0q5UJ0/QXkPR78snsxXwvYoWGbGPd/+wlAsy0Jmgs/qoojCJz3qjLGh5qGKvQoEiK+GEhCsTAkhuOziSfAmlOS0jAKR2gjlN7RjS4DoFBaXpPFbHQEmSI0lodI+liQaQdsDI+jwmGJe2bcrh8ZlP39AjQYwXt+3cjUygluW7WNrM504IkZB9XQ+m7RYR0jDRJlpyc4lTGnrKsCqN7Q/vlcDSDRVqYBohTQTnrCVKQbmMhBF7zRIA1un7hasN23dEGqhWwSikJXskZSeuT3EKI8OZ8ixTPTToKYAUq4pkY0PqL3U5ZbvSN/KRtcwAlAPkjc4LMW3xvlUZTvZ3LHVEVdFY+f+Uy16eJYek3IeAJA4+cEpZ4xjrkNors7luChK6osLIIk2pH0R5vf5cjmNhA1J2Sj2vVnq0ndrVuNSgpJ85KIXwY2K7bWsKUch5H1Jv1pIzCfkAE+MB5DpxUV4E5g1tIQqOFc8XL7Kcqeh2js9d1Uv7jgEK7LahYyPl7+VYM/du/ecM2SOAs+0nL6xGwLhAYHmFfF3ad/Q7tE109eJpwMgAee1Pkw+9QcfiLAuZpphIsihQIYDpgw5WmpDtei5tCAB3RAJhaCMzdb2cUnluHyb54CawZ1tEG6DwUCMsASjBNiNa7T0X9AAC0AXeGoLH0Kn5dy79ZKptWg0HlG4VSJseca4107zb866QbXts9rH2Mz5UgMvb1pjJ64lBH4/Ya5IOQHC72exQNCgtKU7evZ0yYkoVu7LYED555MTQE88M4/XVu4+3Vu6Mt+7dmYNhcf4PfH/4M4deeDzdrvzCqWniyYPO/KLpFPauWlP9uVlsi4Pr+aHwiDNThEwIsdkUhrQWZDOX3Rw7FphlEp16ZblwBoaeIIYbNrhctGpsQzV0gcBk92LWKEMILbSjpcHCKFGuXnxtor3RGhZtMvgq0prhZS8O0hyB2UQhnJpFr1S3JK9P/6xK+3LEgKsf36J6uIbpUF2zYGXQiIU7VFKzM7LNibmgOc10JvvZvZfoddmBIkB5feaNupBwBCeG244wa2qAqKhp080ANFoMsWO3sazl8SaMirlETGLkk8S7x1hUsvjkt4FWlm5SihIRrQy++6Ji9zSqZtZMl4a9dvmntsGnqaGfGmPot7Cbg8ReAMg6tQO/FyOm5WE2FPTm4SqEAC1cV6BXd8F+MqpmkmkO9gJrHk5o5Gli4EEJOo++FBh7jUTRtWX+mVPdVJNOOwNFSYTZx+C8q2gDvkOAKaQ4zb4HojxvoVdZmb0sbq++0D4eHNWC7QRLM2uxmTQLgBKyB4VOIruVecVO5SDNTIw0yAAJXu8t+ww/A0oShQiKguH2v96tkrRfQ2wgpEqMfMjqf3AApsjFB8DEzQPt5/L4J7/yLXz10msn7fbGGKRxn11sk7c7Zgr3fhDfNFimiHK+DcDbtuuT8HoPew3YXvvNJFyga4g7Sga/qRihlp5BPbKS1JhNxI+c5KlEcFGtqydAlGoS49bI4ydEuqd1qGGFjeeL1aHsvO/It08irgHEiU8b/HfNdFsVjES9ofZ6CzaJVcPoj2svNyANsyGvy1q8RDIjf4w9I0SVKqxfn36jUfnEzjHi4TUtmg35geHa5Yka1ZY3+6rC05nnm1FfTk9QnARlnAd27j5GbNDgWQTsdSbIeYjNIEvNilIATk/kjc5NVltm1i6Ks4jHUwM712XZ1xi1ZqmJoHKx2eWJBomIU8Jm4MhmPJs1edehpzigrGK9ALNWCd1xVuKMfI1vIUZhrT41ppjN+uI6cqJLYFsSmDar+aq0Ng1PQ4ElwVZZNrIXSJHKJpPCyRiWuM1met4hu5CaqsS4w2QX/lLf9h36VYNSN327nNIHSZaZIPVpzcOBxzebosf/ATShUUBvnLLQAAAAAElFTkSuQmCC')
}
              
            
!

JS

              
                var box = document.getElementById('box')
var ground = document.getElementById('ground')
var bod = document.getElementsByTagName('body')[0]
var god = document.getElementById('god')

box.style.width = window.innerHeight/2+"px"
box.style.height = window.innerHeight/2+"px"
ground.style.width = window.innerHeight*.707+"px"

var ts = (window.innerHeight/2) / 10
var loc = Math.floor(Math.random()*10)*ts;

function river(){
  var river = document.createElement('div')
  river.id = "river"
  river.className = "feature"
  river.style.width = ts+"px";
  river.style.height = ts*10+"px"
  // river.style.background = "dodgerblue"
  river.style.position = "absolute"
  river.style.transformOrigin = "top left"

  var bridge = document.createElement('div')
  bridge.id = "bridge"
  bridge.style.height = ts+"px"
  bl = Math.floor(Math.random()*10)*ts
  bridge.style.top = bl + "px"

  var fish = document.createElement('div')
  fish.id = "fish"
  fish.style.top = bl - ts + "px"

  var fall = document.createElement('div')
  fall.id = "fall"
  fall.style.top = "100%"

  var loc = Math.floor(Math.random()*10)*ts;
  if(Math.random() < .5) {
    river.style.left = loc+"px"
    river.style.top = "0"    
  } else {
    river.style.left = "100%"
    river.style.top = loc +"px"
    river.style.transform = "rotate(90deg)"
    fall.classList.add("fallLeft")
  }

  box.appendChild(river).append(fall,bridge,fish)
  // box.appendChild(river).appendChild(bridge)
}

function tree() {
  var tree = document.createElement('div')
  tree.className = "feature tree";
  tree.style.width = ts+"px"
  tree.style.height = ts+"px"
  let x = Math.floor(Math.random()*10)*ts
  let y = Math.floor(Math.random()*10)*ts
  tree.style.left = x+"px"
  tree.style.top = y+"px"
  // tree.setAttribute("mouseover", bird(this));

  box.appendChild(tree)
}

function radius() {
  var z = (Math.random()*75) + 1 + "% ";
  return z;
}

function grass() {  
  var bo = document.getElementById('boxOverlay')
  var bo2 = document.getElementById('boxOverlay2')
  var x = parseInt(box.style.width)*.6
  var y = parseInt(box.style.width)*.4

  bo.style.width = x + "px"
  bo.style.height = x + "px"
  bo.style.top = Math.floor(Math.random()*y) + "px"
  bo.style.left = Math.floor(Math.random()*y) + "px"
  bo.style.borderRadius = radius() + radius() + radius() + radius()

  bo2.style.width = x + "px"
  bo2.style.height = x + "px"
  bo2.style.top = Math.floor(Math.random()*y) + "px"
  bo2.style.left = Math.floor(Math.random()*y) + "px"
  bo2.style.borderRadius = radius() + radius() + radius() + radius()
}

var pl_x = 50
var pl_y = 50
var d = {}

function updatePlayer(){
  const pl = document.querySelector('#player')
  pl.style.width = ts+'px'
  pl.style.height = ts+'px'
  pl.style.pointerEvents = 'none'

  var pl_loc = pl.getBoundingClientRect()
  var tm = document.elementFromPoint(pl_loc.x + ts*.5, pl_loc.y)
  var rm = document.elementFromPoint(pl_loc.x + pl_loc.width, pl_loc.y + ts*.5)
  var bm = document.elementFromPoint(pl_loc.x + ts*.5, pl_loc.y + pl_loc.height)
  var lm = document.elementFromPoint(pl_loc.x, pl_loc.y + ts*.5)
  var pc = document.elementFromPoint(pl_loc.x + ts*.5, pl_loc.y + ts*.5)

  if(d[37] && pl_x > 0 && lm.id != 'river') {
    pl_x--
    pl.style.left = pl_x + '%'
    pl.style.top = pl_y + '%'
    document.documentElement.style.setProperty('--pl-moving', 'rotate(35deg) scaleX(1)') 
  }  
  if(d[38] && pl_y > 0 && tm.id != 'river') {
    pl_y--
    pl.style.left = pl_x + '%'
    pl.style.top = pl_y + '%'
    document.documentElement.style.setProperty('--pl-moving', 'rotate(55deg) scaleX(1)')

  }
  if(d[39] && pl_x < 90 && rm.id != 'river') {
    pl_x++
    pl.style.left = pl_x + '%'
    pl.style.top = pl_y + '%'
    document.documentElement.style.setProperty('--pl-moving', 'rotate(35deg) scaleX(-1)')
  }
  if(d[40] && pl_y < 90 && bm.id != 'river') {
    pl_y++
    pl.style.left = pl_x + '%'
    pl.style.top = pl_y + '%'
    document.documentElement.style.setProperty('--pl-moving', 'rotate(35deg) scaleX(-1)')
  }

  if(pc.classList.contains('tree')) {
    pc.classList.add('caught')
    pc.onanimationend = function() {
      pc.remove()
    }
  }
  
  // if(document.querySelectorAll('.tree').length < 5) {
  //   tree()
  // }
  setTimeout(updatePlayer, 1000/60)
}

window.addEventListener('keydown', function(e) { 
  d[e.which] = true;
  document.querySelector('#player').classList.add('moving')
})
window.addEventListener('keyup', function(e) {   
  d[e.which] = false; 
  document.querySelector('#player').classList.remove('moving')
})

function build() {
  var x = pl_x + '%'
  var y= pl_y + '%'
  box.innerHTML = "<div id='boxOverlay'></div><div id='boxOverlay2'></div><div id='player' class='' style='left:"+x+";top:"+y+"'></div>"  
  var loc = Math.floor(Math.random()*10)*ts;

  river()

  for(var i=0;i<10;i++){
    tree()
  }

  grass()  

}
build()
updatePlayer()

box.addEventListener('click', function(){
  build()
})
ground.addEventListener('click', function(){
  build()

})

// box.click()

// controls
var zoom = document.getElementById('zoom')
var hue = document.getElementById('hue')
var night = document.getElementById('night')

zoom.addEventListener('change', function(e) {
  god.style.transform = "scale("+(zoom.value)+")"
})
hue.addEventListener('change', function(e) {
  god.style.filter = "hue-rotate("+hue.value+"deg)"
})




              
            
!
999px

Console